├── .gitignore ├── CHANGELOG.rst ├── Cluster_Collection.zip ├── LICENSE ├── MANIFEST.in ├── Marker_Collection.zip ├── README.rst ├── Spinner.zip ├── Tile.zip ├── djeym ├── __init__.py ├── admin.py ├── apps.py ├── decorators.py ├── forms.py ├── globals.py ├── locale │ └── ru │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ ├── addmarker.py │ │ └── exporticons.py ├── middlewares.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_status_alter_generalsettings_buttons_text_color_and_more.py │ ├── 0003_alter_map_title.py │ └── __init__.py ├── mixins.py ├── models.py ├── raw_presets.py ├── signals_func.py ├── static │ ├── colorful │ │ ├── arrow.gif │ │ ├── colorPicker.css │ │ └── jQuery.colorPicker.js │ └── djeym │ │ ├── css │ │ ├── djeym_admin.css │ │ └── djeym_admin.min.css │ │ ├── img │ │ ├── amber_arrow.svg │ │ ├── arrow_down.svg │ │ ├── arrow_left.svg │ │ ├── arrow_right.svg │ │ ├── arrow_up.svg │ │ ├── center.svg │ │ ├── cold_fire.svg │ │ ├── default_tile.png │ │ ├── dislike.svg │ │ ├── favicons │ │ │ ├── android-icon-144x144.png │ │ │ ├── android-icon-192x192.png │ │ │ ├── android-icon-36x36.png │ │ │ ├── android-icon-48x48.png │ │ │ ├── android-icon-72x72.png │ │ │ ├── android-icon-96x96.png │ │ │ ├── apple-icon-114x114.png │ │ │ ├── apple-icon-120x120.png │ │ │ ├── apple-icon-144x144.png │ │ │ ├── apple-icon-152x152.png │ │ │ ├── apple-icon-180x180.png │ │ │ ├── apple-icon-57x57.png │ │ │ ├── apple-icon-60x60.png │ │ │ ├── apple-icon-72x72.png │ │ │ ├── apple-icon-76x76.png │ │ │ ├── apple-icon-precomposed.png │ │ │ ├── apple-icon.png │ │ │ ├── browserconfig.xml │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── favicon-96x96.png │ │ │ ├── favicon.ico │ │ │ ├── manifest.json │ │ │ ├── ms-icon-144x144.png │ │ │ ├── ms-icon-150x150.png │ │ │ ├── ms-icon-310x310.png │ │ │ ├── ms-icon-70x70.png │ │ │ └── safari-pinned-tab.svg │ │ ├── hint.svg │ │ ├── hot_fire.svg │ │ ├── import.svg │ │ ├── like.svg │ │ ├── loader.gif │ │ ├── logo.svg │ │ ├── map_controls │ │ │ ├── fullscreen.png │ │ │ ├── geolocation.png │ │ │ ├── provider.png │ │ │ ├── route.png │ │ │ ├── ruler.png │ │ │ ├── search.png │ │ │ ├── traffic.png │ │ │ ├── typeselector.png │ │ │ └── zoom.png │ │ ├── no-photo.jpg │ │ ├── offset.svg │ │ ├── plus.svg │ │ └── spinner.svg │ │ ├── js │ │ ├── admin_block_ip.js │ │ ├── admin_block_ip.min.js │ │ ├── admin_center_map_widget.js │ │ ├── admin_center_map_widget.min.js │ │ ├── admin_check_icon_offset_widget.js │ │ ├── admin_check_icon_offset_widget.min.js │ │ ├── admin_icon_collection.js │ │ ├── admin_icon_collection.min.js │ │ ├── admin_view_icons.js │ │ ├── admin_view_icons.min.js │ │ ├── ckeditor_resize_image.js │ │ ├── ckeditor_resize_image.min.js │ │ ├── get_icon_name.js │ │ ├── get_icon_name.min.js │ │ ├── import_export.js │ │ ├── import_export.min.js │ │ ├── jquery-regex.js │ │ ├── jquery-regex.min.js │ │ └── jquery.min.js │ │ ├── nodymaps │ │ ├── editor │ │ │ ├── .gitkeep │ │ │ ├── css │ │ │ │ ├── app.9902f5bc.css │ │ │ │ └── chunk-vendors.09dfbb4c.css │ │ │ └── js │ │ │ │ ├── app.f0bb9295.js │ │ │ │ ├── app.f0bb9295.js.map │ │ │ │ ├── chunk-vendors.8e19894a.js │ │ │ │ └── chunk-vendors.8e19894a.js.map │ │ └── front │ │ │ ├── .gitkeep │ │ │ ├── css │ │ │ ├── app.b3d068e9.css │ │ │ └── chunk-vendors.73c07480.css │ │ │ └── js │ │ │ ├── app.7561b101.js │ │ │ ├── app.7561b101.js.map │ │ │ ├── chunk-vendors.f8eb8799.js │ │ │ └── chunk-vendors.f8eb8799.js.map │ │ └── plugins │ │ ├── calculate-area │ │ ├── util.calculateArea.js │ │ └── util.calculateArea.min.js │ │ ├── heatmap │ │ ├── heatmap.js │ │ └── heatmap.min.js │ │ ├── jquery_mousewheel │ │ └── jquery.mousewheel.min.js │ │ └── round-theme │ │ └── all.min.js ├── templates │ └── djeym │ │ ├── admin │ │ ├── center_map_change_form.html │ │ ├── check_icon_offset_change_form.html │ │ ├── ckeditor_change_form.html │ │ ├── icon_collection_change_list.html │ │ ├── tile_source_change_list.html │ │ └── widgets │ │ │ └── clearable_file_input.html │ │ ├── includes │ │ ├── api_ymaps.html │ │ └── ymaps_front.html │ │ └── ymaps_editor.html ├── templatetags │ ├── __init__.py │ └── djeymtags.py ├── tests.py ├── urls.py ├── utils.py ├── views.py └── widgets.py ├── media.zip ├── nodymaps ├── .gitignore ├── LICENSE ├── README.md ├── editor │ ├── .browserslistrc │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── babel.config.js │ ├── jsconfig.json │ ├── package.json │ ├── public │ │ ├── default_tile.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── js │ │ │ ├── jquery.min.js │ │ │ └── material-design-webfont │ │ │ │ ├── .github │ │ │ │ └── ISSUE_TEMPLATE.md │ │ │ │ ├── css │ │ │ │ ├── materialdesignicons.css │ │ │ │ ├── materialdesignicons.css.map │ │ │ │ ├── materialdesignicons.min.css │ │ │ │ └── materialdesignicons.min.css.map │ │ │ │ ├── fonts │ │ │ │ ├── materialdesignicons-webfont.eot │ │ │ │ ├── materialdesignicons-webfont.ttf │ │ │ │ ├── materialdesignicons-webfont.woff │ │ │ │ └── materialdesignicons-webfont.woff2 │ │ │ │ └── license.md │ │ ├── map_controls │ │ │ ├── fullscreen.png │ │ │ ├── geolocation.png │ │ │ ├── provider.png │ │ │ ├── route.png │ │ │ ├── ruler.png │ │ │ ├── search.png │ │ │ ├── traffic.png │ │ │ ├── typeselector.png │ │ │ └── zoom.png │ │ ├── markers │ │ │ ├── Airport.svg │ │ │ ├── Attraction.svg │ │ │ ├── Auto.svg │ │ │ ├── Bar.svg │ │ │ ├── Beach.svg │ │ │ └── Bicycle.svg │ │ ├── round_icons │ │ │ ├── collapse.svg │ │ │ ├── expand.svg │ │ │ ├── geolocation.svg │ │ │ ├── layers.svg │ │ │ ├── loupe.svg │ │ │ ├── minus.svg │ │ │ ├── pano.svg │ │ │ ├── plus.svg │ │ │ ├── routes.svg │ │ │ ├── ruler.svg │ │ │ └── traffic.svg │ │ └── spinner │ │ │ ├── circle.svg │ │ │ ├── spinner-circle.svg │ │ │ └── spinner.svg │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ └── css │ │ │ │ └── helpers.css │ │ ├── components │ │ │ ├── CKEditor.vue │ │ │ ├── CategoryFilters.vue │ │ │ ├── ContextmenuHeatPoint.vue │ │ │ ├── ContextmenuPlacemark.vue │ │ │ ├── ContextmenuRoute.vue │ │ │ ├── ContextmenuTerritory.vue │ │ │ ├── DialogCreate.vue │ │ │ ├── GeneralSettings.vue │ │ │ ├── Heatmap.vue │ │ │ ├── Help.vue │ │ │ ├── IconCollection.vue │ │ │ ├── ImageCrop.vue │ │ │ ├── LoadIndicators.vue │ │ │ ├── MapControls.vue │ │ │ ├── Modals.vue │ │ │ ├── Presets.vue │ │ │ ├── SelectingCategories.vue │ │ │ ├── TileSources.vue │ │ │ └── icons │ │ │ │ └── ordinary │ │ │ │ └── IconLogo.vue │ │ ├── helpers.js │ │ ├── locales │ │ │ ├── i18n.js │ │ │ └── lang │ │ │ │ ├── en.js │ │ │ │ └── ru.js │ │ ├── main.js │ │ ├── modules │ │ │ ├── category_filters.js │ │ │ ├── contextmenu_territory.js │ │ │ ├── dialog_create.js │ │ │ ├── general_settings.js │ │ │ ├── heatmap.js │ │ │ ├── help.js │ │ │ ├── load_indicators.js │ │ │ ├── map_controls.js │ │ │ ├── modals.js │ │ │ ├── presets.js │ │ │ ├── selecting_categories.js │ │ │ ├── tile_sources.js │ │ │ ├── ymap.js │ │ │ ├── сontextmenu_heat_point.js │ │ │ ├── сontextmenu_placemark.js │ │ │ └── сontextmenu_route.js │ │ ├── plugins │ │ │ └── vuetify.js │ │ └── store.js │ └── vue.config.js ├── front │ ├── .browserslistrc │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── babel.config.js │ ├── jsconfig.json │ ├── package.json │ ├── public │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── favicon.ico │ │ ├── img_bg_panel.jpg │ │ ├── index.html │ │ └── js │ │ │ ├── jquery.min.js │ │ │ └── material-design-webfont │ │ │ ├── .github │ │ │ └── ISSUE_TEMPLATE.md │ │ │ ├── css │ │ │ ├── materialdesignicons.css │ │ │ ├── materialdesignicons.css.map │ │ │ ├── materialdesignicons.min.css │ │ │ └── materialdesignicons.min.css.map │ │ │ ├── fonts │ │ │ ├── materialdesignicons-webfont.eot │ │ │ ├── materialdesignicons-webfont.ttf │ │ │ ├── materialdesignicons-webfont.woff │ │ │ └── materialdesignicons-webfont.woff2 │ │ │ └── license.md │ ├── restyle.js │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ └── css │ │ │ │ └── helpers.css │ │ ├── i18n.js │ │ ├── main.js │ │ └── plugins │ │ │ └── vuetify.js │ └── vue.config.js └── test_restyle │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── index.js │ ├── jsconfig.json │ ├── package.json │ └── test │ └── test.js ├── screenshots ├── .gitkeep ├── add_heatpoint.png ├── add_info.png ├── add_marker.png ├── add_route.png ├── add_territory.png ├── cluster.png ├── cluster_popup_carousel.png ├── cluster_popup_two_columns.png ├── edit_map.png ├── editing_route.png ├── editing_territory.png ├── editor_menu_filters.png ├── editor_menu_heatmap.png ├── editor_menu_icons.png ├── editor_menu_presets.png ├── editor_menu_settings.png ├── editor_menu_tile.png ├── first_logo │ ├── first_logo.zip │ ├── first_logo_1.png │ ├── first_logo_2.png │ ├── first_logo_3.png │ ├── first_logos.png │ └── logo.xcf ├── geocoder.png ├── heatpoint_add_info.png ├── import_icon_collection.png ├── logo.png ├── map_closed_panel.png ├── map_opened_panel.png ├── offset_icon_for_markers.png ├── popup_with_text_editor.png ├── result_1.png ├── result_2.png ├── result_addmarker.png ├── result_route.png ├── result_territory.png ├── route_color_matching.png ├── select_category.png ├── select_category_2.png ├── territory_color_matching.png ├── update_info.png └── сhoose_an_icon.png ├── screenshots_v2 ├── .gitkeep ├── add_cluster.png ├── add_loading_indicator.png ├── adding_geo_objects.png ├── after_successful_moderation.png ├── create_map.png ├── edit_map.png ├── editor_menu_controls.png ├── editor_menu_filters.png ├── editor_menu_general_settings.png ├── editor_menu_heatmap.png ├── editor_menu_loading_indicators.png ├── editor_menu_tile.png ├── example_route.png ├── example_territory.png ├── import_icon_collection.png ├── import_tile_sources.png ├── logo.png ├── map_opened_form.png ├── map_opened_panel.png ├── marker_change_icon.png └── offset_icon_for_markers.png ├── screenshots_v3 ├── .gitkeep ├── add_cluster.png ├── add_loading_indicator.png ├── adding_geo_objects.png ├── after_successful_moderation.png ├── create_map.png ├── edit_map.png ├── editor_menu_controls.png ├── editor_menu_filters.png ├── editor_menu_general_settings.png ├── editor_menu_heatmap.png ├── editor_menu_loading_indicators.png ├── editor_menu_tile.png ├── example_route.png ├── example_territory.png ├── import_icon_collection.png ├── import_tile_sources.png ├── logo.png ├── logo.svg ├── map_opened_form.png ├── map_opened_panel.png ├── marker_change_icon.png └── offset_icon_for_markers.png └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | __pycache__/ 3 | *~ 4 | .directory 5 | .DS_Store 6 | dist/ 7 | build/ 8 | *.egg-info 9 | 10 | -------------------------------------------------------------------------------- /CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | #2.3.0 2 | - Added Status field for markers. 3 | - Use the status field when sending relevant messages to users. 4 | - The default Light theme has returned. 5 | 6 | #2.2.0 7 | - Adaptation for Django >=3.2.4 8 | - Updated dependencies - Scripts, css, fonts. 9 | - Material design icons updated to version 7.x 10 | 11 | #2.1.22 12 | - (ru) Обновлены версии компонентов. 13 | - (en) Updated versions of components. 14 | 15 | #2.1.21 16 | - 1 17 | - (ru) Проверено на Python 3.9.0 и Django 3.1.2. 18 | - (en) Tested in Python 3.9.0 and Django 3.1.2. 19 | - 2 20 | - (ru) Финально обновлен логотип. 21 | - (en) The logo was finally updated. 22 | - 3 23 | - (ru) Небольшие визуальные изменения для всплывающего окна подсказок, связаного с формой "Добавить пользовательский маркер". 24 | - (en) Minor visual changes for the tooltip popup associated with the "Add custom marker" form. 25 | 26 | #2.1.20 27 | - 1 28 | - (ru) Небольшая доработка рестайлинга на странице редактора. 29 | - (en) Small revision of the restyling on the editor page. 30 | - 2 31 | - (ru) Замена кнопки закрытия на всплывающем сообщении, на странице сайта. 32 | - (en) Replacing the close button on the pop-up message on the site page. 33 | 34 | #2.1.19 35 | - (ru) Небольшой рестайлинг страницы редактора. 36 | - (en) A small restyling of the editor page. 37 | 38 | #2.1.18 39 | - (ru) Переход на MaterialDesignIcons v5.x - Обратите внимание на раздел `Выводим карту на страницу сайта`. 40 | - (en) Switching to MaterialDesignIcons v5.x - Pay attention to the section `Displaying the map on the site page`. 41 | 42 | #2.1.17 43 | - 1 44 | - (ru) Исправлен баг для Django 3.1 - Ошибка при открытии страницы редактора. 45 | - (en) Fixed bug for Django 3.1 - Error opening editor page. 46 | - 2 47 | - (ru) Небольшой рестайлинг формы для добавления пользовательских маркеров. 48 | - (en) Small restyling of the form to add custom markers. 49 | 50 | #2.1.16 51 | - (ru) Обновлен README.rst и восстановлены скриншоты для первой версии. 52 | - (en) Updated README.rst and restored screenshots for the first version. 53 | 54 | #2.1.14 55 | - (ru) Небольшой рестайлинг страницы редактора. 56 | - (en) A small restyling of the editor page. 57 | -------------------------------------------------------------------------------- /Cluster_Collection.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/Cluster_Collection.zip -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2014 kebasyaty 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include README.rst 3 | global-exclude *~ .directory screenshots *.zip CHANGELOG.rst 4 | recursive-include djeym *.py 5 | recursive-include djeym/locale *.mo 6 | recursive-include djeym/static *.js *.css *.json *.png *.jpg *.gif *.svg *.xml *.ico *.eot *.ttf *.woff *.woff2 7 | recursive-include djeym/templates *.html *.txt 8 | 9 | -------------------------------------------------------------------------------- /Marker_Collection.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/Marker_Collection.zip -------------------------------------------------------------------------------- /Spinner.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/Spinner.zip -------------------------------------------------------------------------------- /Tile.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/Tile.zip -------------------------------------------------------------------------------- /djeym/__init__.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | # ____ ____ __ __ 3 | # /\ _`\ __/\ _`\ /\ \ /\ \/'\_/`\ 4 | # \ \ \/\ \ /\_\ \ \L\_\ `\`\\/'/\ \ 5 | # \ \ \ \ \\/\ \ \ _\L`\ `\ /'\ \ \__\ \ 6 | # \ \ \_\ \\ \ \ \ \L\ \`\ \ \ \ \ \_/\ \ 7 | # \ \____/_\ \ \ \____/ \ \_\ \ \_\\ \_\ 8 | # \/___//\ \_\ \/___/ \/_/ \/_/ \/_/ 9 | # \ \____/ 10 | # \/___/ 11 | 12 | DjEYM_VERSION = (2, 3, 11) 13 | PYTHON_VERSION = (3, 12) 14 | DJANGO_VERSION = (5, 0, 0) 15 | VUE_VERSION = (2, 7, 14) 16 | VUETIFY_VERSION = (2, 2, 1) 17 | 18 | __title__ = 'DjEYM (django-editor-ymaps)' 19 | __djeym_version__ = '.'.join(map(str, DjEYM_VERSION)) 20 | __python_version__ = '.'.join(map(str, PYTHON_VERSION)) 21 | __django_version__ = '.'.join(map(str, DJANGO_VERSION)) 22 | __vue_version__ = '.'.join(map(str, VUE_VERSION)) 23 | __vuetify_version__ = '.'.join(map(str, VUETIFY_VERSION)) 24 | __author__ = 'kebasyaty' 25 | __license__ = 'MIT' 26 | __copyright__ = 'Copyright (c) 2014 kebasyaty - Gennady Kostyunin' 27 | 28 | default_app_config = 'djeym.apps.DjeymConfig' 29 | -------------------------------------------------------------------------------- /djeym/apps.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.apps import AppConfig 3 | from django.utils.translation import gettext_lazy as _ 4 | 5 | 6 | class DjeymConfig(AppConfig): 7 | name = 'djeym' 8 | verbose_name = _('Yandex maps') 9 | -------------------------------------------------------------------------------- /djeym/decorators.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from functools import wraps 3 | 4 | from django.http import HttpResponseForbidden, JsonResponse 5 | 6 | 7 | def ajax_login_required(view_func): 8 | """ 9 | Ajax. 10 | Class-based views - dispatch. 11 | Verify that the current user is authenticated. 12 | """ 13 | @wraps(view_func) 14 | def wrapper(self, request, *args, **kwargs): 15 | if not request.is_ajax(): 16 | return HttpResponseForbidden() 17 | if request.user.is_authenticated: 18 | return view_func(self, request, *args, **kwargs) 19 | msg = {'detail': 'HTTP 403 Forbidden'} 20 | return JsonResponse(msg, status=403) 21 | return wrapper 22 | 23 | 24 | def ajax_login_required_and_staff(view_func): 25 | """ 26 | Ajax. 27 | Class-based views - dispatch. 28 | Verify that the current user is authenticated. 29 | """ 30 | @wraps(view_func) 31 | def wrapper(self, request, *args, **kwargs): 32 | user = request.user 33 | if not request.is_ajax(): 34 | return HttpResponseForbidden() 35 | if user.is_authenticated and user.is_staff: 36 | return view_func(self, request, *args, **kwargs) 37 | msg = {'detail': 'HTTP 403 Forbidden'} 38 | return JsonResponse(msg, status=403) 39 | return wrapper 40 | -------------------------------------------------------------------------------- /djeym/locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /djeym/locale/ru/LC_MESSAGES/djangojs.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/locale/ru/LC_MESSAGES/djangojs.mo -------------------------------------------------------------------------------- /djeym/locale/ru/LC_MESSAGES/djangojs.po: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2019-11-04 08:32+0000\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" 20 | "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" 21 | "%100>=11 && n%100<=14)? 2 : 3);\n" 22 | 23 | #: djeym/static/djeym/js/ckeditor_resize_image.js:66 24 | #: djeym/static/djeym/js/ckeditor_resize_image.min.js:1 25 | msgid "Image size will be optimized to 966 pixels." 26 | msgstr "Размер изображения будет оптимизирован до 966 пикселей." 27 | 28 | #: djeym/static/djeym/js/ckeditor_resize_image.js:94 29 | #: djeym/static/djeym/js/ckeditor_resize_image.min.js:1 30 | msgid "" 31 | "The File APIs are not fully supported in this browser. Upgrade your browser " 32 | "- http://browsehappy.com/" 33 | msgstr "" 34 | "Файловые API не полностью поддерживаются в этом браузере. Обновите свой " 35 | "браузер - http://browsehappy.com/" 36 | 37 | #: djeym/static/djeym/js/ckeditor_resize_image.js:114 38 | #: djeym/static/djeym/js/ckeditor_resize_image.min.js:1 39 | msgid "Only JPG and PNG files." 40 | msgstr "Только файлы JPG и PNG." 41 | 42 | #: djeym/static/djeym/js/ckeditor_resize_image.js:190 43 | #: djeym/static/djeym/js/ckeditor_resize_image.min.js:1 44 | msgid "Server Error ???" 45 | msgstr "Ошибка сервера ???" 46 | 47 | #: djeym/static/djeym/js/admin_icon_collection.js:21 48 | #: djeym/static/djeym/js/admin_icon_collection.min.js:1 49 | msgid "Icon replacement" 50 | msgstr "Замена иконки" 51 | 52 | #: djeym/static/djeym/js/admin_block_ip.js:14 53 | #: djeym/static/djeym/js/admin_block_ip.min.js:1 54 | msgid "Block IP" 55 | msgstr "Заблокировать IP" 56 | 57 | #: djeym/static/djeym/js/admin_block_ip.js:23 58 | #: djeym/static/djeym/js/admin_block_ip.min.js:1 59 | msgid "Added to the list of blocked IPs." 60 | msgstr "Добавлен в список заблокированных IP-адресов." 61 | -------------------------------------------------------------------------------- /djeym/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/management/__init__.py -------------------------------------------------------------------------------- /djeym/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/management/commands/__init__.py -------------------------------------------------------------------------------- /djeym/management/commands/exporticons.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import os 3 | 4 | from django.core.files import File 5 | from django.core.management import BaseCommand, CommandError 6 | from django.db import IntegrityError, transaction 7 | from django.utils.translation import ugettext as _ 8 | from slugify import slugify 9 | 10 | from djeym.models import IconCollection, MarkerIcon 11 | 12 | # --name - 'Icon Collection Name 13 | # --path - '/home/user_name/The path to the directory with icons' 14 | # python manage.py exporticons --name '' --path '' 15 | 16 | 17 | class Command(BaseCommand): 18 | def add_arguments(self, parser): 19 | parser.add_argument('--name', type=str, default="") 20 | parser.add_argument('--path', type=str, default="") 21 | 22 | def handle(self, *args, **options): 23 | collection_name = options['name'] 24 | dir_path = options['path'] 25 | 26 | if len(collection_name) == 0: 27 | msg = _('Error - Collection name not specified. Parameter: --name') 28 | raise CommandError(msg) 29 | 30 | if not os.path.isdir(dir_path): 31 | msg = _('Error - Specify a directory with icons. Parameter: --path') 32 | raise CommandError(msg) 33 | 34 | if IconCollection.objects.filter(slug=slugify(collection_name)).count() != 0: 35 | msg = _('The {} collection already exists.') 36 | raise CommandError(msg.format(collection_name)) 37 | 38 | collection = IconCollection.objects.create(title=collection_name) 39 | icon_list = os.listdir(path=dir_path) 40 | 41 | try: 42 | with transaction.atomic(): 43 | for icon in icon_list: 44 | icon_path = "{0}/{1}".format(dir_path, icon) 45 | with open(icon_path, mode='rb') as svg_file: 46 | MarkerIcon.objects.create( 47 | icon_collection=collection, 48 | title=os.path.splitext(icon)[0], 49 | svg=File(svg_file)) 50 | except IntegrityError as err: 51 | raise CommandError(err) 52 | -------------------------------------------------------------------------------- /djeym/middlewares.py: -------------------------------------------------------------------------------- 1 | class AjaxMiddleware: 2 | def __init__(self, get_response): 3 | self.get_response = get_response 4 | 5 | def __call__(self, request): 6 | def is_ajax(self): 7 | return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' 8 | 9 | request.is_ajax = is_ajax.__get__(request) 10 | response = self.get_response(request) 11 | return response 12 | -------------------------------------------------------------------------------- /djeym/migrations/0002_status_alter_generalsettings_buttons_text_color_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.4 on 2023-09-10 06:58 2 | 3 | import colorful.fields 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('djeym', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Status', 17 | fields=[ 18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('title', models.CharField(default='', help_text='Examples: Offer accepted | The Offer is being processed | Offer completed', max_length=60, unique=True, verbose_name='Custom marker status')), 20 | ('slug', models.SlugField(blank=True, max_length=255, null=True)), 21 | ], 22 | options={ 23 | 'verbose_name': 'Custom marker status', 24 | 'verbose_name_plural': 'Statuses of сustom markers', 25 | 'ordering': ('-title', '-id'), 26 | }, 27 | ), 28 | migrations.AlterField( 29 | model_name='generalsettings', 30 | name='buttons_text_color', 31 | field=colorful.fields.RGBColorField(colors=('#F44336', '#C62828', '#E91E63', '#AD1457', '#9C27B0', '#6A1B9A', '#673AB7', '#4527A0', '#3F51B5', '#283593', '#2196F3', '#1565C0', '#0091EA', '#03A9F4', '#0277BD', '#00BCD4', '#00838F', '#009688', '#00695C', '#4CAF50', '#2E7D32', '#00C853', '#8BC34A', '#558B2F', '#CDDC39', '#9E9D24', '#FFEB3B', '#F9A825', '#FFC107', '#FF8F00', '#FF9800', '#EF6C00', '#FF5722', '#D84315', '#795548', '#4E342E', '#607D8B', '#37474F', '#FAFAFA', '#F5F5F5', '#EEEEEE', '#E0E0E0', '#BDBDBD', '#9E9E9E', '#757575', '#616161', '#424242', '#212121', '#000000', '#FFFFFF'), default='#FFFFFF', verbose_name='Text color on buttons'), 32 | ), 33 | migrations.AlterField( 34 | model_name='generalsettings', 35 | name='controls_color', 36 | field=colorful.fields.RGBColorField(colors=('#F44336', '#C62828', '#E91E63', '#AD1457', '#9C27B0', '#6A1B9A', '#673AB7', '#4527A0', '#3F51B5', '#283593', '#2196F3', '#1565C0', '#0091EA', '#03A9F4', '#0277BD', '#00BCD4', '#00838F', '#009688', '#00695C', '#4CAF50', '#2E7D32', '#00C853', '#8BC34A', '#558B2F', '#CDDC39', '#9E9D24', '#FFEB3B', '#F9A825', '#FFC107', '#FF8F00', '#FF9800', '#EF6C00', '#FF5722', '#D84315', '#795548', '#4E342E', '#607D8B', '#37474F', '#FAFAFA', '#F5F5F5', '#EEEEEE', '#E0E0E0', '#BDBDBD', '#9E9E9E', '#757575', '#616161', '#424242', '#212121', '#000000', '#FFFFFF'), default='#43A047', verbose_name='Color of controls'), 37 | ), 38 | migrations.AlterField( 39 | model_name='placemark', 40 | name='icon_slug', 41 | field=models.SlugField(max_length=255, null=True, verbose_name='Иконка (slug)'), 42 | ), 43 | migrations.AddField( 44 | model_name='placemark', 45 | name='status', 46 | field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='placemarks', to='djeym.status', verbose_name='Status'), 47 | ), 48 | ] 49 | -------------------------------------------------------------------------------- /djeym/migrations/0003_alter_map_title.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.5 on 2023-09-21 13:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('djeym', '0002_status_alter_generalsettings_buttons_text_color_and_more'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='map', 15 | name='title', 16 | field=models.CharField(help_text='Examples: Supermarkets of the city of Kharkov | Luxury hotels in Honolulu | Parking of primitive people', max_length=60, unique=True, verbose_name='Title'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /djeym/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/migrations/__init__.py -------------------------------------------------------------------------------- /djeym/mixins.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django.conf import settings 3 | from django.contrib import messages 4 | from django.contrib.auth.decorators import login_required 5 | from django.shortcuts import redirect 6 | from django.utils.decorators import method_decorator 7 | from django.utils.translation import gettext_lazy as _ 8 | 9 | 10 | class StaffRequiredMixin: 11 | """ 12 | Mixin which requires that the authenticated user is a staff member 13 | (i.e. `is_staff` is True). 14 | """ 15 | # login_required(redirect_field_name='next', login_url=None) 16 | @method_decorator(login_required) 17 | def dispatch(self, request, *args, **kwargs): 18 | if not request.user.is_staff: 19 | messages.error( 20 | request, 21 | _('You do not have the permission required to perform the requested operation.')) 22 | return redirect(settings.LOGIN_URL) 23 | return super(StaffRequiredMixin, self).dispatch(request, *args, **kwargs) 24 | -------------------------------------------------------------------------------- /djeym/static/colorful/arrow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/colorful/arrow.gif -------------------------------------------------------------------------------- /djeym/static/colorful/colorPicker.css: -------------------------------------------------------------------------------- 1 | v.colorPicker-picker { 2 | height: 16px; 3 | width: 16px; 4 | padding: 0 !important; 5 | border: 1px solid #ccc; 6 | background: url(arrow.gif) no-repeat top right; 7 | cursor: pointer; 8 | line-height: 16px; 9 | font-size:0.75em; 10 | font-weight:bold; 11 | text-align: center; 12 | } 13 | 14 | div.colorPicker-palette { 15 | width: 110px; 16 | position: absolute; 17 | border: 1px solid #598FEF; 18 | background-color: #EFEFEF; 19 | padding: 2px; 20 | z-index: 9999; 21 | } 22 | div.colorPicker_hexWrap {width: 100%; float:left } 23 | div.colorPicker_hexWrap label {font-size: 95%; color: #2F2F2F; margin: 5px 2px; width: 25%} 24 | div.colorPicker_hexWrap input {margin: 5px 2px; padding: 0; font-size: 95%; border: 1px solid #000; width: 65%; } 25 | 26 | div.colorPicker-swatch { 27 | height: 12px; 28 | width: 12px; 29 | border: 1px solid #000; 30 | margin: 2px; 31 | float: left; 32 | cursor: pointer; 33 | line-height: 12px; 34 | } 35 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/amber_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/arrow_left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/arrow_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/arrow_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/center.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/cold_fire.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/default_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/default_tile.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/dislike.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-144x144.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-192x192.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-36x36.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-48x48.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-72x72.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/android-icon-96x96.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-114x114.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-120x120.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-144x144.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-152x152.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-180x180.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-57x57.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-60x60.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-72x72.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-76x76.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/apple-icon.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/favicon.ico -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dir": "auto", 3 | "lang": "en-US", 4 | "name": "DjEYM", 5 | "short_name": "DjEYM", 6 | "theme_color": "#ffffff", 7 | "background_color": "#ffffff", 8 | "display": "browser", 9 | "orientation": "landscape", 10 | "scope": "/", 11 | "start_url": "/", 12 | "description": "Yandex Map Editor", 13 | "icons": [ 14 | { 15 | "src": "/static/djeym/img/favicons/android-icon-36x36.png", 16 | "sizes": "36x36", 17 | "type": "image/png", 18 | "density": "0.75" 19 | }, 20 | { 21 | "src": "/static/djeym/img/favicons/android-icon-48x48.png", 22 | "sizes": "48x48", 23 | "type": "image/png", 24 | "density": "1.0" 25 | }, 26 | { 27 | "src": "/static/djeym/img/favicons/android-icon-72x72.png", 28 | "sizes": "72x72", 29 | "type": "image/png", 30 | "density": "1.5" 31 | }, 32 | { 33 | "src": "/static/djeym/img/favicons/android-icon-96x96.png", 34 | "sizes": "96x96", 35 | "type": "image/png", 36 | "density": "2.0" 37 | }, 38 | { 39 | "src": "/static/djeym/img/favicons/android-icon-144x144.png", 40 | "sizes": "144x144", 41 | "type": "image/png", 42 | "density": "3.0" 43 | }, 44 | { 45 | "src": "/static/djeym/img/favicons/android-icon-192x192.png", 46 | "sizes": "192x192", 47 | "type": "image/png", 48 | "density": "4.0" 49 | } 50 | ], 51 | "splash_pages": null 52 | } 53 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/ms-icon-144x144.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/ms-icon-150x150.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/ms-icon-310x310.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/favicons/ms-icon-70x70.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/favicons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/hint.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/hot_fire.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/import.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/like.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/loader.gif -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/fullscreen.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/geolocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/geolocation.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/provider.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/route.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/ruler.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/search.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/traffic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/traffic.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/typeselector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/typeselector.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/map_controls/zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/map_controls/zoom.png -------------------------------------------------------------------------------- /djeym/static/djeym/img/no-photo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/img/no-photo.jpg -------------------------------------------------------------------------------- /djeym/static/djeym/img/offset.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/img/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_block_ip.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Ban user if vandalism is to be prevented. 3 | * Copyright (c) 2014 kebasyaty 4 | * License MIT 5 | */ 6 | 7 | $( document ).ready( function() { 8 | 'use strict'; 9 | 10 | if ( $( 'form' ).is( '#placemark_form' ) ) { 11 | const mapID = $( '#id_ymap option:selected' ).val(); 12 | 13 | if ( mapID ) { 14 | const inputUserIP = $( '#id_user_ip' ); 15 | const csrftoken = $( 'input[name="csrfmiddlewaretoken"' ).val(); 16 | inputUserIP.after( '' + 18 | '' ); 19 | 20 | $( document ).on( 'click', '.block_ip', function() { 21 | const ip = inputUserIP.val(); 22 | $.post( '/djeym/ajax-block-ip-address/', { 23 | ip: ip, 24 | csrfmiddlewaretoken: csrftoken 25 | } ) 26 | .done( function() { 27 | alert( ip + ' --> ' + window.gettext( 'Added to the list of blocked IPs.' ) ); 28 | } ) 29 | .fail( function( jqxhr, textStatus, error ) { 30 | const err = textStatus + ', ' + error; 31 | let errDetail = ''; 32 | 33 | if ( jqxhr.responseJSON !== undefined && 34 | jqxhr.responseJSON.detail !== undefined ) { 35 | errDetail = jqxhr.responseJSON.detail; 36 | } 37 | 38 | if ( errDetail.length !== 0 ) { 39 | console.log( 'Request Failed: ' + err + ' - ' + errDetail ); 40 | alert( errDetail.replace( /<.*?>/g, '' ) ); 41 | } else { 42 | console.log( 'Request Failed: ' + err ); 43 | } 44 | } ); 45 | } ); 46 | } 47 | } 48 | } ); 49 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_block_ip.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready((function(){"use strict";if($("form").is("#placemark_form")){const mapID=$("#id_ymap option:selected").val();if(mapID){const inputUserIP=$("#id_user_ip"),csrftoken=$('input[name="csrfmiddlewaretoken"').val();inputUserIP.after(''),$(document).on("click",".block_ip",(function(){const ip=inputUserIP.val();$.post("/djeym/ajax-block-ip-address/",{ip:ip,csrfmiddlewaretoken:csrftoken}).done((function(){alert(ip+" --\x3e "+window.gettext("Added to the list of blocked IPs."))})).fail((function(jqxhr,textStatus,error){const err=textStatus+", "+error;let errDetail="";void 0!==jqxhr.responseJSON&&void 0!==jqxhr.responseJSON.detail&&(errDetail=jqxhr.responseJSON.detail),0!==errDetail.length?(console.log("Request Failed: "+err+" - "+errDetail),alert(errDetail.replace(/<.*?>/g,""))):console.log("Request Failed: "+err)}))}))}}})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_center_map_widget.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Admin panel. 3 | * Load map for determine the center of the map. 4 | * Copyright (c) 2014 kebasyaty 5 | * License MIT 6 | */ 7 | 8 | window.djeymYMaps.ready( function() { 9 | 'use strict'; 10 | 11 | function roundNumber( num ) { 12 | return Math.round( parseFloat( num ) * 1000000 ) / 1000000; 13 | } 14 | 15 | let Placemark; 16 | const latitude = $( '#id_latitude' ); 17 | const longitude = $( '#id_longitude' ); 18 | const coordinates = [ roundNumber( latitude.val() ), roundNumber( longitude.val() ) ]; 19 | let coords; 20 | 21 | // Change type field 22 | latitude.attr( 'type', 'number' ); 23 | longitude.attr( 'type', 'number' ); 24 | 25 | // Disable Slug field 26 | $( '#id_slug' ).attr( 'disabled', 'disabled' ); 27 | 28 | // Create map 29 | const Map = new window.djeymYMaps.Map( 'id_center_map', { 30 | center: coordinates, 31 | zoom: $( 'select#id_zoom option:selected' ).val(), 32 | controls: [ 'default', 'routeButtonControl' ] 33 | } ); 34 | Map.cursors.push( 'arrow' ); 35 | 36 | // Enable search by organization. (Включить поиск по организациям.) 37 | Map.controls.get( 'searchControl' ).options.set( 'provider', 'yandex#search' ); 38 | 39 | if ( Map ) { // 40 | // Change the zoom 41 | $( '#id_zoom' ).on( 'change', function() { 42 | Map.setZoom( $( 'select#id_zoom option:selected' ).val() ); 43 | } ); 44 | 45 | // Add event on Map - Change the zoom 46 | Map.events.add( 'boundschange', function( e ) { 47 | $( 'select#id_zoom option[value="' + e.get( 'target' ).getZoom() + '"]' ) 48 | .prop( 'selected', true ); 49 | } ); 50 | 51 | // Create placemark 52 | Placemark = new window.djeymYMaps.Placemark( Map.getCenter(), { 53 | hintContent: '', 54 | balloonContent: '' 55 | }, { 56 | iconLayout: 'default#image', 57 | iconImageHref: '/static/djeym/img/center.svg', 58 | iconImageSize: [ 32, 60 ], 59 | iconImageOffset: [ -16, -60 ], 60 | draggable: true 61 | } ); 62 | 63 | // Add event on Placemark - Drag Placemark 64 | Placemark.events.add( 'drag', function( e ) { 65 | coords = e.get( 'target' ).geometry.getCoordinates(); 66 | latitude.val( roundNumber( coords[ 0 ] ) ); 67 | longitude.val( roundNumber( coords[ 1 ] ) ); 68 | } ); 69 | 70 | // Add event on Map - Click the mouse 71 | Map.events.add( 'click', function( e ) { 72 | coords = e.get( 'coords' ); 73 | Placemark.geometry.setCoordinates( coords ); 74 | latitude.val( roundNumber( coords[ 0 ] ) ); 75 | longitude.val( roundNumber( coords[ 1 ] ) ); 76 | } ); 77 | 78 | // Add Placemark on Map 79 | Map.geoObjects.add( Placemark ); 80 | 81 | // Change the position of Placemark on Map through the coordinate fields. 82 | // (Изменить положение метки на карте по полям координат.) 83 | $( '#id_latitude, #id_longitude' ).on( 'keyup', function() { 84 | const latNum = latitude.val() * 1; 85 | const logNum = longitude.val() * 1; 86 | const regex = /^-?\d+(\.\d+)?$/; 87 | 88 | if ( regex.test( latNum ) && regex.test( logNum ) ) { 89 | Placemark.geometry.setCoordinates( [ roundNumber( latNum ), roundNumber( logNum ) ] ); 90 | } 91 | } ); 92 | } 93 | } ); 94 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_center_map_widget.min.js: -------------------------------------------------------------------------------- 1 | window.djeymYMaps.ready((function(){"use strict";function roundNumber(num){return Math.round(1e6*parseFloat(num))/1e6}let Placemark;const latitude=$("#id_latitude"),longitude=$("#id_longitude"),coordinates=[roundNumber(latitude.val()),roundNumber(longitude.val())];let coords;latitude.attr("type","number"),longitude.attr("type","number"),$("#id_slug").attr("disabled","disabled");const Map=new window.djeymYMaps.Map("id_center_map",{center:coordinates,zoom:$("select#id_zoom option:selected").val(),controls:["default","routeButtonControl"]});Map.cursors.push("arrow"),Map.controls.get("searchControl").options.set("provider","yandex#search"),Map&&($("#id_zoom").on("change",(function(){Map.setZoom($("select#id_zoom option:selected").val())})),Map.events.add("boundschange",(function(e){$('select#id_zoom option[value="'+e.get("target").getZoom()+'"]').prop("selected",!0)})),(Placemark=new window.djeymYMaps.Placemark(Map.getCenter(),{hintContent:"",balloonContent:""},{iconLayout:"default#image",iconImageHref:"/static/djeym/img/center.svg",iconImageSize:[32,60],iconImageOffset:[-16,-60],draggable:!0})).events.add("drag",(function(e){coords=e.get("target").geometry.getCoordinates(),latitude.val(roundNumber(coords[0])),longitude.val(roundNumber(coords[1]))})),Map.events.add("click",(function(e){coords=e.get("coords"),Placemark.geometry.setCoordinates(coords),latitude.val(roundNumber(coords[0])),longitude.val(roundNumber(coords[1]))})),Map.geoObjects.add(Placemark),$("#id_latitude, #id_longitude").on("keyup",(function(){const latNum=1*latitude.val(),logNum=1*longitude.val(),regex=/^-?\d+(\.\d+)?$/;regex.test(latNum)&®ex.test(logNum)&&Placemark.geometry.setCoordinates([roundNumber(latNum),roundNumber(logNum)])})))})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_check_icon_offset_widget.min.js: -------------------------------------------------------------------------------- 1 | window.djeymYMaps.ready((function(){"use strict";const sizeWidth=$(".field-size_width .readonly").text(),sizeHeight=$(".field-size_height .readonly").text();if(sizeWidth>0&&sizeHeight>0){let standardPlacemark,testPlacemark;const offsetX=$("#id_offset_x"),offsetY=$("#id_offset_y");$(".field-check_icon_offset, .hint_check_icon_offset").show();const Map=new window.djeymYMaps.Map("id_check_icon_offset_map",{center:[0,0],zoom:3,type:"yandex#satellite",controls:[]},{maxZoom:12,minZoom:0});Map&&(standardPlacemark=new window.djeymYMaps.Placemark(Map.getCenter(),{},{iconLayout:"default#image",iconImageHref:"/static/djeym/img/offset.svg",iconImageSize:[38,60],iconImageOffset:[-19,0],hasBalloon:!1,hasHint:!1,zIndex:2}),testPlacemark=new window.djeymYMaps.Placemark(Map.getCenter(),{},{iconLayout:"default#image",iconImageHref:$(".file-upload a").attr("href"),iconImageSize:[+sizeWidth,+sizeHeight],iconImageOffset:[+offsetX.val(),+offsetY.val()],hasBalloon:!1,hasHint:!1,zIndex:1}),Map.geoObjects.add(standardPlacemark),Map.geoObjects.add(testPlacemark),$("#id_offset_x, #id_offset_y").on("keyup mouseup",(function(event){event.preventDefault?event.preventDefault():event.returnValue=!1,testPlacemark.options.set({iconImageOffset:[+offsetX.val(),+offsetY.val()]})})),$("#id_offset_x").on("mousewheel",(function(event){let num;event.preventDefault?event.preventDefault():event.returnValue=!1,num=1===event.deltaY?(num=+offsetX.val()+.1).toFixed(1):(num=+offsetX.val()-.1).toFixed(1),offsetX.val(num),testPlacemark.options.set({iconImageOffset:[num,+offsetY.val()]})})),$("#id_offset_y").on("mousewheel",(function(event){let num;event.preventDefault?event.preventDefault():event.returnValue=!1,num=1===event.deltaY?(num=+offsetY.val()-.1).toFixed(1):(num=+offsetY.val()+.1).toFixed(1),offsetY.val(num),testPlacemark.options.set({iconImageOffset:[+offsetX.val(),num]})})),offsetX.after('
Plus
'),offsetX.after('
Minus
'),offsetY.after('
Minus
'),offsetY.after('
Plus
'),$("#id_offset_x_right_btn").on("click",(function(event){event.preventDefault?event.preventDefault():event.returnValue=!1;const num=(+offsetX.val()+.1).toFixed(1);offsetX.val(num),testPlacemark.options.set({iconImageOffset:[num,+offsetY.val()]})})),$("#id_offset_x_left_btn").on("click",(function(event){event.preventDefault?event.preventDefault():event.returnValue=!1;let num=(+offsetX.val()-.1).toFixed(1);num=num<0?num:0,offsetX.val(num),testPlacemark.options.set({iconImageOffset:[num,+offsetY.val()]})})),$("#id_offset_y_down_btn").on("click",(function(event){event.preventDefault?event.preventDefault():event.returnValue=!1;const num=(+offsetY.val()+.1).toFixed(1);offsetY.val(num),testPlacemark.options.set({iconImageOffset:[+offsetX.val(),num]})})),$("#id_offset_y_up_btn").on("click",(function(event){event.preventDefault?event.preventDefault():event.returnValue=!1;let num=(+offsetY.val()-.1).toFixed(1);num=num<0?num:0,offsetY.val(num),testPlacemark.options.set({iconImageOffset:[+offsetX.val(),num]})})))}})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_icon_collection.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Replacing the icon for a custom marker. 3 | * Copyright (c) 2014 kebasyaty 4 | * License MIT 5 | */ 6 | 7 | $( document ).ready( function() { 8 | 'use strict'; 9 | if ( $( 'form' ).is( '#placemark_form' ) ) { 10 | const mapID = $( '#id_ymap option:selected' ).val(); 11 | 12 | if ( mapID ) { 13 | const slugIcon = $( '#id_icon_slug' ); 14 | 15 | $.get( '/djeym/ajax-upload-icon-collection/', { 16 | mapID: mapID 17 | } ) 18 | .done( function( data ) { // 19 | // Add button 20 | slugIcon.after( '' + 22 | '' ); 23 | 24 | // Add Icon list 25 | slugIcon.after( '
' + 26 | '
' + 27 | '
' + 28 | '
' ); 29 | 30 | const centerBlock = $( '.icon_list_wrap__center_block' ); 31 | data.iconCollection.forEach( item => { 32 | centerBlock.append( '
' ); 35 | } ); 36 | 37 | // Open icon list 38 | $( document ).on( 'click', '.change_slug_icon', function() { 39 | $( '.change_slug_icon' ).hide(); 40 | $( '.icon_list_wrap' ).css( 'display', 'inline-block' ); 41 | } ); 42 | 43 | // Close icon list 44 | $( document ).on( 'click', '.icon_list_wrap__close', function() { 45 | $( '.icon_list_wrap' ).hide(); 46 | $( '.change_slug_icon' ).show(); 47 | } ); 48 | 49 | // Apply selected icon 50 | $( document ).on( 'click', '.icon_list_wrap__icon', function() { 51 | $( '#id_icon_slug' ).val( $( this ).data( 'slug' ) ); 52 | $( '.icon_list_wrap' ).hide(); 53 | $( '.change_slug_icon' ).show(); 54 | } ); 55 | } ) 56 | .fail( function( jqxhr, textStatus, error ) { 57 | const err = textStatus + ', ' + error; 58 | let errDetail = ''; 59 | 60 | if ( jqxhr.responseJSON !== undefined && 61 | jqxhr.responseJSON.detail !== undefined ) { 62 | errDetail = jqxhr.responseJSON.detail; 63 | } 64 | 65 | if ( errDetail.length !== 0 ) { 66 | console.log( 'Request Failed: ' + err + ' - ' + errDetail ); 67 | alert( errDetail.replace( /<.*?>/g, '' ) ); 68 | } else { 69 | console.log( 'Request Failed: ' + err ); 70 | } 71 | } ); 72 | } 73 | } 74 | } ); 75 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/admin_icon_collection.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready((function(){"use strict";if($("form").is("#placemark_form")){const mapID=$("#id_ymap option:selected").val();if(mapID){const slugIcon=$("#id_icon_slug");$.get("/djeym/ajax-upload-icon-collection/",{mapID:mapID}).done((function(data){slugIcon.after(''),slugIcon.after('
');const centerBlock=$(".icon_list_wrap__center_block");data.iconCollection.forEach(item=>{centerBlock.append('
')}),$(document).on("click",".change_slug_icon",(function(){$(".change_slug_icon").hide(),$(".icon_list_wrap").css("display","inline-block")})),$(document).on("click",".icon_list_wrap__close",(function(){$(".icon_list_wrap").hide(),$(".change_slug_icon").show()})),$(document).on("click",".icon_list_wrap__icon",(function(){$("#id_icon_slug").val($(this).data("slug")),$(".icon_list_wrap").hide(),$(".change_slug_icon").show()}))})).fail((function(jqxhr,textStatus,error){const err=textStatus+", "+error;let errDetail="";void 0!==jqxhr.responseJSON&&void 0!==jqxhr.responseJSON.detail&&(errDetail=jqxhr.responseJSON.detail),0!==errDetail.length?(console.log("Request Failed: "+err+" - "+errDetail),alert(errDetail.replace(/<.*?>/g,""))):console.log("Request Failed: "+err)}))}}})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/get_icon_name.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Get Icon name. 3 | * Copyright (c) 2014 kebasyaty 4 | * License MIT 5 | */ 6 | 7 | $( document ).ready( function() { 8 | 'use strict'; 9 | 10 | $( '#id_svg' ).on( 'change', function() { 11 | const img = $( this )[ 0 ].files[ 0 ]; 12 | const imgName = img.name.split( '.' ).slice( 0, -1 ).join( '.' ); 13 | $( '#id_title' ).val( imgName ); 14 | } ); 15 | } ); 16 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/get_icon_name.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready((function(){"use strict";$("#id_svg").on("change",(function(){const img=$(this)[0].files[0],imgName=img.name.split(".").slice(0,-1).join(".");$("#id_title").val(imgName)}))})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/import_export.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready((function(){"use strict";let TIMEOUT_SPIN_INDICATION;function startLoadIndication(){$("#djeymModalLock").show().find("#djeymLoadIndicator").addClass("djeym-load-indicator"),TIMEOUT_SPIN_INDICATION=setTimeout((function(){"none"!==$("#djeymModalLock").css("display")&&stopLoadIndication()}),3e4)}function stopLoadIndication(){const $modalLock=$("#djeymModalLock");$modalLock.css("opacity","0"),setTimeout((function(){$modalLock.find("#djeymLoadIndicator").removeClass("djeym-load-indicator"),$modalLock.hide().css("opacity",".85"),clearTimeout(TIMEOUT_SPIN_INDICATION)}),1e3)}function sandFormAjax(url,formData){$.ajax({type:"POST",url:url,data:formData,processData:!1,contentType:!1}).done((function(){stopLoadIndication(),document.location.reload(!0)})).fail((function(jqxhr,textStatus,error){const err=textStatus+", "+error;let errDetail="";stopLoadIndication(),void 0!==jqxhr.responseJSON&&void 0!==jqxhr.responseJSON.detail&&(errDetail=jqxhr.responseJSON.detail),0!==errDetail.length?(console.log("Request Failed: "+err+" - "+errDetail),alert("Request Failed: "+err+" - "+errDetail)):(console.log("Request Failed: "+err),alert("Request Failed: "+err))}))}if($("#changelist .actions").css("margin-top","20px"),$("a").is("#id_import_icon_collection")?$("#id_import_file_icon_collection").on("change",(function(){const url=$("#id_import_icon_collection").data("import-url"),collectionFile=$(this)[0].files[0],csrftoken=$('input[name="csrfmiddlewaretoken"').val(),formData=new FormData;formData.append("csrfmiddlewaretoken",csrftoken),formData.append("collection",collectionFile),startLoadIndication(),sandFormAjax(url,formData)})):$("a").is("#id_import_tile_source")&&($("table#result_list tr").length-1>0&&$("#id_export_tile_source").show(),$("#id_import_file_tile_source").on("change",(function(){const url=$("#id_import_tile_source").data("import-url"),sourcesFile=$(this)[0].files[0],csrftoken=$('input[name="csrfmiddlewaretoken"').val(),formData=new FormData;formData.append("csrfmiddlewaretoken",csrftoken),formData.append("sources",sourcesFile),startLoadIndication(),sandFormAjax(url,formData)}))),$("input").is("#id_site")){const $site=$("#id_site");if($site.val().length>0){const url=$site.val(),btn='
Button
';$site.after(btn)}}})); -------------------------------------------------------------------------------- /djeym/static/djeym/js/jquery-regex.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Example: 'input:regex(id, ^id_name-.+-part_of_the_name)' 3 | */ 4 | $( document ).ready( function() { 5 | 'use strict'; 6 | 7 | // jQuery - Support Regex. 8 | window.$.expr[ ':' ].regex = function( elem, index, match ) { 9 | const matchParams = match[ 3 ].split( ',' ); 10 | const validLabels = /^(data|css):/; 11 | const attr = { 12 | method: matchParams[ 0 ].match( validLabels ) ? 13 | matchParams[ 0 ].split( ':' )[ 0 ] : 'attr', 14 | property: matchParams.shift().replace( validLabels, '' ) 15 | }; 16 | const regexFlags = 'ig'; 17 | const regex = new RegExp( matchParams.join( '' ).replace( /^\s+|\s+$/g, '' ), regexFlags ); 18 | return regex.test( $( elem )[ attr.method ]( attr.property ) ); 19 | }; 20 | } ); 21 | -------------------------------------------------------------------------------- /djeym/static/djeym/js/jquery-regex.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready((function(){"use strict";window.$.expr[":"].regex=function(elem,index,match){const matchParams=match[3].split(","),validLabels=/^(data|css):/,attr={method:matchParams[0].match(validLabels)?matchParams[0].split(":")[0]:"attr",property:matchParams.shift().replace(validLabels,"")},regexFlags="ig",regex=new RegExp(matchParams.join("").replace(/^\s+|\s+$/g,""),"ig");return regex.test($(elem)[attr.method](attr.property))}})); -------------------------------------------------------------------------------- /djeym/static/djeym/nodymaps/editor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/nodymaps/editor/.gitkeep -------------------------------------------------------------------------------- /djeym/static/djeym/nodymaps/editor/css/app.9902f5bc.css: -------------------------------------------------------------------------------- 1 | .active-tile[data-v-37749461]{position:absolute;top:1px;right:7px}.pos-screenshot[data-v-37749461]{position:relative;top:2px;left:2px}.sample-color[data-v-0f4239df]{width:100%;height:28px;position:relative;border:1px solid #bdbdbd;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC) repeat}.sample-color__selected-tone[data-v-0f4239df]{position:absolute;top:0;right:0;bottom:0;left:0}.valign-title[data-v-56d33888]{top:-16px!important}.pos-icon[data-v-3d3377ea]{position:relative;top:2px}.icon-marker[data-v-91ffeab2]{width:84px;height:84px;border-radius:50%;z-index:2;cursor:pointer;display:inline-block}.icon-marker>img[data-v-91ffeab2]{height:42px;display:block;margin-top:24px;margin-left:auto;margin-right:auto}.djeym-ymap[data-v-3af54386]{min-height:300px!important;position:absolute;top:48px;right:0;bottom:0;left:0}.browserupgrade{position:fixed;top:0;right:0;bottom:0;left:0;z-index:11000;background:rgba(0,0,0,.9)}.browserupgrade div{color:#bdbdbd;font-size:18px;line-height:28px;text-align:center;margin:10% 20px auto 20px;padding:20px;border:2px dashed #616161;font-family:Roboto,sans-serif!important}.browserupgrade span{color:#4caf50;font-size:16px;border:2px solid #4caf50;border-radius:50px;padding:2px 8px 3px;margin-right:10px}.browserupgrade a,.browserupgrade span{font-family:Roboto,sans-serif!important}.browserupgrade a{color:#2196f3!important;font-size:18px!important;text-decoration:underline!important}.browserupgrade a:hover{color:#f44336!important}.noscript{position:fixed;top:0;right:0;bottom:0;left:0;z-index:11000;background:rgba(0,0,0,.9)}.noscript div{color:#bdbdbd;font-size:18px;line-height:28px;text-align:center;margin:10% 20px auto 20px;padding:20px;border:2px dashed #616161}.noscript div,.noscript span{font-family:Roboto,sans-serif!important}.noscript span{color:#ffc107;font-size:22px;border:2px solid #ffc107;border-radius:50px;padding:2px 8px 5px;margin-right:10px}.noscript a{color:#2196f3!important;font-size:18px!important;text-decoration:underline!important;font-family:Roboto,sans-serif!important}.noscript a:hover{color:#f44336!important}#djeymModalLock{display:none;position:absolute;top:0;right:0;bottom:0;left:0;z-index:10000;background-color:#fff;opacity:1;transition-property:opacity;transition-duration:.6s;transition-delay:0s;transition-timing-function:linear}#djeymLoadIndicator{display:none;position:absolute;top:50%;left:50%}@keyframes djeym-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}ymaps[class$=-listbox__list-item-text]{max-width:none!important;font-size:14px!important;line-height:32px!important;font-family:Roboto,sans-serif!important}ymaps[class$=-control-popup-parent]{z-index:2!important}.djeym_ballon_body,.djeym_ballon_footer,.djeym_ballon_header{display:block;width:100%!important;max-width:322px!important;font-family:Roboto,sans-serif!important}.djeym_ballon_header{margin:0 0 5px;font-size:120%;font-weight:500;color:#212121}.djeym_ballon_body{font-size:13px;line-height:1.6;color:#212121}.djeym_ballon_footer{margin:5px 0 0;font-size:90%;color:#424242}.djeym_ballon_header *{margin:0!important}.djeym_ballon_body p,.djeym_ballon_footer p{margin-bottom:5px!important}.djeym_layout_cluster_icon{border-radius:60px}.djeym_layout_cluster_icon span{font-size:12px;font-weight:500;padding:2px 5px;border-radius:20px;font-family:Roboto,sans-serif!important}.djeym-curs-p{cursor:pointer}.djeym-pos-relative{position:relative!important}.djeym-hide{display:none}.djeym-white-space-normal{white-space:normal!important}.djeym-fill-hight{height:100%!important}.djeym-fake-buttons{display:inline-block;padding:0 5px;border-radius:20px;margin-bottom:5px} -------------------------------------------------------------------------------- /djeym/static/djeym/nodymaps/front/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/static/djeym/nodymaps/front/.gitkeep -------------------------------------------------------------------------------- /djeym/static/djeym/nodymaps/front/css/app.b3d068e9.css: -------------------------------------------------------------------------------- 1 | #djeymModalLock,.djeym-ymap[data-v-4e0328ea]{position:absolute;top:0;right:0;bottom:0;left:0}#djeymModalLock{display:none;z-index:10000;background-color:#fff;opacity:1;transition-property:opacity;transition-duration:.6s;transition-delay:0s;transition-timing-function:linear}#djeymLoadIndicator{display:none;position:absolute;top:50%;left:50%}@keyframes djeym-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.v-application--wrap{min-height:0!important}.v-snack{position:absolute!important}.v-snack--vertical .v-snack__content{padding:0 8px 0 10px!important}.v-overlay{position:absolute!important}ymaps[class$=-listbox__list-item-text]{max-width:none!important;font-size:14px!important;line-height:32px!important;font-family:Roboto,sans-serif!important}ymaps[class$=-control-popup-parent]{z-index:2!important}ymaps input{font-family:Arial,Helvetica,sans-serif!important;font-size:13px!important;line-height:28px!important}ymaps input[class$=-route-panel-input__input]{border-left:31px solid transparent!important}ymaps input[class$=-searchbox-input__input]{border-left:9px solid transparent!important}.djeym_ballon_body,.djeym_ballon_footer,.djeym_ballon_header{display:block;width:100%!important;max-width:322px!important;font-family:Roboto,sans-serif!important}.djeym_ballon_header{margin:0 0 5px;font-size:120%;font-weight:500;color:#212121}.djeym_ballon_body{font-size:13px;line-height:1.6;color:#212121}.djeym_ballon_footer{margin:5px 0 0;font-size:90%;color:#424242}.djeym_ballon_header *{margin:0!important}.djeym_ballon_body p,.djeym_ballon_footer p{margin-bottom:5px!important}.djeym_layout_cluster_icon{border-radius:60px}.djeym_layout_cluster_icon span{font-size:12px;font-weight:500;padding:2px 5px;border-radius:20px;font-family:Roboto,sans-serif!important}.djeym-pos-relative{position:relative!important}.djeym-pos-top--8{top:-8px}.djeym-fill-hight{height:100%!important}.djeym-hide{display:none} -------------------------------------------------------------------------------- /djeym/static/djeym/plugins/calculate-area/util.calculateArea.min.js: -------------------------------------------------------------------------------- 1 | window.djeymYMaps.modules.define("util.calculateArea",[],(function(provide){var RADIUS=6378137;function calculateArea(feature){var geoJsonGeometry;return calculateJsonGeometryArea(getGeoJsonGeometry(feature))}function getGeoJsonGeometry(feature){if("Feature"===feature.type)return feature.geometry;if(feature.geometry&&feature.geometry.getType)return"Circle"===feature.geometry.getType()?{type:"Circle",coordinates:feature.geometry.getCoordinates(),radius:feature.geometry.getRadius()}:{type:feature.geometry.getType(),coordinates:feature.geometry.getCoordinates()};throw new Error("util.calculateArea: Unknown input object.")}function calculateJsonGeometryArea(geometry){var area=0,i;switch(geometry.type){case"Polygon":return polygonArea(geometry.coordinates);case"MultiPolygon":for(i=0;i0){area+=Math.abs(ringArea(coords[0]));for(var i=1;i2){for(i=0;in)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); -------------------------------------------------------------------------------- /djeym/templates/djeym/admin/widgets/clearable_file_input.html: -------------------------------------------------------------------------------- 1 | {% if widget.is_initial %}

