├── .gitignore ├── Gruntfile.js ├── LICENSE ├── dist ├── css │ ├── waymark-js.css │ └── waymark-js.min.css ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── ionicons.eot │ ├── ionicons.svg │ ├── ionicons.ttf │ └── ionicons.woff ├── images │ ├── fullscreen.png │ ├── fullscreen@2x.png │ ├── geocoder.png │ ├── layers-2x.png │ ├── layers.png │ ├── throbber.gif │ └── waymark-icon-red.png └── js │ ├── waymark-js.js │ └── waymark-js.min.js ├── docs ├── .gitignore ├── README.md ├── app.vue ├── assets │ ├── main.less │ └── prism.css ├── components │ ├── Content.vue │ ├── ContentNav.vue │ ├── ContentToc.vue │ ├── Footer.vue │ ├── Header.vue │ ├── Icon.vue │ ├── Map.vue │ └── Nav.vue ├── content │ ├── 1.index.md │ ├── 2.map.md │ ├── 3.viewer.md │ ├── 4.editor.md │ └── 5.customise.md ├── nuxt.config.js ├── package-lock.json ├── package.json ├── public │ ├── assets │ │ └── icon │ │ │ ├── github.svg │ │ │ ├── waymark.svg │ │ │ └── wordpress.svg │ ├── dist │ │ └── latest │ │ │ ├── css │ │ │ ├── waymark-js.css │ │ │ └── waymark-js.min.css │ │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── ionicons.eot │ │ │ ├── ionicons.svg │ │ │ ├── ionicons.ttf │ │ │ └── ionicons.woff │ │ │ ├── images │ │ │ ├── fullscreen.png │ │ │ ├── fullscreen@2x.png │ │ │ ├── geocoder.png │ │ │ ├── layers-2x.png │ │ │ ├── layers.png │ │ │ ├── throbber.gif │ │ │ └── waymark-icon-red.png │ │ │ └── js │ │ │ ├── waymark-js.js │ │ │ └── waymark-js.min.js │ └── examples │ │ ├── assets │ │ ├── config │ │ │ └── route.json │ │ ├── css │ │ │ └── examples.css │ │ ├── geo │ │ │ ├── 404.geojson │ │ │ ├── route-busy.geojson │ │ │ ├── route.geojson │ │ │ ├── route.gpx │ │ │ └── route.kml │ │ └── img │ │ │ └── canada.svg │ │ ├── editor-form.html │ │ ├── editor │ │ ├── custom.html │ │ └── pub.html │ │ └── viewer │ │ ├── 404.html │ │ ├── basemap.html │ │ ├── formats.html │ │ ├── pub.html │ │ └── route.html └── tsconfig.json ├── index.html ├── libs ├── css │ ├── Control.Geocoder.css │ ├── L.Control.Locate.min.css │ ├── font-awesome.min.css │ ├── ionicons.min.css │ ├── leaflet-elevation.css │ ├── leaflet.fullscreen.min.css │ └── leaflet.min.css └── js │ ├── Control.Geocoder.js │ ├── L.Control.Locate.min.js │ ├── Leaflet.Editable.js │ ├── Leaflet.FeatureGroup.SubGroup.js │ ├── Leaflet.Sleep.js │ ├── leaflet-elevation.js │ ├── leaflet.fullscreen.min.js │ ├── leaflet.markercluster.js │ ├── leaflet.min.js │ ├── leaflet.polylineDecorator.js │ ├── togeojson.min.js │ ├── togpx.js │ └── tokml.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── readme.md └── src ├── css ├── Waymark_Map.css ├── Waymark_Map_Editor.css └── Waymark_Map_Viewer.css ├── js ├── Waymark_Map.js ├── Waymark_Map_Editor.js ├── Waymark_Map_Factory.js └── Waymark_Map_Viewer.js └── less ├── Waymark_Map.less ├── Waymark_Map_Editor.less └── Waymark_Map_Viewer.less /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | grunt.initConfig({ 3 | pkg: grunt.file.readJSON("package.json"), 4 | 5 | less: { 6 | js_css: { 7 | files: { 8 | "src/css/Waymark_Map.css": "src/less/Waymark_Map.less", 9 | "src/css/Waymark_Map_Viewer.css": "src/less/Waymark_Map_Viewer.less", 10 | "src/css/Waymark_Map_Editor.css": "src/less/Waymark_Map_Editor.less", 11 | }, 12 | }, 13 | }, 14 | 15 | concat: { 16 | js_js: { 17 | src: [ 18 | "libs/js/leaflet.min.js", 19 | "libs/js/*", 20 | "src/js/Waymark_Map.js", 21 | "src/js/Waymark_Map_Viewer.js", 22 | "src/js/Waymark_Map_Editor.js", 23 | "src/js/Waymark_Map_Factory.js", 24 | ], 25 | dest: "dist/js/waymark-js.js", 26 | }, 27 | js_css: { 28 | src: ["libs/css/*.css", "src/css/*.css"], 29 | dest: "dist/css/waymark-js.css", 30 | }, 31 | }, 32 | 33 | terser: { 34 | js_js: { 35 | files: { 36 | "dist/js/waymark-js.min.js": ["dist/js/waymark-js.js"], 37 | }, 38 | }, 39 | }, 40 | 41 | cssmin: { 42 | js_css: { 43 | files: { 44 | "dist/css/waymark-js.min.css": "dist/css/waymark-js.css", 45 | }, 46 | }, 47 | }, 48 | 49 | copy: { 50 | js: { 51 | files: [ 52 | { 53 | expand: true, 54 | cwd: "dist/", 55 | src: ["**"], 56 | dest: "docs/public/dist/latest/", 57 | }, 58 | ], 59 | }, 60 | }, 61 | 62 | watch: { 63 | js_js: { 64 | files: ["src/js/*.js"], 65 | tasks: ["build_js_js", "copy:js"], 66 | }, 67 | js_css: { 68 | files: ["src/less/*.less"], 69 | tasks: ["build_js_css", "copy:js"], 70 | }, 71 | }, 72 | }); 73 | 74 | grunt.loadNpmTasks("grunt-terser"); 75 | grunt.loadNpmTasks("grunt-contrib-concat"); 76 | grunt.loadNpmTasks("grunt-contrib-cssmin"); 77 | grunt.loadNpmTasks("grunt-contrib-less"); 78 | grunt.loadNpmTasks("grunt-contrib-watch"); 79 | grunt.loadNpmTasks("grunt-contrib-copy"); 80 | 81 | grunt.registerTask("default", [ 82 | "less", 83 | "concat", 84 | "terser", 85 | "cssmin", 86 | "copy", 87 | "watch", 88 | ]); 89 | 90 | grunt.registerTask("build_js_js", ["concat:js_js", "terser:js_js"]); 91 | 92 | grunt.registerTask("build_js_css", [ 93 | "less:js_css", 94 | "concat:js_css", 95 | "cssmin:js_css", 96 | ]); 97 | }; 98 | -------------------------------------------------------------------------------- /dist/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /dist/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /dist/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /dist/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /dist/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /dist/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/ionicons.eot -------------------------------------------------------------------------------- /dist/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/ionicons.ttf -------------------------------------------------------------------------------- /dist/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/fonts/ionicons.woff -------------------------------------------------------------------------------- /dist/images/fullscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/fullscreen.png -------------------------------------------------------------------------------- /dist/images/fullscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/fullscreen@2x.png -------------------------------------------------------------------------------- /dist/images/geocoder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/geocoder.png -------------------------------------------------------------------------------- /dist/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/layers-2x.png -------------------------------------------------------------------------------- /dist/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/layers.png -------------------------------------------------------------------------------- /dist/images/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/throbber.gif -------------------------------------------------------------------------------- /dist/images/waymark-icon-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenGIS/Waymark-JS/ad5e8a3bf2a4bc66af8daa5543e44f17a79b5ac8/dist/images/waymark-icon-red.png -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .data 8 | .env 9 | /dist -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Waymark JS Docs 2 | 3 | ## Setup 4 | 5 | Make sure to install the dependencies: 6 | 7 | ```bash 8 | # pnpm (npm|yarn) install 9 | pnpm install 10 | ``` 11 | 12 | ## Development Server 13 | 14 | Start the development server on http://localhost:3000 15 | 16 | ```bash 17 | pnpm run dev 18 | ``` 19 | 20 | ## Build 21 | 22 | Build the application for production: 23 | 24 | ```bash 25 | pnpm run generate 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/app.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/assets/main.less: -------------------------------------------------------------------------------- 1 | @waymark-primary: rgba(180, 39, 20, 1); //#b42714 2 | @waymark-grey-light: #eee; 3 | @waymark-grey-dark: rgba(51, 51, 51, 1); //#333 4 | @waymark-text: #333; 5 | @waymark-link: #1e98bb; 6 | @waymark-highlight: #54a322; 7 | 8 | body { 9 | padding: 10px; 10 | // background: #0d1117; 11 | // color: @waymark-grey-light; 12 | font-family: "Noto Sans", Helvetica, Arial, sans-serif; 13 | font-size: 18px; 14 | 15 | /* Global Styles */ 16 | img { 17 | max-width: 100%; 18 | max-height: 100%; 19 | } 20 | 21 | /* Header */ 22 | header { 23 | border-bottom: 1px solid #ddd; 24 | background: #0d1117; 25 | 26 | span { 27 | color: @waymark-primary; 28 | } 29 | 30 | select { 31 | padding: 5px 10px; 32 | border: 1px solid @waymark-grey-light; 33 | border-radius: 3px; 34 | background: @waymark-grey-dark; 35 | color: @waymark-grey-light; 36 | font-size: 16px; 37 | 38 | option { 39 | background: @waymark-grey-dark; 40 | 41 | &:hover { 42 | background: @waymark-grey-light; 43 | } 44 | } 45 | } 46 | } 47 | 48 | /* Main */ 49 | main { 50 | padding-top: 80px; 51 | 52 | .markdown-body { 53 | font-size: inherit; 54 | 55 | > p:first-child { 56 | font-size: 24px; 57 | line-height: 1.2em; 58 | } 59 | 60 | h1, 61 | h2, 62 | h3, 63 | h4 { 64 | margin: 0 0 10px 0; 65 | padding: 5px 0; 66 | border-bottom: 3px solid @waymark-grey-light; 67 | color: @waymark-primary; 68 | 69 | &:first-child { 70 | margin-top: 0; 71 | padding-top: 0; 72 | } 73 | 74 | a { 75 | color: @waymark-primary !important; 76 | 77 | text-decoration: none; 78 | border-bottom: none; 79 | } 80 | } 81 | 82 | h1:not(:first-child), 83 | h2:not(:first-child), 84 | h3:not(:first-child) { 85 | padding-top: 100px !important; 86 | } 87 | 88 | h3 { 89 | margin-bottom: 15px; 90 | // padding: 7px 0; 91 | border-bottom-width: 2px; 92 | } 93 | h4 { 94 | margin-bottom: 15px 0; 95 | padding: 5px 0; 96 | border-bottom-width: 1px; 97 | } 98 | } 99 | 100 | a { 101 | color: @waymark-link !important; 102 | border-bottom: 1px dotted @waymark-link; 103 | 104 | &:visited { 105 | color: darken(@waymark-link, 30%); 106 | border-bottom: none; 107 | } 108 | } 109 | 110 | p, 111 | td { 112 | code { 113 | display: inline-block; 114 | border: 1px dashed #ddd; 115 | } 116 | } 117 | 118 | blockquote { 119 | margin-top: 20px !important; 120 | // margin: 0 !important; 121 | padding: 20px !important; 122 | border-left: 4px solid @waymark-highlight !important; 123 | background: @waymark-grey-light; 124 | color: @waymark-text; 125 | p { 126 | overflow: hidden; 127 | font-size: 18px !important; 128 | 129 | span { 130 | margin-left: -5px; 131 | display: block; 132 | font-weight: bold; 133 | } 134 | } 135 | } 136 | 137 | pre { 138 | &.shiki.github-dark { 139 | font-size: 12px; 140 | 141 | code { 142 | span { 143 | margin-bottom: 2px; 144 | } 145 | } 146 | } 147 | } 148 | } 149 | 150 | /* Footer */ 151 | footer { 152 | display: flex; 153 | justify-content: space-between; 154 | margin-top: 30px; 155 | padding-top: 20px; 156 | border-top: 2px solid #ddd; 157 | font-size: 14px; 158 | 159 | a { 160 | color: @waymark-text; 161 | text-decoration: none; 162 | } 163 | 164 | > div { 165 | display: flex; 166 | align-items: center; 167 | 168 | &.middle { 169 | justify-content: center; 170 | 171 | .waymark-icon-github { 172 | margin: 0 10px; 173 | } 174 | } 175 | } 176 | } 177 | } 178 | 179 | /* Mobile */ 180 | @media (max-width: 768px) { 181 | main { 182 | table { 183 | td { 184 | font-size: 12px; 185 | 186 | code { 187 | word-break: break-all; 188 | } 189 | } 190 | } 191 | } 192 | 193 | footer { 194 | .right { 195 | display: none; 196 | } 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /docs/assets/prism.css: -------------------------------------------------------------------------------- 1 | pre[class*="language-"], 2 | code[class*="language-"], 3 | pre[class*="language-"] *, 4 | code[class*="language-"] * { 5 | white-space: pre-wrap; 6 | margin-bottom: 10px; 7 | z-index: 0; 8 | background: #222 !important; 9 | } 10 | pre[class*="language-"], 11 | code[class*="language-"] { 12 | /* Light Grey */ 13 | color: #f1f1f1; 14 | font-family: Monaco, "Andale Mono", "Ubuntu Mono", monospace; 15 | border: 1px solid #b4271450; 16 | } 17 | .token.comment, 18 | .token.prolog, 19 | .token.doctype, 20 | .token.cdata, 21 | .token.punctuation { 22 | /* Warm Grey */ 23 | color: #bea6a0; 24 | } 25 | .token.property, 26 | .token.tag, 27 | .token.boolean, 28 | .token.number, 29 | .token.constant, 30 | .token.symbol, 31 | .token.deleted { 32 | /* Pink */ 33 | color: #aad3df; 34 | } 35 | .token.selector, 36 | .token.attr-name, 37 | .token.string, 38 | .token.char, 39 | .token.builtin, 40 | .token.inserted { 41 | /* Light Green / Grey */ 42 | color: #a5ae9d; 43 | } 44 | .token.operator, 45 | .token.entity, 46 | .token.url, 47 | .language-css .token.string, 48 | .style .token.string { 49 | /* Light Green / Grey */ 50 | color: #a5ae9d; 51 | } 52 | .token.atrule, 53 | .token.attr-value, 54 | .token.keyword { 55 | /* Light Green / Grey */ 56 | color: #a5ae9d; 57 | } 58 | .token.regex, 59 | .token.important, 60 | .token.variable, 61 | .token.function { 62 | /* Pink */ 63 | color: #ff8897; 64 | } 65 | -------------------------------------------------------------------------------- /docs/components/Content.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 36 | -------------------------------------------------------------------------------- /docs/components/ContentNav.vue: -------------------------------------------------------------------------------- 1 | 13 | 25 | 26 | 59 | -------------------------------------------------------------------------------- /docs/components/ContentToc.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 41 | 42 | 82 | -------------------------------------------------------------------------------- /docs/components/Footer.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 38 | -------------------------------------------------------------------------------- /docs/components/Header.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 21 | 22 | 71 | -------------------------------------------------------------------------------- /docs/components/Icon.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 30 | 31 | 47 | -------------------------------------------------------------------------------- /docs/components/Map.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 |