├── assets ├── images │ ├── .keep │ ├── logo.jpg │ ├── logo.png │ ├── ohuro.png │ ├── toile.png │ ├── kyusui.png │ ├── logo_l.png │ ├── sample.png │ ├── sentaku.png │ ├── sp_logo.png │ ├── illust_1.png │ ├── illust_2.png │ ├── thumbnail.png │ ├── markers-soft.png │ ├── index_body_bg.png │ ├── kamimap_180713.png │ ├── active_txt_en.svg │ ├── fukidashi_obj_ja.svg │ ├── fukidashi_obj_en.svg │ ├── active_txt_ja.svg │ └── uMap.kml ├── sass │ ├── _footer.scss │ ├── _utility.scss │ ├── vendor │ │ └── gridlex │ │ │ ├── _gridlex.scss │ │ │ ├── _gridlex-vars.scss │ │ │ ├── _gridlex-preprocessing.scss │ │ │ ├── _gridlex-mixins.scss │ │ │ └── _gridlex-classes.scss │ ├── _layout.scss │ ├── styles.scss │ ├── _main.scss │ ├── _navigation.scss │ ├── _popup.scss │ ├── _modal.scss │ ├── _sub.scss │ ├── _index.scss │ ├── _base.scss │ ├── _list.scss │ ├── _aside.scss │ ├── _area.scss │ ├── _print.scss │ ├── _header.scss │ ├── _map.scss │ ├── _legend.scss │ ├── _mixin.scss │ └── _variables.scss ├── fonts │ └── fontawesome │ │ ├── webfonts │ │ ├── fa-solid-900.ttf │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.ttf │ │ ├── fa-solid-900.woff2 │ │ ├── fa-regular-400.woff2 │ │ ├── fa-v4compatibility.ttf │ │ └── fa-v4compatibility.woff2 │ │ └── css │ │ ├── solid.min.css │ │ ├── regular.min.css │ │ ├── solid.css │ │ ├── regular.css │ │ ├── v5-font-face.min.css │ │ ├── v5-font-face.css │ │ ├── v4-font-face.min.css │ │ └── v4-font-face.css ├── config │ ├── list.json │ ├── map-sample.json │ ├── 2021-shizuoka-izusan.json │ ├── 2021-geojson-test.json │ ├── 2019-chiba-typhoon-15.json │ ├── 2024-noto-earthquake.json │ └── 2019-typhoon-19.json └── README.md ├── .node-version ├── static ├── CNAME ├── favicon.ico ├── images │ ├── logo.png │ ├── ogp_main.png │ ├── ogp_2019-typhoon-19.png │ ├── ogp_2019-chiba-typhoon-15.png │ └── ogp_2024-noto-earthquake.png ├── apple-touch-icon.png ├── ga.js ├── README.md └── geojson │ └── test.geojson ├── .jshintrc ├── .dockerignore ├── .settings.json ├── google.mbtiles ├── docs ├── kamimap_180713.png ├── LICENSE.txt ├── CONTRIBUTE-i18n.md ├── CONTRIBUTING.md └── HOWTOUSE.md ├── .vscode ├── settings.json └── launch.json ├── @types └── leaflet_awesome_number_markers.d.ts ├── layouts ├── default.vue ├── README.md └── error.vue ├── Dockerfile.dev ├── .github ├── ISSUE_TEMPLATE │ ├── Bug_report.md │ └── Feature_request.md ├── workflows │ ├── test.yml │ ├── lint.yml │ ├── generate-pages.yml │ ├── gh-pages.yml │ └── e2e.yml └── PULL_REQUEST_TEMPLATE.md ├── docker-compose.yml ├── components ├── README.md ├── Modal.vue └── Logo.vue ├── plugins ├── simplebar.js ├── README.md └── mapbox.js ├── Dockerfile ├── merge_tiles.sh ├── nuxt-router-override-sample.config.js ├── docker-compose.dev.yml ├── pages ├── README.md ├── index.vue └── map │ └── _map.vue ├── create_tiles.sh ├── .babelrc ├── middleware └── README.md ├── .prettierrc.yaml ├── store └── README.md ├── test-e2e ├── kamimap.spec.ts └── README.md ├── dim ├── data_files │ ├── 17003_石川県_災害拠点病院一覧_災害拠点病院一覧 │ │ ├── saigai_hospital.csv │ │ └── saigai_hospital.json │ ├── 17003_石川県_公衆無線LANアクセスポイント一覧 │ │ ├── 170003_public_wireless_lan.csv │ │ └── 170003_public_wireless_lan.json │ └── 17205_石川県_珠洲市_避難施設_指定避難所 │ │ ├── suzusiteishelter.csv │ │ └── suzusiteishelter.json ├── README.md ├── dim.json └── dim-lock.json ├── tsconfig.json ├── test-unit ├── components │ └── Logo.vue.spec.js ├── lib │ └── displayHelper.spec.js └── README.md ├── jest.config.js ├── locales ├── tw.json ├── ko.json ├── zh.json ├── ja.json ├── pt.json ├── es.json ├── th.json ├── si.json ├── my.json ├── vn.json ├── ne.json ├── hi.json └── en.json ├── README.md ├── lib └── displayHelper.ts ├── nuxt-i18n.config.js ├── .gitignore ├── eslint.config.mjs ├── playwright.config.ts ├── createtiles.js ├── package.json └── nuxt.config.js /assets/images/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 20.10.0 2 | -------------------------------------------------------------------------------- /static/CNAME: -------------------------------------------------------------------------------- 1 | kamimap.com 2 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 6 3 | } -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | node_modules 3 | -------------------------------------------------------------------------------- /.settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": false 3 | } -------------------------------------------------------------------------------- /assets/sass/_footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | display: none; 3 | } 4 | -------------------------------------------------------------------------------- /google.mbtiles: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/google.mbtiles -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /assets/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/logo.jpg -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/logo.png -------------------------------------------------------------------------------- /assets/images/ohuro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/ohuro.png -------------------------------------------------------------------------------- /assets/images/toile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/toile.png -------------------------------------------------------------------------------- /docs/kamimap_180713.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/docs/kamimap_180713.png -------------------------------------------------------------------------------- /static/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/images/logo.png -------------------------------------------------------------------------------- /assets/images/kyusui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/kyusui.png -------------------------------------------------------------------------------- /assets/images/logo_l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/logo_l.png -------------------------------------------------------------------------------- /assets/images/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/sample.png -------------------------------------------------------------------------------- /assets/images/sentaku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/sentaku.png -------------------------------------------------------------------------------- /assets/images/sp_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/sp_logo.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": [], 3 | "prettier.configPath": "./.prettierrc.yaml" 4 | } 5 | -------------------------------------------------------------------------------- /@types/leaflet_awesome_number_markers.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace L { 2 | var AwesomeNumberMarkers:any; 3 | } 4 | -------------------------------------------------------------------------------- /assets/images/illust_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/illust_1.png -------------------------------------------------------------------------------- /assets/images/illust_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/illust_2.png -------------------------------------------------------------------------------- /assets/images/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/thumbnail.png -------------------------------------------------------------------------------- /static/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/apple-touch-icon.png -------------------------------------------------------------------------------- /static/images/ogp_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/images/ogp_main.png -------------------------------------------------------------------------------- /assets/images/markers-soft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/markers-soft.png -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /assets/images/index_body_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/index_body_bg.png -------------------------------------------------------------------------------- /assets/images/kamimap_180713.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/images/kamimap_180713.png -------------------------------------------------------------------------------- /assets/sass/_utility.scss: -------------------------------------------------------------------------------- 1 | .display-none { 2 | display: none; 3 | } 4 | 5 | .display-block { 6 | display: block; 7 | } 8 | -------------------------------------------------------------------------------- /static/images/ogp_2019-typhoon-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/images/ogp_2019-typhoon-19.png -------------------------------------------------------------------------------- /Dockerfile.dev: -------------------------------------------------------------------------------- 1 | FROM node:14 2 | RUN mkdir /app 3 | WORKDIR /app 4 | ENV PORT=5000 5 | EXPOSE 5000 6 | CMD yarn install && yarn run dev 7 | -------------------------------------------------------------------------------- /static/images/ogp_2019-chiba-typhoon-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/images/ogp_2019-chiba-typhoon-15.png -------------------------------------------------------------------------------- /static/images/ogp_2024-noto-earthquake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/static/images/ogp_2024-noto-earthquake.png -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /assets/config/list.json: -------------------------------------------------------------------------------- 1 | [ 2 | "2024-noto-earthquake.json", 3 | "2019-typhoon-19.json", 4 | "2019-chiba-typhoon-15.json", 5 | "2021-shizuoka-izusan.json" 6 | ] 7 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /assets/fonts/fontawesome/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeforjapan/mapprint/HEAD/assets/fonts/fontawesome/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 不具合報告 3 | about: 不具合を発見したので報告したい 4 | 5 | --- 6 | 7 | ## 不具合の概要 8 | 9 | ## 再現手順 10 | 11 | ## 修正しないとどう困るか 12 | 13 | ## 修正案 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 機能追加・改善要望 3 | about: 機能を追加・改善してほしいので要望します 4 | 5 | --- 6 | 7 | ## 要望の概要 | What 8 | 9 | ## なぜやるのか | Why 10 | 11 | ## どうやるのか | How 12 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | nuxt: 4 | build: 5 | context: ./ 6 | ports: 7 | - ${PORT:-5000}:${PORT:-5000} 8 | environment: 9 | - NUXT_HOST=0.0.0.0 10 | - PORT=${PORT:-5000} 11 | -------------------------------------------------------------------------------- /components/README.md: -------------------------------------------------------------------------------- 1 | # COMPONENTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | The components directory contains your Vue.js Components. 6 | 7 | _Nuxt.js doesn't supercharge these components._ 8 | -------------------------------------------------------------------------------- /plugins/simplebar.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import Vue from 'vue' 3 | import simplebar from 'simplebar-vue' 4 | // eslint-disable-next-line vue/multi-word-component-names 5 | Vue.component('Simplebar', simplebar) 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:14 2 | RUN mkdir /app 3 | WORKDIR /app 4 | COPY package.json package-lock.json ./ 5 | RUN yarn install 6 | COPY ./ ./ 7 | RUN yarn run build && yarn run generate 8 | ENV PORT=5000 9 | EXPOSE 5000 10 | CMD yarn run start 11 | -------------------------------------------------------------------------------- /static/ga.js: -------------------------------------------------------------------------------- 1 | window.dataLayer = window.dataLayer || [] 2 | function gtag () { window.dataLayer.push(arguments) } 3 | gtag('js', new Date()) 4 | gtag('config', 'UA-45275834-9') 5 | window.addEventListener('afterprint', function () { 6 | gtag('event', 'print') 7 | }) 8 | -------------------------------------------------------------------------------- /layouts/README.md: -------------------------------------------------------------------------------- 1 | # LAYOUTS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Application Layouts. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts). 8 | -------------------------------------------------------------------------------- /merge_tiles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | file=$1 3 | base=`basename $file .json` 4 | target_dir=$2 5 | dir=$target_dir$base 6 | echo "----------------------" 7 | echo "convert raw tile to ${dir}/${zxy}" 8 | tile-join --output-to-directory="${dir}/$zxy" --force --no-tile-compression --no-tile-size-limit $dir/*.mbtiles 9 | -------------------------------------------------------------------------------- /nuxt-router-override-sample.config.js: -------------------------------------------------------------------------------- 1 | // for forked project 2 | // copy this file to nuxt-router-override.config.js 3 | // will effect override nuxt.config.js router configuration 4 | // cp nuxt-router-override-sample.config.js nuxt-router-override.config.js 5 | export default { 6 | base: '/mapprint' 7 | } 8 | -------------------------------------------------------------------------------- /docker-compose.dev.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | dev: 4 | build: 5 | context: ./ 6 | dockerfile: Dockerfile.dev 7 | ports: 8 | - ${PORT:-5000}:${PORT:-5000} 9 | environment: 10 | - NUXT_HOST=0.0.0.0 11 | - PORT=${PORT:-5000} 12 | volumes: 13 | - ./:/app 14 | -------------------------------------------------------------------------------- /pages/README.md: -------------------------------------------------------------------------------- 1 | # PAGES 2 | 3 | This directory contains your Application Views and Routes. 4 | The framework reads all the `*.vue` files inside this directory and creates the router of your application. 5 | 6 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing). 7 | -------------------------------------------------------------------------------- /assets/README.md: -------------------------------------------------------------------------------- 1 | # ASSETS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked). 8 | -------------------------------------------------------------------------------- /create_tiles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "----------------------" 3 | echo "convert $1 into tiles" 4 | path=$1 5 | dir=${path%/*} 6 | file=${path##*/} 7 | id=${file%".kml"} 8 | target="${id}.mbtiles" 9 | zxy="${id}/zxy" 10 | mkdir -p "${dir}/$zxy" 11 | npx togeojson "${dir}/$file" | tippecanoe -f -o "${dir}/$target" --base-zoom=2 12 | -------------------------------------------------------------------------------- /layouts/error.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | // .babelrc 2 | { 3 | "presets": [ 4 | "vue", 5 | "@babel/preset-typescript", 6 | ["@babel/preset-env", { "modules": "commonjs" }] 7 | ], 8 | "plugins": [ 9 | "@babel/plugin-transform-runtime", 10 | "@babel/plugin-syntax-dynamic-import", 11 | "@babel/plugin-transform-async-to-generator" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /plugins/README.md: -------------------------------------------------------------------------------- 1 | # PLUGINS 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains Javascript plugins that you want to run before mounting the root Vue.js application. 6 | 7 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins). 8 | -------------------------------------------------------------------------------- /assets/sass/vendor/gridlex/_gridlex.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | GRIDLEX 3 | Just a Flexbox Grid System - v. 2.7.1 4 | ========================================================================== */ 5 | @use "gridlex-vars"; 6 | @use "gridlex-preprocessing"; 7 | @use "gridlex-mixins"; 8 | @use "gridlex-classes"; -------------------------------------------------------------------------------- /middleware/README.md: -------------------------------------------------------------------------------- 1 | # MIDDLEWARE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your application middleware. 6 | Middleware let you define custom functions that can be run before rendering either a page or a group of pages. 7 | 8 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware). 9 | -------------------------------------------------------------------------------- /assets/sass/_layout.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | 3 | .layout-container { 4 | position: relative; 5 | max-width: 100vw; 6 | min-height: 100vh; 7 | } 8 | 9 | .layout-index { 10 | background-image: url("~assets/images/index_body_bg.png"); 11 | background-size: 500px 500px; 12 | min-height: 100vh; 13 | padding: 2em; 14 | @include mixin.bp(md) { 15 | padding-left: 5em; 16 | padding-right: 5em; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request_target: 7 | 8 | jobs: 9 | test: 10 | timeout-minutes: 10 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: actions/setup-node@v4 15 | with: 16 | node-version-file: '.node-version' 17 | - run: yarn install 18 | - run: yarn test:unit 19 | -------------------------------------------------------------------------------- /assets/sass/styles.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | @use "normalize"; 3 | @use "mixin"; 4 | @use "base"; 5 | @use "vendor/gridlex/gridlex"; 6 | @use "layout"; 7 | @use "index"; 8 | @use "main"; 9 | @use "aside"; 10 | @use "header"; 11 | @use "footer"; 12 | @use "sub"; 13 | @use "modal"; 14 | @use "map"; 15 | @use "popup"; 16 | @use "navigation"; 17 | @use "area"; 18 | @use "legend"; 19 | @use "list"; 20 | @use "utility"; 21 | @use "print"; 22 | -------------------------------------------------------------------------------- /plugins/mapbox.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/no-extraneous-dependencies */ 2 | import Vue from 'vue' 3 | import { MglMap, MglGeolocateControl, MglMarker, MglPopup } from 'vue-mapbox' 4 | import MapLibre from 'maplibre-gl' 5 | Vue.component('MglMap', MglMap) 6 | Vue.component('MglGeolocateControl', MglGeolocateControl) 7 | Vue.component('MglMarker', MglMarker) 8 | Vue.component('MglPopup', MglPopup) 9 | Vue.prototype.$mapbox = MapLibre 10 | -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | tabWidth: 2 2 | useTabs: false 3 | semi: true 4 | singleQuote: false 5 | quoteProps: "as-needed" 6 | trailingComma: "es5" 7 | bracketSpacing: true 8 | bracketSameLine: false 9 | arrowParens: "always" 10 | requirePragma: false 11 | insertPragma: false 12 | htmlWhitespaceSensitivity: "css" 13 | vueIndentScriptAndStyle: true 14 | endOfLine: "lf" 15 | embeddedLanguageFormatting: "off" 16 | singleAttributePerLine: false 17 | 18 | -------------------------------------------------------------------------------- /store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Vuex Store files. 6 | Vuex Store option is implemented in the Nuxt.js framework. 7 | 8 | Creating a file in this directory automatically activates the option in the framework. 9 | 10 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). 11 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request_target: 7 | 8 | jobs: 9 | eslint: 10 | timeout-minutes: 10 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: setup node 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version-file: '.node-version' 18 | - run: yarn install 19 | - run: yarn run lint 20 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 概要 | About 2 | 3 | 7 | 8 | ## 動作確認方法 | How to check 9 | 10 | 14 | 15 | ## スクリーンショット | Screenshot 16 | 17 | 29 | -------------------------------------------------------------------------------- /static/README.md: -------------------------------------------------------------------------------- 1 | # STATIC 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your static files. 6 | Each file inside this directory is mapped to `/`. 7 | Thus you'd want to delete this README.md before deploying to production. 8 | 9 | Example: `/static/robots.txt` is mapped as `/robots.txt`. 10 | 11 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static). 12 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://zenn.dev/shimiyu/scraps/80c150a0c68796 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "type": "chrome", 7 | "request": "launch", 8 | "name": "Nuxtjs: Launch Chrome", 9 | "url": "http://localhost:3000", 10 | "webRoot": "${workspaceFolder}" 11 | } 12 | ], 13 | // これを追加 14 | "compounds": [ 15 | { 16 | "name": "fullstack: nuxt", 17 | "configurations": ["Nuxtjs: Launch Chrome"] 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /assets/sass/vendor/gridlex/_gridlex-vars.scss: -------------------------------------------------------------------------------- 1 | //************************ 2 | // VARIABLES 3 | //************************ 4 | $gl-colCount: 12 !default; 5 | $gl-gridName: grid !default; 6 | $gl-colName: col !default; 7 | $gl-attributeName: class !default; 8 | // Note: Those values are from ../../_variables.scss, this fixes the bug when moving @use instead of @import 9 | $gl-gutter: 1.5em; 10 | $gl-gutter-vertical: 1.5em; 11 | $gl-mq-width: 'min-width'; 12 | $gl-mq-list: ( 13 | xl: 93em, 14 | lg: 75em, 15 | md: 52.625em, 16 | sm: 48em, 17 | xs: 35.5em 18 | ); -------------------------------------------------------------------------------- /assets/sass/_main.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | 3 | .main { 4 | background: #FFF; 5 | order: 1; 6 | @include mixin.bp(md) { 7 | position: relative; 8 | order: -1; 9 | &::before { 10 | display: block; 11 | content: ''; 12 | position: absolute; 13 | right: -10px; 14 | top: 0; 15 | width: 10px; 16 | height: 100%; 17 | background: linear-gradient(90deg, rgba(85,85,85,0.2) 0%, rgba(85,85,85,0) 100%); 18 | } 19 | } 20 | } 21 | 22 | .main-sheet { 23 | @include mixin.bp(md) { 24 | padding: 1.5em 1.5em 6em; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900} -------------------------------------------------------------------------------- /test-e2e/kamimap.spec.ts: -------------------------------------------------------------------------------- 1 | import { test, expect } from '@playwright/test'; 2 | import { chromium } from 'playwright'; 3 | 4 | test('URL Check', async () => { 5 | const browser = await chromium.launch(); 6 | const context = await browser.newContext(); 7 | const page = await context.newPage(); 8 | 9 | try { 10 | await page.goto('https://kamimap.com/'); 11 | await page.waitForLoadState('load'); 12 | await expect(page.url()).toBe('https://kamimap.com/en/'); 13 | } catch (error) { 14 | console.error('Error during page navigation:', error); 15 | } 16 | 17 | await browser.close(); 18 | }); 19 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | :host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400} -------------------------------------------------------------------------------- /assets/sass/_navigation.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .navigation { 5 | @include mixin.bp(md) { 6 | display: flex; 7 | align-items: center; 8 | justify-content: space-between; 9 | padding-top: .5em; 10 | } 11 | } 12 | 13 | .navigation-area { 14 | padding: .5em; 15 | @include mixin.bp(md) { 16 | min-width: 0; 17 | flex: 1 1 auto; 18 | } 19 | } 20 | 21 | .navigation-legend { 22 | order: 1; 23 | @include mixin.bp(md) { 24 | order: -1; 25 | flex: 0 0 65%; 26 | border-right: 1px solid variables.$color-gray; 27 | padding-right: .5em; 28 | margin-right: .5em; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /assets/sass/_popup.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | 3 | .popup-type { 4 | display: flex; 5 | align-items: center; 6 | margin: 7px; 7 | i { 8 | position: relative; 9 | flex: 0 0 18px; 10 | height: 18px; 11 | color: #fff; 12 | text-align: center; 13 | margin-right: 10px; 14 | &::before { 15 | position: absolute; 16 | font-size: 80%; 17 | top: 50%; 18 | left: 50%; 19 | transform: translateY(-50%) translateX(-50%); 20 | } 21 | } 22 | } 23 | 24 | .popup-poi-type { 25 | font-size: variables.$font-size-sm; 26 | } 27 | 28 | .popup-detail-content { 29 | max-height: 10em; 30 | word-break: break-all; 31 | overflow-y: auto; 32 | } 33 | -------------------------------------------------------------------------------- /dim/data_files/17003_石川県_災害拠点病院一覧_災害拠点病院一覧/saigai_hospital.csv: -------------------------------------------------------------------------------- 1 | 病院名,二次医療圏,郵便番号,住所,電話番号,備考 2 | 石川県立中央病院,石川中央,920-8530,金沢市鞍月東2丁目1番地,(076)237-8211,基幹災害拠点病院 3 | 小松市民病院,南加賀,923-8560,小松市向本折町ホ60番地,(0761)22-7111,地域災害拠点病院 4 | 公立松任石川中央病院,石川中央,924-8588,白山市倉光3丁目8番地,(076)275-2222,地域災害拠点病院 5 | 金沢赤十字病院,石川中央,921-8162,金沢市三馬2丁目251番地,(076)242-8131,地域災害拠点病院 6 | 金沢市立病院,石川中央,921-8105,金沢市平和町3丁目7番3号,(076)245-2600,地域災害拠点病院 7 | 国立病院機構金沢医療センター,石川中央,920-8650,金沢市下石引町1番1号,(076)262-4161,地域災害拠点病院 8 | 公立羽咋病院,能登中部,925-8502,羽咋市的場町松崎24番地,(0767)22-1220,地域災害拠点病院 9 | 公立能登総合病院,能登中部,926-0816,七尾市藤橋町ア部6番地4,(0767)52-6611,地域災害拠点病院 10 | 市立輪島病院,能登北部,928-8585,輪島市山岸町は1番1地,(0768)22-2222,地域災害拠点病院 11 | 珠洲市総合病院,能登北部,927-1213,珠洲市野々江町ユ部1番地1,(0768)82-1181,地域災害拠点病院 12 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | :root, :host { 7 | --fa-style-family-classic: 'Font Awesome 6 Free'; 8 | --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } 9 | 10 | @font-face { 11 | font-family: 'Font Awesome 6 Free'; 12 | font-style: normal; 13 | font-weight: 900; 14 | font-display: block; 15 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } 16 | 17 | .fas, 18 | .fa-solid { 19 | font-weight: 900; } 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "resolveJsonModule": true, 4 | "skipLibCheck": true, 5 | "target": "esnext", 6 | "module": "esnext", 7 | "moduleResolution": "node", 8 | "lib": [ 9 | "esnext", 10 | "esnext.asynciterable", 11 | "dom" 12 | ], 13 | "esModuleInterop": true, 14 | "allowJs": true, 15 | "sourceMap": true, 16 | "strict": false, 17 | "noEmit": true, 18 | "baseUrl": ".", 19 | "paths": { 20 | "~/*": [ 21 | "./*" 22 | ], 23 | "@/*": [ 24 | "./*" 25 | ] 26 | }, 27 | "types": [ 28 | "@types/node", 29 | "@nuxt/types" 30 | ] 31 | }, 32 | "exclude": [ 33 | "node_modules" 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | :root, :host { 7 | --fa-style-family-classic: 'Font Awesome 6 Free'; 8 | --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } 9 | 10 | @font-face { 11 | font-family: 'Font Awesome 6 Free'; 12 | font-style: normal; 13 | font-weight: 400; 14 | font-display: block; 15 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } 16 | 17 | .far, 18 | .fa-regular { 19 | font-weight: 400; } 20 | -------------------------------------------------------------------------------- /.github/workflows/generate-pages.yml: -------------------------------------------------------------------------------- 1 | name: generate pages 2 | 3 | on: 4 | pull_request_target: 5 | 6 | jobs: 7 | generate-pages: 8 | timeout-minutes: 10 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | 13 | - name: setup node 14 | uses: actions/setup-node@v4 15 | with: 16 | node-version-file: '.node-version' 17 | 18 | - name: Cache dependencies 19 | uses: actions/cache@v4 20 | with: 21 | path: ~/.yarn 22 | key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} 23 | restore-keys: | 24 | ${{ runner.os }}-node- 25 | 26 | - name: install 27 | run: yarn install 28 | 29 | - name: generate 30 | run: yarn run generate --fail-on-error 31 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/v5-font-face.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | @font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")} -------------------------------------------------------------------------------- /assets/sass/_modal.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | 3 | .modal { 4 | display: none; 5 | &.open { 6 | display: block; 7 | position: fixed; 8 | z-index: mixin.z(modal); 9 | width: 90vw; 10 | height: auto; 11 | max-height: 80vh; 12 | top: 50%; 13 | left: 50%; 14 | transform: translate(-50%, -50%); 15 | background-color: #fff; 16 | padding: 1em; 17 | overflow: auto; 18 | @include mixin.bp(md) { 19 | width: 50%; 20 | } 21 | } 22 | } 23 | 24 | .modal-close { 25 | cursor: pointer; 26 | } 27 | 28 | .modal-background { 29 | display: none; 30 | &.open { 31 | display: block; 32 | position: fixed; 33 | z-index: mixin.z(modal-background); 34 | width: 100vw; 35 | height: 100vh; 36 | top: 0; 37 | left: 0; 38 | background-color: rgba(0,0,0,.75); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /test-unit/components/Logo.vue.spec.js: -------------------------------------------------------------------------------- 1 | // Import the required libraries 2 | import { mount } from '@vue/test-utils'; 3 | import Logo from '~/components/Logo.vue'; 4 | 5 | // Describe the test suite 6 | describe('Logo', () => { 7 | // Test if the component renders correctly 8 | it('renders the component', () => { 9 | const wrapper = mount(Logo); 10 | expect(wrapper.exists()).toBe(true); 11 | }); 12 | 13 | // You can add more specific tests for your component's behavior here 14 | // For example, testing the presence and styling of individual triangles 15 | 16 | it('contains four triangles with correct styling', () => { 17 | const wrapper = mount(Logo); 18 | const triangles = wrapper.findAll('.Triangle'); 19 | 20 | expect(triangles).toHaveLength(4); 21 | }); 22 | 23 | // Add more tests as needed 24 | }); 25 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'ts-jest', 3 | testEnvironment: 'jsdom', 4 | moduleFileExtensions: ['js', 'ts', 'json', 'vue'], 5 | transform: { 6 | '^.+\\.js$': 'babel-jest', 7 | '^.+\\.vue$': '@vue/vue2-jest', 8 | }, 9 | moduleNameMapper: { 10 | '^~/(.*)$': '/$1', 11 | }, 12 | testMatch: ['/test-unit/**/*.spec.js'], 13 | snapshotSerializers: ['/node_modules/jest-serializer-vue'], 14 | collectCoverageFrom: [ 15 | '**/*.{js,jsx,ts,tsx,vue}', 16 | '!**/node_modules/**', 17 | '!**/.nuxt/**', 18 | '!**/@types/**', 19 | '!**/.eslintrc.js', 20 | '!**/nuxt.config.js', 21 | '!**/jest.config.js', 22 | '!**/nuxt-i18n.config.js', 23 | '!**/nuxt-router-override-sample.config.js', 24 | '!**/tests/**', 25 | '!**/coverage/**', 26 | ], 27 | }; 28 | -------------------------------------------------------------------------------- /test-unit/lib/displayHelper.spec.js: -------------------------------------------------------------------------------- 1 | import { getNowYMD } from '~/lib/displayHelper'; 2 | 3 | describe('getNowYMD', () => { 4 | describe('returns the formatted date in Japanese by customization', () => { 5 | test.each([ 6 | ['2022-01-01T00:00:00', '2022年01月01日00時00分'], 7 | ['2022-01-01T01:01:01', '2022年01月01日01時01分'], 8 | ['2022-12-31T23:59:59', '2022年12月31日23時59分'] 9 | ])('date=%p', (date, expected) => { 10 | const mockDate = new Date(date); 11 | const result = getNowYMD(mockDate, 'ja'); 12 | expect(result).toBe(expected); 13 | }) 14 | }); 15 | 16 | test('returns the formatted date in English when locale is set to "en"', () => { 17 | const mockDate = new Date('2022-01-05T12:34:56'); 18 | const result = getNowYMD(mockDate, 'en'); 19 | const expected = mockDate.toLocaleString('en-US'); 20 | expect(result).toBe(expected); 21 | }); 22 | }); -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: github pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build-deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v3 13 | 14 | - name: setup node 15 | uses: actions/setup-node@v4 16 | with: 17 | node-version: '20.10.0' 18 | 19 | - name: Cache dependencies 20 | uses: actions/cache@v3 21 | with: 22 | path: ~/.yarn 23 | key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} 24 | restore-keys: | 25 | ${{ runner.os }}-node- 26 | 27 | - name: install 28 | run: yarn install 29 | 30 | - name: generate 31 | run: yarn run generate --fail-on-error 32 | 33 | - name: deploy 34 | uses: peaceiris/actions-gh-pages@v3 35 | with: 36 | github_token: ${{ secrets.GITHUB_TOKEN }} 37 | publish_dir: ./dist 38 | -------------------------------------------------------------------------------- /assets/sass/_sub.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .sub-outer { 5 | display: flex; 6 | flex-direction: row; 7 | align-items: center; 8 | @include mixin.bp(md) { 9 | display: grid; 10 | grid-template-columns: 2fr 2fr; 11 | grid-template-rows: auto; 12 | width: 40%; 13 | } 14 | } 15 | 16 | .sub-button { 17 | font-size: variables.$font-size-sm; 18 | cursor: pointer; 19 | background-color: #fff; 20 | color: variables.$color-base; 21 | border-radius: 3em; 22 | text-align: center; 23 | line-height: 1.1; 24 | margin: 0.5em 1em 0.5em 0; 25 | @include mixin.bp(md) { 26 | padding: 0.5em 1em; 27 | margin-left: 1em; 28 | margin-bottom: 0.5em; 29 | box-shadow: 2px 2px 5px variables.$color-alpha-black; 30 | } 31 | i { 32 | padding-right: 0.2em; 33 | } 34 | a { 35 | color: inherit; 36 | text-decoration: none; 37 | } 38 | select { 39 | border: none; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /assets/sass/vendor/gridlex/_gridlex-preprocessing.scss: -------------------------------------------------------------------------------- 1 | // Add math functions to use division 2 | @use "sass:math"; 3 | @use "sass:map"; 4 | @use "gridlex-vars"; 5 | 6 | // calculate width of one col in % 7 | $gl-colUnit: math.div(100%, gridlex-vars.$gl-colCount); 8 | 9 | // calculate and store nth portions for grid by columns 10 | $gl-colPortions: ( 11 | 0: 0, 12 | ); 13 | @for $i from 1 through gridlex-vars.$gl-colCount { 14 | $gl-colPortions: map.merge( 15 | $gl-colPortions, 16 | ( 17 | $i: ( 18 | $gl-colUnit * $i, 19 | ), 20 | ) 21 | ); 22 | } 23 | 24 | // calculate and store nth fractions for grid by number 25 | $gl-colFractions: ( 26 | 0: 0 // Avoid division by zero if $i would start at 0,,, 27 | ); 28 | @for $i from 1 through gridlex-vars.$gl-colCount { 29 | $fraction: math.div(1, $i); 30 | $gl-colFractions: map.merge( 31 | $gl-colFractions, 32 | ( 33 | $fraction: $fraction * 100%, 34 | ) 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/v5-font-face.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | @font-face { 7 | font-family: 'Font Awesome 5 Brands'; 8 | font-display: block; 9 | font-weight: 400; 10 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } 11 | 12 | @font-face { 13 | font-family: 'Font Awesome 5 Free'; 14 | font-display: block; 15 | font-weight: 900; 16 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } 17 | 18 | @font-face { 19 | font-family: 'Font Awesome 5 Free'; 20 | font-display: block; 21 | font-weight: 400; 22 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } 23 | -------------------------------------------------------------------------------- /dim/README.md: -------------------------------------------------------------------------------- 1 | ## 要望の概要 | What 2 | 行政が公開しているオープンデータを利活用できるように、オープンデータパッケージマネージャー(dim)を導入する。 3 | 4 | dim とは npm のようなオープンデータ向けのデータパッケージマネージャーです。 5 | dim install とすることでオープンデータのダウンロード及び加工を行なうことが可能でデータ管理が容易になります。 6 | 7 | https://github.com/c-3lab/dim 8 | 9 | ## なぜやるのか | Why 10 | 紙マップへのデータソースとしてオープンデータの利活用を考える。用途に応じて利用してください。 11 | 12 | ## どうやるのか | How 13 | dim を導入する 14 | 15 | ### dim コマンド実行方法 16 | - Linux(WSL)を想定しています。環境構築手順は[こちら](https://github.com/c-3lab/dim)をご覧ください。Mac や Windows の場合は[バイナリファイルをダウンロード](https://github.com/c-3lab/dim)してください。 17 | 18 | - ダウンロードしたバイナリファイル ` bin/x86_64-unknown-linux-gnu-dim ` をコマンドライン上で実行してください。以下、エイリアス設定しているものとしてこのコマンドは ` dim ` と表記します。 19 | 20 | ### オープンデータのインストール 21 | 22 | ` dim install ` 23 | - 24 | dim.json, dim-lock.json に登録しているオープンデータが data_files 配下に格納されます。 25 | 詳細は[こちら](https://github.com/c-3lab/dim?tab=readme-ov-file#install)をご覧ください。 26 | 27 | ### 注意点 28 | - オープンデータのライセンスはオープンデータ提供元に準じます。 29 | - data_files は .gitignore してもよいかもしれませんが、開発者以外も利用することを考えて .gitignore していません。 30 | - 本ツールはオープンデータの管理のみを行っているため、紙マップへのデータ反映には別途データ加工が必要です。 31 | -------------------------------------------------------------------------------- /.github/workflows/e2e.yml: -------------------------------------------------------------------------------- 1 | # see https://playwright.dev/docs/ci-intro 2 | name: e2e 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request_target: 8 | 9 | jobs: 10 | test: 11 | timeout-minutes: 10 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-node@v4 16 | with: 17 | node-version-file: '.node-version' 18 | - name: Install dependencies 19 | run: yarn install 20 | - name: Install Playwright Browsers 21 | run: | 22 | # Install Playwright without trying to install system dependencies 23 | yarn playwright install 24 | # Install specific browsers needed 25 | yarn playwright install chromium 26 | - name: Run Playwright tests 27 | run: yarn test:e2e 28 | # Update to v4 to fix the deprecated action issue 29 | - uses: actions/upload-artifact@v4 30 | if: always() 31 | with: 32 | name: playwright-report 33 | path: playwright-report/ 34 | retention-days: 30 35 | -------------------------------------------------------------------------------- /dim/data_files/17003_石川県_災害拠点病院一覧_災害拠点病院一覧/saigai_hospital.json: -------------------------------------------------------------------------------- 1 | [{"病院名":"石川県立中央病院","二次医療圏":"石川中央","郵便番号":"920-8530","住所":"金沢市鞍月東2丁目1番地","電話番号":"(076)237-8211","備考":"基幹災害拠点病院"},{"病院名":"小松市民病院","二次医療圏":"南加賀","郵便番号":"923-8560","住所":"小松市向本折町ホ60番地","電話番号":"(0761)22-7111","備考":"地域災害拠点病院"},{"病院名":"公立松任石川中央病院","二次医療圏":"石川中央","郵便番号":"924-8588","住所":"白山市倉光3丁目8番地","電話番号":"(076)275-2222","備考":"地域災害拠点病院"},{"病院名":"金沢赤十字病院","二次医療圏":"石川中央","郵便番号":"921-8162","住所":"金沢市三馬2丁目251番地","電話番号":"(076)242-8131","備考":"地域災害拠点病院"},{"病院名":"金沢市立病院","二次医療圏":"石川中央","郵便番号":"921-8105","住所":"金沢市平和町3丁目7番3号","電話番号":"(076)245-2600","備考":"地域災害拠点病院"},{"病院名":"国立病院機構金沢医療センター","二次医療圏":"石川中央","郵便番号":"920-8650","住所":"金沢市下石引町1番1号","電話番号":"(076)262-4161","備考":"地域災害拠点病院"},{"病院名":"公立羽咋病院","二次医療圏":"能登中部","郵便番号":"925-8502","住所":"羽咋市的場町松崎24番地","電話番号":"(0767)22-1220","備考":"地域災害拠点病院"},{"病院名":"公立能登総合病院","二次医療圏":"能登中部","郵便番号":"926-0816","住所":"七尾市藤橋町ア部6番地4","電話番号":"(0767)52-6611","備考":"地域災害拠点病院"},{"病院名":"市立輪島病院","二次医療圏":"能登北部","郵便番号":"928-8585","住所":"輪島市山岸町は1番1地","電話番号":"(0768)22-2222","備考":"地域災害拠点病院"},{"病院名":"珠洲市総合病院","二次医療圏":"能登北部","郵便番号":"927-1213","住所":"珠洲市野々江町ユ部1番地1","電話番号":"(0768)82-1181","備考":"地域災害拠点病院"}] -------------------------------------------------------------------------------- /locales/tw.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "紙本地圖", 4 | "site_desc": "用來產生「紙本地圖」的地圖資訊", 5 | "share": "分享", 6 | "about": "關於這個網站", 7 | "contribute": "歡迎貢獻", 8 | "title": "可列印的紙本地圖資訊站" 9 | }, 10 | "root": { 11 | }, 12 | "map": { 13 | "desc_1": "紙本地圖資訊是由眾多貢獻者搜集而成。", 14 | "desc_2": "當你將地圖調整到所需區域時,", 15 | "desc_3": "為列印而生的地圖將會顯示出來。", 16 | "desc_4": "在正確的時機選擇正確的資訊。", 17 | "desc_5": "地圖可以很好的在紙上呈現。", 18 | "desc_6": "把地圖印出來並傳遞給需要的人。", 19 | "desc_7": "請把它寄給我們!", 20 | "printed_at": "列印於:" 21 | }, 22 | "PrintableMap": { 23 | "name": "名稱:", 24 | "print": "列印", 25 | "legend": "範例", 26 | "show_all": "全部顯示", 27 | "close_area_select": "選擇鄰近區域", 28 | "back_to_map": "回到前一個地圖", 29 | "no_point_in_map": "正在顯示的地圖中沒有任何點位", 30 | "close_list": "關閉列表", 31 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-en/{z}/{x}/{y}.png" 32 | }, 33 | "category": { 34 | "未分類": "未分類", 35 | "避難所": "避難所", 36 | "自主避難所": "自主避難所", 37 | "給水所": "供水站", 38 | "入浴施設": "洗澡點", 39 | "携帯充電": "行動充電站", 40 | "無料Wi-Fi": "免費 Wi-Fi", 41 | "ガソリンスタンド": "加油站" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /docs/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Code for Japan 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 | -------------------------------------------------------------------------------- /locales/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "종이맵", 4 | "site_desc": "지도정보를 인쇄하기 가능한 「종이맵」", 5 | "share": "공유", 6 | "about": "이 사이트에 관해서", 7 | "contribute": "개발 참가자 모집중", 8 | "title": "지도정보를 인쇄하기 가능한 「종이맵」" 9 | }, 10 | "root": { 11 | }, 12 | "map": { 13 | "desc_1": "여러 사람들에 의해 수집된 지도 정보", 14 | "desc_2": "보고싶은 지역을 설정하면", 15 | "desc_3": "인쇄에 최적화된 멥 정보가 표시됩니다", 16 | "desc_4": "상황에 따라 정보를 골라주세요", 17 | "desc_5": "인쇄 용지에 딱 맞습니다", 18 | "desc_6": "인쇄해서 지도가 필요한 사람에게", 19 | "desc_7": "부디 전해주세요!", 20 | "printed_at": "인쇄일: " 21 | }, 22 | "PrintableMap": { 23 | "name": "명칭: ", 24 | "print": "인쇄", 25 | "legend": "범례", 26 | "show_all": "모두 보기", 27 | "close_area_select": "지역 선택 닫기", 28 | "back_to_map": "제자리로", 29 | "no_point_in_map": "표시되는 맵에는 아무 포인트도 없습니다", 30 | "close_list": "목록 닫기", 31 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 32 | }, 33 | "category": { 34 | "未分類": "미분류", 35 | "避難所": "피난소", 36 | "自主避難所": "자주피난자", 37 | "給水所": "급수소", 38 | "入浴施設": "목욕탕", 39 | "携帯充電": "휴대폰 충전", 40 | "無料Wi-Fi": "무료 Wi-Fi", 41 | "ガソリンスタンド": "주유소" 42 | } 43 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![github pages](https://github.com/codeforjapan/mapprint/actions/workflows/gh-pages.yml/badge.svg)](https://github.com/codeforjapan/mapprint/actions/workflows/gh-pages.yml) 2 | 3 | 紙マップ 4 | === 5 | ![kamimap](static/images/logo.png) 6 | 7 | Google マイマップ や、umap の情報を取り込んで、印刷向けに最適化して表示できるサイトのソースコードです。 8 | 9 | https://codeforjapan.github.io/mapprint/ 10 | 11 | から実際のページを確認できます。 12 | 災害時に、近くのサポート情報を印刷した地図を避難所や市役所で配布するような用途で使われています。 13 | 14 | ## おばあちゃんの手に届くまで 15 | このサイトの特徴は、紙でマップが配布できることです。 16 | このプロジェクトで作られたデータは、さまざまな人々の手を経て、困っているおばあちゃんのところにまで届きます。 17 | 18 | ![kamimap_180713.png](docs/kamimap_180713.png) 19 | 20 | ## LICENSE/ライセンス 21 | 22 | 本ソフトウェアは、MITライセンスの元提供されています。詳しくは LICENSE.txt を確認してください。 23 | This software is released under the MIT License, see LICENSE.txt. 24 | 25 | ## Help Wanted!! 26 | 27 | Issues にあるいろいろな修正にご協力いただけると嬉しいです。 28 | 詳しくは[こちら](./docs/CONTRIBUTING.md)を御覧ください。 29 | 30 | ## 開発環境の構築方法 31 | 32 | ``` bash 33 | # install dependencies 34 | $ yarn install 35 | 36 | # serve with hot reload at localhost:3000 37 | $ yarn run dev 38 | 39 | # build for production and launch server 40 | $ yarn run build 41 | $ yarn run start 42 | 43 | # generate static project 44 | $ yarn run generate 45 | ``` 46 | -------------------------------------------------------------------------------- /assets/config/map-sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id":"new-map", 3 | "map_title":"新しい地図", 4 | "map_title_en":"New Map", 5 | "map_description":"新しく地図を追加します", 6 | "map_description_en":"Add new map", 7 | "map_image": null, 8 | "sources": [ 9 | { 10 | "id" : "test_kml", 11 | "url" : "/data/test.kml", 12 | "type" : "kml", 13 | "title" : "Test用KML", 14 | "title_en" : "KML for test", 15 | "show" : true 16 | }, 17 | { 18 | "id" : "test_geojson", 19 | "url" : "/data/test.geojson", 20 | "type" : "geojson", 21 | "title" : "Test用GeoJSON", 22 | "title_en" : "GeoJSON for test", 23 | "show" : true 24 | } 25 | ], 26 | "default_hash": "35.034970230243786,139.83536606997205-34.998870264553034,139.90144296563784", 27 | "center" : [139.83536606997205, 35.034970230243786], 28 | "layer_settings": { 29 | "避難所": { 30 | "color": "#276445", 31 | "bg_color": "#A4C1B0", 32 | "icon_class": "fas fa-street-view", 33 | "class": "layer_temporary_houses" 34 | }, 35 | "給水所": { 36 | "color": "#285797", 37 | "bg_color": "#A3BBDA", 38 | "icon_class": "fas fa-tint", 39 | "class": "layer_water" 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /locales/zh.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "纸质地图", 4 | "site_desc": "可打印的地图信息 - \"纸质地图\"", 5 | "share": "分享", 6 | "about": "关于本站", 7 | "contribute": "招募开发者", 8 | "title": "可打印的地图信息 - \"纸质地图\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "由各种人收集的地图信息", 13 | "desc_2": "调整到所需的区域时", 14 | "desc_3": "将优化打印的地图信息显示出来", 15 | "desc_4": "请选择根据需要的时刻选择信息", 16 | "desc_5": "适合打印纸张的大小", 17 | "desc_6": "印刷并传递信息给需要的人", 18 | "desc_7": "一定要送达给他们!", 19 | "printed_at": "打印日期:" 20 | }, 21 | "PrintableMap": { 22 | "name": "名称:", 23 | "print": "打印", 24 | "legend": "图例", 25 | "show_all": "显示全部", 26 | "close_area_select": "关闭区域选择", 27 | "back_to_map": "返回原地图", 28 | "no_point_in_map": "当前地图中没有任何点", 29 | "close_list": "关闭列表", 30 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 31 | }, 32 | "category": { 33 | "未分類": "未分类", 34 | "避難所": "避难所", 35 | "自主避難所": "自主避难者", 36 | "給水所": "供水站", 37 | "入浴施設": "浴场设施", 38 | "携帯充電": "手机充电", 39 | "無料Wi-Fi": "免费Wi-Fi", 40 | "ガソリンスタンド": "加油站" 41 | } 42 | } -------------------------------------------------------------------------------- /docs/CONTRIBUTE-i18n.md: -------------------------------------------------------------------------------- 1 | # How to contribute internationalization of this project 2 | 3 | Than you for your interest and contribute! 4 | 5 | Mainly, We are working at GitHub. 6 | Our repository is here: https://github.com/codeforjapan/mapprint 7 | 8 | The core tasks are add/refine language JSON files at `./locales/` folder. 9 | 10 | # If you are not developer... 11 | You can contribute add/refine JSON files at `./locales/` and contact us at Slack. 12 | 13 | # If you can use GitHub... 14 | - Fork https://github.com/codeforjapan/mapprint to your account. 15 | - Add/refine language JSON files at `./locales/`. 16 | - Create Pull Request to https://github.com/codeforjapan/mapprint 17 | - We will review Pull Request 18 | 19 | # If you are developer... 20 | This project is based on Node.js 21 | If you are familiar to use Node.js, You can more deeply contribute our project. 22 | 23 | The internationalization settings of this project is `./nuxt-i18n.config.js` file. 24 | 25 | - Fork https://github.com/codeforjapan/mapprint to your account. 26 | - Add/refine language JSON files at `./locales/`. 27 | - update `./nuxt-i18n.config.js` file for add new language. 28 | - type `yarn run dev` command. 29 | - check your new language is working at http://localhost:3000/ 30 | - Create Pull Request to https://github.com/codeforjapan/mapprint 31 | - We will review Pull Request -------------------------------------------------------------------------------- /lib/displayHelper.ts: -------------------------------------------------------------------------------- 1 | export function getNowYMD(dt:Date, locale?:string):string{ 2 | // 日付表現は各言語に沿うが表示時間は日本時間(JST) 3 | switch (locale) { 4 | case 'ja': 5 | const y = dt.getFullYear(); 6 | const m = ("00" + (dt.getMonth()+1)).slice(-2); 7 | const d = ("00" + dt.getDate()).slice(-2); 8 | const hh = ("00" + dt.getHours()).slice(-2); 9 | const mm = ("00" + dt.getMinutes()).slice(-2); 10 | const result = y + "年" + m + "月" + d + "日" + hh + "時" + mm + "分"; 11 | return result 12 | case 'en': 13 | return dt.toLocaleString('en-JP'); 14 | case 'es': 15 | return dt.toLocaleString('es-JP'); 16 | case 'hi': 17 | return dt.toLocaleString('hi-JP'); 18 | case 'ko': 19 | return dt.toLocaleString('ko-JP'); 20 | case 'my': 21 | return dt.toLocaleString('my-JP'); 22 | case 'ne': 23 | return dt.toLocaleString('ne-JP'); 24 | case 'pt': 25 | return dt.toLocaleString('pt-JP'); 26 | case 'si': 27 | return dt.toLocaleString('si-JP'); 28 | case 'th': 29 | return dt.toLocaleString('th-JP'); 30 | case 'tw': 31 | return dt.toLocaleString('tw-JP'); 32 | case 'vn': 33 | return dt.toLocaleString('vn-JP'); 34 | case 'zh': 35 | return dt.toLocaleString('zh-JP'); 36 | default: 37 | return dt.toLocaleString('ja-JP'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /locales/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "紙マップ", 4 | "site_desc": "地図情報を印刷できる「紙マップ」", 5 | "share": "シェア", 6 | "about": "このサイトについて", 7 | "contribute": "開発参加者募集中", 8 | "title": "地図情報を印刷できる「紙マップ」" 9 | }, 10 | "about": { 11 | "desc": "このサイトのソースコードはオープンに公開しております。開発にご協力いただける方は、{githubRepo}からご参加ください。JavaScript や Leaflet などの経験がある方、大歓迎です。", 12 | "github_repository": "Code for Japan の Github リポジトリ" 13 | }, 14 | "root": { 15 | }, 16 | "map": { 17 | "desc_1": "さまざまな人の手によって収集された地図情報", 18 | "desc_2": "必要な地域に調整すると", 19 | "desc_3": "印刷に最適化されたマップ情報が表示されます", 20 | "desc_4": "その時々に応じた情報を選択してください", 21 | "desc_5": "印刷用紙にちょうどよくおさまります", 22 | "desc_6": "印刷して情報を必要としているひとに", 23 | "desc_7": "ぜひ届けてあげてください!", 24 | "printed_at": "印刷日:" 25 | }, 26 | "PrintableMap": { 27 | "name": "名称:", 28 | "print": "印刷", 29 | "legend": "凡例", 30 | "show_all": "すべて表示", 31 | "close_area_select": "地域選択を閉じる", 32 | "back_to_map": "元の地図へ", 33 | "no_point_in_map": "表示中のマップにはどのポイントも存在しません", 34 | "close_list": "リストを閉じる", 35 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 36 | }, 37 | "category": { 38 | "未分類": "未分類", 39 | "避難所": "避難所", 40 | "自主避難所": "自主避難者", 41 | "給水所": "給水所", 42 | "入浴施設": "入浴施設", 43 | "携帯充電": "携帯充電", 44 | "無料Wi-Fi": "無料Wi-Fi", 45 | "ガソリンスタンド": "ガソリンスタンド" 46 | } 47 | } -------------------------------------------------------------------------------- /assets/sass/_index.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | 3 | .index-title { 4 | max-width: 500px; 5 | margin: 0 auto; 6 | } 7 | 8 | .index-main { 9 | min-height: 70vh; 10 | padding: 2em 0; 11 | } 12 | 13 | .index-list { 14 | padding: 0; 15 | } 16 | 17 | .index-item { 18 | padding: 0.8em; 19 | background-color: rgba(0, 0, 0, 0.2); 20 | border-radius: 15px; 21 | a { 22 | color: variables.$color-base; 23 | text-decoration: none; 24 | } 25 | } 26 | 27 | .index-item-inner { 28 | height: 90%; 29 | } 30 | 31 | .index-link-inner { 32 | display: grid; 33 | grid-template-rows: max-content; 34 | grid-template-columns: auto; 35 | height: 100%; 36 | background-color: #fff; 37 | border-radius: 10px; 38 | box-shadow: 3px 3px 10px #868686; 39 | img { 40 | border-radius: 10px 10px 0 0; 41 | } 42 | } 43 | 44 | .index-item-title { 45 | display: flex; 46 | align-items: center; 47 | justify-content: space-between; 48 | padding: 0.5em; 49 | } 50 | 51 | .index-arrow-icon { 52 | font-size: 2em; 53 | padding-left: 0.5em; 54 | } 55 | 56 | .index-item-sns { 57 | display: flex; 58 | padding: 0.5em 0; 59 | > div { 60 | margin-right: 0.5em; 61 | } 62 | } 63 | 64 | .fb_iframe_widget > span { 65 | vertical-align: baseline !important; 66 | } 67 | 68 | .index-footer { 69 | margin-bottom: 20px; 70 | display: flex; 71 | justify-content: center; 72 | > div { 73 | margin: 0 0.5em; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /assets/sass/_base.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | @use "mixin"; 3 | 4 | :root { 5 | height: 100%; 6 | background-color: variables.$root-background-color; 7 | box-sizing: variables.$root-box-sizing; 8 | color: variables.$root-color; 9 | font: #{variables.$root-font-size}/#{variables.$root-line-height} variables.$root-font-family; 10 | @include mixin.bp(xs) { 11 | font-size: calc(1rem + ((1vw - 0.355rem) * 0.3165)); 12 | } 13 | @include mixin.bp(lg) { 14 | font-size: 1rem; 15 | } 16 | } 17 | 18 | *, 19 | ::before, 20 | ::after { 21 | box-sizing: variables.$root-box-sizing; 22 | } 23 | 24 | body { 25 | position: relative; 26 | font-size: variables.$font-size-base; 27 | } 28 | 29 | main { 30 | flex: 1 1 auto; 31 | } 32 | 33 | h1 { 34 | font-size: variables.$font-size-h1; 35 | } 36 | h2 { 37 | font-size: variables.$font-size-h2; 38 | } 39 | h3 { font-size: variables.$font-size-h3; } 40 | h4,h5 { font-size: variables.$font-size-base; } 41 | 42 | img { 43 | max-width:100%; 44 | height:auto; 45 | vertical-align: bottom; 46 | } 47 | 48 | figure { 49 | margin: 0; 50 | } 51 | 52 | ul { 53 | list-style: none; 54 | } 55 | 56 | ol { 57 | list-style-position: inside; 58 | } 59 | 60 | table { 61 | width: 100%; 62 | border-collapse: collapse; 63 | } 64 | 65 | article { 66 | margin: 1.5em 0; 67 | } 68 | 69 | button, input, optgroup, select, textarea { 70 | font-family: variables.$font-family-sans-serif; 71 | } 72 | -------------------------------------------------------------------------------- /docs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribute/プロジェクトへの参加方法 2 | 3 | このプロジェクトには、誰でも貢献ができます。ソースコードはオープンに公開しております。開発にご協力いただける方は、 Code for Japan の [Github リポジトリ](https://github.com/codeforjapan/mapprint) から、開発にご参加ください。JavaScript (特に Vue.js)や Mapbox GL、GIS などの経験がある方、大歓迎です。 4 | 5 | ## プロジェクトの内容 6 | 7 | このサイトは、SNS で流れる給水所などの情報や、行政発信の情報を見れていない地域の人たちにも伝えるために、情報を A4 にまとめて印刷してくばれるように情報を最適化しています。 8 | 9 | [こちら](https://codeforjapan.github.io/mapprint/)から実際のページを確認できます。 10 | 11 | 元データには、Google マイマップや umap のものを使っています。 12 | 13 | 表示されている地図の範囲内にある情報のみがリストに表示されますので、自由に印刷して配って使ってください。 14 | 15 | ## 要望やアイデア、バグの登録 16 | 17 | 新しい機能や提案がありましたら、Issue として追加してください。 18 | バグなどの報告も大歓迎です。 19 | バグの場合は、利用環境や再現手順もあわせて記入いただけると助かります。 20 | 21 | ## プロジェクトへの参加 22 | 23 | [Issues](https://github.com/codeforjapan/mapprint/issues) にあるいろいろな修正にご協力いただけると嬉しいです。プロジェクトに関する議論は主に Github の Issue や Slack チャンネル(後述)で行っています。是非ご参加ください! 24 | 25 | 上がっている Issue で、対応できるものがあるという方は、ぜひ Pull Request を送ってください。 26 | 27 | 開発環境の構築手順については、[README](/README.md)を確認してください。 28 | 29 | 手元環境で修正できたら、[Pull Request の送り方](https://qiita.com/Commander-Aipa/items/d61d21988a36a4d0e58b) を参考に Pull Request を送ってみましょう! 30 | 31 | 開発に関する細かいコミュニーケーションについては、[Code for Japan の Slack](https://cfjslackin.herokuapp.com/) で行っています。 32 | リンクから Code for Japan Slack に加入いただき、#proj-kamimap チャンネルに加入してください。 33 | 34 | チャンネルへのダイレクトリンク 35 | 36 | ``` 37 | slack://channel?id=CBQAS1WH4&&team=T02FMV4EB 38 | ``` 39 | 40 | (Code for Japan の Slack アカウントが必要です。) 41 | 42 | ## プロジェクトのサポート 43 | 44 | その他、サポートのご提案などありましたら info@code4japan.org までご連絡ください。 45 | -------------------------------------------------------------------------------- /assets/sass/_list.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .list-outer { 5 | padding: 0 1em; 6 | overflow-y: auto; 7 | max-height: 0; 8 | transition: max-height .5s; 9 | &.open { 10 | max-height: 40vh; 11 | } 12 | @include mixin.bp(md) { 13 | padding: 0; 14 | overflow: visible; 15 | max-height: none; 16 | &.open { 17 | max-height: none; 18 | } 19 | } 20 | } 21 | 22 | .list-section { 23 | display: none; 24 | &.show { 25 | display: block; 26 | padding-bottom: 2em; 27 | @include mixin.bp(md) { 28 | padding-bottom: 0; 29 | } 30 | } 31 | } 32 | 33 | .list-section-none { 34 | padding-bottom: 2em; 35 | @include mixin.bp(md) { 36 | padding-bottom: 0; 37 | } 38 | } 39 | 40 | .list-title { 41 | display: flex; 42 | align-items: center; 43 | font-size: variables.$font-size-base; 44 | color: #fff; 45 | padding: .3em 1em; 46 | margin-bottom: 0; 47 | border-radius: 5px; 48 | } 49 | 50 | .list-title-mark { 51 | padding-right: .5em; 52 | } 53 | 54 | .list-items { 55 | padding: 0; 56 | li { 57 | display: flex; 58 | font-size: variables.$font-size-sm; 59 | margin: .3em 0; 60 | } 61 | } 62 | 63 | .item-number { 64 | flex: 0 0 3em; 65 | padding: .3em 0; 66 | text-align: center; 67 | border-right: 1px solid variables.$color-gray; 68 | @include mixin.bp(xs) { 69 | padding: 0; 70 | } 71 | } 72 | 73 | .item-name { 74 | padding: .3em .5em; 75 | @include mixin.bp(xs) { 76 | padding: 0 .5em; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /assets/sass/_aside.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | 3 | .aside-inner { 4 | padding: 0 1.5em; 5 | @include mixin.bp(md) { 6 | padding: 2.5em 1.5em 5em; 7 | } 8 | @include mixin.bp(lg) { 9 | padding: 2.5em 5em 5em; 10 | } 11 | } 12 | 13 | .aside-grid { 14 | display: none; 15 | @include mixin.bp(md) { 16 | display: block; 17 | } 18 | @include mixin.bp(xl) { 19 | display: grid; 20 | grid-template-columns: 50% auto; 21 | grid-template-rows: auto auto auto auto auto auto; 22 | } 23 | } 24 | 25 | .aside-item1 { 26 | grid-column: 1 / 3; 27 | grid-row: 1 / 2; 28 | } 29 | 30 | .aside-item2 { 31 | grid-column: 2 / 3; 32 | grid-row: 2 / 3; 33 | } 34 | 35 | .aside-item3 { 36 | grid-column: 1 / 2; 37 | grid-row: 2 / 6; 38 | } 39 | 40 | .aside-item4 { 41 | grid-column: 2 / 3; 42 | grid-row: 3 / 4; 43 | } 44 | 45 | .aside-item5 { 46 | grid-column: 2 / 3; 47 | grid-row: 4 / 5; 48 | } 49 | 50 | .aside-item6 { 51 | grid-column: 1 / 3; 52 | grid-row: 6 / 7; 53 | } 54 | 55 | .aside-item7 { 56 | grid-column: 2 / 3; 57 | grid-row: 5 / 6; 58 | } 59 | 60 | .aside-title-sp { 61 | max-width: 250px; 62 | margin: 0 auto 2em; 63 | @include mixin.bp(xl) { 64 | display: none; 65 | } 66 | } 67 | 68 | .aside-title-pc { 69 | display: none; 70 | @include mixin.bp(xl) { 71 | display: block; 72 | max-width: 700px; 73 | margin: 0 auto 2em; 74 | } 75 | } 76 | 77 | .aside-item-illust1 { 78 | max-width: 250px; 79 | margin: 2em auto; 80 | } 81 | 82 | .aside-item-illust2 { 83 | max-width: 450px; 84 | margin: 2em auto; 85 | } 86 | -------------------------------------------------------------------------------- /locales/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "KamiMap", 4 | "site_desc": "Mapa de Papel para imprimir as informações do mapa", 5 | "share": "Compartilhar", 6 | "about": "Sobre este site", 7 | "contribute": "Bem-vindo a contribuir", 8 | "title": "Mapa de papel para informações de mapa imprimíveis" 9 | }, 10 | "root": { 11 | }, 12 | "map": { 13 | "desc_1": "Informação do mapa recolhida por várias pessoas", 14 | "desc_2": "Quando você ajustar-se à área necessária,", 15 | "desc_3": "Será apresentado informações do mapa otimizado para a impressão.", 16 | "desc_4": "Escolha os dados de acordo com de vez em quando.", 17 | "desc_5": "Ele se encaixa perfeitamente no papel de impressão.", 18 | "desc_6": "Imprima e envie para as pessoas que precisam das informações.", 19 | "desc_7": "", 20 | "printed_at": "Data de impressão:" 21 | }, 22 | "PrintableMap": { 23 | "name": "Nome:", 24 | "print": "Imprimir", 25 | "legend": "Legenda", 26 | "show_all": "Mostre tudo", 27 | "close_area_select": "Fechar seleção de região", 28 | "back_to_map": "Retornar ao mapa original", 29 | "no_point_in_map": "Qualquer ponto não existe no mapa exibido.", 30 | "close_list": "Fechar lista", 31 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 32 | }, 33 | "category": { 34 | "未分類": "Sem categoria", 35 | "避難所": "Abrigo", 36 | "自主避難所": "Abrigo voluntária", 37 | "給水所": "Estações de água", 38 | "入浴施設": "Instalações de banho", 39 | "携帯充電": "Carregador de celular", 40 | "無料Wi-Fi": "Wi-fi grátis", 41 | "ガソリンスタンド": "Posto de gasolina" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /components/Modal.vue: -------------------------------------------------------------------------------- 1 | 2 | 23 | 24 | 45 | -------------------------------------------------------------------------------- /locales/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "KamiMap", 4 | "site_desc": "Mapa de Papel para información de mapa imprimible", 5 | "share": "Compartir", 6 | "about": "Sobre este sitio web", 7 | "contribute": "Bienvenido a contribuir", 8 | "title": "Mapa de Papel para información de mapa imprimible" 9 | }, 10 | "root": { 11 | }, 12 | "map": { 13 | "desc_1": "Información de mapas recopilada por una variedad de personas.", 14 | "desc_2": "Cuando ajusta el mapa a las áreas que lo necesita,", 15 | "desc_3": "Se mostrará la información del mapa optimizada para la impresión.", 16 | "desc_4": "Elija la información adecuada para el momento adecuado.", 17 | "desc_5": "Encajará perfectamente en el papel de impresión.", 18 | "desc_6": "Por favor imprímalo y envíelo a quien lo necesite.", 19 | "desc_7": "", 20 | "printed_at": "Fecha de impresion:" 21 | }, 22 | "PrintableMap": { 23 | "name": "Nombre:", 24 | "print": "Imprimir:", 25 | "legend": "Leyenda", 26 | "show_all": "Mostrar todo", 27 | "close_area_select": "Cerrar selección de región", 28 | "back_to_map": "Al mapa original", 29 | "no_point_in_map": "Ninguno de los puntos existe en el mapa mostrado", 30 | "close_list": "Cerrar lista", 31 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 32 | }, 33 | "category": { 34 | "未分類": "Sin categoría", 35 | "避難所": "Refugio", 36 | "自主避難所": "Refugio voluntaria", 37 | "給水所": "Las estaciones de agua", 38 | "入浴施設": "Instalaciones del baño", 39 | "携帯充電": "Cargador del celular", 40 | "無料Wi-Fi": "Wi-Fi gratis", 41 | "ガソリンスタンド": "Gasolinera" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /locales/th.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "แผนที่กระดาษ", 4 | "site_desc": "ข้อมูลแผนที่ที่สามารถพิมพ์ได้ - \"แผนที่กระดาษ\"", 5 | "share": "แชร์", 6 | "about": "เกี่ยวกับเว็บไซต์นี้", 7 | "contribute": "รับสมัครผู้ร่วมพัฒนา", 8 | "title": "ข้อมูลแผนที่ที่สามารถพิมพ์ได้ - \"แผนที่กระดาษ\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "ข้อมูลแผนที่ที่ได้รับการรวบรวมจากผู้คนหลายคน", 13 | "desc_2": "เมื่อปรับให้เข้ากับพื้นที่ที่ต้องการ", 14 | "desc_3": "ข้อมูลแผนที่ที่ถูกปรับให้เหมาะสมสำหรับการพิมพ์จะแสดงขึ้น", 15 | "desc_4": "กรุณาเลือกข้อมูลตามความเหมาะสมในแต่ละช่วงเวลา", 16 | "desc_5": "พัฒนาเข้ากับกระดาษที่ใช้สำหรับการพิมพ์", 17 | "desc_6": "พิมพ์และส่งข้อมูลไปยังผู้ที่ต้องการ", 18 | "desc_7": "โปรดนำไปส่งให้!", 19 | "printed_at": "วันที่พิมพ์: " 20 | }, 21 | "PrintableMap": { 22 | "name": "ชื่อ: ", 23 | "print": "พิมพ์", 24 | "legend": "คำอธิบายสัญลักษณ์", 25 | "show_all": "แสดงทั้งหมด", 26 | "close_area_select": "ปิดการเลือกพื้นที่", 27 | "back_to_map": "กลับสู่แผนที่เดิม", 28 | "no_point_in_map": "ไม่มีจุดในแผนที่ที่กำลังแสดง", 29 | "close_list": "ปิดรายการ", 30 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 31 | }, 32 | "category": { 33 | "未分類": "ไม่ได้ระบุหมวดหมู่", 34 | "避難所": "ที่หลบภัย", 35 | "自主避難所": "ผู้อพยพไปด้วยตัวเอง", 36 | "給水所": "จุดจ่ายน้ำ", 37 | "入浴施設": "สถานที่อาบน้ำ", 38 | "携帯充電": "การชาร์จมือถือ", 39 | "無料Wi-Fi": "Wi-Fi ฟรี", 40 | "ガソリンスタンド": "ปั๊มน้ำมัน" 41 | } 42 | } -------------------------------------------------------------------------------- /locales/si.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "කඩේ සිත්", 4 | "site_desc": "ලියුම් කළ හැක්කේ 'කඩේ සිත්' නම් ඉඩම් දෙකක්", 5 | "share": "හවුල්", 6 | "about": "මෙම වෙබ්සය ගැන", 7 | "contribute": "සම්බන්ධයා ලැබීමට හොඳම නියෝජ්‍යාත්මක්", 8 | "title": "ලියුම් කළ හැක්කේ 'කඩේ සිත්'" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "සෑම මහජන මහතාක් වෙනුවෙන් එකඟ ලෙස ගොඩනැගිල්ලේ දිනා ගන්නා මාතෘකාව", 13 | "desc_2": "අවශ්‍ය කල්පයේ නිවැරදි කිරීම්ට සහාය ලැබේ", 14 | "desc_3": "මාප් තොරතුරු සහාය ලබාගත හැකි අවශ්‍යතාවයේ පෙදෙසිපත් වෙනස් වේ", 15 | "desc_4": "එය විශාලත්ව තෝරාගැනීමට", 16 | "desc_5": "මුල් පත් යතුරේ පමණක් ගන්නාගේ සහාය", 17 | "desc_6": "මුල් පත් සැකසුම් පාඨමාලාවෙන් ඉපදී ගැනීමට", 18 | "desc_7": "කරුණාකර එය එහෙම එය ගෙන එන්න!" 19 | }, 20 | "PrintableMap": { 21 | "name": "නම:", 22 | "print": "මුද්‍රණය", 23 | "legend": "සාර්ථකය", 24 | "show_all": "සියලු පෙනුම්", 25 | "close_area_select": "කල්පය තෝරනවා වස්තුව වසා", 26 | "back_to_map": "මුල් සිතියට", 27 | "no_point_in_map": "සැකසුම් මාතෘකාවේ කිසිවක් නැත", 28 | "close_list": "විස්තර වසන්න", 29 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 30 | }, 31 | "category": { 32 | "未分類": "අලුත් නොකළ", 33 | "避難所": "ප්‍රාථමික සොයාගැනීමේ ස්ථානය", 34 | "自主避難所": "ස්වාමි සොයාගැනීමේ ස්ථානය", 35 | "給水所": "ජලයෙන් සොයාගැනීමේ ස්ථානය", 36 | "入浴施設": "විශාල වැස්ස සේවා ස්ථානය", 37 | "携帯充電": "ජංගම බැටරි දැක්කාගැනීමේ ස්ථානය", 38 | "無料Wi-Fi": "නොමිලේ Wi-Fi", 39 | "ガソリンスタンド": "ගැසොලින් ගැනීමේ ස්ථාන" 40 | } 41 | } -------------------------------------------------------------------------------- /locales/my.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "စာမတ်မပေးသည့် မြေပုံ", 4 | "site_desc": "မြေပုံအချက်အလက်ကို ပုံနှိပ်နိုင်သည် \"စာမတ်မြေပုံ\"", 5 | "share": "မျှဝေရန်", 6 | "about": "ဤဆေတီအကြောင်း", 7 | "contribute": "ပြည်သူတော်တွင် ပေးဆောင်နေသည်", 8 | "title": "မြေပုံအချက်အလက်ကို ပုံနှိပ်နိုင်သည် \"စာမတ်မြေပုံ\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "မြေပုံအချက်အလက်ကို ကြည့်ရှုရန် အရာရှိ", 13 | "desc_2": "လိုအပ်တဲ့ ဒေသကြီးသို့ သတ်မှတ်ပြီး", 14 | "desc_3": "ပုံနှိပ်ပြီး ပုံသည် ပင်မယားဆယ်ပြီး ရေးနှင့် ပြုလုပ်ထားသည်", 15 | "desc_4": "ဤအချက်အလက်ကို အခြားသက်ဆို ရွေးချယ်ရန်", 16 | "desc_5": "ပုံသည် ပုံအလိုက်ကို ဖြင့်နိုင်သည်", 17 | "desc_6": "ပုံသည် စိတ်ကြည့်ပေးပြီး အခြားလူများအကြာင်းသို့", 18 | "desc_7": "အားသည် ဆက်သွယ်ပါ!" 19 | }, 20 | "PrintableMap": { 21 | "name": "အမည်: ", 22 | "print": "ပုံနှိပ်ရန်", 23 | "legend": "လယ်ကွင့်", 24 | "show_all": "အားလုံး ပြရန်", 25 | "close_area_select": "ဒေသကြီး ရွေးချယ်မှုကို ပိတ်ပင်နိုင်ရန်", 26 | "back_to_map": "နောက်ဆုံး မြေပုံသို့", 27 | "no_point_in_map": "သက်တမ်းတည်ရှိရန် မြေပုံအတွင် ဘယ်ပြန်မှာမရှိသေးပါ", 28 | "close_list": "မြေပုံတင်မည်", 29 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 30 | }, 31 | "category": { 32 | "未分類": "အများဆုံးအားဖြင့်", 33 | "避難所": "နေခြည်း", 34 | "自主避難所": "အလွန်ခြင်း နေခြည်း", 35 | "給水所": "ရေကိုက်မှုအခြေခံမှု", 36 | "入浴施設": "ရေချိုးစိုက်ချိုးများ", 37 | "携帯充電": "ဖုန်းငွေငွေ", 38 | "無料Wi-Fi": "အခမဲ့ Wi-Fi", 39 | "ガソリンスタンド": "ဂသိုယ်လမ်းရေနှူး" 40 | } 41 | } -------------------------------------------------------------------------------- /locales/vn.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "Bản đồ Giấy", 4 | "site_desc": "Bản đồ có thể in được - \"Bản đồ Giấy\"", 5 | "share": "Chia sẻ", 6 | "about": "Về trang web này", 7 | "contribute": "Đang tuyển thành viên phát triển", 8 | "title": "Bản đồ có thể in được - \"Bản đồ Giấy\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "Thông tin bản đồ được thu thập bởi nhiều người khác nhau", 13 | "desc_2": "Khi điều chỉnh vào khu vực cần thiết", 14 | "desc_3": "Thông tin bản đồ được tối ưu hóa cho việc in ấn sẽ được hiển thị", 15 | "desc_4": "Hãy chọn thông tin phù hợp với thời điểm", 16 | "desc_5": "Phù hợp để in trên giấy", 17 | "desc_6": "Hãy in và chia sẻ thông tin với những người cần nó", 18 | "desc_7": "Hãy chắc chắn gửi đến họ!", 19 | "printed_at": "Ngày in: " 20 | }, 21 | "PrintableMap": { 22 | "name": "Tên: ", 23 | "print": "In", 24 | "legend": "Chú giải", 25 | "show_all": "Hiển thị tất cả", 26 | "close_area_select": "Đóng chọn khu vực", 27 | "back_to_map": "Quay lại bản đồ gốc", 28 | "no_point_in_map": "Không có điểm nào trên bản đồ hiện tại", 29 | "close_list": "Đóng danh sách", 30 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 31 | }, 32 | "category": { 33 | "未分類": "Chưa phân loại", 34 | "避難所": "Nơi ẩn náu", 35 | "自主避難所": "Nơi tự do tự chủ ẩn náu", 36 | "給水所": "Nơi cung cấp nước", 37 | "入浴施設": "Cơ sở tắm", 38 | "携帯充電": "Sạc điện thoại di động", 39 | "無料Wi-Fi": "Wi-Fi miễn phí", 40 | "ガソリンスタンド": "Trạm xăng" 41 | } 42 | } -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/v4-font-face.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | @font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} -------------------------------------------------------------------------------- /nuxt-i18n.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | locales: [ 3 | { 4 | code: 'en', 5 | iso: 'en', 6 | name: 'English', 7 | file: 'en.json' 8 | }, 9 | { 10 | code: 'es', 11 | iso: 'es', 12 | name: 'Español', 13 | file: 'es.json' 14 | }, 15 | { 16 | code: 'hi', 17 | iso: 'hi', 18 | name: 'हिंदी', 19 | file: 'hi.json' 20 | }, 21 | { 22 | code: 'ja', 23 | iso: 'ja', 24 | name: '日本語', 25 | file: 'ja.json' 26 | }, 27 | { 28 | code: 'ko', 29 | iso: 'ko', 30 | name: '한국어', 31 | file: 'ko.json' 32 | }, 33 | { 34 | code: 'my', 35 | iso: 'my', 36 | name: 'မြန်မာ', 37 | file: 'my.json' 38 | }, 39 | { 40 | code: 'ne', 41 | iso: 'ne', 42 | name: 'नेपाली', 43 | file: 'ne.json' 44 | }, 45 | { 46 | code: 'pt', 47 | iso: 'pt', 48 | name: 'português', 49 | file: 'pt.json' 50 | }, 51 | { 52 | code: 'si', 53 | iso: 'si', 54 | name: 'සිංහල', 55 | file: 'si.json' 56 | }, 57 | { 58 | code: 'th', 59 | iso: 'th', 60 | name: 'แบบไทย', 61 | file: 'th.json' 62 | }, 63 | { 64 | code: 'tw', 65 | iso: 'tw', 66 | name: '正體中文 (繁體)', 67 | file: 'tw.json' 68 | }, 69 | { 70 | code: 'vn', 71 | iso: 'vn', 72 | name: 'Tiếng Việt', 73 | file: 'vn.json' 74 | }, 75 | { 76 | code: 'zh', 77 | iso: 'zh', 78 | name: '中文(简体)', 79 | file: 'zh.json' 80 | } 81 | ], 82 | strategy: 'prefix_except_default', 83 | defaultLocale: 'ja', 84 | lazy: true, 85 | loadLanguagesAsync: true, 86 | langDir: 'locales/' 87 | } 88 | -------------------------------------------------------------------------------- /assets/sass/_area.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .area-select { 5 | position: absolute; 6 | z-index: mixin.z(area-select); 7 | bottom: 100%; 8 | left: 50%; 9 | transform: translate(-50%, -3px); 10 | overflow: hidden; 11 | width: 98%; 12 | background-color: #fff; 13 | border-radius: 5px; 14 | height: 0; 15 | transition: height .5s; 16 | &.open { 17 | height: auto; 18 | } 19 | } 20 | 21 | .area-close { 22 | border-radius: 5px 5px 0 0; 23 | background-color: variables.$color-alpha-black; 24 | color: #fff; 25 | font-size: variables.$font-size-xs; 26 | text-align: right; 27 | padding: .5em; 28 | cursor: pointer; 29 | } 30 | 31 | .area-list-outer { 32 | overflow-y: auto; 33 | max-height: 0; 34 | transition: max-height .5s; 35 | &.open { 36 | max-height: 40vh; 37 | } 38 | } 39 | 40 | .area-list { 41 | padding: .5em; 42 | margin: 0; 43 | } 44 | 45 | .area-item { 46 | padding: .3em .5em; 47 | } 48 | 49 | .area-label { 50 | margin: .5em 1em .5em 0; 51 | } 52 | 53 | .area-input { 54 | margin-right: .3em; 55 | } 56 | 57 | .area-select-button { 58 | display: flex; 59 | align-items: center; 60 | justify-content: space-between; 61 | padding: .5em; 62 | border-radius: 5px; 63 | box-shadow: 2px 2px 4px variables.$color-gray; 64 | cursor: pointer; 65 | } 66 | 67 | .area-array-outer { 68 | display: flex; 69 | align-items: center; 70 | min-width: 0; 71 | flex: 1 1 auto; 72 | } 73 | 74 | .area-array { 75 | font-size: variables.$font-size-sm; 76 | width: calc(100% - 1em); 77 | max-width: 300px; 78 | padding: 0 .3em; 79 | white-space: nowrap; 80 | overflow: hidden; 81 | text-overflow: ellipsis; 82 | } 83 | 84 | .area-select-button-icon { 85 | flex: 0 0 1.5em; 86 | } 87 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # vuepress build output 75 | .vuepress/dist 76 | 77 | # Serverless directories 78 | .serverless 79 | 80 | # IDE / Editor 81 | .idea 82 | .editorconfig 83 | 84 | # Service worker 85 | sw.* 86 | 87 | # Mac OSX 88 | .DS_Store 89 | 90 | # Vim swap files 91 | *.swp 92 | 93 | # Playwright 94 | /test-results/ 95 | /playwright-report/ 96 | /blob-report/ 97 | /playwright/.cache/ 98 | -------------------------------------------------------------------------------- /assets/sass/_print.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | 3 | @page { 4 | size: A4; 5 | margin: 15mm 5mm 15mm; 6 | } 7 | 8 | @media print { 9 | .print-exclude { 10 | display: none !important; 11 | } 12 | :root { 13 | background-color: #fff; 14 | font-size: variables.$font-size-sm; 15 | } 16 | .layout-container { 17 | margin: 0 auto; 18 | } 19 | .layout-map-inner { 20 | display: block; 21 | } 22 | .main { 23 | flex-basis: 100% !important; 24 | max-width: 100% !important; 25 | } 26 | .main-sheet { 27 | box-shadow: none; 28 | padding: 0; 29 | } 30 | .header { 31 | position: relative; 32 | display: flex; 33 | align-items: center; 34 | justify-content: space-between; 35 | background-color: #fff; 36 | color: variables.$color-base; 37 | .title { 38 | font-size: variables.$font-size-h2; 39 | } 40 | .datetime { 41 | display: block; 42 | } 43 | .qrcode { 44 | display: block; 45 | flex: 0 0 20mm; 46 | height: 20mm; 47 | } 48 | } 49 | #map { 50 | height: 140mm; 51 | } 52 | .marker { 53 | span { 54 | display: flex !important; 55 | } 56 | } 57 | .area-select-button { 58 | box-shadow: none; 59 | } 60 | .area-array { 61 | white-space: normal; 62 | overflow: auto; 63 | max-width: 100%; 64 | } 65 | .legend-navi { 66 | position: relative; 67 | } 68 | .list-outer { 69 | max-height: none !important; 70 | } 71 | .list-section { 72 | display: block !important; 73 | } 74 | .footer { 75 | display: flex; 76 | justify-content: flex-end; 77 | border-top: 1px solid variables.$color-base; 78 | padding-top: 5mm; 79 | margin-top: 10mm; 80 | } 81 | .footer-logo { 82 | flex: 0 0 50mm; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /locales/ne.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "कागजी नक्शा", 4 | "site_desc": "नक्शा जानकारी छाप्न सकिने - \"कागजी नक्शा\"", 5 | "share": "साझा गर्नुहोस्", 6 | "about": "यो साइटको बारेमा", 7 | "contribute": "डेभेलपमेन्टमा सहयोग गर्न आवश्यक", 8 | "title": "नक्शा जानकारी छाप्न सकिने - \"कागजी नक्शा\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "विभिन्न व्यक्तिहरूद्वारा संग्रहित गरिएको नक्शा जानकारी", 13 | "desc_2": "आवश्यक क्षेत्रमा समायोजन गर्दा", 14 | "desc_3": "छाप्नका लागि श्रेष्ठ बनाइएको मानचित्र जानकारी देखाइएको छ", 15 | "desc_4": "कृपया समयका अनुसार जानकारी छनौट गर्नुहोस्", 16 | "desc_5": "छाप्ने कागजमा ठीक मिल्छ", 17 | "desc_6": "जरी जरी नक्शा जानकारी छाप्नुहोस् र आवश्यक छानविन को लागि पठाउनुहोस्", 18 | "desc_7": "कृपया यो उनीहरूलाई पठाउन सुनिश्चित गर्नुहोस्!", 19 | "printed_at": "छापिएको मिति: " 20 | }, 21 | "PrintableMap": { 22 | "name": "नाम: ", 23 | "print": "छाप्नुहोस्", 24 | "legend": "लेजेन्ड", 25 | "show_all": "सबै देखाउनुहोस्", 26 | "close_area_select": "क्षेत्र छान्नुहोस् बन्द गर्नुहोस्", 27 | "back_to_map": "मूल नक्शामा फर्किनुहोस्", 28 | "no_point_in_map": "वर्तमान नक्शामा कुनै पोइट होइन", 29 | "close_list": "सूची बन्द गर्नुहोस्", 30 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 31 | }, 32 | "category": { 33 | "未分類": "वर्गीकृत गरिएको छैन", 34 | "避難所": "सरनाइ स्थल", 35 | "自主避難所": "स्व-सरनाइ स्थल", 36 | "給水所": "पानी उपलब्ध गराउने स्थान", 37 | "入浴施設": "स्नान सुविधा", 38 | "携帯充電": "मोबाइल चार्ज", 39 | "無料Wi-Fi": "मुक्त वाई-फाई", 40 | "ガソリンスタンド": "ग्याँस स्टेशन" 41 | } 42 | } -------------------------------------------------------------------------------- /locales/hi.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "कागज़ी मानचित्र", 4 | "site_desc": "जिसे आप प्रिंट कर सकते हैं, वहां जानकारी देने वाला \"कागज़ी मानचित्र\"", 5 | "share": "साझा करें", 6 | "about": "इस साइट के बारे में", 7 | "contribute": "डेवेलपर्स की भागीदारी चाहिए", 8 | "title": "जिसे आप प्रिंट कर सकते हैं, वहां जानकारी देने वाला \"कागज़ी मानचित्र\"" 9 | }, 10 | "root": {}, 11 | "map": { 12 | "desc_1": "विभिन्न लोगों द्वारा संग्रहित मानचित्र जानकारी", 13 | "desc_2": "आवश्यक क्षेत्र में समायोजित करने पर", 14 | "desc_3": "प्रिंट के लिए समर्पित मानचित्र जानकारी प्रदर्शित होगी", 15 | "desc_4": "कृपया समय के अनुसार जानकारी का चयन करें", 16 | "desc_5": "प्रिंट करने के लिए जागरूकता बचता है", 17 | "desc_6": "उन लोगों को जो जानकारी की आवश्यकता है, उन्हें प्रिंट करें", 18 | "desc_7": "कृपया इसे भेजें!", 19 | "printed_at": "प्रिंट की तारीख: " 20 | }, 21 | "PrintableMap": { 22 | "name": "नाम: ", 23 | "print": "प्रिंट", 24 | "legend": "साक्षात्कार", 25 | "show_all": "सभी दिखाएँ", 26 | "close_area_select": "क्षेत्र चयन बंद करें", 27 | "back_to_map": "मूल मानचित्र पर वापस जाएं", 28 | "no_point_in_map": "वर्तमान में दिखाए जाने वाले मानचित्र में कोई बिंदु नहीं है", 29 | "close_list": "सूची बंद करें", 30 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-ja/{z}/{x}/{y}.png" 31 | }, 32 | "category": { 33 | "未分類": "अवर्गीकृत", 34 | "避難所": "बचाव स्थल", 35 | "自主避難所": "स्व-संगठित बचाव स्थल", 36 | "給水所": "पानी प्रदान स्थल", 37 | "入浴施設": "स्नान सुविधाएँ", 38 | "携帯充電": "मोबाइल चार्जिंग", 39 | "無料Wi-Fi": "मुफ्त वाई-फाई", 40 | "ガソリンスタンド": "गैस स्टेशन" 41 | } 42 | } -------------------------------------------------------------------------------- /components/Logo.vue: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 81 | -------------------------------------------------------------------------------- /locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "common": { 3 | "site_name": "KamiMap", 4 | "site_desc": "Paper Map for printable map information", 5 | "share": "Share", 6 | "about": "About this site", 7 | "contribute": "Welcome to contribute", 8 | "title": "Paper Map for printable map information" 9 | }, 10 | "about": { 11 | "desc": "This site is open source. If you want to contribute to this project, please visit the {githubRepo}. Everyone is welcome, and we especially invite those with JavaScript or Leaflet experience to join us.", 12 | "github_repository": "Code for Japan's Github repository" 13 | }, 14 | "root": { 15 | }, 16 | "map": { 17 | "desc_1": "Map information collected by a variety of people.", 18 | "desc_2": "When you adjust map to the areas that you need it,", 19 | "desc_3": "Map information optimized for printing will be displayed.", 20 | "desc_4": "Choose the right information for the right moment.", 21 | "desc_5": "It will fit on the printing paper just fine.", 22 | "desc_6": "Print it out and send it to people who need the information.", 23 | "desc_7": "", 24 | "printed_at": "Printed at: " 25 | }, 26 | "PrintableMap": { 27 | "name": "Name: ", 28 | "print": "Print", 29 | "legend": "Legend", 30 | "show_all": "Show all", 31 | "close_area_select": "Close area select", 32 | "back_to_map": "Back to prevues map", 33 | "no_point_in_map": "None of the points are present on the map being displayed", 34 | "close_list": "Close list", 35 | "map_url": "https://tile.openstreetmap.jp/styles/maptiler-basic-en/{z}/{x}/{y}.png" 36 | }, 37 | "category": { 38 | "未分類": "Not categorized", 39 | "避難所": "Shelter", 40 | "自主避難所": "Voluntary shelter", 41 | "給水所": "Water Supply Office", 42 | "入浴施設": "Bathing facilities", 43 | "携帯充電": "Cell phone charging", 44 | "無料Wi-Fi": "Free Wi-Fi", 45 | "ガソリンスタンド": "Gas station" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /assets/images/active_txt_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 13 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/fonts/fontawesome/css/v4-font-face.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2023 Fonticons, Inc. 5 | */ 6 | @font-face { 7 | font-family: 'FontAwesome'; 8 | font-display: block; 9 | src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } 10 | 11 | @font-face { 12 | font-family: 'FontAwesome'; 13 | font-display: block; 14 | src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } 15 | 16 | @font-face { 17 | font-family: 'FontAwesome'; 18 | font-display: block; 19 | src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); 20 | unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } 21 | 22 | @font-face { 23 | font-family: 'FontAwesome'; 24 | font-display: block; 25 | src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); 26 | unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } 27 | -------------------------------------------------------------------------------- /assets/sass/_header.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .header { 5 | position: absolute; 6 | z-index: mixin.z(header); 7 | background-color: #fff; 8 | padding: 0 1em; 9 | @include mixin.bp(md) { 10 | display: flex; 11 | align-items: center; 12 | position: fixed; 13 | bottom: 0; 14 | left: 0; 15 | right: 0; 16 | background-color: variables.$color-alpha-black; 17 | color: #fff; 18 | } 19 | .to-top { 20 | display: none; 21 | @include mixin.bp(md) { 22 | display: block; 23 | flex: 0 0 3em; 24 | padding: 0; 25 | a { 26 | color: #fff; 27 | display: block; 28 | line-height: 1.1; 29 | } 30 | } 31 | } 32 | .banner { 33 | flex: 1 1 auto; 34 | display: flex; 35 | flex-direction: row; 36 | flex-wrap: wrap; 37 | align-items: center; 38 | padding: 1em 0; 39 | @include mixin.bp(md) { 40 | padding: 0.5em 0 0.5em 0.5em; 41 | flex-wrap: nowrap; 42 | justify-content: space-between; 43 | border-left: 1px solid variables.$color-light-gray; 44 | } 45 | } 46 | .logo { 47 | width: 60%; 48 | margin-bottom: .5em; 49 | @include mixin.bp(md) { 50 | display: none; 51 | } 52 | } 53 | .title-outer { 54 | order: 1; 55 | @include mixin.bp(md) { 56 | order: -1; 57 | } 58 | } 59 | .title { 60 | font-size: variables.$font-size-base; 61 | line-height: 1.1; 62 | font-weight: normal; 63 | margin: 0; 64 | @include mixin.bp(md) { 65 | font-size: variables.$font-size-xl; 66 | } 67 | } 68 | .datetime { 69 | font-size: variables.$font-size-sm; 70 | line-height: 1.1; 71 | display: none; 72 | @include mixin.bp(md) { 73 | display: block; 74 | padding-top: .5em; 75 | } 76 | } 77 | .github-link { 78 | display: none; 79 | @include mixin.bp(md) { 80 | display: block; 81 | } 82 | } 83 | .qrcode { 84 | display: none; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /assets/sass/_map.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .map-outer { 5 | position: relative; 6 | overflow: hidden; 7 | } 8 | 9 | #map { 10 | width: 100%; 11 | height: 100vh; 12 | overflow: hidden; 13 | @include mixin.bp(md) { 14 | border: 1px solid variables.$color-base; 15 | height: 140mm; 16 | } 17 | .mapboxgl-popup { 18 | max-width: 200px; 19 | z-index: mixin.z(mapboxgl-popup); 20 | } 21 | } 22 | 23 | .marker { 24 | span { 25 | display: flex; 26 | justify-content: center; 27 | align-items: center; 28 | box-sizing: border-box; 29 | width: 40px; 30 | height: 40px; 31 | background: #555; 32 | border-radius: 0 70% 70%; 33 | box-shadow: 0 0 2px #000; 34 | cursor: pointer; 35 | transform-origin: 0 0; 36 | transform: rotateZ(-135deg); 37 | &::after { 38 | display: block; 39 | content: ''; 40 | position: absolute; 41 | background: #FFF; 42 | top: 50%; 43 | left: 50%; 44 | width: 36px; 45 | height: 36px; 46 | border-radius: 50%; 47 | transform: translate(-50%, -50%); 48 | z-index: mixin.z(marker); 49 | } 50 | &:not(.show) { 51 | display: none; 52 | } 53 | } 54 | .number { 55 | transform: rotateZ(135deg); 56 | width: 30px; 57 | height: 30px; 58 | line-height: 30px; 59 | font-size: 14px; 60 | text-align: center; 61 | border-radius: 50%; 62 | z-index: mixin.z(marker-number); 63 | } 64 | i { 65 | position: absolute; 66 | right: 10px; 67 | bottom: -12px; 68 | z-index: mixin.z(marker-icon); 69 | width: 22px; 70 | height: 22px; 71 | border-radius: 50%; 72 | transform: rotateZ(135deg); 73 | color: #FFF; 74 | border: 1px solid #FFF; 75 | &::before { 76 | position: absolute; 77 | top: 50%; 78 | left: 50%; 79 | color: #fff; 80 | text-align: center; 81 | line-height: 1.25; 82 | transform: translateY(-50%) translateX(-50%); 83 | } 84 | &.fa-plug, 85 | &.fa-wifi { 86 | transform: rotateZ(-180deg); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /assets/sass/_legend.scss: -------------------------------------------------------------------------------- 1 | @use "mixin"; 2 | @use "variables"; 3 | 4 | .legend-navi { 5 | position: absolute; 6 | z-index: mixin.z(legend-navi); 7 | bottom: 0; 8 | width: 100%; 9 | background-color: #fff; 10 | @include mixin.bp(md) { 11 | position: relative; 12 | } 13 | } 14 | 15 | .legend-close { 16 | display: none; 17 | position: absolute; 18 | z-index: mixin.z(legend-close); 19 | bottom: 0; 20 | width: 100%; 21 | background-color: variables.$color-alpha-black; 22 | color: #fff; 23 | font-size: variables.$font-size-xs; 24 | text-align: right; 25 | padding: .5em; 26 | cursor: pointer; 27 | &.open { 28 | display: block; 29 | } 30 | @include mixin.bp(md) { 31 | display: none; 32 | position: relative; 33 | &.open { 34 | display: none; 35 | } 36 | } 37 | } 38 | 39 | .legend-navi-inner { 40 | display: flex; 41 | align-items: center; 42 | } 43 | 44 | .legend-navi-icon { 45 | flex: 0 0 3.5em; 46 | padding: .3em; 47 | opacity: .5; 48 | cursor: auto; 49 | &.active { 50 | opacity: 1; 51 | cursor: pointer; 52 | } 53 | } 54 | 55 | .legend-navi-button { 56 | width: 2.75rem; 57 | height: 2.75rem; 58 | line-height: 2.75rem; 59 | text-align: center; 60 | border-radius: 5px; 61 | box-shadow: 2px 2px 4px variables.$color-gray; 62 | } 63 | 64 | .legend-navi-img { 65 | padding: 3px; 66 | vertical-align: middle; 67 | } 68 | 69 | .legend-list-outer { 70 | flex: 1 1 auto; 71 | } 72 | 73 | .legend-list { 74 | display: flex; 75 | flex-direction: row; 76 | flex-wrap: nowrap; 77 | padding: .3em; 78 | margin: .5em 0; 79 | } 80 | 81 | .legend-item { 82 | margin-right: .5em; 83 | } 84 | 85 | .legend-mark { 86 | display: block; 87 | width: 2.75rem; 88 | height: 2.75rem; 89 | line-height: 2.75rem; 90 | text-align: center; 91 | border-radius: 50%; 92 | box-shadow: 2px 2px 2px variables.$color-gray; 93 | cursor: pointer; 94 | i { 95 | font-size: 1.25em; 96 | color: #fff; 97 | } 98 | &:not(.open) { 99 | opacity: .5; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /dim/data_files/17003_石川県_公衆無線LANアクセスポイント一覧/170003_public_wireless_lan.csv: -------------------------------------------------------------------------------- 1 | 全国地方公共団体コード,法人番号,ID,地方公共団体名,名称,名称_カナ,名称_英語,所在地_全国地方公共団体コード,町字ID,所在地_連結表記,所在地_都道府県,所在地_市区町村,所在地_町字,所在地_番地以下,建物名等(方書),緯度,経度,設置者,電話番号,内線番号,連絡先メールアドレス,連絡先FormURL,連絡先備考(その他、SNSなど),郵便番号,SSID,提供エリア,URL,備考 2 | 170003,,EE0000000001,石川県,金沢城公園,カナザワジョウコウエン,Kanazawa Castle Park,172014,,石川県金沢市丸の内1-1金沢城公園,石川県,金沢市,丸の内,1-1,金沢城公園,36.5661,136.65886,,,,,,,,,,https://www.pref.ishikawa.jp/siro-niwa/kanazawajou/index.html, 3 | 170003,,EE0000000002,石川県,兼六園,ケンロクエン,Kenroku-en Garden,172014,,石川県金沢市兼六町1-4兼六園,石川県,金沢市,兼六町,1,兼六園,36.56231,136.66268,,,,,,,,,,https://www.pref.ishikawa.jp/siro-niwa/kenrokuen/index.html, 4 | 170003,,EE0000000003,石川県,石川県政記念しいのき迎賓館,イシカワケンセイキネンシイノキゲイヒンカン,"Shiinoki Cultural Complex, Ishikawa Prefecture",172014,,石川県金沢市広坂2-1-1石川県政記念しいのき迎賓館,石川県,金沢市,広坂,2-1-1,石川県政記念しいのき迎賓館,36.56263,136.65784,,,,,,,,,,https://www.shiinoki-geihinkan.jp/event/index.cgi, 5 | 170003,,EE0000000004,石川県,石川四高記念文化交流館,イシカワシコウキネンブンカコウリュウカン,"The Fourth High School Memorial Museum of Cultural Exchange, Ishikawa",172014,,石川県金沢市広坂2-2-5石川四高記念文化交流館,石川県,金沢市,広坂,2-2-5,石川四高記念文化交流館,36.56272,136.6558,,,,,,,,,,https://www.pref.ishikawa.jp/shiko-kinbun/, 6 | 170003,,EE0000000005,石川県,石川県立美術館,イシカワケンリツビジュツカン,Ishikawa Prefectural Museum of Art,172014,,石川県金沢市出羽町2-1石川県立美術館,石川県,金沢市,出羽町,2-1,石川県立美術館,36.56026,136.6612,,,,,,,,,,https://www.ishibi.pref.ishikawa.jp/, 7 | 170003,,EE0000000006,石川県,石川県立歴史博物館,イシカワケンリツレキシハクブツカン,Ishikawa Prefectural Museum of History,172014,,石川県金沢市出羽町3-1石川県立歴史博物館,石川県,金沢市,出羽町,3-1,石川県立歴史博物館,36.55881,136.66292,,,,,,,,,,https://ishikawa-rekihaku.jp/, 8 | 170003,,EE0000000007,石川県,石川県立能楽堂 ,イシカワケンリツノウガクドウ,Ishikawa Prefectural Noh Theater,172014,,石川県金沢市石引4-18-3石川県立能楽堂,石川県,金沢市,石引,4-18-3,石川県立能楽堂,36.55978,136.66326,,,,,,,,,,https://noh-theater.jp/, 9 | 170003,,EE0000000008,石川県,いしかわ百万石物語江戸本店,イシカワヒャクマンゴクモノガタリエドホンテン,Ishikawa Hyakumangoku Shop,131024,,東京都中央区銀座2-2-18TH銀座ビル,東京都,中央区,銀座,2-2-18,TH銀座ビル,35.67498,139.76572,,,,,,,,,,https://100mangokushop.jp/, 10 | 170003,,EE0000000009,石川県,石川県庁,イシカワケンチョウ,Ishikawa Prefectural Government Office,172014,,石川県金沢市鞍月1-1石川県庁,石川県,金沢市,鞍月,1-1,石川県庁,36.59493,136.62568,,,,,,,,,,https://www.pref.ishikawa.lg.jp/, 11 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import globals from 'globals'; 2 | 3 | const importPlugin = async (name) => (await import(name)).default; 4 | 5 | /** @type {import('eslint').Linter.FlatConfig[]} */ 6 | const config = async () => { 7 | return [ 8 | // Ignore patterns 9 | { 10 | ignores: [ 11 | 'node_modules/**', 12 | 'dist/**', 13 | '.nuxt/**', 14 | 'coverage/**', 15 | '*.min.js', 16 | ], 17 | }, 18 | // Plugin rules 19 | { 20 | plugins: { 21 | import: await importPlugin('eslint-plugin-import'), 22 | vue: await importPlugin('eslint-plugin-vue'), 23 | }, 24 | rules: {}, 25 | }, 26 | // Default config for all files 27 | { 28 | languageOptions: { 29 | ecmaVersion: 2020, 30 | sourceType: 'module', 31 | globals: { 32 | ...globals.browser, 33 | ...globals.node, 34 | ...globals.jest, 35 | }, 36 | parserOptions: { 37 | ecmaFeatures: { 38 | jsx: true, 39 | }, 40 | }, 41 | }, 42 | files: ['**/*.js', '**/*.ts'], 43 | rules: { 44 | 'no-undef': 'error', 45 | 'no-unused-vars': 'warn', 46 | 'no-console': 'warn', 47 | }, 48 | }, 49 | // Vue files 50 | { 51 | files: ['**/*.vue'], 52 | languageOptions: { 53 | parser: await importPlugin('vue-eslint-parser'), 54 | parserOptions: { 55 | ecmaVersion: 2020, 56 | sourceType: 'module', 57 | }, 58 | }, 59 | }, 60 | // TypeScript source files 61 | { 62 | files: ['**/*.ts'], 63 | languageOptions: { 64 | parser: await importPlugin('@typescript-eslint/parser'), 65 | parserOptions: { 66 | ecmaVersion: 2020, 67 | sourceType: 'module', 68 | project: './tsconfig.json', // tsconfig.json がある場所 69 | }, 70 | }, 71 | }, 72 | // TypeScript declaration files 73 | { 74 | files: ['**/*.d.ts'], 75 | languageOptions: { 76 | parser: await importPlugin('@typescript-eslint/parser'), 77 | parserOptions: { 78 | ecmaVersion: 2020, 79 | sourceType: 'module', 80 | }, 81 | }, 82 | }, 83 | ]; 84 | }; 85 | 86 | export default await config(); -------------------------------------------------------------------------------- /assets/sass/_mixin.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:map'; 2 | @use 'sass:list'; 3 | @use 'variables'; 4 | 5 | // ----------------------------------------------------------------- 6 | // Media Queries (Variables for gridlex is required) 7 | // ----------------------------------------------------------------- 8 | @mixin bp($breakpoint) { 9 | $query: map.get(variables.$gl-mq-list, $breakpoint); 10 | @if $query != null { 11 | @media (variables.$gl-mq-width: #{list.nth($query, 1)}) { 12 | @content; 13 | } 14 | } 15 | } 16 | 17 | // ----------------------------------------------------------------- 18 | // icon font 19 | // ----------------------------------------------------------------- 20 | @mixin icon-font($font-name) { 21 | content: attr(data-icon); 22 | font-family: quote($font-name); 23 | font-weight: bold; 24 | font-style: normal; 25 | font-size: 1em; 26 | color: currentColor; 27 | display: inline-block; 28 | width: 1em; 29 | text-align: center; 30 | vertical-align: middle; 31 | /* Support for all WebKit browsers. */ 32 | -webkit-font-smoothing: antialiased; 33 | /* Support for Firefox. */ 34 | -moz-osx-font-smoothing: grayscale; 35 | /* Support for IE. */ 36 | font-feature-settings: 'liga'; 37 | } 38 | 39 | // ----------------------------------------------------------------- 40 | // aspect ratio box 41 | // ----------------------------------------------------------------- 42 | @mixin aspect-ratio($width, $height-percentage) { 43 | position: relative; 44 | width: $width; 45 | &::before { 46 | content: ''; 47 | display: block; 48 | padding-top: $height-percentage; 49 | } 50 | > * { 51 | position: absolute; 52 | top: 0; 53 | left: 0; 54 | width: 100%; 55 | height: 100%; 56 | } 57 | } 58 | 59 | // ----------------------------------------------------------------- 60 | // z-index 61 | // ----------------------------------------------------------------- 62 | $z-map: ( 63 | marker, 64 | marker-number, 65 | marker-icon, 66 | mapboxgl-popup, 67 | area-select, 68 | legend-navi, 69 | legend-close, 70 | header, 71 | footer, 72 | modal-background, 73 | modal 74 | ); 75 | 76 | @function z($name) { 77 | @return list.index($z-map, $name); 78 | } 79 | -------------------------------------------------------------------------------- /assets/config/2021-shizuoka-izusan.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id":"2021-shizuoka-izusan", 3 | "map_title":"2021年 静岡県熱海市伊豆山 土砂崩れ 災害情報", 4 | "map_title_en":"2021 Landslide at Izusan, Atami, Shizuoka", 5 | "map_description":"", 6 | "map_description_en":"", 7 | "map_image": null, 8 | "sources": [ 9 | { 10 | "id" : "shizuoka-izusan", 11 | "url" : "https://script.google.com/macros/s/AKfycbw0D0AjIFPBGbBXj3Zr5X1j_34fwIj8RSflwc6EJrDp97pMdRRnyNcMOOHvuRHZOslJdg/exec?confirmed=true", 12 | "type" : "geojson", 13 | "title" : "2021年 静岡県熱海市伊豆山 土砂崩れ 災害情報", 14 | "title_en" : "2021 Landslide at Izusan, Atami, Shizuoka", 15 | "show" : true 16 | } 17 | ], 18 | "default_hash": "35.15658910678265,138.91779233722173-35.08428585053625,139.2314565974297", 19 | "center" : [139.055633, 35.1208872], 20 | "type":"geojson", 21 | "layer_settings":{ 22 | "未分類": { 23 | "name": "未分類", 24 | "name_en": "Not categorized", 25 | "class": "layer_not_categorized", 26 | "color": "#C0C0C0", 27 | "bg_color": "#808080" 28 | }, 29 | "避難所": { 30 | "name": "避難所", 31 | "name_en": "Shelter", 32 | "color": "#276445", 33 | "bg_color": "#A4C1B0", 34 | "icon_class": "fas fa-street-view", 35 | "class": "layer_shelter" 36 | }, 37 | "給水所": { 38 | "name": "給水所", 39 | "name_en": "Water supply station", 40 | "color": "#001D96", 41 | "bg_color": "#1CA3EA", 42 | "icon_class": "fas fa-tint", 43 | "class": "layer_water" 44 | }, 45 | "車両通行止め": { 46 | "name": "車両通行止め", 47 | "name_en": "Road closed", 48 | "color": "#ff0000", 49 | "bg_color": "#ff0080", 50 | "icon_class": "fas fa-ban", 51 | "class": "layer_water" 52 | }, 53 | "鉄道運行見合わせ": { 54 | "name": "鉄道運行見合わせ", 55 | "name_en": "Railway operation suspension", 56 | "color": "#ff0000", 57 | "bg_color": "#ff0080", 58 | "icon_class": "fas fa-ban", 59 | "class": "layer_water" 60 | }, 61 | "入浴施設": { 62 | "name": "入浴施設", 63 | "name_en": "Bathing facility", 64 | "color": "#c43895", 65 | "bg_color": "#f9b3e2", 66 | "icon_class": "fas fa-shower", 67 | "class": "layer_shower" 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /assets/config/2021-geojson-test.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id":"2021-geojson-test", 3 | "map_title":"GHP2020 デモ", 4 | "map_title_en":"GHP2020 Demo", 5 | "map_description":"", 6 | "map_image": null, 7 | "sources": [ 8 | { 9 | "id" : "test", 10 | "url" : "https://script.googleusercontent.com/macros/echo?user_content_key=_6_ZR0XLL0MbaI41b7arw1tKJ44ZRMzJXFJQgYMfmfqp-E5cBnQIhZwUQmD7bjdymn9B2TyvkttH7Lt_J_MeCymrpWuQcL-wm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnEQtBr2DXtd2VVZ6e7KTde4_k47hKKS_Llyb1VlE15EZ8qun0TIBV1jJ2FWGfRqnKT0BdYNs3pinvJsw0wqpxiI&lib=MY-PLI9PNsbIhESkFzgRhtgxmTEkGC2HD", 11 | "type" : "geojson", 12 | "title" : "GHP2020デモ用GeoJSON", 13 | "title_en" : "GHP2020 Demo GeoJSON", 14 | "show" : true 15 | } 16 | ], 17 | "default_hash": "36.40706898962824,139.00427694616945-35.6385475171373,140.277266400681534", 18 | "center" : [139.42620262933877, 35.93546870323782], 19 | "type":"geojson", 20 | "layer_settings":{ 21 | "未分類": { 22 | "class": "layer_not_categorized", 23 | "color": "#C0C0C0", 24 | "bg_color": "#808080" 25 | }, 26 | "自主避難所": { 27 | "name": "自主避難所", 28 | "name_en": "Voluntary shelter", 29 | "color": "#276445", 30 | "bg_color": "#A4C1B0", 31 | "icon_class": "fas fa-street-view", 32 | "class": "layer_temporary_houses" 33 | }, 34 | "給水所": { 35 | "color": "#001D96", 36 | "bg_color": "#1CA3EA", 37 | "icon_class": "fas fa-tint", 38 | "class": "layer_water" 39 | }, 40 | "入浴施設": { 41 | "color": "#c43895", 42 | "bg_color": "#f9b3e2", 43 | "icon_class": "fas fa-shower", 44 | "class": "layer_shower" 45 | }, 46 | "携帯充電": { 47 | "color": "#6D4615", 48 | "bg_color": "#C1B17E", 49 | "icon_class": "fas fa-plug", 50 | "class": "layer_charger" 51 | }, 52 | "駅": { 53 | "name": "駅", 54 | "name_en": "Station", 55 | "color": "#C0C0C0", 56 | "bg_color": "#808080", 57 | "icon_class": "fas fa-street-view", 58 | "class": "layer_temporary_houses" 59 | }, 60 | "公園": { 61 | "name": "公園", 62 | "name_en": "Park", 63 | "color": "#992222", 64 | "bg_color": "#CA9491", 65 | "icon_class": "fas fa-heart", 66 | "class": "layer_gs_ok" 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | // ----------------------------------------------------------------- 2 | // Color 3 | // ----------------------------------------------------------------- 4 | $color-base: #000; 5 | $color-light-gray: #626262; 6 | $color-gray: #b5b5b5; 7 | $color-accent: #263694; 8 | $color-alpha-black: rgba(0,0,0,.9); 9 | 10 | // ----------------------------------------------------------------- 11 | // Font 12 | // ----------------------------------------------------------------- 13 | $font-size-base: 1rem; 14 | $font-size-xl: ($font-size-base * 1.75); 15 | $font-size-lg: ($font-size-base * 1.25); 16 | $font-size-sm: ($font-size-base * .875); 17 | $font-size-xs: ($font-size-base * .75); 18 | $font-size-h1: ($font-size-base * 1.8); 19 | $font-size-h2: ($font-size-base * 1.5); 20 | $font-size-h3: ($font-size-base * 1.2); 21 | 22 | @font-face { 23 | font-family: "MyYuGothic"; 24 | font-weight: normal; 25 | src: local("YuGothic-Medium"), /* Postscript name */ 26 | local("Yu Gothic Medium"), /* for Chrome */ 27 | local("YuGothic-Regular"); /* Mediumがない場合 */ 28 | } 29 | @font-face { 30 | font-family: "MyYuGothic"; 31 | font-weight: bold; 32 | src: local("YuGothic-Bold"), /* Postscript name */ 33 | local("Yu Gothic Bold"); /* for Chrome */ 34 | } 35 | 36 | $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Avenir Next", "Avenir", "Segoe UI", "Lucida Grande", "Helvetica Neue", "Helvetica", "Fira Sans", "Roboto", "Noto", "Droid Sans", "Cantarell", "Oxygen", "Ubuntu", "Franklin Gothic Medium", "Century Gothic", "Liberation Sans", MyYuGothic, YuGothic, "ヒラギノ角ゴ ProN W3", "Hiragino Kaku Gothic ProN", Arial, "メイリオ", Meiryo, sans-serif; 37 | 38 | // ----------------------------------------------------------------- 39 | // Base 40 | // ----------------------------------------------------------------- 41 | $root-background-color: #eee; 42 | $root-color: $color-base; 43 | $root-font-family: $font-family-sans-serif; 44 | $root-font-size: 100%; 45 | $root-line-height: 1.75; 46 | $root-box-sizing: border-box; 47 | 48 | // ----------------------------------------------------------------- 49 | // Variables for gridlex 50 | // ----------------------------------------------------------------- 51 | $gl-gutter: 1.5em; 52 | $gl-gutter-vertical: 1.5em; 53 | $gl-mq-width: 'min-width'; 54 | $gl-mq-list: ( 55 | xl: 93em, 56 | lg: 75em, 57 | md: 52.625em, 58 | sm: 48em, 59 | xs: 35.5em 60 | ); 61 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, devices } from '@playwright/test'; 2 | 3 | /** 4 | * Read environment variables from file. 5 | * https://github.com/motdotla/dotenv 6 | */ 7 | // require('dotenv').config(); 8 | 9 | /** 10 | * See https://playwright.dev/docs/test-configuration. 11 | */ 12 | export default defineConfig({ 13 | testDir: './test-e2e', 14 | /* Run tests in files in parallel */ 15 | fullyParallel: true, 16 | /* Fail the build on CI if you accidentally left test.only in the source code. */ 17 | forbidOnly: !!process.env.CI, 18 | /* Retry on CI only */ 19 | retries: process.env.CI ? 2 : 0, 20 | /* Opt out of parallel tests on CI. */ 21 | workers: process.env.CI ? 1 : undefined, 22 | /* Reporter to use. See https://playwright.dev/docs/test-reporters */ 23 | reporter: 'html', 24 | /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ 25 | use: { 26 | /* Base URL to use in actions like `await page.goto('/')`. */ 27 | // baseURL: 'http://127.0.0.1:3000', 28 | 29 | /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ 30 | trace: 'on-first-retry', 31 | }, 32 | 33 | /* Configure projects for major browsers */ 34 | projects: [ 35 | { 36 | name: 'chromium', 37 | use: { ...devices['Desktop Chrome'] }, 38 | }, 39 | 40 | // { 41 | // name: 'firefox', 42 | // use: { ...devices['Desktop Firefox'] }, 43 | // }, 44 | 45 | // { 46 | // name: 'webkit', 47 | // use: { ...devices['Desktop Safari'] }, 48 | // }, 49 | 50 | /* Test against mobile viewports. */ 51 | // { 52 | // name: 'Mobile Chrome', 53 | // use: { ...devices['Pixel 5'] }, 54 | // }, 55 | // { 56 | // name: 'Mobile Safari', 57 | // use: { ...devices['iPhone 12'] }, 58 | // }, 59 | 60 | /* Test against branded browsers. */ 61 | // { 62 | // name: 'Microsoft Edge', 63 | // use: { ...devices['Desktop Edge'], channel: 'msedge' }, 64 | // }, 65 | // { 66 | // name: 'Google Chrome', 67 | // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, 68 | // }, 69 | ], 70 | 71 | /* Run your local dev server before starting the tests */ 72 | // webServer: { 73 | // command: 'npm run start', 74 | // url: 'http://127.0.0.1:3000', 75 | // reuseExistingServer: !process.env.CI, 76 | // }, 77 | }); 78 | -------------------------------------------------------------------------------- /assets/config/2019-chiba-typhoon-15.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id":"2019-chiba-typhoon-15", 3 | "map_title":"印刷できる台風災害支援情報マップ(千葉県)", 4 | "map_title_en":"Printable Typhoon Disaster Relief Information Map (Chiba Prefecture)", 5 | "map_description":"SNSで流れる給水所等の情報をネットを見れない地域の人にも伝えられるよう、印刷に最適化したマップです。マップを必要な地域のところに調整すると、A4サイズにちょうどよく印刷され、かつ必要な場所の情報がリストとして表示されます。(GS・給水・避難所・充電・無料Wifi) ぜひ印刷して必要な人に届けてあげてください!", 6 | "map_image": "ogp_2019-chiba-typhoon-15.png", 7 | "sources": [ 8 | { 9 | "id" : "chiba", 10 | "url" : "https://www.google.com/maps/d/kml?mid=18v4csEC-qPW_aeXhEnuzgMfUAqWcbF5q&forcekml=1", 11 | "type" : "kml", 12 | "title" : "2019千葉台風15号", 13 | "show" : true 14 | } 15 | ], 16 | "default_hash": "35.034970230243786,139.83536606997205-34.998870264553034,139.90144296563784", 17 | "center" : [139.83536606997205, 35.034970230243786], 18 | "type":"KML", 19 | "layer_settings":{ 20 | "GS(赤:無事)": { 21 | "name": "GS(赤:無事)", 22 | "name_en": "GS(red: safety)", 23 | "color": "#992222", 24 | "bg_color": "#CA9491", 25 | "icon_class": "fas fa-heart", 26 | "class": "layer_gs_ok" 27 | }, 28 | "GS (黒点:未確認)": { 29 | "name": "GS (黒点:未確認)", 30 | "name_en": "GS(black: unconfirmed)", 31 | "color": "#4F4F5A", 32 | "bg_color": "#B7B7BE", 33 | "icon_class": "fas fa-eye-slash", 34 | "class": "layer_gs_undefined" 35 | }, 36 | "給水所_(千葉市・県指定除く)": { 37 | "name": "給水所_(千葉市・県指定除く)", 38 | "name_en": "Water Supply Office(Chiba Pref, without prefectural designation)", 39 | "color": "#285797", 40 | "bg_color": "#A3BBDA", 41 | "icon_class": "fas fa-tint", 42 | "class": "layer_water_chibacity" 43 | }, 44 | "避難所": { 45 | "name": "避難所", 46 | "name_en": "shelter", 47 | "color": "#276445", 48 | "bg_color": "#A4C1B0", 49 | "icon_class": "fas fa-street-view", 50 | "class": "layer_temporary_houses" 51 | }, 52 | "携帯充電_ほか": { 53 | "name": "携帯充電_ほか", 54 | "name_en": "Cell phone charging (Other)", 55 | "color": "#6D4615", 56 | "bg_color": "#C1B17E", 57 | "icon_class": "fas fa-plug", 58 | "class": "layer_charger" 59 | }, 60 | "無料Wifi" : { 61 | "name": "無料Wifi", 62 | "name_en": "Free Wi-Fi", 63 | "color": "#604490", 64 | "bg_color": "#BDB1D8", 65 | "icon_class": "fas fa-wifi", 66 | "class": "layer_wifi" 67 | } 68 | } 69 | } 70 | 71 | -------------------------------------------------------------------------------- /test-unit/README.md: -------------------------------------------------------------------------------- 1 | [Vue コンポーネントを jest でテストできるようにする](https://github.com/codeforjapan/mapprint/issues/319) 2 | 3 | ## 要望の概要 | What 4 | 5 | Vue に対してのテストコード環境を構築する。 6 | 個別のテスト作成は別 issue で取り組む。 7 | 8 | ## なぜやるのか | Why 9 | 10 | 本リポジトリは1~2年おきに発生する大規模な災害時に活用されている。 11 | 災害発生の頻度と利用しているライブラリのバージョンサイクルのズレが発生し、まず最初にバージョンアップなどを行う必要がでてくる。そういった際にテストコードがあることでデグレードのリスクを抑えて複数人によるコントリビューションができる環境を準備したい。 12 | 13 | ## どうやるのか | How 14 | 15 | ### テストライブラリ 16 | 17 | Vue2 と Vue3 ではテストライブラリのバージョンが異なる。Vue2 に合わせる。 18 | テスト用にインストールしたライブラリは以下。 19 | 20 | ``` 21 | "@babel/core": "^7.23.7", 22 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 23 | "@babel/plugin-transform-async-to-generator": "^7.23.3", 24 | "@babel/plugin-transform-runtime": "^7.23.7", 25 | "@babel/preset-env": "^7.23.7", 26 | "@babel/preset-typescript": "^7.23.3", 27 | "@nuxt/test-utils": "^3.9.0", 28 | "@types/jest": "^29.5.11", 29 | "@vue/compiler-dom": "^3.4.5", 30 | "@vue/server-renderer": "^3.4.5", 31 | "@vue/server-test-utils": "1", 32 | "@vue/test-utils": "1", 33 | "@vue/vue2-jest": "28", 34 | "babel-core": "^7.0.0-bridge.0", 35 | "babel-jest": "^29.7.0", 36 | "babel-preset-vue": "^2.0.2", 37 | "jest": "^29.7.0", 38 | "jest-dom": "^4.0.0", 39 | "jest-environment-jsdom": "^29.7.0", 40 | "jest-serializer-vue": "^3.1.0", 41 | "jsdom": "^23.0.1", 42 | "jsdom-global": "^3.0.2", 43 | "ts-jest": "^29.1.1", 44 | "typescript": "^5.3.3" 45 | ``` 46 | 47 | #### 注意点1 48 | 49 | vue2-jest@28 を指定すること。transform の記載方法がバージョンによって異なる。 50 | 51 | https://github.com/vuejs/vue-jest 52 | 53 | #### 注意点2 54 | 55 | 以下2つは合わせること 56 | @vue/test-utils@1 57 | @vue/server-test-utils@1 58 | 59 | https://github.com/vuejs/vue-test-utils/ 60 | 61 | ### 設定ファイル郡 62 | 63 | - jest.config.js : Vue2 で jest を動かすための設定を書いています。 64 | - .babelrc : jest 実行時にバベルで ECMAScript から CommonJS に変換しています。 65 | 66 | ### テスト実施方法 67 | 68 | テストコマンドを実行してください。 69 | 70 | ``` 71 | $ yarn test 72 | 73 | yarn run v1.22.17 74 | $ jest 75 | PASS test/components/Logo.vue.spec.js 76 | PASS test/lib/displayHelper.spec.js 77 | 78 | Test Suites: 2 passed, 2 total 79 | Tests: 4 passed, 4 total 80 | Snapshots: 0 total 81 | Time: 5.031 s 82 | Ran all test suites. 83 | Done in 6.35s. 84 | ``` 85 | 86 | ### サンプルテストコード 87 | 88 | - js/ts ファイル :  jest のみ利用。関数に対してテストコードを書きます。 89 | - 例)test/lib/displayHelper.spec.js 90 | - vue ファイル : @vue/test-utils を利用。Vue がレンダリングする仮想 DOM (\*1)に対してテストコードを書きます。 91 | - 例)test/components/Logo.vue.spec.js 92 | 93 | (\*1)jest.config.js にて「testEnvironment: 'jsdom'」を指定して仮想 DOM を jest から扱えるようにしています。 94 | -------------------------------------------------------------------------------- /createtiles.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | const axios = require('axios') 4 | const shell = require('shelljs') 5 | 6 | const TARGET_DIR = './dist/data/' 7 | const CONFIG_DIR = './assets/config/' 8 | 9 | // create target directory 10 | if (!fs.existsSync(TARGET_DIR)) { 11 | fs.mkdirSync(TARGET_DIR, { recursive: true }) 12 | } 13 | 14 | const _make_tilejson = (dir, base_name) => { 15 | const metadata = require(`${dir}${base_name}/metadata.json`) 16 | // console.log(metadata) 17 | const vector_layers = JSON.parse(metadata.json) 18 | delete metadata.json 19 | metadata.vector_layers = vector_layers.vector_layers 20 | metadata.center = metadata.center.split(',').map(v => parseFloat(v)) 21 | metadata.bounds = metadata.bounds.split(',').map(v => parseFloat(v)) 22 | metadata.pixel_scale = 256 23 | metadata.tilejson = '2.0.0' 24 | metadata.tile = [ 25 | `https://kamimap.com/data/${base_name}/zxy/{z}/{x}/{y}.pbf` 26 | ] 27 | fs.writeFile(`${dir}${base_name}/tilejson.json`, JSON.stringify(metadata), (err) => { 28 | if (err) { 29 | console.log('Wrighting tilejson.json failed: ' + err) 30 | } 31 | }) 32 | } 33 | 34 | // load config 35 | const list = require(`${CONFIG_DIR}list.json`) 36 | // eslint-disable-next-line array-callback-return 37 | list.map((name) => { 38 | // load map config 39 | console.log(`loading ${CONFIG_DIR}${name}`) 40 | const config = require(`${CONFIG_DIR}${name}`) 41 | const funcs = config.sources.map((source) => { 42 | return new Promise((resolve, reject) => { 43 | // download source file 44 | if (!fs.existsSync(`${TARGET_DIR}${config.map_id}`)) { 45 | fs.mkdirSync(`${TARGET_DIR}${config.map_id}`, { recursive: true }) 46 | } 47 | console.log(`downloading ${source.url}...`) 48 | axios.get(source.url).then((response) => { 49 | // currently, this is supporting only kml 50 | const file_path = `${TARGET_DIR}${config.map_id}/${source.id}.${source.type}` 51 | fs.writeFile(file_path, response.data, (err) => { 52 | // failed 53 | if (err) { 54 | console.log('Downloading kml file failed' + err) 55 | reject(err) 56 | } 57 | // success 58 | else { 59 | console.log(`Downloaded ${source.id}.${source.type}`) 60 | // convert kml files to xyz tile 61 | shell.exec(`./create_tiles.sh ${file_path}`) 62 | resolve() 63 | } 64 | }) 65 | }) 66 | }) 67 | }) 68 | Promise.all(funcs).then(() => { 69 | shell.exec(`./merge_tiles.sh ${name} ${TARGET_DIR}`) 70 | const base_name = path.basename(name, '.json') 71 | _make_tilejson(TARGET_DIR, base_name) 72 | }) 73 | }) 74 | -------------------------------------------------------------------------------- /dim/data_files/17205_石川県_珠洲市_避難施設_指定避難所/suzusiteishelter.csv: -------------------------------------------------------------------------------- 1 | id,緯度,経度,ジャンル1,サブジャンル1,ジャンル2,サブジャンル2,名称,概要,郵便番号,住所,電話番号,Fax番号,E-mail,営業時間,定休日,料金,備考1,備考2,備考3,リンク 2 | 1,37.396942,137.237662,消防・防災,指定避難所,,,宝立小学校 体育館,,927-1223,珠洲市宝立町鵜島4字30番地,,,,,,,収容人数:310,,, 3 | 2,37.403237,137.237993,消防・防災,指定避難所,,,宝立小中学校,,927-1222,珠洲市宝立町鵜飼丑部83番地,0768-84-1106,,,,,,収容人数:530,,, 4 | 3,37.427237,137.249932,消防・防災,指定避難所,,,上戸小学校,,927-1216 ,珠洲市上戸町寺社5字74番地の2,0768-82‐0168,,,,,,収容人数:350,,, 5 | 4,37.439955,137.259781,消防・防災,指定避難所,,,飯田小学校,,927-1214 ,珠洲市飯田町19部61番地,0768-82‐0044,,,,,,収容人数:650,,, 6 | 5,37.44656,137.272807,消防・防災,指定避難所,,,緑丘中学校,,927-1213,珠洲市野々江町6の部1番地,0768-82‐0250,,,,,,収容人数:750,,, 7 | 6,37.443949,137.281698,消防・防災,指定避難所,,,直小学校,,927-1213,珠洲市野々江町ニ部38番地の2,0768-82‐0313,,,,,,収容人数:260,,, 8 | 7,37.445435,137.296505,消防・防災,指定避難所,,,正院小学校,,927-1205 ,珠洲市正院町川尻1部39番地,0768-82‐0404,,,,,,収容人数:400,,, 9 | 8,37.442814,137.313529,消防・防災,指定避難所,,,蛸島小学校,,927-1204 ,珠洲市蛸島町ワ部69番地,0768-82‐0524,,,,,,収容人数:340,,, 10 | 9,37.451054,137.358934,消防・防災,指定避難所,,,里山里海自然学校(旧小泊小学校),,927-1462,珠洲市三崎町小泊33-7,0768-88‐2528,,,,,,収容人数:300,,, 11 | 10,37.486834,137.339245,消防・防災,指定避難所,,,みさき小学校,,927-1452 ,珠洲市三崎町粟津ロ部10番地の1,0768-88‐2019,,,,,,収容人数:350,,, 12 | 11,37.466678,137.321716,消防・防災,指定避難所,,,旧本小学校 体育館,,927-1467 ,珠洲市三崎町本17-47,,,,,,,収容人数:300,,, 13 | 12,37.473969,137.342425,消防・防災,指定避難所,,,三崎中学校,,927-1454,珠洲市三崎町宇治ヨ部114番地,0768-88‐2423,,,,,,収容人数:480,,, 14 | 13,37.525404,137.281382,消防・防災,指定避難所,,,日置公民館,,927-1446,珠洲市折戸町チ部34番地,0768-86-2220,,,,,,収容人数:80,,, 15 | 14,37.501186,137.171269,消防・防災,指定避難所,,,西部小学校,,927-1321,珠洲市大谷町2部47番甲地,0768-87‐2016,,,,,,収容人数:330,,, 16 | 15,37.499946,137.176374,消防・防災,指定避難所,,,大谷中学校,,927-1321,珠洲市大谷町1字78番地,0768-87‐2019,,,,,,収容人数:390,,, 17 | 16,37.453248,137.168772,消防・防災,指定避難所,,,旧上黒丸小学校,,927-1314,珠洲市若山町上黒丸10部34番地,0768-82‐1886,,,,,,収容人数:240,,, 18 | 17,37.456478,137.242632,消防・防災,指定避難所,,,若山小学校,,927-1239,珠洲市若山町古蔵11部100番地の1,0768-82‐0240,,,,,,収容人数:420,,, 19 | 18,37.401572,137.23932,消防・防災,指定避難所,,,宝立公民館,,927-1222,珠洲市宝立町鵜飼卯字46番地,0768-84‐1500,,,,,,収容人数:80,,, 20 | 19,37.427517,137.251429,消防・防災,指定避難所,,,上戸公民館,,927-1216,珠洲市上戸町寺社2字57番地の1,0768-82-0140,,,,,,収容人数:80,,, 21 | 20,37.439755,137.263186,消防・防災,指定避難所,,,飯田公民館,,927-1214,珠洲市飯田町10部20番地2,0768-82-0023,,,,,,収容人数:80,,, 22 | 21,37.443844,137.280098,消防・防災,指定避難所,,,直公民館,,927-1213,珠洲市野々江町ホの部80番地の1,0768-82-3798,,,,,,収容人数:80,,, 23 | 22,37.444389,137.29434,消防・防災,指定避難所,,,正院公民館,,927-1206,珠洲市正院町正院22部2番地1,0768-82-0416,,,,,,収容人数:80,,, 24 | 23,37.442986,137.316431,消防・防災,指定避難所,,,蛸島公民館,,927-1204 ,珠洲市蛸島町ヨ部139番地,0768-82‐3202,,,,,,収容人数:80,,, 25 | 24,37.474032,137.341785,消防・防災,指定避難所,,,三崎公民館,,927-1454,珠洲市三崎町宇治ヨ部114番地の13,0768-88-2049,,,,,,収容人数:80,,, 26 | 25,37.501685,137.174025,消防・防災,指定避難所,,,大谷公民館,,927-1321,珠洲市大谷町2字57番地の4,0768-87‐2222,,,,,,収容人数:80,,, 27 | 26,37.456711,137.241462,消防・防災,指定避難所,,,若山公民館,,927-1239,珠洲市若山町古蔵寅の部60番地1,0768-82‐6153,,,,,,収容人数:80,,, 28 | 27,37.459931,137.286914,消防・防災,指定避難所,,,旧飯塚保育所,,927-1202,珠洲市正院町飯塚は部57番地,,,,,,,収容人数:80,,, 29 | -------------------------------------------------------------------------------- /dim/dim.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileVersion": "1.1", 3 | "contents": [ 4 | { 5 | "name": "17205_石川県_珠洲市_避難施設_指定避難所", 6 | "url": "https://www.geospatial.jp/ckan/dataset/c56cbd72-7458-4802-a90b-43a7785eda5b/resource/7b9af02c-d85f-4df7-b7b8-6c94a8fa3109/download/suzusiteishelter.csv", 7 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/17205-002", 8 | "catalogResourceId": "7b9af02c-d85f-4df7-b7b8-6c94a8fa3109", 9 | "postProcesses": [ 10 | "encode utf-8", 11 | "csv-to-json" 12 | ], 13 | "headers": {} 14 | }, 15 | { 16 | "name": "17205_石川県_珠洲市_避難施設_津波襲来時緊急一時避難所", 17 | "url": "https://www.geospatial.jp/ckan/dataset/c56cbd72-7458-4802-a90b-43a7785eda5b/resource/036f9491-f37f-404d-93da-4c2144d71f85/download/suzukinkyushelter.csv", 18 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/17205-002", 19 | "catalogResourceId": "036f9491-f37f-404d-93da-4c2144d71f85", 20 | "postProcesses": [ 21 | "encode utf-8", 22 | "csv-to-json" 23 | ], 24 | "headers": {} 25 | }, 26 | { 27 | "name": "17003_石川県_指定緊急避難所一覧", 28 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_evacuation_space.csv", 29 | "catalogUrl": null, 30 | "catalogResourceId": null, 31 | "postProcesses": [ 32 | "encode utf-8", 33 | "csv-to-json" 34 | ], 35 | "headers": {} 36 | }, 37 | { 38 | "name": "17003_石川県_公衆無線LANアクセスポイント一覧", 39 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_public_wireless_lan.csv", 40 | "catalogUrl": null, 41 | "catalogResourceId": null, 42 | "postProcesses": [ 43 | "encode utf-8", 44 | "csv-to-json" 45 | ], 46 | "headers": {} 47 | }, 48 | { 49 | "name": "17003_石川県_AED設置箇所一覧", 50 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_aed.csv", 51 | "catalogUrl": null, 52 | "catalogResourceId": null, 53 | "postProcesses": [ 54 | "encode utf-8", 55 | "csv-to-json" 56 | ], 57 | "headers": {} 58 | }, 59 | { 60 | "name": "17003_石川県_公衆トイレ一覧", 61 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_public_toilet.csv", 62 | "catalogUrl": null, 63 | "catalogResourceId": null, 64 | "postProcesses": [ 65 | "encode utf-8", 66 | "csv-to-json" 67 | ], 68 | "headers": {} 69 | }, 70 | { 71 | "name": "17003_石川県_災害拠点病院一覧_災害拠点病院一覧", 72 | "url": "http://www.pref.ishikawa.lg.jp/opendata/documents/saigai_hospital.csv", 73 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/ishikawa-saigai-hospital", 74 | "catalogResourceId": "f74a383d-9097-466c-945c-9c736e9bc945", 75 | "postProcesses": [ 76 | "encode utf-8", 77 | "csv-to-json" 78 | ], 79 | "headers": {} 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /docs/HOWTOUSE.md: -------------------------------------------------------------------------------- 1 | # 紙マップに新しい地域を追加する場合の手順 2 | 3 | - `./assets/config/` に `new-map.json` という名前のファイルを追加します 4 | - `new-map`の部分がURLになるので、適切な名前にしましょう 5 | - `./assets/config/list.json`に `new-map.json` を追加します 6 | 7 | ## configファイルの形式 8 | - `./assets/config/map-sample.json` に、サンプルのjsonがあります 9 | 10 | ```json 11 | { 12 | # 地図のIDです。jsonファイルと共通にしておいたほうがよいです 13 | "map_id":"new-map", 14 | # 地図のタイトルです 15 | "map_title":"新しい地図", 16 | # 地図のタイトルの英語版です 17 | "map_title_en":"New Map", 18 | # 地図の説明です 19 | "map_description":"新しく地図を追加します", 20 | # 地図の説明の英語版です 21 | "map_description_en":"Add new map", 22 | # トップページで表示される地図の画像です 23 | # 指定しない場合はデフォルト画像が使われます 24 | "map_image": null, 25 | # 地図に表示する情報源です 26 | "sources": [ 27 | { 28 | # 情報源のIDです 29 | "id" : "test_kml", 30 | # 情報源のURLです 31 | # 外部サイトを指定することもできます 32 | "url" : "/data/test.kml", 33 | # 情報源の種類です 34 | # KMLとGeoJSONに対応しています 35 | "type" : "kml", 36 | # 情報源のタイトルです 37 | "title" : "Test用KML", 38 | # 情報源のタイトルの英語版です 39 | "title_en" : "KML for test", 40 | # 地図上に表示するかどうかのフラグです 41 | "show" : true 42 | }, 43 | # sourceは複数指定することもできます 44 | { 45 | "id" : "test_geojson", 46 | "url" : "/data/test.geojson", 47 | "type" : "geojson", 48 | "title" : "Test用GeoJSON", 49 | "title_en" : "GeoJSON for test", 50 | "show" : true 51 | } 52 | ], 53 | # 地図ページを開いたときのデフォルトの描画範囲です 54 | "default_hash": "35.034970230243786,139.83536606997205-34.998870264553034,139.90144296563784", 55 | # 地図ページを開いたときのデフォルトの中心座標です 56 | "center" : [139.83536606997205, 35.034970230243786], 57 | # カテゴリの設定です 58 | "layer_settings": { 59 | # カテゴリ名は日本語をキーとしています 60 | "避難所": { 61 | # カテゴリ名です 62 | "name": "避難所", 63 | # カテゴリ名の英語版です 64 | "name_en": "Shelter", 65 | # そのカテゴリの表示に使われる色です 66 | "color": "#276445", 67 | # そのカテゴリのマーカーで使われる色です 68 | "bg_color": "#A4C1B0", 69 | # そのカテゴリアイコンです 70 | # fontawesomeのアイコンが指定できます 71 | "icon_class": "fas fa-street-view", 72 | # そのカテゴリのクラス名です 73 | "class": "layer_temporary_houses" 74 | }, 75 | # カテゴリは複数指定することもできます 76 | "給水所": { 77 | "name": "給水所", 78 | "name_en": "Water Supply Office", 79 | "color": "#285797", 80 | "bg_color": "#A3BBDA", 81 | "icon_class": "fas fa-tint", 82 | "class": "layer_water" 83 | }, 84 | } 85 | } 86 | ``` 87 | 88 | # mapprintをForkして、独自のプロジェクトをGithub Pagesへリリースする方法 89 | - GitHub上で自分あるいは任意のorganizationへForkする 90 | - Forkしたリポジトリを `git clone` する 91 | - `git checkout -b forked-release` で `forked-release` というブランチを作る 92 | - `forked-release` に対して、独自に行いたい変更を行う 93 | - 上記の「紙マップに新しい地図を追加する手順」に従って新しい地図を追加するなど 94 | - `forked-release` で、 `.gitignore` から `dist` を消す 95 | - `forked-release` で、 `nuxt.config.js` の `router { base: '/' }` を `router { base: '/mapprint/' }` に書き換える 96 | - `yarn run generate` で `dist` を生成する 97 | - `git subtree push --prefix dist/ origin forked-pages` で `forked-pages` というブランチを作る 98 | - GithubのリポジトリのページのSettingsタブから、GitHub Pagesとして公開するページとして `forked-pages` ブランチのrootを選択する -------------------------------------------------------------------------------- /assets/images/fukidashi_obj_ja.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 11 | 33 | 34 | -------------------------------------------------------------------------------- /assets/images/fukidashi_obj_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 11 | 12 | 13 | 16 | 21 | 24 | 26 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /assets/sass/vendor/gridlex/_gridlex-mixins.scss: -------------------------------------------------------------------------------- 1 | // Add math functions to use division 2 | @use "sass:list"; 3 | @use "sass:math"; 4 | @use "sass:map"; 5 | @use "gridlex-vars"; 6 | @use "gridlex-preprocessing"; 7 | 8 | // Make the breakpoints 9 | @mixin bp($breakpoint) { 10 | $query: map.get(gridlex-vars.$gl-mq-list, $breakpoint); 11 | @if $query != null { 12 | @media (#{gridlex-vars.$gl-mq-width}: #{list.nth($query, 1)}) { 13 | @content; 14 | } 15 | } 16 | } 17 | 18 | // Function to generate the grid by number 19 | @mixin makeGridByNumber($grid) { 20 | @for $i from 1 through gridlex-vars.$gl-colCount { 21 | [#{gridlex-vars.$gl-attributeName}*="#{$grid}-#{$i}"] 22 | > [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 23 | [#{gridlex-vars.$gl-attributeName}*="#{$grid}-#{$i}"] 24 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 25 | [#{gridlex-vars.$gl-attributeName}*="#{$grid}-#{$i}"] 26 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 27 | $fraction: math.div(1, $i); 28 | 29 | flex-basis: map.get(gridlex-preprocessing.$gl-colFractions, $fraction); 30 | max-width: map.get(gridlex-preprocessing.$gl-colFractions, $fraction); 31 | } 32 | } 33 | } 34 | 35 | // Function to generate the grid by columns 36 | @mixin makeCol($col) { 37 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"], 38 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"], 39 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"] { 40 | @for $i from 1 through gridlex-vars.$gl-colCount { 41 | > [#{gridlex-vars.$gl-attributeName}*="#{$col}-#{$i}"] { 42 | flex-basis: map.get(gridlex-preprocessing.$gl-colPortions, $i); 43 | max-width: map.get(gridlex-preprocessing.$gl-colPortions, $i); 44 | } 45 | } 46 | } 47 | } 48 | 49 | // Function to generate the -first & -last base on mq keys (as _lg-first) 50 | @mixin makeFirstLast($mq) { 51 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"], 52 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"], 53 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"] { 54 | [#{gridlex-vars.$gl-attributeName}*="#{$mq}-first"] { 55 | order: -1; 56 | } 57 | [#{gridlex-vars.$gl-attributeName}*="#{$mq}-last"] { 58 | order: 1; 59 | } 60 | } 61 | } 62 | 63 | // Function to generate the offset 64 | @mixin makeOff($off) { 65 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"], 66 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"], 67 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"] { 68 | @for $i from 0 through gridlex-vars.$gl-colCount - 1 { 69 | > [data-push-left*="#{$off}-#{$i}"] { 70 | margin-left: map.get(gridlex-preprocessing.$gl-colPortions, $i); 71 | } 72 | } 73 | } 74 | 75 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"], 76 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"], 77 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"] { 78 | @for $i from 0 through gridlex-vars.$gl-colCount - 1 { 79 | > [data-push-right*="#{$off}-#{$i}"] { 80 | margin-right: map.get(gridlex-preprocessing.$gl-colPortions, $i); 81 | } 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /test-e2e/README.md: -------------------------------------------------------------------------------- 1 | [E2E テストコード環境を構築する](https://github.com/codeforjapan/mapprint/issues/449) 2 | 3 | ## 要望の概要 | What 4 | 5 | E2E テストコード環境を構築する 6 | 7 | ## なぜやるのか | Why 8 | 9 | コードの品質維持のため。 10 | 11 | #319 で Jest 環境は作ったが Vue のテストにはモック化などの整備が不十分である。 12 | 画面数も少ないため E2E テストコード環境を入れる。 13 | 14 | ## どうやるのか | How 15 | 16 | Playwright を導入する。 17 | 18 | その後、個別のテストコードを実装する 19 | 20 | ### テスト実行 21 | ` yarn test:e2e ` 22 | 23 | ※Windows の方はコマンドプロンプトから実行してください 24 | 25 | ### テストコードの作成方法 26 | - Playwright には画面操作を行うことでテストコードを生成する機能があります。画面操作を行いテストコードを追加してください。 27 | 28 | ` npx playwright codegen kamimap.com ` 29 | 30 | https://playwright.dev/docs/codegen-intro 31 | 32 | 33 | ### [WIP] WSL 向けの環境構築手順 34 | 35 | - Playwright は WSL ではすぐに動かないため以下の対応をお願いします。 36 | 37 | - 1. Error: browserType.launch: Executable doesn't exist at /home/user/.cache/ 38 | ms-playwright/chromium-1091/chrome-linux/chrome 39 | ╔═════════════════════════════════════════════════════════════════════════╗ 40 | ║ Looks like Playwright Test or Playwright was just installed or updated. ║ 41 | ║ Please run the following command to download new browsers: ║ 42 | ║ ║ 43 | ║ yarn playwright install ║ 44 | ║ ║ 45 | ║ <3 Playwright Team ║ 46 | ╚═════════════════════════════════════════════════════════════════════════╝ 47 | 3 | 48 | 4 | test('URL Check', async () => { 49 | > 5 | const browser = await chromium.launch({ headless: false }); 50 | | ^ 51 | 6 | const context = await browser.newContext(); 52 | 7 | const page = await context.newPage(); 53 | 8 | 54 | 55 | 56 | - 2. Error: browserType.launch: 57 | ╔══════════════════════════════════════════════════════╗ 58 | ║ Host system is missing dependencies to run browsers. ║ 59 | ║ Please install them with the following command: ║ 60 | ║ ║ 61 | ║ sudo yarn playwright install-deps ║ 62 | ║ ║ 63 | ║ Alternatively, use apt: ║ 64 | ║ sudo apt-get install libnss3\ ║ 65 | ║ libnspr4\ ║ 66 | ║ libatk1.0-0\ ║ 67 | ║ libatk-bridge2.0-0\ ║ 68 | ║ libcups2\ ║ 69 | ║ libxkbcommon0\ ║ 70 | ║ libatspi2.0-0\ ║ 71 | ║ libxcomposite1\ ║ 72 | ║ libxdamage1\ ║ 73 | ║ libxfixes3\ ║ 74 | ║ libxrandr2\ ║ 75 | ║ libgbm1\ ║ 76 | ║ libpango-1.0-0\ ║ 77 | ║ libcairo2\ ║ 78 | ║ libasound2 ║ 79 | ║ ║ 80 | ║ <3 Playwright Team ║ 81 | ╚══════════════════════════════════════════════════════╝ 82 | 83 | - 3. Error: browserType.launch: Target page, context or browser has been closed 84 | [WIP] WSL で動かす方法は未解決です。 85 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mapprint-nuxt", 3 | "version": "1.0.0", 4 | "description": "migrate to nuxt", 5 | "author": "code for japan", 6 | "private": true, 7 | "scripts": { 8 | "dev": "nuxt", 9 | "dev-cross-env": "cross-env NUXT_HOST=0.0.0.0 NUXT_PORT=3333 nuxt", 10 | "build": "nuxt build", 11 | "start": "nuxt start", 12 | "generate": "nuxt generate", 13 | "createtiles": "node createtiles.js", 14 | "lint": "eslint --ext .js,.vue --ignore-pattern \"node_modules\" .", 15 | "dev-debug": "node --inspect-brk=9229 node_modules/nuxt/bin/nuxt", 16 | "test": "npm-run-all --sequential test:unit test:e2e", 17 | "test:unit": "jest", 18 | "test:jest:coverage": "jest --coverage", 19 | "test:e2e": "echo 'No e2e tests configured yet'" 20 | }, 21 | "browserslist": [ 22 | "last 2 version", 23 | "android >= 4.4", 24 | "IE 11" 25 | ], 26 | "dependencies": { 27 | "@chenfengyuan/vue-qrcode": "^1.0.2", 28 | "@mapbox/togeojson": "^0.16.0", 29 | "@nuxt/typescript-runtime": "^3.0.2", 30 | "@nuxtjs/axios": "^5.13.6", 31 | "@types/maplibre-gl": "^1.13.0", 32 | "geojson": "^0.5.0", 33 | "js-crc": "^0.2.0", 34 | "ky": "^0.15.0", 35 | "maplibre-gl": "^1.13.0-rc.5", 36 | "npm-run-all": "^4.1.5", 37 | "nuxt": "^2.17.3", 38 | "nuxt-i18n": "^6.20.4", 39 | "simplebar-vue": "^1.6.0", 40 | "ts-node": "^8.10.2", 41 | "viewport-units-buggyfill": "^0.6.2", 42 | "vue": "^2.7.16", 43 | "vue-i18n": "^8.28.2", 44 | "vue-mapbox": "^0.4.1" 45 | }, 46 | "devDependencies": { 47 | "@babel/core": "^7.26.10", 48 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 49 | "@babel/plugin-transform-async-to-generator": "^7.25.9", 50 | "@babel/plugin-transform-runtime": "^7.26.10", 51 | "@babel/preset-env": "^7.26.9", 52 | "@babel/preset-typescript": "^7.27.0", 53 | "@nuxt/test-utils": "^3.17.2", 54 | "@nuxt/typescript-build": "^3.0.2", 55 | "@nuxtjs/eslint-config": "^8.0.0", 56 | "@nuxtjs/eslint-module": "^4.1.0", 57 | "@playwright/test": "^1.51.1", 58 | "@types/geojson": "^7946.0.16", 59 | "@types/jest": "^29.5.14", 60 | "@types/node": "^22.13.15", 61 | "@typescript-eslint/parser": "^8.29.0", 62 | "@vue/compiler-dom": "^3.5.13", 63 | "@vue/server-renderer": "^3.5.13", 64 | "@vue/server-test-utils": "^1.3.6", 65 | "@vue/test-utils": "^1.3.6", 66 | "@vue/vue2-jest": "^29.2.6", 67 | "babel-core": "^7.0.0-bridge.0", 68 | "babel-eslint": "^10.1.0", 69 | "babel-jest": "^29.7.0", 70 | "babel-preset-vue": "^2.0.2", 71 | "cross-env": "^7.0.3", 72 | "css-mqpacker": "^7.0.0", 73 | "eslint": "^9.0.0", 74 | "eslint-config-prettier": "^10.1.1", 75 | "eslint-plugin-html": "^8.1.2", 76 | "eslint-plugin-import": "^2.31.0", 77 | "eslint-plugin-nuxt": "^4.0.0", 78 | "eslint-plugin-vue": "^10.0.0", 79 | "globals": "^16.0.0", 80 | "jest": "^29.7.0", 81 | "jest-dom": "^4.0.0", 82 | "jest-environment-jsdom": "^29.7.0", 83 | "jest-serializer-vue": "^3.1.0", 84 | "jsdom": "^26.0.0", 85 | "jsdom-global": "^3.0.2", 86 | "pug": "^3.0.3", 87 | "pug-loader": "^2.4.0", 88 | "pug-plain-loader": "^1.1.0", 89 | "sass": "^1.86.1", 90 | "sass-loader": "^10.0.4", 91 | "shelljs": "^0.9.2", 92 | "sort-css-media-queries": "^1.5.4", 93 | "ts-jest": "^29.3.1", 94 | "ts-loader": "^6.2.2", 95 | "typescript": "^5.8.2", 96 | "vue-eslint-parser": "^10.0.0" 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /static/geojson/test.geojson: -------------------------------------------------------------------------------- 1 | { 2 | "type": "FeatureCollection", 3 | "name": "ghp_D", 4 | "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::6668" } }, 5 | "features": [ 6 | { "type": "Feature", "properties": { "latitude": 35.936056, "longitude": 139.567829, "address": "日本、〒331-0077 埼玉県さいたま市西区中釘1438−2", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.567829, 35.936056 ] } }, 7 | { "type": "Feature", "properties": { "latitude": 35.989333, "longitude": 139.590853, "address": "日本、〒362-0005 埼玉県上尾市西門前647−4", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.590853, 35.989333 ] } }, 8 | { "type": "Feature", "properties": { "latitude": 35.729583, "longitude": 139.791365, "address": "日本、〒110-0003 東京都台東区根岸5丁目19−6 三ノ輪駅", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.791365, 35.729583 ] } }, 9 | { "type": "Feature", "properties": { "latitude": 40.92408, "longitude": 140.451989, "address": "日本、〒037-0201 青森県五所川原市金木町川倉七夕野40−10", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 140.451989, 40.92408 ] } }, 10 | { "type": "Feature", "properties": { "latitude": 35.762605, "longitude": 139.592008, "address": "日本、〒178-0061 東京都練馬区大泉学園町1丁目20−12", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.592008, 35.762605 ] } }, 11 | { "type": "Feature", "properties": { "latitude": 35.840668, "longitude": 139.53774, "address": "日本、〒354-0025 埼玉県富士見市関沢2丁目25−4", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.53774, 35.840668 ] } }, 12 | { "type": "Feature", "properties": { "latitude": 35.765356, "longitude": 139.492103, "address": "日本、〒189-0002 東京都東村山市青葉町2丁目40−1", "name": null, "name:en": null }, "geometry": { "type": "Point", "coordinates": [ 139.492103, 35.765356 ] } }, 13 | { "type": "Feature", "properties": { "latitude": 35.756952, "longitude": 139.535516, "address": "日本、〒203-0053 東京都東久留米市本町1丁目10−7", "name": "東久留米", "name:en": "Higashi Kurume" }, "geometry": { "type": "Point", "coordinates": [ 139.535516, 35.756952 ] } }, 14 | { "type": "Feature", "properties": { "latitude": 35.94034, "longitude": 139.646552, "address": "日本、〒337-0051 埼玉県さいたま市見沼区東大宮7丁目65−8", "name": "マルエツ大宮砂町", "name:en": "Maruetsu oomiya sunamachi" }, "geometry": { "type": "Point", "coordinates": [ 139.646552, 35.94034 ] } }, 15 | { "type": "Feature", "properties": { "latitude": 36.219689, "longitude": 139.667009, "address": "Unnamed Road, 藤岡町内野 栃木市 栃木県 323-1103 日本", "name": "渡良瀬遊水池", "name:en": "Watarase Lake" }, "geometry": { "type": "Point", "coordinates": [ 139.667009, 36.219689 ] } }, 16 | { "type": "Feature", "properties": { "latitude": 36.122848, "longitude": 139.595639, "address": "日本、〒347-0045 埼玉県加須市富士見町2−18", "name": "加須駅", "name:en": "Kazo Station" }, "geometry": { "type": "Point", "coordinates": [ 139.595639, 36.122848 ] } }, 17 | { "type": "Feature", "properties": { "latitude": 36.568138, "longitude": 139.7552, "address": "日本、〒322-0034 栃木県鹿沼市府中町194−5", "name": "梅沢歯科", "name:en": "Umezawa Dental Clinic" }, "geometry": { "type": "Point", "coordinates": [ 139.7552, 36.568138 ] } }, 18 | { "type": "Feature", "properties": { "latitude": 35.844767, "longitude": 139.654777, "address": "日本、〒336-0022 埼玉県さいたま市南区白幡3丁目1−34 白幡公園", "name": "白幡公園", "name:en": "Shirahata Park" }, "geometry": { "type": "Point", "coordinates": [ 139.654777, 35.844767 ] } }, 19 | { "type": "Feature", "properties": { "latitude": 35.793695, "longitude": 139.682442, "address": "日本、〒174-0041 東京都板橋区舟渡3丁目7−6", "name": "アディア", "name:en": "Adia" }, "geometry": { "type": "Point", "coordinates": [ 139.682442, 35.793695 ] } } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /assets/images/active_txt_ja.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 36 | 37 | -------------------------------------------------------------------------------- /nuxt.config.js: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import sortCSSmq from "sort-css-media-queries"; 3 | import i18n from "./nuxt-i18n.config"; 4 | 5 | let router = { 6 | base: "/", 7 | }; 8 | try { 9 | if (fs.existsSync("./nuxt-router-override.config.js")) { 10 | router = require("./nuxt-router-override.config").default; 11 | } 12 | // eslint-disable-next-line no-empty 13 | } finally { 14 | } 15 | 16 | export default { 17 | /* 18 | ** Headers of the page 19 | */ 20 | head: { 21 | htmlAttrs: { 22 | prefix: "og: http://ogp.me/ns#", 23 | }, 24 | meta: [ 25 | { charset: "utf-8" }, 26 | { name: "viewport", content: "width=device-width, initial-scale=1" }, 27 | { hid: "og:type", property: "og:type", content: "website" }, 28 | { 29 | hid: "og:image", 30 | property: "og:image", 31 | content: "https://kamimap.com/images/ogp_main.png", 32 | }, 33 | { name: "twitter:card", content: "summary_large_image" }, 34 | ], 35 | link: [ 36 | { 37 | rel: "apple-touch-icon", 38 | type: "image/png", 39 | href: "/apple-touch-icon.png", 40 | }, 41 | { rel: "icon", type: "image/x-icon", href: "/favicon.ico" }, 42 | { 43 | rel: "stylesheet", 44 | href: "https://fonts.googleapis.com/css?family=Open+Sans", 45 | }, 46 | ], 47 | script: [ 48 | { src: "https://www.googletagmanager.com/gtag/js?id=UA-45275834-9" }, 49 | { src: "/ga.js" }, 50 | ], 51 | }, 52 | /* 53 | ** Customize the progress-bar color 54 | */ 55 | loading: { color: "#fff" }, 56 | /* 57 | ** Global CSS 58 | */ 59 | css: [ 60 | { 61 | src: "~/assets/fonts/fontawesome/css/all.css", 62 | "data-viewport-units-buggyfill": "ignore", 63 | }, 64 | { src: "~/assets/sass/styles.scss", lang: "scss" }, 65 | ], 66 | /* 67 | ** Plugins to load before mounting the App 68 | */ 69 | plugins: [ 70 | { src: "~/plugins/mapbox", mode: "client" }, 71 | { src: "~/plugins/simplebar", mode: "client" }, 72 | ], 73 | /* 74 | ** Nuxt.js dev-modules 75 | */ 76 | buildModules: [ 77 | // Doc: https://github.com/nuxt-community/eslint-module 78 | // '@nuxtjs/eslint-module' 79 | "@nuxt/typescript-build", 80 | ], 81 | /* 82 | ** Nuxt.js modules 83 | */ 84 | modules: [ 85 | // Doc: https://axios.nuxtjs.org/usage 86 | "@nuxtjs/axios", 87 | ["nuxt-i18n", i18n], 88 | ], 89 | /* 90 | ** Axios module configuration 91 | ** See https://axios.nuxtjs.org/options 92 | */ 93 | axios: {}, 94 | 95 | i18n: { 96 | vueI18n: { 97 | silentTranslationWarn: true, 98 | }, 99 | }, 100 | /* 101 | ** Build configuration 102 | */ 103 | generate: { 104 | routes() { 105 | const list = require("./assets/config/list.json"); 106 | const mapped = list.map((name) => { 107 | return [ 108 | "/map/" + name.replace(".json", ""), 109 | "/en/map/" + name.replace(".json", ""), 110 | ]; 111 | }); 112 | return [].concat(...mapped); 113 | }, 114 | fallback: true, 115 | }, 116 | router, 117 | build: { 118 | /* 119 | ** You can extend webpack config here 120 | */ 121 | extend(config, ctx) { 122 | config.resolve.alias["mapbox-gl"] = "maplibre-gl"; 123 | if (ctx.isDev) { 124 | config.devtool = ctx.isClient ? 'source-map' : 'inline-source-map' 125 | } 126 | }, 127 | postcss: { 128 | postcssOptions: { 129 | plugins: { 130 | "css-mqpacker": { 131 | sort: sortCSSmq, 132 | }, 133 | cssnano: { 134 | reduceIdents: false, 135 | zindex: false, 136 | }, 137 | }, 138 | preset: { 139 | autoprefixer: { 140 | grid: "autoplace", 141 | }, 142 | }, 143 | }, 144 | }, 145 | }, 146 | watchers: { 147 | webpack: { 148 | ignored: /node_modules/, 149 | }, 150 | }, 151 | }; 152 | -------------------------------------------------------------------------------- /assets/config/2024-noto-earthquake.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id": "2024-noto-earthquake", 3 | "map_title": "令和6年能登半島地震関連情報", 4 | "map_title_en": "Noto Peninsula Earthquake Information (2024)", 5 | "map_description": "SNSで流れる情報をネットを見れない地域の人にも伝えられるよう、印刷に最適化したマップです。マップを必要な地域のところに調整すると、A4サイズにちょうどよく印刷され、かつ必要な場所の情報がリストとして表示されます。 ぜひ印刷して必要な人に届けてあげてください!", 6 | "map_description_en": "This map is designed for printing, allowing those without internet access to obtain information from social media. Once you set the map to the desired place, you can print it in A4 size. It shows a list of information for that spot, such as gas stations or water distribution points. Just print it and give it to anyone who needs it!", 7 | "map_image": "ogp_2024-noto-earthquake.png", 8 | "sources": [ 9 | { 10 | "id": "noto", 11 | "url": "https://www.google.com/maps/d/kml?forcekml=1&mid=1w0z1l210ymUPeQTgPnfZxqgh_jf5Pws", 12 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1w0z1l210ymUPeQTgPnfZxqgh_jf5Pws", 13 | "type": "kml", 14 | "title": "避難所", 15 | "show": true 16 | }, 17 | { 18 | "id": "noto_kyusui", 19 | "url": "https://www.google.com/maps/d/kml?forcekml=1&mid=1YXwD9l2SbmCQO4SYDmTee4nrAQFiJfE", 20 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1YXwD9l2SbmCQO4SYDmTee4nrAQFiJfE", 21 | "type": "kml", 22 | "title": "給水所", 23 | "show": true 24 | }, 25 | { 26 | "id": "niigata_kyusui", 27 | "url": "https://www.google.com/maps/d/kml?forcekml=1&mid=1s5C7_A9ZKbBcvmdg-MZSBnHhjGJDGXA", 28 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1s5C7_A9ZKbBcvmdg-MZSBnHhjGJDGXA", 29 | "type": "kml", 30 | "title": "給水所", 31 | "show": true 32 | }, 33 | { 34 | "id": "gas_station_noto", 35 | "url": "https://www.google.com/maps/d/kml?forcekml=1&mid=1JBE8Bncl9LpfLlybDzoQ-T-eTicZcQo", 36 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1JBE8Bncl9LpfLlybDzoQ-T-eTicZcQo", 37 | "type": "kml", 38 | "title": "ガソリンスタンド", 39 | "show": true 40 | } 41 | ], 42 | "default_hash": "37.47529547606749,136.86173646804122-37.23376666876564,137.36853736803096", 43 | "center": [137.11023611290682, 37.36081513528843], 44 | "type": "KML", 45 | "layer_settings": { 46 | "能登町": { 47 | "name": "地域の目印(ランドマーク)", 48 | "name_en": "Landmark", 49 | "color": "#4f4f5a", 50 | "bg_color": "#B7B7BE", 51 | "icon_class": "fa-solid fa-map-pin", 52 | "class": "layer_gs_ok" 53 | }, 54 | "能登町避難所": { 55 | "name": "避難所(能登町指定避難先)", 56 | "name_en": "Evacuation center in Noto Town", 57 | "color": "#276445", 58 | "bg_color": "#A4C1B0", 59 | "icon_class": "fa-solid fa-street-view", 60 | "class": "layer_gs_undefined" 61 | }, 62 | "他自治体": { 63 | "name": "避難所(他自治体指定避難先)", 64 | "name_en": "Evacuation center out of Noto Town", 65 | "color": "#276445", 66 | "bg_color": "#A4C1B0", 67 | "icon_class": "fa-solid fa-street-view", 68 | "class": "layer_water_chibacity" 69 | }, 70 | "SNS情報": { 71 | "name": "自主避難先", 72 | "name_en": "SNS information", 73 | "color": "#276445", 74 | "bg_color": "#A4C1B0", 75 | "icon_class": "fas fa-street-view", 76 | "class": "layer_temporary_houses" 77 | }, 78 | "通行可能道路(1/3 10:30)": { 79 | "name": "通行可能道路(1/3 10:30)", 80 | "name_en": "Passable roads (1/3 10:30)", 81 | "color": "#6D4615", 82 | "bg_color": "#C1B17E", 83 | "icon_class": "fas fa-plug", 84 | "class": "layer_charger" 85 | }, 86 | "能登半島地震 給水_石川・富山": { 87 | "name": "給水所", 88 | "name_en": "Water Supply", 89 | "color": "#285797", 90 | "bg_color": "#A3BBDA", 91 | "icon_class": "fa-solid fa-droplet", 92 | "class": "layer_water" 93 | }, 94 | "能登半島地震 給水_新潟県": { 95 | "name": "給水所(新潟県)", 96 | "name_en": "Water Supply", 97 | "color": "#285797", 98 | "bg_color": "#A3BBDA", 99 | "icon_class": "fa-solid fa-droplet", 100 | "class": "layer_water" 101 | }, 102 | "営業中のガソリンスタンド": { 103 | "name": "ガソリンスタンド", 104 | "name_en": "Gas Station", 105 | "color": "#992222", 106 | "bg_color": "#CA9491", 107 | "icon_class": "fas fa-gas-pump", 108 | "class": "layer_gas_station" 109 | } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /dim/data_files/17003_石川県_公衆無線LANアクセスポイント一覧/170003_public_wireless_lan.json: -------------------------------------------------------------------------------- 1 | [{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000001","地方公共団体名":"石川県","名称":"金沢城公園","名称_カナ":"カナザワジョウコウエン","名称_英語":"Kanazawa Castle Park","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市丸の内1-1金沢城公園","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"丸の内","所在地_番地以下":"1-1","建物名等(方書)":"金沢城公園","緯度":"36.5661","経度":"136.65886","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.pref.ishikawa.jp/siro-niwa/kanazawajou/index.html","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000002","地方公共団体名":"石川県","名称":"兼六園","名称_カナ":"ケンロクエン","名称_英語":"Kenroku-en Garden","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市兼六町1-4兼六園","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"兼六町","所在地_番地以下":"1","建物名等(方書)":"兼六園","緯度":"36.56231","経度":"136.66268","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.pref.ishikawa.jp/siro-niwa/kenrokuen/index.html","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000003","地方公共団体名":"石川県","名称":"石川県政記念しいのき迎賓館","名称_カナ":"イシカワケンセイキネンシイノキゲイヒンカン","名称_英語":"Shiinoki Cultural Complex, Ishikawa Prefecture","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市広坂2-1-1石川県政記念しいのき迎賓館","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"広坂","所在地_番地以下":"2-1-1","建物名等(方書)":"石川県政記念しいのき迎賓館","緯度":"36.56263","経度":"136.65784","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.shiinoki-geihinkan.jp/event/index.cgi","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000004","地方公共団体名":"石川県","名称":"石川四高記念文化交流館","名称_カナ":"イシカワシコウキネンブンカコウリュウカン","名称_英語":"The Fourth High School Memorial Museum of Cultural Exchange, Ishikawa","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市広坂2-2-5石川四高記念文化交流館","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"広坂","所在地_番地以下":"2-2-5","建物名等(方書)":"石川四高記念文化交流館","緯度":"36.56272","経度":"136.6558","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.pref.ishikawa.jp/shiko-kinbun/","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000005","地方公共団体名":"石川県","名称":"石川県立美術館","名称_カナ":"イシカワケンリツビジュツカン","名称_英語":"Ishikawa Prefectural Museum of Art","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市出羽町2-1石川県立美術館","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"出羽町","所在地_番地以下":"2-1","建物名等(方書)":"石川県立美術館","緯度":"36.56026","経度":"136.6612","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.ishibi.pref.ishikawa.jp/","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000006","地方公共団体名":"石川県","名称":"石川県立歴史博物館","名称_カナ":"イシカワケンリツレキシハクブツカン","名称_英語":"Ishikawa Prefectural Museum of History","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市出羽町3-1石川県立歴史博物館","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"出羽町","所在地_番地以下":"3-1","建物名等(方書)":"石川県立歴史博物館","緯度":"36.55881","経度":"136.66292","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://ishikawa-rekihaku.jp/","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000007","地方公共団体名":"石川県","名称":"石川県立能楽堂 ","名称_カナ":"イシカワケンリツノウガクドウ","名称_英語":"Ishikawa Prefectural Noh Theater","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市石引4-18-3石川県立能楽堂","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"石引","所在地_番地以下":"4-18-3","建物名等(方書)":"石川県立能楽堂","緯度":"36.55978","経度":"136.66326","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://noh-theater.jp/","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000008","地方公共団体名":"石川県","名称":"いしかわ百万石物語江戸本店","名称_カナ":"イシカワヒャクマンゴクモノガタリエドホンテン","名称_英語":"Ishikawa Hyakumangoku Shop","所在地_全国地方公共団体コード":"131024","町字ID":"","所在地_連結表記":"東京都中央区銀座2-2-18TH銀座ビル","所在地_都道府県":"東京都","所在地_市区町村":"中央区","所在地_町字":"銀座","所在地_番地以下":"2-2-18","建物名等(方書)":"TH銀座ビル","緯度":"35.67498","経度":"139.76572","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://100mangokushop.jp/","備考":""},{"全国地方公共団体コード":"170003","法人番号":"","ID":"EE0000000009","地方公共団体名":"石川県","名称":"石川県庁","名称_カナ":"イシカワケンチョウ","名称_英語":"Ishikawa Prefectural Government Office","所在地_全国地方公共団体コード":"172014","町字ID":"","所在地_連結表記":"石川県金沢市鞍月1-1石川県庁","所在地_都道府県":"石川県","所在地_市区町村":"金沢市","所在地_町字":"鞍月","所在地_番地以下":"1-1","建物名等(方書)":"石川県庁","緯度":"36.59493","経度":"136.62568","設置者":"","電話番号":"","内線番号":"","連絡先メールアドレス":"","連絡先FormURL":"","連絡先備考(その他、SNSなど)":"","郵便番号":"","SSID":"","提供エリア":"","URL":"https://www.pref.ishikawa.lg.jp/","備考":""}] -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 115 | 116 | -------------------------------------------------------------------------------- /assets/config/2019-typhoon-19.json: -------------------------------------------------------------------------------- 1 | { 2 | "map_id":"2019-typhoon-19", 3 | "map_title":"2019年台風19号災害支援情報マップ", 4 | "map_title_en":"2019 Typhoon-19 Disaster relief information map", 5 | "map_description":"SNSで流れる給水所等の情報をネットを見れない地域の人にも伝えられるよう、印刷に最適化したマップです。マップを必要な地域のところに調整すると、A4サイズにちょうどよく印刷され、かつ必要な場所の情報がリストとして表示されます。随時情報更新していきます。ぜひ印刷して必要な人に届けてあげてください!", 6 | "map_image": "ogp_2019-typhoon-19.png", 7 | "sources": [ 8 | { 9 | "id" : "japan", 10 | "url" : "https://www.google.com/maps/d/kml?mid=1pl0sY4TmNur6xB4bKvxxvi5rsizCY1bu&forcekml=1", 11 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1pl0sY4TmNur6xB4bKvxxvi5rsizCY1bu", 12 | "updated_search_key": { 13 | "type":"regexp", 14 | "pattern":")*(.+?)
", 15 | "index":2, 16 | "field":"description" 17 | }, 18 | "type" : "kml", 19 | "title" : "全国", 20 | "show" : true 21 | }, 22 | { 23 | "id" : "nagareyama", 24 | "url" : "https://www.google.com/maps/d/kml?mid=1rAKfJOHRj7K8KkaAGEAwN4RGTABs9zIt&forcekml=1", 25 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1rAKfJOHRj7K8KkaAGEAwN4RGTABs9zIt", 26 | "type" : "kml", 27 | "title" : "千葉県流山市のみ", 28 | "show" : true 29 | }, 30 | { 31 | "id" : "sousou", 32 | "url" : "https://www.google.com/maps/d/kml?mid=1IKlMaWlNDYmfEtgWsL9ZirnmLnirffhl&forcekml=1", 33 | "link": "https://www.google.com/maps/d/u/0/viewer?mid=1IKlMaWlNDYmfEtgWsL9ZirnmLnirffhl", 34 | "type" : "kml", 35 | "title" : "福島県相双地区", 36 | "updated_search_key": { 37 | "type":"regexp", 38 | "pattern":"(2019.+?更新)", 39 | "index":1, 40 | "field":"description" 41 | }, 42 | "show" : true 43 | } 44 | ], 45 | "default_hash": "35.89575594927511,139.65994077606268-35.62491040699955,140.1995505107742", 46 | "center" : [140.1099463905179, 35.77029301432708], 47 | "type":"KML", 48 | "layer_settings":{ 49 | "GS (黒点:未確認)": { 50 | "color": "#4F4F5A", 51 | "bg_color": "#B7B7BE", 52 | "icon_class": "fas fa-eye-slash", 53 | "class": "layer_gs_undefined" 54 | }, 55 | "避難所_台風19号_19年10月": { 56 | "name": "避難所_台風19号_19年10月", 57 | "color": "#276445", 58 | "bg_color": "#A4C1B0", 59 | "icon_class": "fas fa-street-view", 60 | "class": "layer_temporary_houses" 61 | }, 62 | "携帯充電_ショップ(緑点;未確認)": { 63 | "color": "#6D4615", 64 | "bg_color": "#C1B17E", 65 | "icon_class": "fas fa-plug", 66 | "class": "layer_charger" 67 | }, 68 | "自主避難所": { 69 | "name": "自主避難所(流山市版)", 70 | "color": "#276445", 71 | "bg_color": "#A4C1B0", 72 | "icon_class": "fas fa-street-view", 73 | "class": "layer_temporary_houses" 74 | }, 75 | "docomo 無料WIFI": { 76 | "color": "#992222", 77 | "bg_color": "#CA9491", 78 | "icon_class": "fas fa-wifi", 79 | "class": "layer_wifi-docomo" 80 | }, 81 | "Softbank 無料WIFI": { 82 | "color": "#666666", 83 | "bg_color": "#B1B6B9", 84 | "icon_class": "fas fa-wifi", 85 | "class": "layer_wifi-sb" 86 | }, 87 | "携帯充電(緑マーク:確認済)_台風19号_19年10月" : { 88 | "color": "#456658", 89 | "bg_color": "#8ED4B8", 90 | "icon_class": "fas fa-plug", 91 | "class": "layer_charger_19" 92 | }, 93 | "給水(青:確認済)_台風19号_19年10月" : { 94 | "color": "#001D96", 95 | "bg_color": "#1CA3EA", 96 | "icon_class": "fas fa-tint", 97 | "class": "layer_water" 98 | }, 99 | "Wifi(薄茶;確認済)_台風19号_19年10月" : { 100 | "color": "#6D4615", 101 | "bg_color": "#C1B17E", 102 | "icon_class": "fas fa-wifi", 103 | "class": "layer_wifi" 104 | }, 105 | "トイレ(紫:確認済)_台風19号_19年10月 のコピー" : { 106 | "color": "#BE4BDB", 107 | "bg_color": "#d6b1e0", 108 | "icon_class": "fas fa-toilet", 109 | "class": "layer_toilet" 110 | }, 111 | "入浴(桃:確認済)_台風19号_19年10月" : { 112 | "color": "#c43895", 113 | "bg_color": "#f9b3e2", 114 | "icon_class": "fas fa-shower", 115 | "class": "layer_shower" 116 | }, 117 | "給水(青)_台風19号_19年10月" : { 118 | "color": "#001D96", 119 | "bg_color": "#1CA3EA", 120 | "icon_class": "fas fa-tint", 121 | "class": "layer_water" 122 | }, 123 | "(南相馬市)給水所" : { 124 | "color": "#001D96", 125 | "bg_color": "#1CA3EA", 126 | "icon_class": "fas fa-tint", 127 | "class": "layer_water" 128 | }, 129 | "(無料)入浴施設" : { 130 | "color": "#c43895", 131 | "bg_color": "#f9b3e2", 132 | "icon_class": "fas fa-shower", 133 | "class": "layer_shower" 134 | } 135 | } 136 | } 137 | 138 | -------------------------------------------------------------------------------- /pages/map/_map.vue: -------------------------------------------------------------------------------- 1 | 78 | 79 | 146 | -------------------------------------------------------------------------------- /assets/images/uMap.kml: -------------------------------------------------------------------------------- 1 | おんなの駅なかゆくい市場おんなの駅なかゆくい市場127.794567,26.436041道の駅いとまん道の駅いとまん127.661541,26.138343道の駅おおぎみ道の駅おおぎみ128.107914,26.690113道の駅ぎのざ道の駅ぎのざ127.951756,26.474011道の駅許田道の駅許田127.969335,26.551934道の駅豊崎道の駅豊崎127.655806,26.157788南の駅やえせ南の駅やえせ127.742747,26.121771アダンビーチアダンビーチ128.312824,26.821332いへや愛ランドよねざきいへや愛ランドよねざき127.936531,26.997282ネイチャーみらい館ネイチャーみらい館127.942314,26.454149ヒーピィービーチヒーピィービーチ128.000357,26.491969伊江村青少年旅行村伊江村青少年旅行村127.826958,26.712264沖縄県県民の森沖縄県県民の森127.910535,26.503683沖縄県総合運動公園オートキャンプ場沖縄県総合運動公園オートキャンプ場の概要です。沖縄県総合運動公園オートキャンプ場沖縄県総合運動公園オートキャンプ場の概要です。127.825713,26.304265屋我地ビーチ(Yagaji beach)屋我地ビーチ(Yagaji beach)128.033016,26.648466乙羽岳森林公園キャンプ場(Oppadake)乙羽岳森林公園キャンプ場(Oppadake)127.963965,26.670125久高島キャンプ場久高島キャンプ場127.884464,26.156382幸喜ビーチ公園幸喜ビーチ公園127.948387,26.539126国頭村環境教育センターやんばる学びの森国頭村環境教育センターやんばる学びの森128.264759,26.72269国頭村森林公園国頭村森林公園128.190773,26.733365東村村民の森つつじエコパーク東村村民の森つつじエコパーク128.159085,26.639883比地大滝キャンプ場(Hijiootaki)比地大滝キャンプ場(Hijiootaki)128.179132,26.719106米崎キャンプ場米崎キャンプ場127.936593,26.99809北中城村あやかりの杜キャンプ場北中城村あやかりの杜キャンプ場127.79078,26.306996明地原公園キャンプ場明地原公園キャンプ場127.92194,26.931856むらさきむらビーチむらさきむらビーチ127.71688,26.405703伊江川伊江川128.316665,26.807257嘉陽ビーチ(Kayou Beach)嘉陽ビーチ(Kayou Beach)128.108611,26.54999慶佐次ウッパマビーチ(Kesaji Uppama beach)慶佐次ウッパマビーチ(Kesaji Uppama beach)128.15084,26.599877長浜ビーチ(Nagahama Beach)長浜ビーチ(Nagahama Beach)127.946048,26.7059百名ビーチ百名ビーチ127.79299,26.135617浜比嘉ビーチ浜比嘉ビーチ127.951584,26.324595北名城ビーチ北名城ビーチ127.661326,26.108395 -------------------------------------------------------------------------------- /dim/dim-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "lockFileVersion": "1.1", 3 | "contents": [ 4 | { 5 | "name": "石川県指定緊急避難所一覧", 6 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_evacuation_space.csv", 7 | "path": "./data_files/石川県指定緊急避難所一覧/170003_evacuation_space.csv", 8 | "catalogUrl": null, 9 | "catalogResourceId": null, 10 | "lastModified": "2023-09-07T12:00:16.000Z", 11 | "eTag": "5ae55-604c39a6a0e36", 12 | "lastDownloaded": "2024-01-07T09:10:30.125Z", 13 | "integrity": "6bc5145d69fb91e8ba4a65d63637595e65f74ca5", 14 | "postProcesses": [ 15 | "encode utf-8" 16 | ], 17 | "headers": {} 18 | }, 19 | { 20 | "name": "災害拠点病院一覧_災害拠点病院一覧", 21 | "url": "http://www.pref.ishikawa.lg.jp/opendata/documents/saigai_hospital.csv", 22 | "path": "./data_files/災害拠点病院一覧_災害拠点病院一覧/saigai_hospital.csv", 23 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/ishikawa-saigai-hospital", 24 | "catalogResourceId": "f74a383d-9097-466c-945c-9c736e9bc945", 25 | "lastModified": "2023-01-25T08:00:03.000Z", 26 | "eTag": "3b8-5f312050dda22", 27 | "lastDownloaded": "2024-01-07T09:11:23.789Z", 28 | "integrity": "ac292e33cbb02022f4e50c6ce74e04798a804bde", 29 | "postProcesses": [ 30 | "encode utf-8", 31 | "csv-to-json" 32 | ], 33 | "headers": {} 34 | }, 35 | { 36 | "name": "17205_石川県_珠洲市_避難施設_指定避難所", 37 | "url": "https://www.geospatial.jp/ckan/dataset/c56cbd72-7458-4802-a90b-43a7785eda5b/resource/7b9af02c-d85f-4df7-b7b8-6c94a8fa3109/download/suzusiteishelter.csv", 38 | "path": "./data_files/17205_石川県_珠洲市_避難施設_指定避難所/suzusiteishelter.csv", 39 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/17205-002", 40 | "catalogResourceId": "7b9af02c-d85f-4df7-b7b8-6c94a8fa3109", 41 | "lastModified": "2017-11-27T03:55:51.000Z", 42 | "eTag": "04b741eb42667785b12edaf420768bc0", 43 | "lastDownloaded": "2024-01-07T14:19:35.766Z", 44 | "integrity": "796891adee7e0b01c8805c7170cf7582163370d6", 45 | "postProcesses": [ 46 | "encode utf-8", 47 | "csv-to-json" 48 | ], 49 | "headers": {} 50 | }, 51 | { 52 | "name": "17205_石川県_珠洲市_避難施設_津波襲来時緊急一時避難所", 53 | "url": "https://www.geospatial.jp/ckan/dataset/c56cbd72-7458-4802-a90b-43a7785eda5b/resource/036f9491-f37f-404d-93da-4c2144d71f85/download/suzukinkyushelter.csv", 54 | "path": "./data_files/17205_石川県_珠洲市_避難施設_津波襲来時緊急一時避難所/suzukinkyushelter.csv", 55 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/17205-002", 56 | "catalogResourceId": "036f9491-f37f-404d-93da-4c2144d71f85", 57 | "lastModified": "2017-11-27T03:55:54.000Z", 58 | "eTag": "2de46712268baf806572fa0a27245f33", 59 | "lastDownloaded": "2024-01-07T14:19:37.394Z", 60 | "integrity": "1ba340f74b47f0253b59f45d5428742e80d76366", 61 | "postProcesses": [ 62 | "encode utf-8", 63 | "csv-to-json" 64 | ], 65 | "headers": {} 66 | }, 67 | { 68 | "name": "17003_石川県_指定緊急避難所一覧", 69 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_evacuation_space.csv", 70 | "path": "./data_files/17003_石川県_指定緊急避難所一覧/170003_evacuation_space.csv", 71 | "catalogUrl": null, 72 | "catalogResourceId": null, 73 | "lastModified": "2023-09-07T12:00:16.000Z", 74 | "eTag": "5ae55-604c39a6a0e36", 75 | "lastDownloaded": "2024-01-07T14:19:39.489Z", 76 | "integrity": "6bc5145d69fb91e8ba4a65d63637595e65f74ca5", 77 | "postProcesses": [ 78 | "encode utf-8", 79 | "csv-to-json" 80 | ], 81 | "headers": {} 82 | }, 83 | { 84 | "name": "17003_石川県_公衆無線LANアクセスポイント一覧", 85 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_public_wireless_lan.csv", 86 | "path": "./data_files/17003_石川県_公衆無線LANアクセスポイント一覧/170003_public_wireless_lan.csv", 87 | "catalogUrl": null, 88 | "catalogResourceId": null, 89 | "lastModified": "2023-09-07T12:00:16.000Z", 90 | "eTag": "ab9-604c39a6bfa67", 91 | "lastDownloaded": "2024-01-07T14:19:40.167Z", 92 | "integrity": "b3347e68c8dbef547d9619695d115ece87a5214d", 93 | "postProcesses": [ 94 | "encode utf-8", 95 | "csv-to-json" 96 | ], 97 | "headers": {} 98 | }, 99 | { 100 | "name": "17003_石川県_AED設置箇所一覧", 101 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_aed.csv", 102 | "path": "./data_files/17003_石川県_AED設置箇所一覧/170003_aed.csv", 103 | "catalogUrl": null, 104 | "catalogResourceId": null, 105 | "lastModified": "2023-09-07T12:00:09.000Z", 106 | "eTag": "1a889-604c39a09b9b2", 107 | "lastDownloaded": "2024-01-07T14:19:40.876Z", 108 | "integrity": "5994a86812b72af6d05de06fe1f523c60ee8189d", 109 | "postProcesses": [ 110 | "encode utf-8", 111 | "csv-to-json" 112 | ], 113 | "headers": {} 114 | }, 115 | { 116 | "name": "17003_石川県_公衆トイレ一覧", 117 | "url": "https://www.pref.ishikawa.lg.jp/opendata/documents/170003_public_toilet.csv", 118 | "path": "./data_files/17003_石川県_公衆トイレ一覧/170003_public_toilet.csv", 119 | "catalogUrl": null, 120 | "catalogResourceId": null, 121 | "lastModified": "2023-09-07T12:00:15.000Z", 122 | "eTag": "7f68-604c39a6927bd", 123 | "lastDownloaded": "2024-01-07T14:19:41.091Z", 124 | "integrity": "0bbe1bbaeb1a828843c93a7f4a4a79aca1ac0722", 125 | "postProcesses": [ 126 | "encode utf-8", 127 | "csv-to-json" 128 | ], 129 | "headers": {} 130 | }, 131 | { 132 | "name": "17003_石川県_災害拠点病院一覧_災害拠点病院一覧", 133 | "url": "http://www.pref.ishikawa.lg.jp/opendata/documents/saigai_hospital.csv", 134 | "path": "./data_files/17003_石川県_災害拠点病院一覧_災害拠点病院一覧/saigai_hospital.csv", 135 | "catalogUrl": "https://www.geospatial.jp/ckan/dataset/ishikawa-saigai-hospital", 136 | "catalogResourceId": "f74a383d-9097-466c-945c-9c736e9bc945", 137 | "lastModified": "2023-01-25T08:00:03.000Z", 138 | "eTag": "3b8-5f312050dda22", 139 | "lastDownloaded": "2024-01-07T14:19:41.330Z", 140 | "integrity": "ac292e33cbb02022f4e50c6ce74e04798a804bde", 141 | "postProcesses": [ 142 | "encode utf-8", 143 | "csv-to-json" 144 | ], 145 | "headers": {} 146 | } 147 | ] 148 | } -------------------------------------------------------------------------------- /dim/data_files/17205_石川県_珠洲市_避難施設_指定避難所/suzusiteishelter.json: -------------------------------------------------------------------------------- 1 | [{"id":"1","緯度":"37.396942","経度":"137.237662","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"宝立小学校 体育館","概要":"","郵便番号":"927-1223","住所":"珠洲市宝立町鵜島4字30番地","電話番号":"","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:310","備考2":"","備考3":"","リンク":""},{"id":"2","緯度":"37.403237","経度":"137.237993","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"宝立小中学校","概要":"","郵便番号":"927-1222","住所":"珠洲市宝立町鵜飼丑部83番地","電話番号":"0768-84-1106","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:530","備考2":"","備考3":"","リンク":""},{"id":"3","緯度":"37.427237","経度":"137.249932","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"上戸小学校","概要":"","郵便番号":"927-1216 ","住所":"珠洲市上戸町寺社5字74番地の2","電話番号":"0768-82‐0168","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:350","備考2":"","備考3":"","リンク":""},{"id":"4","緯度":"37.439955","経度":"137.259781","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"飯田小学校","概要":"","郵便番号":"927-1214 ","住所":"珠洲市飯田町19部61番地","電話番号":"0768-82‐0044","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:650","備考2":"","備考3":"","リンク":""},{"id":"5","緯度":"37.44656","経度":"137.272807","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"緑丘中学校","概要":"","郵便番号":"927-1213","住所":"珠洲市野々江町6の部1番地","電話番号":"0768-82‐0250","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:750","備考2":"","備考3":"","リンク":""},{"id":"6","緯度":"37.443949","経度":"137.281698","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"直小学校","概要":"","郵便番号":"927-1213","住所":"珠洲市野々江町ニ部38番地の2","電話番号":"0768-82‐0313","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:260","備考2":"","備考3":"","リンク":""},{"id":"7","緯度":"37.445435","経度":"137.296505","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"正院小学校","概要":"","郵便番号":"927-1205 ","住所":"珠洲市正院町川尻1部39番地","電話番号":"0768-82‐0404","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:400","備考2":"","備考3":"","リンク":""},{"id":"8","緯度":"37.442814","経度":"137.313529","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"蛸島小学校","概要":"","郵便番号":"927-1204 ","住所":"珠洲市蛸島町ワ部69番地","電話番号":"0768-82‐0524","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:340","備考2":"","備考3":"","リンク":""},{"id":"9","緯度":"37.451054","経度":"137.358934","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"里山里海自然学校(旧小泊小学校)","概要":"","郵便番号":"927-1462","住所":"珠洲市三崎町小泊33-7","電話番号":"0768-88‐2528","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:300","備考2":"","備考3":"","リンク":""},{"id":"10","緯度":"37.486834","経度":"137.339245","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"みさき小学校","概要":"","郵便番号":"927-1452 ","住所":"珠洲市三崎町粟津ロ部10番地の1","電話番号":"0768-88‐2019","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:350","備考2":"","備考3":"","リンク":""},{"id":"11","緯度":"37.466678","経度":"137.321716","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"旧本小学校 体育館","概要":"","郵便番号":"927-1467 ","住所":"珠洲市三崎町本17-47","電話番号":"","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:300","備考2":"","備考3":"","リンク":""},{"id":"12","緯度":"37.473969","経度":"137.342425","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"三崎中学校","概要":"","郵便番号":"927-1454","住所":"珠洲市三崎町宇治ヨ部114番地","電話番号":"0768-88‐2423","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:480","備考2":"","備考3":"","リンク":""},{"id":"13","緯度":"37.525404","経度":"137.281382","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"日置公民館","概要":"","郵便番号":"927-1446","住所":"珠洲市折戸町チ部34番地","電話番号":"0768-86-2220","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"14","緯度":"37.501186","経度":"137.171269","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"西部小学校","概要":"","郵便番号":"927-1321","住所":"珠洲市大谷町2部47番甲地","電話番号":"0768-87‐2016","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:330","備考2":"","備考3":"","リンク":""},{"id":"15","緯度":"37.499946","経度":"137.176374","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"大谷中学校","概要":"","郵便番号":"927-1321","住所":"珠洲市大谷町1字78番地","電話番号":"0768-87‐2019","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:390","備考2":"","備考3":"","リンク":""},{"id":"16","緯度":"37.453248","経度":"137.168772","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"旧上黒丸小学校","概要":"","郵便番号":"927-1314","住所":"珠洲市若山町上黒丸10部34番地","電話番号":"0768-82‐1886","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:240","備考2":"","備考3":"","リンク":""},{"id":"17","緯度":"37.456478","経度":"137.242632","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"若山小学校","概要":"","郵便番号":"927-1239","住所":"珠洲市若山町古蔵11部100番地の1","電話番号":"0768-82‐0240","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:420","備考2":"","備考3":"","リンク":""},{"id":"18","緯度":"37.401572","経度":"137.23932","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"宝立公民館","概要":"","郵便番号":"927-1222","住所":"珠洲市宝立町鵜飼卯字46番地","電話番号":"0768-84‐1500","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"19","緯度":"37.427517","経度":"137.251429","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"上戸公民館","概要":"","郵便番号":"927-1216","住所":"珠洲市上戸町寺社2字57番地の1","電話番号":"0768-82-0140","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"20","緯度":"37.439755","経度":"137.263186","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"飯田公民館","概要":"","郵便番号":"927-1214","住所":"珠洲市飯田町10部20番地2","電話番号":"0768-82-0023","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"21","緯度":"37.443844","経度":"137.280098","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"直公民館","概要":"","郵便番号":"927-1213","住所":"珠洲市野々江町ホの部80番地の1","電話番号":"0768-82-3798","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"22","緯度":"37.444389","経度":"137.29434","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"正院公民館","概要":"","郵便番号":"927-1206","住所":"珠洲市正院町正院22部2番地1","電話番号":"0768-82-0416","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"23","緯度":"37.442986","経度":"137.316431","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"蛸島公民館","概要":"","郵便番号":"927-1204 ","住所":"珠洲市蛸島町ヨ部139番地","電話番号":"0768-82‐3202","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"24","緯度":"37.474032","経度":"137.341785","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"三崎公民館","概要":"","郵便番号":"927-1454","住所":"珠洲市三崎町宇治ヨ部114番地の13","電話番号":"0768-88-2049","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"25","緯度":"37.501685","経度":"137.174025","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"大谷公民館","概要":"","郵便番号":"927-1321","住所":"珠洲市大谷町2字57番地の4","電話番号":"0768-87‐2222","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"26","緯度":"37.456711","経度":"137.241462","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"若山公民館","概要":"","郵便番号":"927-1239","住所":"珠洲市若山町古蔵寅の部60番地1","電話番号":"0768-82‐6153","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""},{"id":"27","緯度":"37.459931","経度":"137.286914","ジャンル1":"消防・防災","サブジャンル1":"指定避難所","ジャンル2":"","サブジャンル2":"","名称":"旧飯塚保育所","概要":"","郵便番号":"927-1202","住所":"珠洲市正院町飯塚は部57番地","電話番号":"","Fax番号":"","E-mail":"","営業時間":"","定休日":"","料金":"","備考1":"収容人数:80","備考2":"","備考3":"","リンク":""}] -------------------------------------------------------------------------------- /assets/sass/vendor/gridlex/_gridlex-classes.scss: -------------------------------------------------------------------------------- 1 | // Add math functions to use division 2 | @use "sass:math"; 3 | @use "gridlex-vars"; 4 | @use "gridlex-mixins"; 5 | 6 | //************************ 7 | // CLASSES 8 | //************************ 9 | // GRID 10 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"], 11 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"], 12 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"] { 13 | box-sizing: border-box; 14 | display: flex; 15 | flex-flow: row wrap; 16 | margin: 0 math.div(- gridlex-vars.$gl-gutter, 2); 17 | } 18 | // COLS 19 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 20 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 21 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 22 | box-sizing: border-box; 23 | padding: 0 math.div(gridlex-vars.$gl-gutter, 2) gridlex-vars.$gl-gutter-vertical; 24 | max-width: 100%; 25 | } 26 | // JUST "COL" & "COL_" 27 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 28 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 29 | flex: 1 1 0%; 30 | } 31 | // JUST "COL-" 32 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"] { 33 | flex: none; 34 | } 35 | 36 | // COL & GRID 37 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"][#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 38 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 39 | [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-gridName}"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"], 40 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"][#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 41 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 42 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"], 43 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"][#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 44 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 45 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}_"][#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 46 | margin: 0; 47 | padding: 0; 48 | } 49 | 50 | /************************ 51 | HELPERS SUFFIXES 52 | *************************/ 53 | // FOR GRID 54 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-gridName}-"] { 55 | // No spacing between cols : noGutter 56 | &[#{gridlex-vars.$gl-attributeName}*="-noGutter"] { 57 | margin: 0; 58 | > [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 59 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"] { 60 | padding: 0; 61 | } 62 | } 63 | 64 | // No Wrapping 65 | &[#{gridlex-vars.$gl-attributeName}*="-noWrap"] { 66 | flex-wrap: nowrap; 67 | } 68 | // Horizontal alignment on center 69 | &[#{gridlex-vars.$gl-attributeName}*="-center"] { 70 | justify-content: center; 71 | align-self: center; 72 | } 73 | // Horizontal alignment on right 74 | &[#{gridlex-vars.$gl-attributeName}*="-right"] { 75 | justify-content: flex-end; 76 | align-self: flex-end; 77 | margin-left: auto; 78 | } 79 | // Vertical alignment on top 80 | &[#{gridlex-vars.$gl-attributeName}*="-top"] { 81 | align-items: flex-start; 82 | } 83 | // Vertical alignment on middle 84 | &[#{gridlex-vars.$gl-attributeName}*="-middle"] { 85 | align-items: center; 86 | } 87 | // Vertical alignment on bottom 88 | &[#{gridlex-vars.$gl-attributeName}*="-bottom"] { 89 | align-items: flex-end; 90 | } 91 | 92 | // Orders 93 | &[#{gridlex-vars.$gl-attributeName}*="-reverse"] { 94 | flex-direction: row-reverse; 95 | } 96 | &[#{gridlex-vars.$gl-attributeName}*="-column"] { 97 | flex-direction: column; 98 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"] { 99 | flex-basis: auto; 100 | } 101 | } 102 | &[#{gridlex-vars.$gl-attributeName}*="-column-reverse"] { 103 | flex-direction: column-reverse; 104 | } 105 | 106 | // Spaces between and around cols 107 | &[#{gridlex-vars.$gl-attributeName}*="-spaceBetween"] { 108 | justify-content: space-between; 109 | } 110 | &[#{gridlex-vars.$gl-attributeName}*="-spaceAround"] { 111 | justify-content: space-around; 112 | } 113 | 114 | // Equal heights columns 115 | &[#{gridlex-vars.$gl-attributeName}*="-equalHeight"] 116 | > [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 117 | &[#{gridlex-vars.$gl-attributeName}*="-equalHeight"] 118 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 119 | &[#{gridlex-vars.$gl-attributeName}*="-equalHeight"] 120 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 121 | align-self: stretch; 122 | > * { 123 | height: 100%; 124 | } 125 | } 126 | // Removes the padding-bottom 127 | &[#{gridlex-vars.$gl-attributeName}*="-noBottom"] 128 | > [#{gridlex-vars.$gl-attributeName}~="#{gridlex-vars.$gl-colName}"], 129 | &[#{gridlex-vars.$gl-attributeName}*="-noBottom"] 130 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"], 131 | &[#{gridlex-vars.$gl-attributeName}*="-noBottom"] 132 | > [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}_"] { 133 | padding-bottom: 0; 134 | } 135 | } 136 | 137 | // FOR COL 138 | [#{gridlex-vars.$gl-attributeName}*="#{gridlex-vars.$gl-colName}-"] { 139 | &[#{gridlex-vars.$gl-attributeName}*="-top"] { 140 | align-self: flex-start; 141 | } 142 | &[#{gridlex-vars.$gl-attributeName}*="-middle"] { 143 | align-self: center; 144 | } 145 | &[#{gridlex-vars.$gl-attributeName}*="-bottom"] { 146 | align-self: flex-end; 147 | } 148 | &[#{gridlex-vars.$gl-attributeName}*="-first"] { 149 | order: -1; 150 | } 151 | &[#{gridlex-vars.$gl-attributeName}*="-last"] { 152 | order: 1; 153 | } 154 | } 155 | /************************ 156 | GRID BY NUMBER 157 | *************************/ 158 | @include gridlex-mixins.makeGridByNumber(#{gridlex-vars.$gl-gridName}); 159 | @each $mq-key, $mq-value in gridlex-vars.$gl-mq-list { 160 | @include gridlex-mixins.bp(#{$mq-key}) { 161 | //@media #{$mq-value} { 162 | @include gridlex-mixins.makeGridByNumber(_#{$mq-key}); 163 | } 164 | } 165 | 166 | /************************ 167 | COLS SIZES 168 | *************************/ 169 | @include gridlex-mixins.makeCol(#{gridlex-vars.$gl-colName}); 170 | @include gridlex-mixins.makeOff(off); 171 | 172 | @each $mq-key, $mq-value in gridlex-vars.$gl-mq-list { 173 | @include gridlex-mixins.bp(#{$mq-key}) { 174 | @include gridlex-mixins.makeCol(_#{$mq-key}); 175 | @include gridlex-mixins.makeOff(_#{$mq-key}); 176 | @include gridlex-mixins.makeFirstLast(_#{$mq-key}); 177 | } 178 | } 179 | 180 | /************************ 181 | HIDING COLS 182 | *************************/ 183 | @each $mq-key, $mq-value in gridlex-vars.$gl-mq-list { 184 | @include gridlex-mixins.bp(#{$mq-key}) { 185 | [#{gridlex-vars.$gl-attributeName}*="#{$mq-key}-hidden"] { 186 | display: none; 187 | } 188 | } 189 | } 190 | --------------------------------------------------------------------------------