{{ widget.initial_text }}: Image{% if not widget.required %} 2 | 3 | 4 | {% endif %}
5 | {{ widget.input_text }}:{% endif %} 6 | {% if widget.is_initial %}

{% endif %} 7 | -------------------------------------------------------------------------------- /djeym/templates/djeym/includes/api_ymaps.html: -------------------------------------------------------------------------------- 1 | {# Load API Yandex Maps #} 2 | {% if api_key and is_enterprise %} 3 | 4 | {% elif api_key %} 5 | 6 | {% else %} 7 | 8 | {% endif %} -------------------------------------------------------------------------------- /djeym/templates/djeym/includes/ymaps_front.html: -------------------------------------------------------------------------------- 1 | {% if ymap %} 2 | {% load i18n static djeymtags %} 3 | {% with lang.0 as language_code %} 4 | 5 | 6 | {% if load_indicator %} 7 | {% widthratio load_indicator_size 2 1 as margin_offset %} 8 | 18 | {% endif %} 19 | 27 | {% djeym_load_api_ymaps language_code %} 28 | {% if is_heatmap %}{% endif %} 29 | {% if is_round_theme %}{% endif %} 30 | 31 | 32 | 33 | 34 | {% endwith %} 35 | {% endif %} 36 | -------------------------------------------------------------------------------- /djeym/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/djeym/templatetags/__init__.py -------------------------------------------------------------------------------- /djeym/templatetags/djeymtags.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from django import template 4 | from django.conf import settings 5 | 6 | from ..models import Map 7 | from ..views import vue_vendors_css_js 8 | 9 | register = template.Library() 10 | 11 | 12 | @register.inclusion_tag('djeym/includes/ymaps_front.html') 13 | def djeym_yandex_map(slug, lang='en'): 14 | """Load the map to the front page.""" 15 | 16 | ymap = Map.objects.filter(slug=slug, active=True).first() 17 | ctx = {'ymap': ymap} 18 | if ymap is not None: 19 | general_settings = ymap.general_settings 20 | ctx['lang'] = lang or 'en', 21 | ctx['load_indicator'] = ymap.load_indicator 22 | ctx['load_indicator_size'] = ymap.load_indicator_size 23 | ctx['is_heatmap'] = ymap.heatmap_settings.active 24 | ctx['is_round_theme'] = general_settings.roundtheme 25 | ctx['width_map_front'] = general_settings.width_map_front 26 | ctx['height_map_front'] = general_settings.height_map_front 27 | ctx['presets'] = ymap.presets.values_list('js', flat=True) 28 | vue_vendors = vue_vendors_css_js('front') 29 | ctx.update(vue_vendors) 30 | return ctx 31 | 32 | 33 | @register.inclusion_tag('djeym/includes/api_ymaps.html') 34 | def djeym_load_api_ymaps(lang='en', ns='djeymYMaps'): 35 | """Get URL for API Yandex Maps""" 36 | 37 | api_version = '2.1' 38 | api_key = getattr(settings, 'DJEYM_YMAPS_API_KEY', "") 39 | is_enterprise = getattr( 40 | settings, 'DJEYM_YMAPS_API_KEY_FOR_ENTERPRISE', False) 41 | mode = getattr(settings, 'DJEYM_YMAPS_DOWNLOAD_MODE', 'release') 42 | lang = lang[:2].lower() if bool(lang) else 'en' 43 | 44 | if lang == 'ru': 45 | lang += '_RU' 46 | elif lang == 'en': 47 | lang += '_US' 48 | elif lang == 'uk': 49 | lang += '_UA' 50 | elif lang == 'tr': 51 | lang += '_TR' 52 | else: 53 | lang = 'en_US' 54 | 55 | return { 56 | 'api_key': api_key, 57 | 'is_enterprise': is_enterprise, 58 | 'api_version': api_version, 59 | 'lang': lang, 60 | 'mode': mode, 61 | 'ns': ns 62 | } 63 | -------------------------------------------------------------------------------- /djeym/widgets.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django import forms 3 | from django.contrib.admin.widgets import AdminFileWidget 4 | from django.utils.safestring import mark_safe 5 | from django.utils.translation import gettext_lazy as _ 6 | 7 | 8 | class CenterMapWidget(forms.Widget): 9 | 10 | class Media: 11 | js = ( 12 | '/static/djeym/js/jquery.min.js', 13 | '/static/djeym/js/admin_center_map_widget.min.js' 14 | ) 15 | 16 | def render(self, name, value, attrs=None, renderer=None): 17 | """Render the widget as an HTML string.""" 18 | html_map = "
" 19 | return mark_safe(html_map) 20 | 21 | 22 | class CheckIconOffsetWidget(forms.Widget): 23 | 24 | class Media: 25 | js = ( 26 | '/static/djeym/js/jquery.min.js', 27 | '/static/djeym/js/admin_check_icon_offset_widget.min.js' 28 | ) 29 | 30 | def render(self, name, value, attrs=None, renderer=None): 31 | """Render the widget as an HTML string.""" 32 | html_map = "
" 33 | return mark_safe(html_map) 34 | 35 | 36 | class AdminFileThumbWidget(AdminFileWidget): 37 | template_name = "djeym/admin/widgets/clearable_file_input.html" 38 | -------------------------------------------------------------------------------- /media.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/media.zip -------------------------------------------------------------------------------- /nodymaps/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .directory 3 | .DS_Store 4 | 5 | # Dependency directories 6 | node_modules 7 | 8 | package-lock.json 9 | yarn.lock 10 | 11 | # Folder of building for Vue JS project 12 | /dist 13 | 14 | # local env files 15 | .env.local 16 | .env.*.local 17 | 18 | # Log files 19 | logs 20 | *.log 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | lerna-debug.log* 25 | .pnpm-debug.log* 26 | 27 | # Editor directories and files 28 | .idea 29 | #.vscode 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | *.sw? 35 | 36 | # yarn v2 37 | .yarn/cache 38 | .yarn/unplugged 39 | .yarn/build-state.yml 40 | .yarn/install-state.gz 41 | .pnp.* 42 | -------------------------------------------------------------------------------- /nodymaps/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Gennady Kostyunin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /nodymaps/README.md: -------------------------------------------------------------------------------- 1 | # nodymaps -------------------------------------------------------------------------------- /nodymaps/editor/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /nodymaps/editor/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /nodymaps/editor/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules/ 3 | /build/ 4 | /.nuxt/ 5 | /coverage/ 6 | /jspm_packages/ 7 | /tmp/ 8 | /temp/ 9 | /bower_components/ 10 | /.npm/ 11 | /.yarn/ 12 | /.idea/ 13 | /.vscode/ 14 | /*.suo/ 15 | /*.ntvs*/ 16 | /*.njsproj/ 17 | /*.sln/ 18 | /*.sw?/ 19 | /.env.local/ 20 | /.env.*.local/ 21 | /*~/ 22 | /.directory/ 23 | /.DS_Store/ 24 | /logs/ 25 | /*.log/ 26 | /npm-debug.log*/ 27 | /yarn-debug.log*/ 28 | /yarn-error.log*/ 29 | /lerna-debug.log*/ 30 | /.pnpm-debug.log*/ 31 | /.yarn/cache/ 32 | /.yarn/unplugged/ 33 | /.yarn/build-state.yml/ 34 | /.yarn/install-state.gz/ 35 | /.pnp.*/ 36 | -------------------------------------------------------------------------------- /nodymaps/editor/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | "plugin:vue/strongly-recommended", 8 | "eslint:recommended", 9 | "plugin:prettier/recommended", 10 | ], 11 | parserOptions: { 12 | parser: "@babel/eslint-parser", 13 | }, 14 | rules: { 15 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 16 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 17 | "no-restricted-syntax": [ 18 | "error", 19 | { 20 | selector: 21 | "CallExpression[callee.object.name='console'][callee.property.name!=/^(log|warn|error|info|trace)$/]", 22 | message: "Unexpected property on console object was called", 23 | }, 24 | ], 25 | "prettier/prettier": [ 26 | "error", 27 | { 28 | endOfLine: "auto", 29 | }, 30 | ], 31 | }, 32 | overrides: [ 33 | { 34 | files: [ 35 | "**/__tests__/*.{j,t}s?(x)", 36 | "**/tests/unit/**/*.spec.{j,t}s?(x)", 37 | ], 38 | }, 39 | ], 40 | }; 41 | -------------------------------------------------------------------------------- /nodymaps/editor/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .directory 3 | .DS_Store 4 | 5 | # Dependency directories 6 | node_modules 7 | 8 | package-lock.json 9 | yarn.lock 10 | 11 | # Folder of building for Vue JS project 12 | /dist 13 | 14 | # local env files 15 | .env.local 16 | .env.*.local 17 | 18 | # Log files 19 | logs 20 | *.log 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | lerna-debug.log* 25 | .pnpm-debug.log* 26 | 27 | # Editor directories and files 28 | .idea 29 | #.vscode 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | *.sw? 35 | 36 | # yarn v2 37 | .yarn/cache 38 | .yarn/unplugged 39 | .yarn/build-state.yml 40 | .yarn/install-state.gz 41 | .pnp.* 42 | -------------------------------------------------------------------------------- /nodymaps/editor/.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignoring all html files 2 | #*.html 3 | 4 | # Ignoring all vue files 5 | #*.vue 6 | -------------------------------------------------------------------------------- /nodymaps/editor/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": false, 4 | "endOfLine": "auto" 5 | } 6 | -------------------------------------------------------------------------------- /nodymaps/editor/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.validate.enable": false 3 | } 4 | -------------------------------------------------------------------------------- /nodymaps/editor/README.md: -------------------------------------------------------------------------------- 1 | # nodymaps 2 | 3 | Vue.js - Yandex Maps 4 | git clone git@bitbucket.org:genkosta/nodymaps.git 5 | 6 | ## ERRORS 7 | 8 | Error: ENOSPC: System limit for number of file watchers reached, watch 9 | 10 | 1. echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p 11 | 2. sysctl --system 12 | 13 | Тип карты - Map type 14 | Схема - Scheme 15 | Спутник - Satellite 16 | Гибрид - Hybrid 17 | -------------------------------------------------------------------------------- /nodymaps/editor/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"], 3 | }; 4 | -------------------------------------------------------------------------------- /nodymaps/editor/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": ["src/*"] 9 | }, 10 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 11 | }, 12 | "include": ["./src/**/*.js", "./src/**/*.vue", "./tests/**/*.js"], 13 | "exclude": [ 14 | "dist", 15 | "node_modules", 16 | "**/node_modules", 17 | "build", 18 | "public", 19 | "static", 20 | ".vscode", 21 | ".nuxt", 22 | "coverage", 23 | "jspm_packages", 24 | "tmp", 25 | "temp", 26 | "bower_components", 27 | ".npm", 28 | ".yarn", 29 | ".git", 30 | ".idea", 31 | "*~", 32 | ".directory", 33 | ".DS_Store", 34 | "*.suo", 35 | "*.ntvs*", 36 | "*.njsproj", 37 | "*.sln", 38 | "*.sw?", 39 | ".env.local", 40 | ".env.*.local", 41 | "logs", 42 | "*.log", 43 | "npm-debug.log*", 44 | "yarn-debug.log*", 45 | "yarn-error.log*", 46 | "lerna-debug.log*", 47 | ".pnpm-debug.log*", 48 | ".yarn/cache", 49 | ".yarn/unplugged", 50 | ".yarn/build-state.yml", 51 | ".yarn/install-state.gz", 52 | ".pnp.*" 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /nodymaps/editor/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodymaps-editor", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build --modern", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "core-js": "^3.32.1", 12 | "vue": "~2.7.14", 13 | "vue-croppie": "^2.0.2", 14 | "vue-i18n": "~8.28.2", 15 | "vuetify": "=2.2.1", 16 | "vuex": "~3.6.2" 17 | }, 18 | "devDependencies": { 19 | "@babel/core": "^7.22.11", 20 | "@babel/eslint-parser": "^7.22.11", 21 | "@babel/helper-compilation-targets": "^7.22.10", 22 | "@vue/cli-plugin-babel": "~5.0.8", 23 | "@vue/cli-plugin-eslint": "~5.0.8", 24 | "@vue/cli-plugin-vuex": "~5.0.8", 25 | "@vue/cli-service": "~5.0.8", 26 | "@vue/eslint-config-standard": "^8.0.1", 27 | "browserslist": "^4.21.10", 28 | "eslint": "^8.48.0", 29 | "eslint-config-prettier": "^9.0.0", 30 | "eslint-plugin-prettier": "^5.0.0", 31 | "eslint-plugin-vue": "=9.16.1", 32 | "prettier": "^3.0.3", 33 | "sass": "^1.66.1", 34 | "sass-loader": "^13.3.2", 35 | "vue-cli-plugin-vuetify": "^2.5.8", 36 | "vue-template-compiler": "^2.7.14", 37 | "vuetify-loader": "^1.9.2" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /nodymaps/editor/public/default_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/default_tile.png -------------------------------------------------------------------------------- /nodymaps/editor/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/favicon-16x16.png -------------------------------------------------------------------------------- /nodymaps/editor/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/favicon-32x32.png -------------------------------------------------------------------------------- /nodymaps/editor/public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/favicon-96x96.png -------------------------------------------------------------------------------- /nodymaps/editor/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/favicon.ico -------------------------------------------------------------------------------- /nodymaps/editor/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | DjEYM 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 |
26 | 27 | 28 | 29 | 43 | 44 | 45 | 46 |
-------------------------------------------------------------------------------- /nodymaps/editor/public/js/material-design-webfont/.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Disclaimer: 2 | Hi there, thanks for contributing! Before anything else, please ensure you didn't mean to create an issue on the main MaterialDesign repo instead. 3 | If this is intentional, just erase this message. Thanks! 4 | -------------------------------------------------------------------------------- /nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.eot -------------------------------------------------------------------------------- /nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff -------------------------------------------------------------------------------- /nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff2 -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/fullscreen.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/geolocation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/geolocation.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/provider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/provider.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/route.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/ruler.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/search.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/traffic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/traffic.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/typeselector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/typeselector.png -------------------------------------------------------------------------------- /nodymaps/editor/public/map_controls/zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/editor/public/map_controls/zoom.png -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Airport.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Attraction.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Auto.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Bar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Beach.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /nodymaps/editor/public/markers/Bicycle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/collapse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/expand.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/geolocation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/layers.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/loupe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/pano.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/routes.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/ruler.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/round_icons/traffic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nodymaps/editor/public/spinner/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /nodymaps/editor/public/spinner/spinner-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /nodymaps/editor/public/spinner/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /nodymaps/editor/src/components/CKEditor.vue: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | 51 | -------------------------------------------------------------------------------- /nodymaps/editor/src/components/ContextmenuHeatPoint.vue: -------------------------------------------------------------------------------- 1 | 6 | 41 | 42 | 87 | -------------------------------------------------------------------------------- /nodymaps/editor/src/components/IconCollection.vue: -------------------------------------------------------------------------------- 1 | 7 | 44 | 45 | 79 | -------------------------------------------------------------------------------- /nodymaps/editor/src/components/MapControls.vue: -------------------------------------------------------------------------------- 1 | 6 | 50 | 51 | 94 | -------------------------------------------------------------------------------- /nodymaps/editor/src/components/TileSources.vue: -------------------------------------------------------------------------------- 1 | 6 | 37 | 38 | 78 | 79 | 92 | -------------------------------------------------------------------------------- /nodymaps/editor/src/helpers.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Global support solutions. 3 | */ 4 | 5 | export default { 6 | // Rounding Coordinates. 7 | roundCoord: (num) => Math.round(+num * 1000000) / 1000000, 8 | // Coordinate check 9 | checkLatitude: (coord) => /^-?([1-8]?\d(\.\d+)?|90(\.0+)?)$/.test(coord), 10 | checkLongitude: (coord) => 11 | /^-?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/.test(coord), 12 | }; 13 | -------------------------------------------------------------------------------- /nodymaps/editor/src/locales/i18n.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueI18n from "vue-i18n"; 3 | import en from "@/locales/lang/en"; 4 | import ru from "@/locales/lang/ru"; 5 | 6 | Vue.use(VueI18n); 7 | 8 | const messages = { 9 | en, 10 | ru, 11 | }; 12 | 13 | let langCode = window.djeymLanguageCode.slice(0, 2); 14 | 15 | if (!Object.keys(messages).includes(langCode)) { 16 | langCode = "en"; 17 | } 18 | 19 | const opts = { 20 | locale: langCode, 21 | fallbackLocale: "en", 22 | messages, 23 | }; 24 | 25 | export default new VueI18n(opts); 26 | -------------------------------------------------------------------------------- /nodymaps/editor/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "@/App.vue"; 3 | import i18n from "@/locales/i18n"; 4 | import vuetify from "@/plugins/vuetify"; 5 | import "@/assets/css/helpers.css"; 6 | import store from "@/store"; 7 | import VueCroppie from "vue-croppie"; 8 | import "croppie/croppie.css"; 9 | 10 | // Global Config. 11 | // https://vuejs.org/v2/api/index.html 12 | if (process.env.NODE_ENV === "production") { 13 | Vue.config.productionTip = false; 14 | Vue.config.devtools = false; 15 | Vue.config.debug = false; 16 | Vue.config.silent = true; 17 | } 18 | 19 | Vue.use(VueCroppie); 20 | 21 | new Vue({ 22 | i18n, 23 | vuetify, 24 | store, 25 | render: (h) => h(App), 26 | }).$mount("#djeym-app"); 27 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/help.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the Help.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | controls: { 9 | version: window.djeymVersion, 10 | requirements: { 11 | python: window.djeymPythonVersion, 12 | django: window.djeymDjangoVersion, 13 | vue: window.djeymVueVersion, 14 | vuetify: window.djeymVuetifyVersion, 15 | }, 16 | links: [ 17 | { 18 | icon: "language-python", 19 | title: "PyPI", 20 | link: "https://pypi.org/project/django-editor-ymaps/", 21 | }, 22 | { 23 | icon: "github", 24 | title: "GitHub", 25 | link: "https://github.com/kebasyaty/django-editor-ymaps", 26 | }, 27 | { 28 | icon: "email-outline", 29 | title: "Feedback", 30 | link: "mailto:kebasyaty@gmail.com?subject=DjEYM", 31 | }, 32 | { 33 | icon: "license", 34 | title: "License", 35 | link: "https://github.com/kebasyaty/django-editor-ymaps/blob/master/LICENSE", 36 | }, 37 | ], 38 | }, 39 | }, 40 | getters: {}, 41 | mutations: {}, 42 | actions: {}, 43 | }; 44 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/load_indicators.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the LoadingIndicators.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | controls: {}, 9 | }, 10 | getters: {}, 11 | mutations: { 12 | setSize(state, value) { 13 | state.controls.size = value; 14 | }, 15 | setSpeed(state, value) { 16 | state.controls.speed = value; 17 | }, 18 | setCurrentIndicator(state, value) { 19 | state.controls.currentIndicator = value; 20 | }, 21 | }, 22 | actions: { 23 | actionSetFromAjax({ state }, obj) { 24 | state.controls = obj; 25 | }, 26 | // Ajax - Save change 27 | actionAjaxUpdate({ state, commit, dispatch, rootState }) { 28 | if (rootState.enableAjax) { 29 | commit("modals/globalProgressBarShow", true, { root: true }); 30 | commit("modals/messageDialogClose", null, { root: true }); 31 | window.$.post("/djeym/ajax-update-load-indicator/", { 32 | csrfmiddlewaretoken: window.djeymCSRFToken, 33 | mapID: window.djeymMapID, 34 | slug: state.controls.currentIndicator, 35 | size: state.controls.size, 36 | speed: state.controls.speed, 37 | animation: state.controls.disableAnimation ? "True" : "False", 38 | }) 39 | .done(() => { 40 | window.location.reload(true); 41 | }) 42 | .fail((jqxhr, textStatus, error) => { 43 | dispatch( 44 | "modals/ajaxErrorProcessing", 45 | { 46 | jqxhr: jqxhr, 47 | textStatus: textStatus, 48 | error: error, 49 | hint: "Ajax - Saving - Update Load indicator.", 50 | }, 51 | { root: true }, 52 | ); 53 | }) 54 | .always(() => { 55 | setTimeout( 56 | () => 57 | commit("modals/globalProgressBarShow", false, { root: true }), 58 | 1000, 59 | ); 60 | }); 61 | } 62 | }, 63 | }, 64 | }; 65 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/map_controls.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the MapControls.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | controls: [], 9 | activeControls: [], 10 | }, 11 | getters: {}, 12 | mutations: {}, 13 | actions: { 14 | actionSetFromAjax({ state }, obj) { 15 | state.controls = obj.controls; 16 | state.activeControls = obj.activeControls; 17 | }, 18 | // Ajax - Save change 19 | actionAjaxUpdate({ state, commit, dispatch, rootState }) { 20 | if (rootState.enableAjax) { 21 | commit("modals/globalProgressBarShow", true, { root: true }); 22 | commit("modals/messageDialogClose", null, { root: true }); 23 | window.$.post("/djeym/ajax-update-map-controls/", { 24 | csrfmiddlewaretoken: window.djeymCSRFToken, 25 | ymap: window.djeymMapID, 26 | geolocation: state.controls[0].isActive ? "True" : "False", 27 | search: state.controls[1].isActive ? "True" : "False", 28 | provider: state.controls[2].isActive ? "True" : "False", 29 | route: state.controls[3].isActive ? "True" : "False", 30 | traffic: state.controls[4].isActive ? "True" : "False", 31 | typeselector: state.controls[5].isActive ? "True" : "False", 32 | fullscreen: state.controls[6].isActive ? "True" : "False", 33 | zoom: state.controls[7].isActive ? "True" : "False", 34 | ruler: state.controls[8].isActive ? "True" : "False", 35 | }) 36 | .done(() => { 37 | window.location.reload(true); 38 | }) 39 | .fail((jqxhr, textStatus, error) => { 40 | dispatch( 41 | "modals/ajaxErrorProcessing", 42 | { 43 | jqxhr: jqxhr, 44 | textStatus: textStatus, 45 | error: error, 46 | hint: "Ajax - Saving - Update Map controls.", 47 | }, 48 | { root: true }, 49 | ); 50 | }) 51 | .always(() => { 52 | setTimeout( 53 | () => 54 | commit("modals/globalProgressBarShow", false, { root: true }), 55 | 1000, 56 | ); 57 | }); 58 | } 59 | }, 60 | }, 61 | }; 62 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/presets.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the Presets.vue component. 3 | */ 4 | 5 | import i18n from "@/locales/i18n.js"; 6 | 7 | export default { 8 | namespaced: true, 9 | state: { 10 | panel: [], 11 | controls: [], 12 | dataActionAjaxUpdate: {}, 13 | }, 14 | getters: {}, 15 | mutations: {}, 16 | actions: { 17 | setDataActionAjaxUpdate({ state }, payload) { 18 | state.dataActionAjaxUpdate = payload; 19 | }, 20 | actionSetFromAjax({ state }, arr) { 21 | state.controls = arr; 22 | }, 23 | // Ajax - Save change 24 | actionAjaxUpdate({ state, commit, dispatch, rootState }) { 25 | if (rootState.enableAjax) { 26 | commit("modals/globalProgressBarShow", true, { root: true }); 27 | commit("modals/messageDialogClose", null, { root: true }); 28 | 29 | const presetID = state.dataActionAjaxUpdate.id; 30 | const preset = state.controls.filter((item) => item.id === presetID)[0]; 31 | const position = +preset.position; 32 | 33 | if (!(typeof position === "number") || position < 0) { 34 | commit("modals/globalProgressBarShow", false, { root: true }); 35 | commit( 36 | "modals/messageDialogShow", 37 | { 38 | status: "error", 39 | title: i18n.t("message.86"), 40 | text: i18n.t("message.62"), 41 | cancelBtn: true, 42 | okBtn: false, 43 | actionBtnCancel: () => { 44 | commit("modals/messageDialogClose", null, { root: true }); 45 | commit("setMapSettingsDrawer", true, { root: true }); 46 | }, 47 | actionBtnOk: null, 48 | }, 49 | { root: true }, 50 | ); 51 | return; 52 | } 53 | 54 | window.$.post("/djeym/ajax-update-preset-settings/", { 55 | csrfmiddlewaretoken: window.djeymCSRFToken, 56 | ymap: window.djeymMapID, 57 | presetID: presetID, 58 | autoheader: preset.autoheader, 59 | autobody: preset.autobody, 60 | autofooter: preset.autofooter, 61 | placemark: preset.placemark, 62 | polyline: preset.polyline, 63 | polygon: preset.polygon, 64 | circle: preset.circle, 65 | rectangle: preset.rectangle, 66 | position: position, 67 | }) 68 | .done((data) => { 69 | state.panel = []; 70 | state.controls = data.presets; 71 | }) 72 | .fail((jqxhr, textStatus, error) => { 73 | dispatch( 74 | "modals/ajaxErrorProcessing", 75 | { 76 | jqxhr: jqxhr, 77 | textStatus: textStatus, 78 | error: error, 79 | hint: "Ajax - Saving - Update settings of Preset.", 80 | }, 81 | { root: true }, 82 | ); 83 | }) 84 | .always(function () { 85 | setTimeout(() => { 86 | commit("modals/globalProgressBarShow", false, { root: true }); 87 | commit("setMapSettingsDrawer", true, { root: true }); 88 | }, 1000); 89 | }); 90 | } 91 | }, 92 | }, 93 | }; 94 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/selecting_categories.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the SelectingCategories.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | controls: { 9 | category: null, 10 | subcategories: [], 11 | }, 12 | }, 13 | getters: {}, 14 | mutations: { 15 | setCategory(state, txtNum) { 16 | state.controls.category = txtNum; 17 | }, 18 | setSubcategories(state, arrTxtNum) { 19 | state.controls.subcategories = arrTxtNum; 20 | }, 21 | }, 22 | actions: {}, 23 | }; 24 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/tile_sources.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the TileSources.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | tiles: [], 9 | currentTile: null, 10 | dataActionAjaxReplacement: {}, 11 | }, 12 | getters: {}, 13 | mutations: { 14 | setFromAjax(state, payload) { 15 | state.tiles = payload.tiles; 16 | state.currentTile = payload.currentTile; 17 | }, 18 | setDataActionAjaxReplacement(state, payload) { 19 | state.dataActionAjaxReplacement = payload; 20 | }, 21 | }, 22 | actions: { 23 | // Ajax - Save change 24 | actionAjaxReplacement({ state, commit, dispatch, rootState }) { 25 | if (rootState.enableAjax) { 26 | commit("modals/globalProgressBarShow", true, { root: true }); 27 | commit("modals/messageDialogClose", null, { root: true }); 28 | window.$.post("/djeym/ajax-update-tile-source/", { 29 | csrfmiddlewaretoken: window.djeymCSRFToken, 30 | mapID: window.djeymMapID, 31 | tileID: state.dataActionAjaxReplacement.id, 32 | }) 33 | .done(() => { 34 | window.location.reload(true); 35 | }) 36 | .fail((jqxhr, textStatus, error) => { 37 | dispatch( 38 | "modals/ajaxErrorProcessing", 39 | { 40 | jqxhr: jqxhr, 41 | textStatus: textStatus, 42 | error: error, 43 | hint: "Ajax - Saving - Update Tile source.", 44 | }, 45 | { root: true }, 46 | ); 47 | }) 48 | .always(() => { 49 | setTimeout( 50 | () => 51 | commit("modals/globalProgressBarShow", false, { root: true }), 52 | 1000, 53 | ); 54 | }); 55 | } 56 | }, 57 | }, 58 | }; 59 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/сontextmenu_heat_point.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the ContextmenuHeatPoint.vue component. 3 | */ 4 | 5 | export default { 6 | namespaced: true, 7 | state: { 8 | pk: 0, 9 | action: "save", // save, reload, delete 10 | title: "", 11 | weight: 0, 12 | }, 13 | getters: {}, 14 | mutations: { 15 | setPK(state, num) { 16 | state.pk = num; 17 | }, 18 | setAction(state, action) { 19 | state.action = action; // save, reload, delete 20 | }, 21 | setTitle(state, text) { 22 | state.title = text; 23 | }, 24 | setWeight(state, num) { 25 | state.weight = num; 26 | }, 27 | }, 28 | actions: { 29 | restoreDefaults({ state }) { 30 | state.pk = 0; 31 | state.action = "save"; 32 | state.title = ""; 33 | state.weight = 0; 34 | }, 35 | }, 36 | }; 37 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/сontextmenu_placemark.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the ContextmenuPlacemark.vue component. 3 | */ 4 | 5 | import helpers from "@/helpers.js"; 6 | 7 | export default { 8 | namespaced: true, 9 | state: { 10 | pk: 0, 11 | category: null, 12 | subcategories: [], 13 | header: "", 14 | body: "", 15 | footer: "", 16 | iconSlug: "", 17 | coordinates: [0, 0], 18 | iconUrl: "", 19 | }, 20 | getters: {}, 21 | mutations: { 22 | setPK(state, num) { 23 | state.pk = +num; 24 | }, 25 | setCategory(state, num) { 26 | state.category = +num; 27 | }, 28 | setSubcategories(state, arr) { 29 | state.subcategories = arr.map((item) => +item); 30 | }, 31 | setHeader(state, text) { 32 | state.header = text; 33 | }, 34 | setBody(state, text) { 35 | state.body = text; 36 | }, 37 | setFooter(state, text) { 38 | state.footer = text; 39 | }, 40 | setIconSlug(state, slug) { 41 | state.iconSlug = slug; 42 | }, 43 | setLatitude(state, coord) { 44 | state.coordinates[0] = helpers.roundCoord(coord); 45 | }, 46 | setLongitude(state, coord) { 47 | state.coordinates[1] = helpers.roundCoord(coord); 48 | }, 49 | setIconUrl(state, url) { 50 | state.iconUrl = url; 51 | }, 52 | }, 53 | actions: { 54 | restoreDefaults({ state, rootState }) { 55 | const firstIcon = rootState.iconCollection[0]; 56 | state.pk = 0; 57 | state.category = null; 58 | state.subcategories = []; 59 | state.header = ""; 60 | state.body = ""; 61 | state.footer = ""; 62 | state.iconSlug = firstIcon.slug; 63 | state.coordinates = rootState.dialogCreate.coords; 64 | state.iconUrl = firstIcon.url; 65 | }, 66 | }, 67 | }; 68 | -------------------------------------------------------------------------------- /nodymaps/editor/src/modules/сontextmenu_route.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Module for the ContextmenuRoute.vue component. 3 | */ 4 | 5 | import i18n from "@/locales/i18n.js"; 6 | 7 | export default { 8 | namespaced: true, 9 | state: { 10 | pk: 0, 11 | category: null, 12 | subcategories: [], 13 | header: "", 14 | body: "", 15 | footer: "", 16 | strokeColor: "#00C853", 17 | strokeStyle: { value: "solid", title: i18n.t("message.115") }, 18 | strokeWidth: 5, 19 | strokeOpacity: 0.9, 20 | coordinates: [], 21 | }, 22 | getters: {}, 23 | mutations: { 24 | setPK(state, num) { 25 | state.pk = +num; 26 | }, 27 | setCategory(state, num) { 28 | state.category = +num; 29 | }, 30 | setSubcategories(state, arr) { 31 | state.subcategories = arr.map((item) => +item); 32 | }, 33 | setHeader(state, text) { 34 | state.header = text; 35 | }, 36 | setBody(state, text) { 37 | state.body = text; 38 | }, 39 | setFooter(state, text) { 40 | state.footer = text; 41 | }, 42 | setStrokeColor(state, color) { 43 | state.strokeColor = color; 44 | }, 45 | setStrokeStyle(state, style) { 46 | state.strokeStyle = style; 47 | }, 48 | setStrokeWidth(state, num) { 49 | state.strokeWidth = +num; 50 | }, 51 | setStrokeOpacity(state, num) { 52 | state.strokeOpacity = +num; 53 | }, 54 | setCoordinates(state, arrCoords) { 55 | state.coordinates = arrCoords; 56 | }, 57 | }, 58 | actions: { 59 | restoreDefaults({ state }) { 60 | state.pk = 0; 61 | state.category = null; 62 | state.subcategories = []; 63 | state.header = ""; 64 | state.body = ""; 65 | state.footer = ""; 66 | state.strokeColor = "#00C853"; 67 | state.strokeStyle = { value: "solid", title: i18n.t("message.115") }; 68 | state.strokeWidth = 5; 69 | state.strokeOpacity = 0.9; 70 | state.coordinates = []; 71 | }, 72 | actionPalette({ state, commit, rootState }) { 73 | let hexColor = rootState.modals.currentColorPalette.toUpperCase(); 74 | if (hexColor.length > 7) { 75 | hexColor = hexColor.slice(0, 7); 76 | } 77 | state.strokeColor = hexColor; 78 | rootState.ymap.editableGeoObject.options.set("strokeColor", hexColor); 79 | commit("modals/controlsDialogClose", null, { root: true }); 80 | }, 81 | actionRefreshStrokeStyle({ state, rootState }) { 82 | rootState.ymap.editableGeoObject.options.set( 83 | "strokeStyle", 84 | state.strokeStyle, 85 | ); 86 | }, 87 | actionRefreshStrokeWidth({ state, rootState }) { 88 | rootState.ymap.editableGeoObject.options.set( 89 | "strokeWidth", 90 | +state.strokeWidth, 91 | ); 92 | }, 93 | actionRefreshStrokeOpacity({ state, rootState }) { 94 | rootState.ymap.editableGeoObject.options.set( 95 | "strokeOpacity", 96 | +state.strokeOpacity, 97 | ); 98 | }, 99 | }, 100 | }; 101 | -------------------------------------------------------------------------------- /nodymaps/editor/src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuetify from "vuetify/lib"; 3 | 4 | Vue.use(Vuetify); 5 | 6 | const opts = { 7 | theme: { 8 | defaultTheme: "light", 9 | themes: { 10 | light: { 11 | accent: "#FF4081", 12 | }, 13 | dark: { 14 | accent: "#FF4081", 15 | }, 16 | }, 17 | }, 18 | icons: { 19 | iconfont: "mdi", 20 | }, 21 | }; 22 | 23 | export default new Vuetify(opts); 24 | -------------------------------------------------------------------------------- /nodymaps/editor/vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("@vue/cli-service"); 2 | module.exports = defineConfig({ 3 | transpileDependencies: ["vuetify"], 4 | }); 5 | -------------------------------------------------------------------------------- /nodymaps/front/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /nodymaps/front/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | 7 | -------------------------------------------------------------------------------- /nodymaps/front/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules/ 3 | /build/ 4 | /.nuxt/ 5 | /coverage/ 6 | /jspm_packages/ 7 | /tmp/ 8 | /temp/ 9 | /bower_components/ 10 | /.npm/ 11 | /.yarn/ 12 | /.idea/ 13 | /.vscode/ 14 | /*.suo/ 15 | /*.ntvs*/ 16 | /*.njsproj/ 17 | /*.sln/ 18 | /*.sw?/ 19 | /.env.local/ 20 | /.env.*.local/ 21 | /*~/ 22 | /.directory/ 23 | /.DS_Store/ 24 | /logs/ 25 | /*.log/ 26 | /npm-debug.log*/ 27 | /yarn-debug.log*/ 28 | /yarn-error.log*/ 29 | /lerna-debug.log*/ 30 | /.pnpm-debug.log*/ 31 | /.yarn/cache/ 32 | /.yarn/unplugged/ 33 | /.yarn/build-state.yml/ 34 | /.yarn/install-state.gz/ 35 | /.pnp.*/ 36 | 37 | -------------------------------------------------------------------------------- /nodymaps/front/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | "plugin:vue/essential", 8 | "eslint:recommended", 9 | "plugin:prettier/recommended", 10 | ], 11 | parserOptions: { 12 | parser: "@babel/eslint-parser", 13 | }, 14 | rules: { 15 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 16 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 17 | "no-restricted-syntax": [ 18 | "error", 19 | { 20 | selector: 21 | "CallExpression[callee.object.name='console'][callee.property.name!=/^(log|warn|error|info|trace)$/]", 22 | message: "Unexpected property on console object was called", 23 | }, 24 | ], 25 | "prettier/prettier": [ 26 | "error", 27 | { 28 | endOfLine: "auto", 29 | }, 30 | ], 31 | }, 32 | overrides: [ 33 | { 34 | files: [ 35 | "**/__tests__/*.{j,t}s?(x)", 36 | "**/tests/unit/**/*.spec.{j,t}s?(x)", 37 | ], 38 | }, 39 | ], 40 | }; 41 | -------------------------------------------------------------------------------- /nodymaps/front/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .directory 3 | .DS_Store 4 | 5 | # Dependency directories 6 | node_modules 7 | 8 | package-lock.json 9 | yarn.lock 10 | 11 | # Folder of building for Vue JS project 12 | /dist 13 | 14 | # local env files 15 | .env.local 16 | .env.*.local 17 | 18 | # Log files 19 | logs 20 | *.log 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | lerna-debug.log* 25 | .pnpm-debug.log* 26 | 27 | # Editor directories and files 28 | .idea 29 | #.vscode 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | *.sw? 35 | 36 | # yarn v2 37 | .yarn/cache 38 | .yarn/unplugged 39 | .yarn/build-state.yml 40 | .yarn/install-state.gz 41 | .pnp.* 42 | -------------------------------------------------------------------------------- /nodymaps/front/.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignoring all html files 2 | #*.html 3 | 4 | # Ignoring all vue files 5 | #*.vue 6 | -------------------------------------------------------------------------------- /nodymaps/front/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": false, 4 | "endOfLine": "auto" 5 | } 6 | -------------------------------------------------------------------------------- /nodymaps/front/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.validate.enable": false 3 | } 4 | -------------------------------------------------------------------------------- /nodymaps/front/README.md: -------------------------------------------------------------------------------- 1 | # nodymaps-front 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | # or 7 | yarn install 8 | ``` 9 | 10 | ### Compiles and hot-reloads for development 11 | ``` 12 | npm run serve 13 | # or 14 | yarn serve 15 | ``` 16 | 17 | ### Compiles and minifies for production 18 | ``` 19 | npm run build 20 | # or 21 | yarn build 22 | ``` 23 | 24 | ### Lints and fixes files 25 | ``` 26 | npm run lint 27 | # or 28 | yarn lint 29 | ``` 30 | 31 | ### Customize configuration 32 | See [Configuration Reference](https://cli.vuejs.org/config/). 33 | -------------------------------------------------------------------------------- /nodymaps/front/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"], 3 | }; 4 | -------------------------------------------------------------------------------- /nodymaps/front/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "esnext", 5 | "baseUrl": "./", 6 | "moduleResolution": "node", 7 | "paths": { 8 | "@/*": ["src/*"] 9 | }, 10 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 11 | }, 12 | "include": ["./src/**/*.js", "./src/**/*.vue", "./tests/**/*.js"], 13 | "exclude": [ 14 | "dist", 15 | "node_modules", 16 | "**/node_modules", 17 | "build", 18 | "public", 19 | "static", 20 | ".vscode", 21 | ".nuxt", 22 | "coverage", 23 | "jspm_packages", 24 | "tmp", 25 | "temp", 26 | "bower_components", 27 | ".npm", 28 | ".yarn", 29 | ".git", 30 | ".idea", 31 | "*~", 32 | ".directory", 33 | ".DS_Store", 34 | "*.suo", 35 | "*.ntvs*", 36 | "*.njsproj", 37 | "*.sln", 38 | "*.sw?", 39 | ".env.local", 40 | ".env.*.local", 41 | "logs", 42 | "*.log", 43 | "npm-debug.log*", 44 | "yarn-debug.log*", 45 | "yarn-error.log*", 46 | "lerna-debug.log*", 47 | ".pnpm-debug.log*", 48 | ".yarn/cache", 49 | ".yarn/unplugged", 50 | ".yarn/build-state.yml", 51 | ".yarn/install-state.gz", 52 | ".pnp.*" 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /nodymaps/front/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodymaps-front", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build --modern && node restyle.js", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "core-js": "^3.32.1", 12 | "vue": "~2.7.14", 13 | "vue-i18n": "~8.28.2", 14 | "vuetify": "=2.2.1" 15 | }, 16 | "devDependencies": { 17 | "@babel/core": "^7.22.11", 18 | "@babel/eslint-parser": "^7.22.11", 19 | "@vue/cli-plugin-babel": "~5.0.8", 20 | "@vue/cli-plugin-eslint": "~5.0.8", 21 | "@vue/cli-service": "~5.0.8", 22 | "@vue/eslint-config-standard": "^8.0.1", 23 | "browserslist": "^4.21.10", 24 | "eslint": "^8.48.0", 25 | "eslint-config-prettier": "^9.0.0", 26 | "eslint-plugin-prettier": "^5.0.0", 27 | "eslint-plugin-vue": "=9.16.1", 28 | "prettier": "^3.0.3", 29 | "sass": "^1.66.1", 30 | "sass-loader": "^13.3.2", 31 | "vue-cli-plugin-vuetify": "^2.5.8", 32 | "vue-template-compiler": "^2.7.14", 33 | "vuetify-loader": "^1.9.2" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /nodymaps/front/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/favicon-16x16.png -------------------------------------------------------------------------------- /nodymaps/front/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/favicon-32x32.png -------------------------------------------------------------------------------- /nodymaps/front/public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/favicon-96x96.png -------------------------------------------------------------------------------- /nodymaps/front/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/favicon.ico -------------------------------------------------------------------------------- /nodymaps/front/public/img_bg_panel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/img_bg_panel.jpg -------------------------------------------------------------------------------- /nodymaps/front/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Nodymaps Front 15 | 16 | 17 | 18 | 19 | 20 | 21 | 25 |
26 | 27 | 28 |
29 |
30 |
31 | 32 | 33 | 34 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /nodymaps/front/public/js/material-design-webfont/.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Disclaimer: 2 | Hi there, thanks for contributing! Before anything else, please ensure you didn't mean to create an issue on the main MaterialDesign repo instead. 3 | If this is intentional, just erase this message. Thanks! 4 | -------------------------------------------------------------------------------- /nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.eot -------------------------------------------------------------------------------- /nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff -------------------------------------------------------------------------------- /nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/nodymaps/front/public/js/material-design-webfont/fonts/materialdesignicons-webfont.woff2 -------------------------------------------------------------------------------- /nodymaps/front/restyle.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const fs = require("fs"); 4 | const pathFolder = "./dist/css/"; 5 | // * 6 | const regexp = /\*\{background-repeat:no-repeat;padding:0;margin:0\}/g; 7 | // div, a, button etc 8 | const tagList = 9 | "a|abbr|address|area|article|aside|audio|b|bdi|bdo|blockquote|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|legend|li|map|mark|menu|meter|nav|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|section|select|small|source|span|strong|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|tr|track|u|ul|var|video|wbr"; 10 | const regexp2 = new RegExp(`(?<=^|\\}|,)(${tagList})(?=,|\\{)`, "g"); 11 | // [type=] | [role=] 12 | const regexp3 = /(?<=^|\}|,)(\[type=.+?\]|\[role=.+?\])(?=,|\{)/g; 13 | 14 | fs.readdirSync(pathFolder).forEach((file) => { 15 | let path = pathFolder + file; 16 | let fileContent = fs.readFileSync(path, "utf8"); 17 | fileContent = fileContent.replace(regexp, "*{background-repeat:no-repeat;}"); // * 18 | fileContent = fileContent.replace(regexp2, ".djeym $1"); // div, a, button etc 19 | fileContent = fileContent.replace(regexp3, ".djeym $1"); // [type=] | [role=] 20 | fs.writeFileSync(path, fileContent); 21 | }); 22 | -------------------------------------------------------------------------------- /nodymaps/front/src/i18n.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueI18n from "vue-i18n"; 3 | 4 | Vue.use(VueI18n); 5 | 6 | const messages = { 7 | en: { 8 | message: { 9 | 1: "Places", 10 | 2: "Routes", 11 | 3: "Territories", 12 | 4: "Categories", 13 | 5: "Subcategories", 14 | 6: "Title", 15 | 7: "Upload image", 16 | 8: "Short description", 17 | 9: "The marker will appear on the map after successful moderation.", 18 | 10: "Save", 19 | 11: "Your E-mail", 20 | 12: "Required", 21 | 13: "Max 60 characters", 22 | 14: "Max 300 characters", 23 | 15: "Only JPG files", 24 | 16: "Close", 25 | 17: "1. Click on the map in the right place.
2. If necessary, move the marker.", 26 | 18: "The File APIs are not fully supported in this browser.", 27 | 19: "Invalid address", 28 | }, 29 | }, 30 | ru: { 31 | message: { 32 | 1: "Места", 33 | 2: "Маршруты", 34 | 3: "Территории", 35 | 4: "Категории", 36 | 5: "Подкатегории", 37 | 6: "Название", 38 | 7: "Загрузите изображение", 39 | 8: "Краткое описание", 40 | 9: "Маркер появится на карте после успешной модерации.", 41 | 10: "Сохранить", 42 | 11: "Ваш E-mail", 43 | 12: "Обязательно", 44 | 13: "Макс. 60 символов", 45 | 14: "Макс. 300 символов", 46 | 15: "Только JPG файлы", 47 | 16: "Закрыть", 48 | 17: "1. Кликните по карте в нужном месте.
2. Если необходимо, переместите маркер.", 49 | 18: "Файловые API не полностью поддерживаются в этом браузере.", 50 | 19: "Некорректный адрес", 51 | }, 52 | }, 53 | }; 54 | 55 | let langCode = window.djeymLanguageCode.slice(0, 2); 56 | 57 | if (!Object.keys(messages).includes(langCode)) { 58 | langCode = "en"; 59 | } 60 | 61 | const opts = { 62 | locale: langCode, 63 | messages, 64 | }; 65 | 66 | export default new VueI18n(opts); 67 | -------------------------------------------------------------------------------- /nodymaps/front/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import vuetify from "./plugins/vuetify"; 4 | import i18n from "@/i18n"; 5 | import "@/assets/css/helpers.css"; 6 | 7 | // Global Config. 8 | // https://vuejs.org/v2/api/index.html 9 | if (process.env.NODE_ENV === "production") { 10 | Vue.config.productionTip = false; 11 | Vue.config.devtools = false; 12 | Vue.config.debug = false; 13 | Vue.config.silent = true; 14 | } 15 | 16 | new Vue({ 17 | vuetify, 18 | i18n, 19 | render: (h) => h(App), 20 | }).$mount("#djeym-app"); 21 | -------------------------------------------------------------------------------- /nodymaps/front/src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuetify from "vuetify/lib"; 3 | 4 | Vue.use(Vuetify); 5 | 6 | const opts = { 7 | icons: { 8 | iconfont: "mdi", 9 | }, 10 | }; 11 | 12 | export default new Vuetify(opts); 13 | -------------------------------------------------------------------------------- /nodymaps/front/vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("@vue/cli-service"); 2 | module.exports = defineConfig({ 3 | transpileDependencies: ["vuetify"], 4 | }); 5 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | 7 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/.eslintignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /node_modules/ 3 | /build/ 4 | /.nuxt/ 5 | /coverage/ 6 | /jspm_packages/ 7 | /tmp/ 8 | /temp/ 9 | /bower_components/ 10 | /.npm/ 11 | /.yarn/ 12 | /.idea/ 13 | /.vscode/ 14 | /*.suo/ 15 | /*.ntvs*/ 16 | /*.njsproj/ 17 | /*.sln/ 18 | /*.sw?/ 19 | /.env.local/ 20 | /.env.*.local/ 21 | /*~/ 22 | /.directory/ 23 | /.DS_Store/ 24 | /logs/ 25 | /*.log/ 26 | /npm-debug.log*/ 27 | /yarn-debug.log*/ 28 | /yarn-error.log*/ 29 | /lerna-debug.log*/ 30 | /.pnpm-debug.log*/ 31 | /.yarn/cache/ 32 | /.yarn/unplugged/ 33 | /.yarn/build-state.yml/ 34 | /.yarn/install-state.gz/ 35 | /.pnp.*/ 36 | 37 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "standard", 4 | "eslint:recommended", 5 | "mocha/test" 6 | ], 7 | "env": { 8 | "node": true, 9 | "es6": true, 10 | "mocha": true 11 | }, 12 | "plugins": [ 13 | "standard", 14 | "promise", 15 | "import", 16 | "node", 17 | "mocha-only" 18 | ], 19 | "rules": { 20 | "indent": [ 21 | "error", 22 | 2 23 | ], 24 | "linebreak-style": [ 25 | "error", 26 | "unix" 27 | ], 28 | "semi": [ 29 | "error", 30 | "always" 31 | ], 32 | "eqeqeq": "error", 33 | "curly": "error", 34 | "quotes": [ 35 | "error", 36 | "single", 37 | { 38 | "avoidEscape": true, 39 | "allowTemplateLiterals": true 40 | } 41 | ] 42 | } 43 | } -------------------------------------------------------------------------------- /nodymaps/test_restyle/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .directory 3 | .DS_Store 4 | 5 | # Dependency directories 6 | node_modules 7 | 8 | # Folder of building for Vue JS project 9 | /dist 10 | 11 | # local env files 12 | .env.local 13 | .env.*.local 14 | 15 | # Log files 16 | logs 17 | *.log 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | lerna-debug.log* 22 | .pnpm-debug.log* 23 | 24 | # Editor directories and files 25 | .idea 26 | #.vscode 27 | *.suo 28 | *.ntvs* 29 | *.njsproj 30 | *.sln 31 | *.sw? 32 | 33 | # yarn v2 34 | .yarn/cache 35 | .yarn/unplugged 36 | .yarn/build-state.yml 37 | .yarn/install-state.gz 38 | .pnp.* 39 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | global.console.log('Hello World!'); 4 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 7 | }, 8 | "exclude": [ 9 | "dist", 10 | "node_modules", 11 | "**/node_modules", 12 | "build", 13 | "public", 14 | "static", 15 | ".vscode", 16 | ".nuxt", 17 | "coverage", 18 | "jspm_packages", 19 | "tmp", 20 | "temp", 21 | "bower_components", 22 | ".npm", 23 | ".yarn", 24 | ".git" 25 | ".idea", 26 | "*~", 27 | ".directory", 28 | ".DS_Store", 29 | "*.suo", 30 | "*.ntvs*", 31 | "*.njsproj", 32 | "*.sln", 33 | "*.sw?", 34 | ".env.local", 35 | ".env.*.local", 36 | "logs", 37 | "*.log", 38 | "npm-debug.log*", 39 | "yarn-debug.log*", 40 | "yarn-error.log*", 41 | "lerna-debug.log*", 42 | ".pnpm-debug.log*", 43 | ".yarn/cache", 44 | ".yarn/unplugged", 45 | ".yarn/build-state.yml", 46 | ".yarn/install-state.gz", 47 | ".pnp.*", 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /nodymaps/test_restyle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "restyle", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "test": "mocha", 8 | "start": "node index.js" 9 | }, 10 | "devDependencies": { 11 | "chai": "^4.3.8", 12 | "eslint": "^8.48.0", 13 | "eslint-config-standard": "^17.1.0", 14 | "eslint-plugin-html": "^7.1.0", 15 | "eslint-plugin-import": "^2.28.1", 16 | "eslint-plugin-mocha": "^10.1.0", 17 | "eslint-plugin-mocha-no-only": "^1.1.1", 18 | "eslint-plugin-node": "^11.1.0", 19 | "eslint-plugin-promise": "^6.1.1", 20 | "mocha": "^10.2.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /screenshots/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/.gitkeep -------------------------------------------------------------------------------- /screenshots/add_heatpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/add_heatpoint.png -------------------------------------------------------------------------------- /screenshots/add_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/add_info.png -------------------------------------------------------------------------------- /screenshots/add_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/add_marker.png -------------------------------------------------------------------------------- /screenshots/add_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/add_route.png -------------------------------------------------------------------------------- /screenshots/add_territory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/add_territory.png -------------------------------------------------------------------------------- /screenshots/cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/cluster.png -------------------------------------------------------------------------------- /screenshots/cluster_popup_carousel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/cluster_popup_carousel.png -------------------------------------------------------------------------------- /screenshots/cluster_popup_two_columns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/cluster_popup_two_columns.png -------------------------------------------------------------------------------- /screenshots/edit_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/edit_map.png -------------------------------------------------------------------------------- /screenshots/editing_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editing_route.png -------------------------------------------------------------------------------- /screenshots/editing_territory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editing_territory.png -------------------------------------------------------------------------------- /screenshots/editor_menu_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_filters.png -------------------------------------------------------------------------------- /screenshots/editor_menu_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_heatmap.png -------------------------------------------------------------------------------- /screenshots/editor_menu_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_icons.png -------------------------------------------------------------------------------- /screenshots/editor_menu_presets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_presets.png -------------------------------------------------------------------------------- /screenshots/editor_menu_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_settings.png -------------------------------------------------------------------------------- /screenshots/editor_menu_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/editor_menu_tile.png -------------------------------------------------------------------------------- /screenshots/first_logo/first_logo.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/first_logo.zip -------------------------------------------------------------------------------- /screenshots/first_logo/first_logo_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/first_logo_1.png -------------------------------------------------------------------------------- /screenshots/first_logo/first_logo_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/first_logo_2.png -------------------------------------------------------------------------------- /screenshots/first_logo/first_logo_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/first_logo_3.png -------------------------------------------------------------------------------- /screenshots/first_logo/first_logos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/first_logos.png -------------------------------------------------------------------------------- /screenshots/first_logo/logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/first_logo/logo.xcf -------------------------------------------------------------------------------- /screenshots/geocoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/geocoder.png -------------------------------------------------------------------------------- /screenshots/heatpoint_add_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/heatpoint_add_info.png -------------------------------------------------------------------------------- /screenshots/import_icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/import_icon_collection.png -------------------------------------------------------------------------------- /screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/logo.png -------------------------------------------------------------------------------- /screenshots/map_closed_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/map_closed_panel.png -------------------------------------------------------------------------------- /screenshots/map_opened_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/map_opened_panel.png -------------------------------------------------------------------------------- /screenshots/offset_icon_for_markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/offset_icon_for_markers.png -------------------------------------------------------------------------------- /screenshots/popup_with_text_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/popup_with_text_editor.png -------------------------------------------------------------------------------- /screenshots/result_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/result_1.png -------------------------------------------------------------------------------- /screenshots/result_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/result_2.png -------------------------------------------------------------------------------- /screenshots/result_addmarker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/result_addmarker.png -------------------------------------------------------------------------------- /screenshots/result_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/result_route.png -------------------------------------------------------------------------------- /screenshots/result_territory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/result_territory.png -------------------------------------------------------------------------------- /screenshots/route_color_matching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/route_color_matching.png -------------------------------------------------------------------------------- /screenshots/select_category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/select_category.png -------------------------------------------------------------------------------- /screenshots/select_category_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/select_category_2.png -------------------------------------------------------------------------------- /screenshots/territory_color_matching.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/territory_color_matching.png -------------------------------------------------------------------------------- /screenshots/update_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/update_info.png -------------------------------------------------------------------------------- /screenshots/сhoose_an_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots/сhoose_an_icon.png -------------------------------------------------------------------------------- /screenshots_v2/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/.gitkeep -------------------------------------------------------------------------------- /screenshots_v2/add_cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/add_cluster.png -------------------------------------------------------------------------------- /screenshots_v2/add_loading_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/add_loading_indicator.png -------------------------------------------------------------------------------- /screenshots_v2/adding_geo_objects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/adding_geo_objects.png -------------------------------------------------------------------------------- /screenshots_v2/after_successful_moderation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/after_successful_moderation.png -------------------------------------------------------------------------------- /screenshots_v2/create_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/create_map.png -------------------------------------------------------------------------------- /screenshots_v2/edit_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/edit_map.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_controls.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_filters.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_general_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_general_settings.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_heatmap.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_loading_indicators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_loading_indicators.png -------------------------------------------------------------------------------- /screenshots_v2/editor_menu_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/editor_menu_tile.png -------------------------------------------------------------------------------- /screenshots_v2/example_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/example_route.png -------------------------------------------------------------------------------- /screenshots_v2/example_territory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/example_territory.png -------------------------------------------------------------------------------- /screenshots_v2/import_icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/import_icon_collection.png -------------------------------------------------------------------------------- /screenshots_v2/import_tile_sources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/import_tile_sources.png -------------------------------------------------------------------------------- /screenshots_v2/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/logo.png -------------------------------------------------------------------------------- /screenshots_v2/map_opened_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/map_opened_form.png -------------------------------------------------------------------------------- /screenshots_v2/map_opened_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/map_opened_panel.png -------------------------------------------------------------------------------- /screenshots_v2/marker_change_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/marker_change_icon.png -------------------------------------------------------------------------------- /screenshots_v2/offset_icon_for_markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v2/offset_icon_for_markers.png -------------------------------------------------------------------------------- /screenshots_v3/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/.gitkeep -------------------------------------------------------------------------------- /screenshots_v3/add_cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/add_cluster.png -------------------------------------------------------------------------------- /screenshots_v3/add_loading_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/add_loading_indicator.png -------------------------------------------------------------------------------- /screenshots_v3/adding_geo_objects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/adding_geo_objects.png -------------------------------------------------------------------------------- /screenshots_v3/after_successful_moderation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/after_successful_moderation.png -------------------------------------------------------------------------------- /screenshots_v3/create_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/create_map.png -------------------------------------------------------------------------------- /screenshots_v3/edit_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/edit_map.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_controls.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_filters.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_general_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_general_settings.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_heatmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_heatmap.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_loading_indicators.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_loading_indicators.png -------------------------------------------------------------------------------- /screenshots_v3/editor_menu_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/editor_menu_tile.png -------------------------------------------------------------------------------- /screenshots_v3/example_route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/example_route.png -------------------------------------------------------------------------------- /screenshots_v3/example_territory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/example_territory.png -------------------------------------------------------------------------------- /screenshots_v3/import_icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/import_icon_collection.png -------------------------------------------------------------------------------- /screenshots_v3/import_tile_sources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/import_tile_sources.png -------------------------------------------------------------------------------- /screenshots_v3/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/logo.png -------------------------------------------------------------------------------- /screenshots_v3/map_opened_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/map_opened_form.png -------------------------------------------------------------------------------- /screenshots_v3/map_opened_panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/map_opened_panel.png -------------------------------------------------------------------------------- /screenshots_v3/marker_change_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/marker_change_icon.png -------------------------------------------------------------------------------- /screenshots_v3/offset_icon_for_markers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kebasyaty/django-editor-ymaps/000cf44deb34cbaa5460e05b642916bfcc79cd62/screenshots_v3/offset_icon_for_markers.png -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # ____ ____ __ __ 4 | # /\ _`\ __/\ _`\ /\ \ /\ \/'\_/`\ 5 | # \ \ \/\ \ /\_\ \ \L\_\ `\`\\/'/\ \ 6 | # \ \ \ \ \\/\ \ \ _\L`\ `\ /'\ \ \__\ \ 7 | # \ \ \_\ \\ \ \ \ \L\ \`\ \ \ \ \ \_/\ \ 8 | # \ \____/_\ \ \ \____/ \ \_\ \ \_\\ \_\ 9 | # \/___//\ \_\ \/___/ \/_/ \/_/ \/_/ 10 | # \ \____/ 11 | # \/___/ 12 | # 13 | # Convenient use of the Yandex map service for web development on 14 | # the popular and free Django framework. 15 | # 16 | # Copyright (c) 2014 kebasyaty - Gennady Kostyunin 17 | # 18 | # django-editor-ymaps is free software under terms of the MIT License. 19 | # 20 | 21 | from os import path 22 | from setuptools import find_packages, setup 23 | 24 | 25 | VERSION = (2, 3, 11) 26 | __version__ = '.'.join(map(str, VERSION)) 27 | 28 | 29 | # read the contents of your README file 30 | this_directory = path.abspath(path.dirname(__file__)) 31 | with open(path.join(this_directory, 'README.rst'), encoding='utf-8') as f: 32 | long_description = f.read() 33 | 34 | 35 | setup( 36 | name='django-editor-ymaps', 37 | version=__version__, 38 | packages=find_packages(), 39 | include_package_data=True, 40 | requires=['python (>= 3.12)', 'django (>= 5.0.6)'], 41 | description='Creating and editing Yandex maps.', 42 | long_description=long_description, 43 | long_description_content_type='text/x-rst', 44 | author='kebasyaty', 45 | author_email='kebasyaty@gmail.com', 46 | url='https://github.com/kebasyaty/django-editor-ymaps', 47 | download_url='https://github.com/kebasyaty/django-editor-ymaps/tarball/master', 48 | license='MIT License', 49 | platforms=['any'], 50 | keywords=['django', 'yandex', 'maps', 'admin', 'editor'], 51 | classifiers=[ 52 | 'Development Status :: 5 - Production/Stable', 53 | 'Environment :: Web Environment', 54 | 'Natural Language :: Russian', 55 | 'Natural Language :: English', 56 | 'Framework :: Django :: 5.0', 57 | 'Intended Audience :: Developers', 58 | 'License :: OSI Approved :: MIT License', 59 | 'Operating System :: OS Independent', 60 | 'Programming Language :: Python :: 3.12', 61 | 'Topic :: Scientific/Engineering :: GIS', 62 | 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 63 | ], 64 | install_requires=[ 65 | 'Django>=5.0', 66 | 'Pillow', 67 | 'django-imagekit', 68 | 'python-slugify', 69 | 'django-ckeditor', 70 | 'lxml', 71 | 'django-ipware', 72 | 'django-colorful', 73 | 'django-admin-sortable' 74 | ], 75 | ) 76 | 77 | --------------------------------------------------------------------------------