v. 055b
WIP version is removed, Demo version is updated
|
|
@ -1,17 +0,0 @@
|
|||
# Fantasy Map Generator
|
||||
|
||||
Azgaar's _Fantasy Map Generator_. Based on [D3](https://d3js.org) Voronoi diagram rendered in svg. Please open a [raw version](http://bl.ocks.org/Azgaar/raw/b845ce22ea68090d43a4ecfb914f51bd) to be able to enlarge the map and pring it.
|
||||
|
||||
Project goal is a procedurally generated map for my *Medieval Dynasty* simulator. Map should be interactive, scalable, fast and plausible. There should be enought space to place at least 500 burgs within 7 countries. The imagined land area is about 1 million km<sup>2</sup>.
|
||||
|
||||
Please refer to [the project wiki](https://github.com/Azgaar/Fantasy-Map-Generator/wiki) for guidance. Links to an older versions are listed in the [changelog](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog).
|
||||
|
||||
This is a demo version, some new cool features are developed, but not yet deployed. Some details are covered in my blog [_Fantasy Maps for fun and glory_](https://azgaar.wordpress.com), you may also keep an eye on my [devboard](https://trello.com/b/7x832DG4/fantasy-map-generator). Comments and ideas are *highly* welcomed, kindly contact me via [email](mailto:maxganiev@yandex.ru). I would also like to see your completed or work in progress maps. For bug reports and change requests please use the main project [issues page](https://github.com/Azgaar/Fantasy-Map-Generator/issues).
|
||||
|
||||
_Inspiration:_
|
||||
|
||||
* Martin O'Leary's [_Generating fantasy maps_](https://mewo2.com/notes/terrain)
|
||||
|
||||
* Amit Patel's [_Polygonal Map Generation for Games_](http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation)
|
||||
|
||||
* Scott Turner's [_Here Dragons Abound_](https://heredragonsabound.blogspot.com)
|
||||
148
Demo version/font/fontello.css
vendored
|
|
@ -1,148 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.eot?69634679');
|
||||
src: url('../font/fontello.eot?69634679#iefix') format('embedded-opentype'),
|
||||
url('../font/fontello.woff2?69634679') format('woff2'),
|
||||
url('../font/fontello.woff?69634679') format('woff'),
|
||||
url('../font/fontello.ttf?69634679') format('truetype'),
|
||||
url('../font/fontello.svg?69634679#fontello') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
|
||||
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
|
||||
/*
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'fontello';
|
||||
src: url('../font/fontello.svg?69634679#fontello') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
[class^="icon-"]:before, [class*=" icon-"]:before {
|
||||
font-family: "fontello";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
speak: none;
|
||||
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
width: 1em;
|
||||
text-align: center;
|
||||
font-size: 1em;
|
||||
margin: -1px;
|
||||
padding: 0;
|
||||
|
||||
/* For safety - reset parent styles, that can break glyph codes*/
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1em;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
|
||||
}
|
||||
|
||||
.icon-pencil:before { content: '\e800'; } /* '' */
|
||||
.icon-font:before { content: '\e801'; } /* '' */
|
||||
.icon-arrows-cw:before { content: '\e802'; } /* '' */
|
||||
.icon-doc:before { content: '\e803'; } /* '' */
|
||||
.icon-trash-empty:before { content: '\e804'; } /* '' */
|
||||
.icon-ok:before { content: '\e805'; } /* '' */
|
||||
.icon-ok-circled:before { content: '\e806'; } /* '' */
|
||||
.icon-ok-circled2:before { content: '\e807'; } /* '' */
|
||||
.icon-link:before { content: '\e808'; } /* '' */
|
||||
.icon-globe:before { content: '\e809'; } /* '' */
|
||||
.icon-plus:before { content: '\e80a'; } /* '' */
|
||||
.icon-plus-circled:before { content: '\e80b'; } /* '' */
|
||||
.icon-minus-circled:before { content: '\e80c'; } /* '' */
|
||||
.icon-minus:before { content: '\e80d'; } /* '' */
|
||||
.icon-text-height:before { content: '\e80e'; } /* '' */
|
||||
.icon-adjust:before { content: '\e80f'; } /* '' */
|
||||
.icon-tag:before { content: '\e810'; } /* '' */
|
||||
.icon-tags:before { content: '\e811'; } /* '' */
|
||||
.icon-logout:before { content: '\e812'; } /* '' */
|
||||
.icon-download:before { content: '\e813'; } /* '' */
|
||||
.icon-down-circled2:before { content: '\e814'; } /* '' */
|
||||
.icon-upload:before { content: '\e815'; } /* '' */
|
||||
.icon-up-circled2:before { content: '\e816'; } /* '' */
|
||||
.icon-cancel-circled2:before { content: '\e817'; } /* '' */
|
||||
.icon-cancel-circled:before { content: '\e818'; } /* '' */
|
||||
.icon-cancel:before { content: '\e819'; } /* '' */
|
||||
.icon-check:before { content: '\e81a'; } /* '' */
|
||||
.icon-align-left:before { content: '\e81b'; } /* '' */
|
||||
.icon-align-center:before { content: '\e81c'; } /* '' */
|
||||
.icon-align-right:before { content: '\e81d'; } /* '' */
|
||||
.icon-align-justify:before { content: '\e81e'; } /* '' */
|
||||
.icon-star:before { content: '\e81f'; } /* '' */
|
||||
.icon-star-empty:before { content: '\e820'; } /* '' */
|
||||
.icon-search:before { content: '\e821'; } /* '' */
|
||||
.icon-mail:before { content: '\e822'; } /* '' */
|
||||
.icon-eye:before { content: '\e823'; } /* '' */
|
||||
.icon-eye-off:before { content: '\e824'; } /* '' */
|
||||
.icon-pin:before { content: '\e825'; } /* '' */
|
||||
.icon-lock-open:before { content: '\e826'; } /* '' */
|
||||
.icon-lock:before { content: '\e827'; } /* '' */
|
||||
.icon-attach:before { content: '\e828'; } /* '' */
|
||||
.icon-home:before { content: '\e829'; } /* '' */
|
||||
.icon-info-circled:before { content: '\e82a'; } /* '' */
|
||||
.icon-help-circled:before { content: '\e82b'; } /* '' */
|
||||
.icon-shuffle:before { content: '\e82c'; } /* '' */
|
||||
.icon-ccw:before { content: '\e82d'; } /* '' */
|
||||
.icon-cw:before { content: '\e82e'; } /* '' */
|
||||
.icon-play:before { content: '\e82f'; } /* '' */
|
||||
.icon-play-circled2:before { content: '\e830'; } /* '' */
|
||||
.icon-down-big:before { content: '\e831'; } /* '' */
|
||||
.icon-left-big:before { content: '\e832'; } /* '' */
|
||||
.icon-right-big:before { content: '\e833'; } /* '' */
|
||||
.icon-up-big:before { content: '\e834'; } /* '' */
|
||||
.icon-up-open:before { content: '\e835'; } /* '' */
|
||||
.icon-right-open:before { content: '\e836'; } /* '' */
|
||||
.icon-left-open:before { content: '\e837'; } /* '' */
|
||||
.icon-down-open:before { content: '\e838'; } /* '' */
|
||||
.icon-cloud:before { content: '\e839'; } /* '' */
|
||||
.icon-text-width:before { content: '\e83a'; } /* '' */
|
||||
.icon-italic:before { content: '\e83b'; } /* '' */
|
||||
.icon-bold:before { content: '\e83c'; } /* '' */
|
||||
.icon-move:before { content: '\f047'; } /* '' */
|
||||
.icon-link-ext:before { content: '\f08e'; } /* '' */
|
||||
.icon-check-empty:before { content: '\f096'; } /* '' */
|
||||
.icon-docs:before { content: '\f0c5'; } /* '' */
|
||||
.icon-list-bullet:before { content: '\f0ca'; } /* '' */
|
||||
.icon-mail-alt:before { content: '\f0e0'; } /* '' */
|
||||
.icon-sitemap:before { content: '\f0e8'; } /* '' */
|
||||
.icon-exchange:before { content: '\f0ec'; } /* '' */
|
||||
.icon-download-cloud:before { content: '\f0ed'; } /* '' */
|
||||
.icon-upload-cloud:before { content: '\f0ee'; } /* '' */
|
||||
.icon-plus-squared:before { content: '\f0fe'; } /* '' */
|
||||
.icon-unlink:before { content: '\f127'; } /* '' */
|
||||
.icon-help:before { content: '\f128'; } /* '' */
|
||||
.icon-info:before { content: '\f129'; } /* '' */
|
||||
.icon-eraser:before { content: '\f12d'; } /* '' */
|
||||
.icon-rocket:before { content: '\f135'; } /* '' */
|
||||
.icon-lock-open-alt:before { content: '\f13e'; } /* '' */
|
||||
.icon-play-circled:before { content: '\f144'; } /* '' */
|
||||
.icon-minus-squared:before { content: '\f146'; } /* '' */
|
||||
.icon-minus-squared-alt:before { content: '\f147'; } /* '' */
|
||||
.icon-level-up:before { content: '\f148'; } /* '' */
|
||||
.icon-level-down:before { content: '\f149'; } /* '' */
|
||||
.icon-ok-squared:before { content: '\f14a'; } /* '' */
|
||||
.icon-expand:before { content: '\f150'; } /* '' */
|
||||
.icon-collapse:before { content: '\f151'; } /* '' */
|
||||
.icon-expand-right:before { content: '\f152'; } /* '' */
|
||||
.icon-sort-alt-up:before { content: '\f160'; } /* '' */
|
||||
.icon-sort-alt-down:before { content: '\f161'; } /* '' */
|
||||
.icon-right-circled2:before { content: '\f18e'; } /* '' */
|
||||
.icon-left-circled2:before { content: '\f190'; } /* '' */
|
||||
.icon-collapse-left:before { content: '\f191'; } /* '' */
|
||||
.icon-plus-squared-alt:before { content: '\f196'; } /* '' */
|
||||
.icon-history:before { content: '\f1da'; } /* '' */
|
||||
.icon-header:before { content: '\f1dc'; } /* '' */
|
||||
.icon-trash:before { content: '\f1f8'; } /* '' */
|
||||
.icon-brush:before { content: '\f1fc'; } /* '' */
|
||||
.icon-clone:before { content: '\f24d'; } /* '' */
|
||||
.icon-hourglass-1:before { content: '\f251'; } /* '' */
|
||||
.icon-hand-grab-o:before { content: '\f255'; } /* '' */
|
||||
.icon-hand-paper-o:before { content: '\f256'; } /* '' */
|
||||
.icon-calendar-check-o:before { content: '\f274'; } /* '' */
|
||||
.icon-map-pin:before { content: '\f276'; } /* '' */
|
||||
|
|
@ -1,216 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Copyright (C) 2018 by original authors @ fontello.com</metadata>
|
||||
<defs>
|
||||
<font id="fontello" horiz-adv-x="1000" >
|
||||
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||
<missing-glyph horiz-adv-x="1000" />
|
||||
<glyph glyph-name="pencil" unicode="" d="M203-7l50 51-131 131-51-51v-60h72v-71h60z m291 518q0 12-12 12-5 0-9-4l-303-302q-4-4-4-10 0-12 13-12 5 0 9 4l303 302q3 4 3 10z m-30 107l232-232-464-465h-232v233z m381-54q0-29-20-50l-93-93-232 233 93 92q20 21 50 21 29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="font" unicode="" d="M405 538l-95-251q18 0 76-1t89-1q11 0 32 1-48 141-102 252z m-405-617l1 44q13 4 31 7t32 6 28 8 25 17 17 28l132 344 156 404h72q4-8 6-12l114-268q19-43 60-144t63-153q9-19 33-80t40-94q11-26 19-32 11-9 49-17t47-11q4-22 4-32 0-3-1-8t0-7q-35 0-106 5t-107 4q-42 0-120-4t-99-4q0 24 2 43l73 16q1 0 7 1t9 2 8 3 9 4 6 4 5 6 1 8q0 9-17 54t-40 99-24 56l-251 1q-14-32-43-109t-28-91q0-12 8-21t24-14 27-7 32-5 23-2q1-11 1-32 0-5-1-16-33 0-98 6t-97 6q-5 0-15-3t-12-2q-45-8-105-8z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="arrows-cw" unicode="" d="M843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-36 90-57t105-20q74 0 139 37t104 99q6 10 30 66 4 13 16 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="doc" unicode="" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="trash-empty" unicode="" d="M286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="ok" unicode="" d="M933 534q0-22-16-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q16-15 16-38z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="ok-circled" unicode="" d="M717 440q0 16-10 26l-51 50q-11 11-25 11t-25-11l-228-227-126 126q-11 11-25 11t-25-11l-51-50q-10-10-10-26 0-15 10-25l202-202q10-10 25-10 15 0 26 10l303 303q10 10 10 25z m140-90q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="ok-circled2" unicode="" d="M654 396l-236-235q-11-11-25-11t-25 11l-164 164q-11 11-11 25t11 25l57 57q10 11 25 11t25-11l82-82 153 154q11 10 25 10t26-10l57-57q10-11 10-26t-10-25z m78-46q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="link" unicode="" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="globe" unicode="" d="M429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m153-291q-2-1-6-5t-7-6q1 0 2 3t3 6 2 4q3 4 12 8 8 4 29 7 19 5 29-6-1 1 5 7t8 7q2 1 8 3t9 4l1 12q-7-1-10 4t-3 12q0-2-4-5 0 4-2 5t-7-1-5-1q-5 2-8 5t-5 9-2 8q-1 3-5 6t-5 6q-1 1-2 3t-1 4-3 3-3 1-4-3-4-5-2-3q-2 1-4 1t-2-1-3-1-3-2q-1-2-4-2t-5-1q8 3-1 6-5 2-9 2 6 2 5 6t-5 8h3q-1 2-5 5t-10 5-7 3q-5 3-19 5t-18 1q-3-4-3-6t2-8 2-7q1-3-3-7t-3-7q0-4 7-9t6-12q-2-4-9-9t-9-6q-3-5-1-11t6-9q1-1 1-2t-2-3-3-2-4-2l-1-1q-7-3-12 3t-7 15q-4 14-9 17-13 4-16-1-3 7-23 15-14 5-33 2 4 0 0 8-4 9-10 7 1 3 2 10t0 7q2 8 7 13 1 1 4 5t5 7 1 4q19-3 28 6 2 3 6 9t6 10q5 3 8 3t8-3 8-3q8-1 8 6t-4 11q7 0 2 10-2 4-5 5-6 2-15-3-4-2 2-4-1 0-6-6t-9-10-9 3q0 0-3 7t-5 8q-5 0-9-9 1 5-6 9t-14 4q11 7-4 15-4 3-12 3t-11-2q-2-4-3-7t3-4 6-3 6-2 5-2q8-6 5-8-1 0-5-2t-6-2-4-2q-1-3 0-8t-1-8q-3 3-5 10t-4 9q4-5-14-3l-5 0q-3 0-9-1t-12-1-7 5q-3 4 0 11 0 2 2 1-2 2-6 5t-6 5q-25-8-52-23 3 0 6 1 3 1 8 4t5 3q19 7 24 4l3 2q7-9 11-14-4 3-17 1-11-3-12-7 4-6 2-10-2 2-6 6t-8 6-8 3q-9 0-13-1-81-45-131-124 4-4 7-4 2-1 3-5t1-6 6 1q5-4 2-10 1 0 25-15 10-10 11-12 2-6-5-10-1 1-5 5t-5 2q-2-3 0-10t6-7q-4 0-5-9t-2-20 0-13l1-1q-2-6 3-19t12-11q-7-1 11-24 3-4 4-5 2-1 7-4t9-6 5-5q2-3 6-13t8-13q-2-3 5-11t6-13q-1 0-2-1t-1 0q2-4 9-8t8-7q1-2 1-6t2-6 4-1q2 11-13 35-8 13-9 16-2 2-4 8t-2 8q1 0 3 0t5-2 4-3 1-1q-1-4 1-10t7-10 10-11 6-7q4-4 8-11t0-8q5 0 11-5t10-11q3-5 4-15t3-13q1-4 5-8t7-5l9-5t7-3q3-2 10-6t12-7q6-2 9-2t8 1 8 2q8 1 16-8t12-12q20-10 30-6-1 0 1-4t4-9 5-8 3-5q3-3 10-8t10-8q4 2 4 5-1-5 4-11t10-6q8 2 8 18-17-8-27 10 0 0-2 3t-2 5-1 4 0 5 2 1q5 0 6 2t-1 7-2 8q-1 4-6 11t-7 8q-3-5-9-4t-9 5q0-1-1-3t-1-4q-7 0-8 0 1 2 1 10t2 13q1 2 3 6t5 9 2 7-3 5-9 1q-11 0-15-11-1-2-2-6t-2-6-5-4q-4-2-14-1t-13 3q-8 4-13 16t-5 20q0 6 1 15t2 14-3 14q2 1 5 5t5 6q2 1 3 1t3 0 2 1 1 3q0 1-2 2-1 1-2 1 4-1 16 1t15-1q9-6 12 1 0 1-1 6t0 7q3-15 16-5 2-1 9-3t9-2q2-1 4-3t3-3 3 0 5 4q5-8 7-13 6-23 10-25 4-2 6-1t3 5 0 8-1 7l-1 5v10l0 4q-8 2-10 7t0 10 9 10q0 1 4 2t9 4 7 4q12 11 8 20 4 0 6 5 0 0-2 2t-5 2-2 2q5 2 1 8 3 2 4 7t4 5q5-6 12-1 5 5 1 9 2 4 11 6t10 5q4-1 5 1t0 7 2 7q2 2 9 5t7 2l9 7q2 2 0 2 10-1 18 6 5 6-4 11 2 4-1 5t-9 4q2 0 7 0t5 1q9 5-3 9-10 2-24-7z m-91-490q115 21 195 106-1 2-7 2t-7 2q-10 4-13 5 1 4-1 7t-5 5-7 5-6 4q-1 1-4 3t-4 3-4 2-5 2-5-1l-2-1q-2 0-3-1t-3-2-2-1 0-2q-12 10-20 13-3 0-6 3t-6 4-6 0-6-3q-3-3-4-9t-1-7q-4 3 0 10t1 10q-1 3-6 2t-6-2-7-5-5-3-4-3-5-5q-2-2-4-6t-2-6q-1 2-7 3t-5 3q1-5 2-19t3-22q4-17-7-26-15-14-16-23-2-12 7-14 0-4-5-12t-4-12q0-3 2-9z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="plus" unicode="" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="plus-circled" unicode="" d="M679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h143v-143q0-15 11-25t25-11h71q15 0 25 11t11 25v143h143q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="minus-circled" unicode="" d="M679 314v72q0 14-11 25t-25 10h-429q-14 0-25-10t-10-25v-72q0-14 10-25t25-10h429q14 0 25 10t11 25z m178 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="minus" unicode="" d="M786 439v-107q0-22-16-38t-38-15h-678q-23 0-38 15t-16 38v107q0 23 16 38t38 16h678q23 0 38-16t16-38z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="text-height" unicode="" d="M973 64q19 0 24-10t-6-25l-71-90q-11-15-27-15t-27 15l-71 90q-11 15-6 25t24 10h44v572h-44q-19 0-24 10t6 25l71 90q11 15 27 15t27-15l71-90q11-15 6-25t-24-10h-44v-572h44z m-928 714l30-15q7-3 118-3 25 0 74 1t73 1q21 0 60 0t60 0h164q3 0 12 0t11 0 9 1 10 5 8 10l24 1q2 0 7-1t8 0q1-62 1-187 0-45-2-61-22-8-38-10-14 24-31 71-1 5-6 27t-8 41-4 20q-3 4-7 7t-8 3-8 1-10 1-9-1q-9 0-37 1t-41 0-36-1-40-3q-5-46-4-76 0-53 1-217t1-254q0-9-1-40t0-51 7-38q22-12 69-24t67-21q2-22 2-28 0-8-1-16l-19-1q-43-1-122 5t-115 5q-28 0-85-5t-84-5q-2 29-2 29v5q9 15 34 24t55 17 44 15q10 23 10 213 0 57-1 170t-2 169v65q0 1 0 9t1 14-1 14-2 13-2 8q-7 7-91 7-18 0-52-7t-44-15q-11-7-19-40t-18-62-24-30q-23 15-31 25v214z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="adjust" unicode="" d="M429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="tag" unicode="" d="M250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="tags" unicode="" d="M250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z m215 0q0-30-21-51l-274-274q-22-21-51-21-20 0-33 8t-29 25l262 262q21 21 21 51 0 29-21 50l-399 399q-21 21-57 36t-65 15h125q29 0 65-15t57-36l399-399q21-21 21-50z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="logout" unicode="" d="M357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-26t-27-64v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="download" unicode="" d="M714 100q0 15-10 25t-25 11-25-11-11-25 11-25 25-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-39l-250-250q-10-11-25-11t-25 11l-250 250q-17 16-8 39 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="down-circled2" unicode="" d="M625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="upload" unicode="" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="up-circled2" unicode="" d="M624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="cancel-circled2" unicode="" d="M612 248l-81-82q-6-5-13-5t-13 5l-76 77-77-77q-5-5-13-5t-12 5l-82 82q-6 6-6 13t6 13l76 76-76 77q-6 5-6 12t6 13l82 82q5 5 12 5t13-5l77-77 76 77q6 5 13 5t13-5l81-82q6-5 6-13t-6-12l-76-77 76-76q6-6 6-13t-6-13z m120 102q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="cancel-circled" unicode="" d="M641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-25 11-16 0-26-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 26-11 14 0 25 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="cancel" unicode="" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="check" unicode="" d="M786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-1 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="align-left" unicode="" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-714q-15 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-857q-15 0-25 11t-11 25v72q0 14 11 25t25 10h857q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-643q-15 0-25 10t-11 25v72q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="align-center" unicode="" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m-214 214v-71q0-15-11-25t-25-11h-500q-14 0-25 11t-11 25v71q0 15 11 25t25 11h500q15 0 25-11t11-25z m143 215v-72q0-14-11-25t-25-11h-786q-14 0-25 11t-11 25v72q0 14 11 25t25 10h786q14 0 25-10t11-25z m-215 214v-72q0-14-10-25t-25-10h-358q-14 0-25 10t-10 25v72q0 14 10 25t25 11h358q14 0 25-11t10-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="align-right" unicode="" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-714q-14 0-25 11t-11 25v71q0 15 11 25t25 11h714q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-857q-14 0-25 11t-11 25v72q0 14 11 25t25 10h857q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-643q-14 0-25 10t-10 25v72q0 14 10 25t25 11h643q15 0 25-11t11-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="align-justify" unicode="" d="M1000 100v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 214v-71q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v71q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 215v-72q0-14-11-25t-25-11h-928q-15 0-25 11t-11 25v72q0 14 11 25t25 10h928q15 0 25-10t11-25z m0 214v-72q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v72q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="star" unicode="" d="M929 489q0-12-15-27l-202-197 48-279q0-4 0-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-12-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="star-empty" unicode="" d="M635 290l170 166-235 34-106 213-105-213-236-34 171-166-41-235 211 111 211-111z m294 199q0-12-15-27l-202-197 48-279q0-4 0-12 0-28-23-28-10 0-22 7l-251 132-250-132q-12-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="search" unicode="" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="mail" unicode="" d="M929 11v428q-18-20-39-36-149-115-238-189-28-24-46-37t-48-28-57-13h-2q-26 0-57 13t-48 28-46 37q-88 74-238 189-21 16-39 36v-428q0-7 6-13t12-5h822q7 0 12 5t6 13z m0 586v14t-1 7-1 7-3 5-5 4-8 2h-822q-7 0-12-6t-6-12q0-94 83-159 107-84 223-176 4-3 20-17t25-21 25-17 28-16 24-5h2q11 0 24 5t28 16 25 17 25 21 20 17q116 92 224 176 30 24 56 65t26 73z m71 21v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v607q0 37 26 63t63 26h822q37 0 63-26t26-63z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="eye" unicode="" d="M929 314q-85 132-213 197 34-58 34-125 0-103-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 243 68 186 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="eye-off" unicode="" d="M310 105l43 79q-48 35-76 88t-27 114q0 67 34 125-128-65-213-197 94-144 239-209z m217 424q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-11 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m202 106q0-4 0-5-59-105-176-316t-176-316l-28-50q-5-9-15-9-7 0-75 39-9 6-9 16 0 7 25 49-80 36-147 96t-117 137q-11 17-11 38t11 39q86 131 212 207t277 76q50 0 100-10l31 54q5 9 15 9 3 0 10-3t18-9 18-10 18-10 10-7q9-5 9-15z m21-249q0-78-44-142t-117-91l157 280q4-25 4-47z m250-72q0-19-11-38-22-36-61-81-84-96-194-149t-234-53l41 74q119 10 219 76t169 171q-65 100-158 164l35 63q53-36 102-85t81-103q11-19 11-39z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="pin" unicode="" d="M268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
|
||||
|
||||
<glyph glyph-name="lock-open" unicode="" d="M929 529v-143q0-15-11-25t-25-11h-36q-14 0-25 11t-11 25v143q0 59-41 101t-101 41-101-41-42-101v-108h53q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h375v108q0 103 73 176t177 74 176-74 74-176z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="lock" unicode="" d="M179 421h285v108q0 59-42 101t-101 41-101-41-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74 177-74 73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" />
|
||||
|
||||
<glyph glyph-name="attach" unicode="" d="M784 77q0-65-45-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 89 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-12 5l-339 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-36 81-36 36 0 59 24t24 59q0 46-35 81l-325 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-6 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 84-35l324-325q56-54 56-131z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="home" unicode="" d="M786 296v-267q0-15-11-25t-25-11h-214v214h-143v-214h-214q-15 0-25 11t-11 25v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-3-7 1-12 6l-35 41q-4 6-3 13t6 12l401 334q18 15 42 15t43-15l136-113v108q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q6-4 6-12t-4-13z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="info-circled" unicode="" d="M571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="help-circled" unicode="" d="M500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-13 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-15-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="shuffle" unicode="" d="M372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-34-25-44q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 39 59 23 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="ccw" unicode="" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="cw" unicode="" d="M857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-61-91-23-111 23-111 61-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q17 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="play" unicode="" d="M772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="play-circled2" unicode="" d="M661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="down-big" unicode="" d="M899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l165 164q20 21 50 21 29 0 51-21l41-41q21-22 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="left-big" unicode="" d="M857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-41q21-22 21-51t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="right-big" unicode="" d="M821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 165q-22 20-22 50t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="up-big" unicode="" d="M899 308q0-28-21-50l-41-42q-22-21-51-21-30 0-50 21l-165 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="up-open" unicode="" d="M939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-25 10l-93 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="right-open" unicode="" d="M618 361l-414-415q-11-10-25-10t-25 10l-93 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l93 93q10 11 25 11t25-11l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
|
||||
|
||||
<glyph glyph-name="left-open" unicode="" d="M654 682l-297-296 297-297q10-10 10-25t-10-25l-93-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 11 25 11t25-11l93-93q10-10 10-25t-10-25z" horiz-adv-x="714.3" />
|
||||
|
||||
<glyph glyph-name="down-open" unicode="" d="M939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l93 92q10 11 25 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="cloud" unicode="" d="M1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 16-1 24 0 118 84 202t202 84q88 0 159-49t105-129q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="text-width" unicode="" d="M45 778l30-15q7-3 118-3 25 0 74 1t73 1q40 0 138 1t170 0 138-2q18-1 31 17l23 1q3 0 8-1t8 0q1-62 1-187 0-45-3-61-21-8-38-10-13 24-30 71-1 5-6 27t-8 41-4 20q-6 7-15 10-3 1-37 1-17 0-52 1t-57 1-53-2-53-3q-5-46-5-76l1-85v29q0-31 0-86t1-101 0-85q0-9-1-40t0-51 7-38q22-12 69-24t67-21q3-22 3-28 0-8-2-16l-19-1q-42-1-121 5t-116 5q-28 0-84-5t-85-5q-2 29-2 29v5q10 15 35 24t55 17 43 15q4 9 7 41t3 81 1 87-1 85 0 50q0 4-1 12t-2 12q0 4 1 25t0 41 0 42-1 38-4 18q-6 7-90 7-23 0-91-8t-77-14q-11-6-19-39t-18-63-24-30q-23 15-31 25v214z m686-715q7 0 24-11t32-23 33-28 20-17q14-11 14-27t-14-27q-2-2-20-17t-33-27-32-23-24-11q-7 0-11 5t-6 16-1 19 0 18 1 11h-571q0-1 1-11t1-18-2-19-5-16-12-5q-7 0-23 11t-32 23-34 27-20 17q-14 11-14 27t14 27q3 2 20 17t34 28 32 23 23 11q7 0 12-6t5-16 2-19-1-18-1-11h571q0 1-1 11t0 18 1 19 6 16 11 6z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="italic" unicode="" d="M0-78l10 48q12 4 34 9t40 11 33 13q16 19 23 56 1 4 35 162t63 303 29 165v14q-13 8-30 11t-39 4-32 3l10 58q19-1 67-4t84-4 67-1q27 0 55 1t68 4 54 4q-2-22-10-50-17-6-57-16t-60-19q-5-10-8-23t-5-23-4-25-4-24q-15-82-49-234t-43-198q-1-5-7-32t-11-51-9-46-4-32l1-10q9-3 103-18-2-24-9-55-6 0-18-1t-18-1q-16 0-49 6t-48 6q-77 1-115 1-28 0-79-5t-68-7z" horiz-adv-x="571.4" />
|
||||
|
||||
<glyph glyph-name="bold" unicode="" d="M310 1q41-18 78-18 210 0 210 187 0 64-23 101-15 24-34 41t-38 26-45 14-47 6-53 1q-40 0-56-6 0-29 0-88t-1-88q0-5 0-38t0-54 2-47 7-37z m-8 417q23-4 61-4 46 0 80 7t61 25 42 50 14 79q0 39-16 68t-45 46-60 24-69 8q-28 0-73-7 0-28 3-84t2-85q0-15 0-45t-1-44q0-26 1-38z m-302-497l1 53q9 2 48 9t59 15q4 7 7 15t4 19 4 18 1 21 0 19v36q0 548-12 572-2 5-12 8t-25 6-28 4-27 3-17 2l-2 46q55 1 190 6t208 6q13 0 38-1t38 0q39 0 76-7t72-24 60-39 41-59 16-76q0-29-9-54t-22-40-36-32-41-25-47-22q86-20 144-75t57-138q0-56-20-101t-52-72-77-48-91-27-98-8q-25 0-74 2t-74 1q-59 0-171-6t-129-7z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="move" unicode="" d="M1000 350q0-14-11-25l-142-143q-11-11-26-11t-25 11-10 25v72h-215v-215h72q14 0 25-10t11-25-11-25l-143-143q-10-11-25-11t-25 11l-143 143q-11 10-11 25t11 25 25 10h72v215h-215v-72q0-14-10-25t-25-11-25 11l-143 143q-11 11-11 25t11 25l143 143q10 11 25 11t25-11 10-25v-72h215v215h-72q-14 0-25 10t-11 25 11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25-25-10h-72v-215h215v72q0 14 10 25t25 11 26-11l142-143q11-10 11-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="link-ext" unicode="" d="M786 332v-178q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h393q7 0 12-5t5-13v-36q0-8-5-13t-12-5h-393q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v178q0 8 5 13t13 5h36q8 0 13-5t5-13z m214 482v-285q0-15-11-25t-25-11-25 11l-98 98-364-364q-5-6-13-6t-12 6l-64 64q-6 5-6 12t6 13l364 364-98 98q-11 11-11 25t11 25 25 11h285q15 0 25-11t11-25z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="check-empty" unicode="" d="M625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="docs" unicode="" d="M946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-37t-38-16h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="list-bullet" unicode="" d="M214 64q0-44-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m0 286q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 7 5 12t13 6h678q7 0 13-6t5-12z m-786 518q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m786-232v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="mail-alt" unicode="" d="M1000 454v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v443q25-27 56-49 202-137 278-192 32-24 51-37t53-27 61-13h2q28 0 61 13t53 27 51 37q95 68 278 192 32 22 56 49z m0 164q0-44-27-84t-68-69q-210-146-262-181-5-4-23-17t-30-22-29-18-32-15-28-5h-2q-12 0-27 5t-32 15-30 18-30 22-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77q0 43 23 72t66 29h822q36 0 63-26t26-63z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="sitemap" unicode="" d="M1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 16t-16 37v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-37t-38-16h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="exchange" unicode="" d="M1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 6-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-178q-5-6-12-6-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="download-cloud" unicode="" d="M714 332q0 8-5 13t-13 5h-125v196q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-196h-125q-8 0-13-5t-5-13q0-8 5-13l196-196q5-5 13-5t13 5l196 196q5 6 5 13z m357-125q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="upload-cloud" unicode="" d="M714 368q0 8-5 13l-196 196q-5 5-13 5t-13-5l-196-196q-5-6-5-13 0-8 5-13t13-5h125v-196q0-8 5-13t12-5h108q7 0 12 5t5 13v196h125q8 0 13 5t5 13z m357-161q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 72 39 134t105 92q-1 17-1 24 0 118 84 202t202 84q87 0 159-49t105-129q40 35 93 35 59 0 101-42t42-101q0-43-23-77 72-17 119-76t46-133z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="plus-squared" unicode="" d="M714 314v72q0 14-10 25t-25 10h-179v179q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-179h-178q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h178v-179q0-14 11-25t25-11h71q15 0 25 11t11 25v179h179q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="unlink" unicode="" d="M245 141l-143-143q-6-5-13-5t-12 5q-6 6-6 13t6 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 12-24 31l134 10 152-153q15-15 38-15t38 15l82 81q16 16 16 37 0 23-16 38l-153 154 10 133q20-11 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l143 143q5 5 12 5t13-5q5-6 5-13t-5-13z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="help" unicode="" d="M393 149v-134q0-9-7-15t-15-7h-134q-9 0-16 7t-7 15v134q0 9 7 16t16 6h134q9 0 15-6t7-16z m176 335q0-30-8-56t-20-43-31-33-32-25-34-19q-23-13-38-37t-15-37q0-10-7-18t-16-9h-134q-8 0-14 11t-6 20v26q0 46 37 87t79 60q33 16 47 32t14 42q0 24-26 41t-60 18q-36 0-60-16-20-14-60-64-7-9-17-9-7 0-14 4l-91 70q-8 6-9 14t3 16q89 148 259 148 45 0 90-17t81-46 59-72 23-88z" horiz-adv-x="571.4" />
|
||||
|
||||
<glyph glyph-name="info" unicode="" d="M357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
|
||||
|
||||
<glyph glyph-name="eraser" unicode="" d="M500 64l188 215h-429l-188-215h429z m565 601q9-19 6-40t-17-36l-500-572q-22-24-54-24h-429q-21 0-38 11t-27 31q-8 19-5 40t17 36l500 572q21 24 53 24h429q21 0 39-11t26-31z" horiz-adv-x="1071.4" />
|
||||
|
||||
<glyph glyph-name="rocket" unicode="" d="M804 600q0 22-16 38t-38 16-38-16-16-38 16-38 38-16 38 16 16 38z m125 161q0-139-43-240t-141-202q-45-44-109-98l-11-211q-1-9-9-15l-214-125q-4-2-9-2-7 0-13 5l-36 36q-7 7-4 17l47 155-156 156-154-47q-2-1-6-1-7 0-12 5l-36 36q-10 11-3 22l125 214q6 8 15 9l211 11q54 64 98 109 105 104 200 144t241 40q7 0 13-6t6-12z" horiz-adv-x="928.6" />
|
||||
|
||||
<glyph glyph-name="lock-open-alt" unicode="" d="M589 421q23 0 38-15t16-38v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v179q0 103 74 177t176 73 177-73 73-177q0-14-10-25t-25-11h-36q-14 0-25 11t-11 25q0 59-42 101t-101 42-101-42-41-101v-179h410z" horiz-adv-x="642.9" />
|
||||
|
||||
<glyph glyph-name="play-circled" unicode="" d="M429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="minus-squared" unicode="" d="M714 314v72q0 14-10 25t-25 10h-500q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h500q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="minus-squared-alt" unicode="" d="M643 404v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 7 5 12t13 5h464q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="level-up" unicode="" d="M568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 38l179 214q10 12 27 12t28-12l178-214q15-18 5-38z" horiz-adv-x="571.4" />
|
||||
|
||||
<glyph glyph-name="level-down" unicode="" d="M18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
|
||||
|
||||
<glyph glyph-name="ok-squared" unicode="" d="M382 125l343 343q11 10 11 25t-11 25l-57 57q-11 11-25 11t-25-11l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-10-10-25t10-25l200-200q11-10 25-10t25 10z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="expand" unicode="" d="M639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q23 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="collapse" unicode="" d="M639 227q-9-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="expand-right" unicode="" d="M607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="sort-alt-up" unicode="" d="M411 46q0-6-6-13l-178-178q-5-5-13-5-6 0-12 5l-179 179q-8 9-4 19 4 11 17 11h107v768q0 8 5 13t13 5h107q8 0 13-5t5-13v-768h107q8 0 13-5t5-13z m589-71v-107q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v107q0 8 5 13t13 5h464q8 0 13-5t5-13z m-107 286v-107q0-8-5-13t-13-5h-357q-8 0-13 5t-5 13v107q0 8 5 13t13 5h357q8 0 13-5t5-13z m-107 285v-107q0-7-5-12t-13-6h-250q-8 0-13 6t-5 12v107q0 8 5 13t13 5h250q8 0 13-5t5-13z m-107 286v-107q0-8-5-13t-13-5h-143q-8 0-13 5t-5 13v107q0 8 5 13t13 5h143q8 0 13-5t5-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="sort-alt-down" unicode="" d="M679-25v-107q0-8-5-13t-13-5h-143q-8 0-13 5t-5 13v107q0 8 5 13t13 5h143q8 0 13-5t5-13z m-268 71q0-6-6-13l-178-178q-5-5-13-5-6 0-12 5l-179 179q-8 9-4 19 4 11 17 11h107v768q0 8 5 13t13 5h107q8 0 13-5t5-13v-768h107q8 0 13-5t5-13z m375 215v-107q0-8-5-13t-13-5h-250q-8 0-13 5t-5 13v107q0 8 5 13t13 5h250q8 0 13-5t5-13z m107 285v-107q0-7-5-12t-13-6h-357q-8 0-13 6t-5 12v107q0 8 5 13t13 5h357q8 0 13-5t5-13z m107 286v-107q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v107q0 8 5 13t13 5h464q8 0 13-5t5-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="right-circled2" unicode="" d="M643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="left-circled2" unicode="" d="M643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="collapse-left" unicode="" d="M571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="plus-squared-alt" unicode="" d="M643 404v-36q0-8-5-13t-13-5h-196v-196q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v196h-196q-8 0-13 5t-5 13v36q0 7 5 12t13 5h196v197q0 8 5 13t13 5h36q8 0 13-5t5-13v-197h196q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="history" unicode="" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="header" unicode="" d="M939-79q-25 0-74 2t-75 2q-24 0-73-2t-74-2q-13 0-21 12t-7 25q0 18 9 26t22 9 29 4 25 9q18 11 18 78l0 218q0 12-1 17-7 3-28 3h-376q-22 0-29-3 0-5 0-17l-1-207q0-79 21-91 9-6 26-8t32-2 25-8 11-26q0-14-6-26t-21-13q-26 0-78 2t-77 2q-24 0-71-2t-71-2q-13 0-20 12t-7 25q0 17 9 25t20 10 26 4 24 9q18 13 18 80l-1 31v454q0 2 1 15t0 20-1 21-2 24-4 20-6 18-9 10q-8 5-25 7t-29 1-23 7-10 26q0 14 6 26t20 13q26 0 78-2t77-2q23 0 71 2t70 2q14 0 21-13t7-26q0-17-9-25t-22-8-27-2-24-7q-20-12-20-90l1-178q0-12 0-18 7-2 22-2h390q14 0 21 2 1 6 1 18l0 178q0 78-19 90-10 6-33 7t-37 7-14 28q0 14 7 26t21 13q24 0 74-2t73-2q24 0 72 2t72 2q14 0 21-13t7-26q0-17-10-25t-22-8-29-2-24-7q-20-13-20-90l1-526q0-66 19-78 9-6 25-8t30-2 23-9 10-25q0-14-6-26t-20-13z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="trash" unicode="" d="M286 82v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m143 0v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m142 0v393q0 8-5 13t-12 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q7 0 12 5t5 13z m-303 554h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
|
||||
|
||||
<glyph glyph-name="brush" unicode="" d="M901 850q39 0 69-26t29-65q0-35-25-84-185-351-260-420-54-51-121-51-71 0-121 52t-51 123q0 71 52 118l356 323q33 30 72 30z m-507-577q22-42 59-73t84-42l1-40q2-118-72-193t-195-75q-68 0-121 26t-85 71-49 102-16 123q4-3 23-17t35-25 32-20 26-9q23 0 31 20 14 37 32 63t39 42 49 27 57 14 70 6z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="clone" unicode="" d="M929-61v607q0 8-6 13t-12 5h-607q-8 0-13-5t-5-13v-607q0-7 5-12t13-6h607q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-607q-37 0-63 26t-27 63v607q0 37 27 64t63 26h607q37 0 63-26t26-64z m-214 215v-90h-72v90q0 7-5 12t-13 6h-607q-7 0-12-6t-6-12v-607q0-8 6-13t12-5h90v-72h-90q-36 0-63 27t-26 63v607q0 37 26 63t63 26h607q37 0 64-26t26-63z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="hourglass-1" unicode="" d="M786 779q0-146-60-258t-148-171q89-59 148-171t60-258h53q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-821q-8 0-13 5t-5 13v36q0 7 5 12t13 5h53q0 146 60 258t149 171q-90 59-149 171t-60 258h-53q-8 0-13 5t-5 12v36q0 8 5 13t13 5h821q8 0 13-5t5-13v-36q0-7-5-12t-13-5h-53z m-72 0h-571q0-37 5-72h561q5 34 5 72z m0-858q0 73-19 140t-50 116-71 85-81 52h-129q-42-17-81-52t-71-85-50-116-19-140h571z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="hand-grab-o" unicode="" d="M429 636q-30 0-51-21t-21-51v-71h-18v52q0 27-18 45t-44 19q-26 0-44-18t-19-45v-239l-18 17v96q0 27-17 45t-45 19q-26 0-44-18t-19-45v-125q0-26 20-45l173-165q22-22 22-57 0-15 10-25t25-11h358q14 0 25 11t10 25v14q0 22 6 43l60 243q6 20 6 43v137q0 27-18 46t-45 18q-25 0-44-18t-18-44v-18h-18v70q0 22-14 40t-36 23q-8 1-13 1-25 0-44-19t-18-44v-71h-18v68q0 28-18 50t-46 24q-3 1-7 1z m0 71q46 0 83-28 32 19 68 19 33 0 62-15t48-42q15 4 33 4 56 0 95-40t39-96v-137q0-29-7-60l-61-244q-3-13-3-39 0-45-31-76t-76-32h-358q-46 0-77 33t-30 80l-172 165q-42 41-42 97v125q0 56 39 95t95 39q6 0 9 0 3 53 42 89t92 36q29 0 55-11 40 38 97 38z" horiz-adv-x="857.1" />
|
||||
|
||||
<glyph glyph-name="hand-paper-o" unicode="" d="M491 779q-26 0-44-19t-18-44v-366h-18v295q0 25-19 44t-44 18-44-18-18-44v-438l-86 115q-21 28-57 28-30 0-51-21t-21-50q0-24 15-43l214-286q21-29 57-29h384q19 0 34 13t19 31l43 226q2 18 2 33v278q0 26-18 44t-44 18-44-18-19-44v-152h-18v295q0 25-18 44t-44 18-44-18-19-44v-295h-17v366q0 26-19 44t-44 19z m0 71q38 0 70-20t50-54q10 3 23 3 55 0 95-40t39-94v-10q59 4 101-36t42-97v-278q0-22-5-46l-42-226q-8-44-43-73t-80-29h-384q-33 0-64 15t-50 42l-214 286q-29 38-29 86 0 59 42 101t101 41q43 0 71-18v242q0 55 40 94t94 40q13 0 24-3 17 34 49 54t70 20z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="calendar-check-o" unicode="" d="M727 312l-286-286q-5-5-12-5t-13 5l-161 161q-5 6-5 13t5 12l26 26q5 5 12 5t13-5l123-123 247 248q6 5 13 5t13-5l25-26q5-5 5-12t-5-13z m-656-391h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 37 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 37 27 63t63 26h35q37 0 64-26t26-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="map-pin" unicode="" d="M286 243q37 0 71 8v-365q0-15-10-25t-26-11h-71q-14 0-25 11t-11 25v365q35-8 72-8z m0 607q118 0 202-84t83-202-83-202-202-83-202 83-84 202 84 202 202 84z m0-125q8 0 13 5t5 13-5 13-13 5q-82 0-139-58t-58-139q0-7 5-12t13-6 13 6 5 12q0 67 47 114t114 47z" horiz-adv-x="571.4" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 45 KiB |
674
LICENSE
|
|
@ -1,674 +0,0 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
16
README.md
|
|
@ -1,19 +1,15 @@
|
|||
# Fantasy Map Generator
|
||||
Azgaar's _Fantasy Map Generator_ demo, v. 0.54b. Based on [D3](https://d3js.org/) Voronoi diagram rendered to svg.
|
||||
|
||||
Azgaar's _Fantasy Map Generator_. Based on [D3](https://d3js.org) Voronoi diagram rendered in svg.
|
||||
Project goal is a procedurally generated map for my *Medieval Dynasty* simulator. Map should be interactive, scalable, fast and plausible. There should be enought space to place at least 500 manors within 7 regions. The imagined area is about 200.000 km2.
|
||||
|
||||
Project goal is a procedurally generated map for my *Medieval Dynasty* simulator. Map should be interactive, scalable, fast and plausible. There should be enough space to place at least 500 burgs within 7 countries. The imagined land area is about 1 million km<sup>2</sup>.
|
||||
Click on the arrow to open the Options. Click on *New map* to genarate a random map based on options setup. Check out [the project wiki](https://github.com/Azgaar/Fantasy-Map-Generator/wiki) for guidance.
|
||||
|
||||
[](https://azgaar.wordpress.com)
|
||||
|
||||
Project is under development, check out the demo [here](https://azgaar.github.io/Fantasy-Map-Generator). Please refer to [the project wiki](https://github.com/Azgaar/Fantasy-Map-Generator/wiki) for guidance. Links to an older versions are listed in the [changelog](https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog).
|
||||
|
||||
Some details are covered in my blog [_Fantasy Maps for fun and glory_](https://azgaar.wordpress.com), you may also keep an eye on my [devboard](https://trello.com/b/7x832DG4/fantasy-map-generator). Comments and ideas are *highly* welcomed, kindly contact me via [email](mailto:maxganiev@yandex.ru). I would also like to see your completed or work in progress maps. For bug reports and change requests please use the project [issues page](https://github.com/Azgaar/Fantasy-Map-Generator/issues).
|
||||
This is a demo version, some new cool features are developed, but not yet deployed. Details are covered in my blog [Fantasy Maps for fun and glory](https://azgaar.wordpress.com), development board is [here](https://trello.com/b/7x832DG4/fantasy-map-generator). Comments and ideas are *highly* welcomed, kindly contact me [via email](mailto:maxganiev@yandex.ru). I would also like to see your completed or work in progress maps. For bug reports and change requests please use the main project [issues page](https://github.com/Azgaar/Fantasy-Map-Generator/issues).
|
||||
|
||||
_Inspiration:_
|
||||
|
||||
* Martin O'Leary's [_Generating fantasy maps_](https://mewo2.com/notes/terrain)
|
||||
* Martin O'Leary's [_Generating fantasy maps_](https://mewo2.com/notes/terrain/)
|
||||
|
||||
* Amit Patel's [_Polygonal Map Generation for Games_](http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation)
|
||||
* Amit Patel's [_Polygonal Map Generation for Games_](http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/)
|
||||
|
||||
* Scott Turner's [_Here Dragons Abound_](https://heredragonsabound.blogspot.com)
|
||||
|
|
@ -1,349 +0,0 @@
|
|||
@import url('https://fonts.googleapis.com/css?family=Bitter:400,400i&subset=latin-ext');
|
||||
body {
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
svg {
|
||||
position: absolute;
|
||||
background-color: #5167a9;
|
||||
border: 1px solid #414345;
|
||||
}
|
||||
|
||||
canvas {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.base {
|
||||
stroke: none;
|
||||
fill: #5167a9;
|
||||
}
|
||||
|
||||
.ocean {
|
||||
filter: url(#blurFilter);
|
||||
}
|
||||
|
||||
.mottling {
|
||||
fill: url(#mottling);
|
||||
opacity: .1;
|
||||
}
|
||||
|
||||
input {
|
||||
width: 100px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
width: 8px;
|
||||
height: 14px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.cursor {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.mapCells {
|
||||
stroke-width: 0.1;
|
||||
shape-rendering: optimizeSpeed;
|
||||
mask: url(#shape);
|
||||
}
|
||||
|
||||
.mapContours {
|
||||
stroke-width: 0.1;
|
||||
shape-rendering: optimizeSpeed;
|
||||
mask: url(#shape);
|
||||
}
|
||||
|
||||
.hillHatch {
|
||||
fill: none;
|
||||
stroke: grey;
|
||||
stroke-width: 1;
|
||||
stroke-dasharray: 0.1, 0.5;
|
||||
}
|
||||
|
||||
.grid {
|
||||
stroke: grey;
|
||||
stroke-width: 0.1;
|
||||
fill: #5167a9;
|
||||
fill-opacity: 0;
|
||||
}
|
||||
|
||||
.hCells {
|
||||
stroke-width: .7;
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.flux {
|
||||
stroke-width: 0.1;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.islandBack {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.lakecoast {
|
||||
fill: #95cff3;
|
||||
stroke: #477794;
|
||||
stroke-width: 0.2;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.coastShade {
|
||||
opacity: 0.5;
|
||||
filter: url(#blurFilter);
|
||||
}
|
||||
|
||||
.coastline {
|
||||
fill: none;
|
||||
stroke: #1f3846;
|
||||
stroke-width: 1;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
#shape {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.shallow {
|
||||
fill: url(#shallowHatch);
|
||||
mask: url(#shape);
|
||||
}
|
||||
|
||||
.coastOutline {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.rivers {
|
||||
fill: none;
|
||||
stroke: #5d97bb;
|
||||
stroke-linecap: round;
|
||||
mask: url(#shape);
|
||||
}
|
||||
|
||||
.riversShade {
|
||||
fill: none;
|
||||
stroke: black;
|
||||
opacity: 0.9;
|
||||
filter: url(#blurFilter);
|
||||
}
|
||||
|
||||
.hatching {
|
||||
fill: none;
|
||||
stroke: grey;
|
||||
stroke-width: 0.1;
|
||||
}
|
||||
|
||||
.debug {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#initial {
|
||||
display: none;
|
||||
font-family: Georgia;
|
||||
position: absolute;
|
||||
cursor: default;
|
||||
color: #fff5da;
|
||||
top: 8%;
|
||||
left: 5%;
|
||||
}
|
||||
|
||||
.buttonBig {
|
||||
font-family: vedrana;
|
||||
border-radius: 5px;
|
||||
text-shadow: 1px 0px 1px #FF5722;
|
||||
color: #ffffff;
|
||||
font-size: 24px;
|
||||
padding: 10px 15px 8px 22px;
|
||||
}
|
||||
|
||||
.buttonBig:hover {
|
||||
background: rgba(110,140,200,0.4);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.buttonBig:active {
|
||||
transform: translateY(1px);
|
||||
}
|
||||
|
||||
.buttonBig span {
|
||||
display: none;
|
||||
text-shadow: none;
|
||||
color: #364162;
|
||||
margin-right: 14px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.buttonBig:hover span {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-shadow: 0px 1px 4px #4c3a35;
|
||||
}
|
||||
|
||||
#title_name {
|
||||
font-size: 40px;
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
#title {
|
||||
font-size: 75px;
|
||||
margin-top: -12px;
|
||||
}
|
||||
|
||||
#version {
|
||||
text-align: right;
|
||||
margin: -5px 14px 14px 0;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.step {
|
||||
font-family: Georgia;
|
||||
text-shadow: 0px 2px 8px #4c3a35;
|
||||
fill: #fff5da;
|
||||
font-size: 5px;
|
||||
fill-opacity: .1;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
#toolbar {
|
||||
display: none;
|
||||
position: absolute;
|
||||
font-size: 18px;
|
||||
width: 27px;
|
||||
top: 187px;
|
||||
border: 1px solid #39464e;
|
||||
border-left: 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
background: linear-gradient(#c2b6b6, #b5bbc2, #7A7A7A);
|
||||
}
|
||||
|
||||
.button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar_button {
|
||||
position: relative;
|
||||
text-shadow: 1px 0px 2px #222c36;
|
||||
color: #cfd6d9;
|
||||
margin: 0 -8px 0 4px;
|
||||
}
|
||||
|
||||
.selected {
|
||||
stroke: black;
|
||||
stroke-width: 0.6;
|
||||
fill: none;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.highlighted {
|
||||
stroke: gray;
|
||||
stroke-width: 0.4;
|
||||
fill: none;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
.cursored {
|
||||
fill: none;
|
||||
stroke-linejoin: round;
|
||||
}
|
||||
|
||||
#cellMenu {
|
||||
display: none;
|
||||
position: absolute;
|
||||
border: 1px solid #39464e;
|
||||
border-radius: 4px;
|
||||
background: linear-gradient(#c2b6b6, #b5bbc2, #7A7A7A);
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.cellMenu_button {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
text-shadow: 1px 0px 5px #222c36;
|
||||
color: #cfd6d9;
|
||||
padding: 1px 4px;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
.toolbar_button:hover, .cellMenu_button:hover {
|
||||
text-shadow: 1px 0px 3px black;
|
||||
color: #ffffff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar_button:active, .cellMenu_button:active {
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.smaller {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
#back {
|
||||
margin-right: -11px;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#hintbar {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 520px;
|
||||
width: 960px;
|
||||
cursor: default;
|
||||
text-shadow: 1px 0px 1px #1d0e0f;
|
||||
color: #ffffff;
|
||||
font-size: 17px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.toolbarSection {
|
||||
display: none;
|
||||
position: absolute;
|
||||
margin: -1px 0 0 27px;
|
||||
border: 1px solid #39464e;
|
||||
border-left: 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
background: linear-gradient(150deg, #bfb7b9, #b5bbc2, #7A7A7A);
|
||||
}
|
||||
|
||||
.toolbarSection > div {
|
||||
margin: 0 -4px 0 5px;
|
||||
}
|
||||
|
||||
#toolbar_step2 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cloud {
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 50px;
|
||||
fill: #fcfcfd;
|
||||
stroke: #39464e;
|
||||
stroke-width: 2px;
|
||||
text-anchor: middle;
|
||||
}
|
||||
|
||||
#cloudArrow {
|
||||
font-size: 16px;
|
||||
fill: #39464e;
|
||||
stroke-width: 0.5;
|
||||
}
|
||||
|
||||
.wind {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
#operative {
|
||||
position: absolute;
|
||||
border: 1px solid #414345;
|
||||
left: 974px;
|
||||
top: 8px;
|
||||
}
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Azgaar's Fantasy Map Generator (WIP)</title>
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="index.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
|
||||
<script src="https://d3js.org/d3.v4.min.js"></script>
|
||||
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
|
||||
<script src="https://d3js.org/d3-contour.v1.min.js"></script>
|
||||
<script src="https://cdn.rawgit.com/jarek-foksa/path-data-polyfill.js/master/path-data-polyfill.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/simplex-noise/2.3.0/simplex-noise.js"></script>
|
||||
<script src="https://cdn.rawgit.com/edeno/d3-save-svg/gh-pages/assets/d3-save-svg.min.js"></script>
|
||||
<script src="https://d3js.org/topojson.v1.min.js"></script>
|
||||
<script src="https://use.fontawesome.com/b6af125a10.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.6.5/dat.gui.min.js"></script>
|
||||
<script src="vec2.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="info" width="100" height="20" style="position:absolute; top:550px; color:'black'"></div>
|
||||
<svg width="960" height="540">
|
||||
<defs>
|
||||
<g id="deftemp">
|
||||
<mask id="shape">
|
||||
<rect x="0" y="0" width="100%" height="100%" fill="black" />
|
||||
</mask>
|
||||
</g>
|
||||
<filter id="blurFilter" x="-1" y="-1" width="100" height="100">
|
||||
<feGaussianBlur in="SourceGraphic" stdDeviation="0.2" />
|
||||
</filter>
|
||||
<pattern id="shallowHatch" width="2" height="4" patternTransform="rotate(90 0 0)" patternUnits="userSpaceOnUse">
|
||||
<line x1="0" y1="0" x2="0" y2="4" style="stroke: black; stroke-width: 0.4; opacity: 0.7" />
|
||||
</pattern>
|
||||
<pattern id="mottling" width="16" height="9" patternUnits="userSpaceOnUse">
|
||||
<filter id='turb'>
|
||||
<feTurbulence type='fractalNoise' baseFrequency='.7' numOctaves='10' stitchTiles='stitch'/>
|
||||
</filter>
|
||||
<rect width='16' height='9' filter="url(#turb)"/>
|
||||
</pattern>
|
||||
<g id="rose" transform="translate(20 75) scale(0.3)">
|
||||
<g id="sL" fill="none" stroke="#3f3f3f" stroke-width="2">
|
||||
<line x1="0" y1="0" x2="0" y2="10000"/>
|
||||
<line x1="0" y1="0" x2="10000" y2="0"/>
|
||||
<line x1="0" y1="0" x2="-10000" y2="0"/>
|
||||
<line x1="0" y1="0" x2="0" y2="-10000"/>
|
||||
</g>
|
||||
<use xlink:href="#sL" transform="rotate(45)"/>
|
||||
<use xlink:href="#sL" transform="rotate(22.5)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-22.5)"/>
|
||||
<use xlink:href="#sL" transform="rotate(11.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-11.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(56.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-56.25)"/>
|
||||
<circle r="9" fill="#1b1b1b"/>
|
||||
<g fill="none" stroke="green" stroke-width="8">
|
||||
<circle r="75"/>
|
||||
<circle r="212" stroke="#1b1b1b"/>
|
||||
<circle r="211"/>
|
||||
</g>
|
||||
<g stroke="#1b1b1b" stroke-width="1" fill="none">
|
||||
<circle r="71"/>
|
||||
<circle r="79"/>
|
||||
<circle r="94"/>
|
||||
<circle r="152"/>
|
||||
<circle r="164"/>
|
||||
<circle r="207"/>
|
||||
</g>
|
||||
<g id="s3">
|
||||
<g id="s2">
|
||||
<g id="s1" stroke="#1b1b1b" stroke-width="1">
|
||||
<path d="M 39.416,95.16 C 33.65,103.95 30.76,110.5 28.93,117.18 C 15.24,113.43 13.54,127.15 23.04,131 C 13.71,145.8 7.84,173.93 0,212 L 0,103 A 103,103 0 0,0 39.416,95.16 z" fill="#47a3d1"/>
|
||||
<path d="M 39.416,95.16 C 33.65,103.95 30.76,110.5 28.93,117.18 C 15.24,113.43 13.54,127.15 23.04,131 C 13.71,145.8 7.84,173.93 0,212 L 0,103 A 103,103 0 0,0 39.416,95.16 z" fill="black" transform="scale(-1,1)"/>
|
||||
<path d="M -31.995,160.849 A 164,164 0 0,0 31.995,160.849 C 18.9,170.1 8.4,176.3 0,207 C -8.4,176.3 -18.9,170.1 -31.995,160.849 z" fill="#c2390f" transform="rotate(22.5)"/>
|
||||
</g>
|
||||
<use xlink:href="#s1" transform="rotate(45)"/>
|
||||
</g>
|
||||
<use xlink:href="#s2" transform="rotate(90)"/>
|
||||
</g>
|
||||
<use xlink:href="#s3" transform="scale(-1)"/>
|
||||
</g>
|
||||
</defs>
|
||||
<g class="viewbox">
|
||||
<g class="container"></g>
|
||||
</g>
|
||||
</svg>
|
||||
<div id="canvasContainer"></div>
|
||||
<div id="menu">
|
||||
<div id="hintbar"></div>
|
||||
<div id="statusbar"></div>
|
||||
<div id="toolbar">
|
||||
<div id="toolbar_buttons">
|
||||
<div id="toolbar_step1" class="step_buttons">
|
||||
<div id="map_template_buttons" style="width:106px" class="toolbarSection">
|
||||
<div id="temp_high_island" class="toolbar_button inline">H</div>
|
||||
<div id="temp_low_island" class="toolbar_button inline">L</div>
|
||||
<div id="temp_isles" class="toolbar_button inline">C</div>
|
||||
<div id="temp_archipelago" class="toolbar_button inline">Ar</div>
|
||||
<div id="temp_atoll" class="toolbar_button inline">At</div>
|
||||
</div>
|
||||
<div id="map_template" class="toolbar_button">☷</div>
|
||||
<div id="map_mode_rand" style="width:74px" class="toolbarSection">
|
||||
<div id="rand_hill" class="toolbar_button inline">H</div>
|
||||
<div id="rand_range" class="toolbar_button inline">R</div>
|
||||
<div id="rand_pit" class="toolbar_button inline">P</div>
|
||||
<div id="rand_trough" class="toolbar_button inline">T</div>
|
||||
</div>
|
||||
<div id="map_mode_draw" style="width:80px" class="toolbarSection">
|
||||
<div id="draw_increase" status="1" class="toolbar_button inline">↥</div>
|
||||
<div id="draw_decrease" status="0" class="toolbar_button inline">↧</div>
|
||||
<div id="draw_align" status="0" class="toolbar_button inline">=</div>
|
||||
<div id="draw_erase" status="0" class="toolbar_button inline smaller">0</div>
|
||||
<div id="draw_smooth" status="0" class="toolbar_button inline smaller">↝</div>
|
||||
</div>
|
||||
<div id="map_mode_selection" style="width:139px" class="toolbarSection">
|
||||
<div id="cell_expand" class="toolbar_button inline">⧾</div>
|
||||
<div id="cell_line" start="" class="toolbar_button inline">↗</div>
|
||||
<div id="cell_cancel" class="toolbar_button inline smaller">⨉</div>
|
||||
<div class="inline smaller">|</div>
|
||||
<div id="map_up" class="toolbar_button inline">↥</div>
|
||||
<div id="map_down" class="toolbar_button inline">↧</div>
|
||||
<div id="map_relax" class="toolbar_button inline">↝</div>
|
||||
<div id="map_random" class="toolbar_button inline">⇝</div>
|
||||
</div>
|
||||
<div id="map_mode" status="-1" class="toolbar_button">☸</div>
|
||||
<div id="change_power" style="margin-left: 2px;" class="toolbar_button inline smaller">.05</div>
|
||||
<div id="map_noise_buttons" style="width:60px" class="toolbarSection">
|
||||
<div id="generate_noise" class="toolbar_button inline smaller">↻</div>
|
||||
<div id="apply_noise" class="toolbar_button inline smaller">✓</div>
|
||||
<div id="cancel_noise" class="toolbar_button inline smaller">⨉</div>
|
||||
</div>
|
||||
<div id="map_noise" style="margin-left: 3px;" class="toolbar_button smaller">෴</div>
|
||||
<div id="map_clear" style="margin-left: 5px;" class="toolbar_button inline smaller">❌</div>
|
||||
</div>
|
||||
<div id="toolbar_step2" class="step_buttons">
|
||||
<div id="map_temp" class="toolbar_button smaller">℃</div>
|
||||
<div id="map_wind_buttons" style="width:60px" class="toolbarSection">
|
||||
<div id="map_wind_animation" style="font-size: x-small;" class="toolbar_button inline">▶️❚❚</div>
|
||||
<div id="map_precipitation" class="toolbar_button inline smaller">☔</div>
|
||||
<div id="map_apply_prec" class="toolbar_button inline smaller">✓</div>
|
||||
</div>
|
||||
<div id="map_wind" class="toolbar_button">W</div>
|
||||
<div id="map_style_buttons" style="width:110px" class="toolbarSection">
|
||||
<div id="map_polygonal" class="toolbar_button inline smaller">P</div>
|
||||
<div id="map_noisy" class="toolbar_button inline smaller">N</div>
|
||||
<div id="map_relaxed" class="toolbar_button inline smaller">R</div>
|
||||
<div id="map_contours" class="toolbar_button inline smaller">C</div>
|
||||
<div id="map_triangled" class="toolbar_button inline smaller">T</div>
|
||||
<div id="map_shaded" class="toolbar_button inline smaller">S</div>
|
||||
<div id="map_flat" class="toolbar_button inline smaller">F</div>
|
||||
</div>
|
||||
<div id="map_style" class="toolbar_button smaller">St</div>
|
||||
</div>
|
||||
<div id="resetZoom" class="toolbar_button smaller">1:1</div>
|
||||
<div id="download" class="toolbar_button">📥</div>
|
||||
<div><span id="back" class="toolbar_button">◀</span>
|
||||
<span id="next" class="toolbar_button">▶</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bottom_panel">
|
||||
<button onclick="$('#options').fadeToggle()">Options</button>
|
||||
<br>Cell: <span id="cell">0</span>; Cell/Point Height: <span id="height">0</span>/<span id="heightPoint">0</span>; River: <span id="river"></span>; <span id="feature"></span>;
|
||||
<br>Temperature: <span id="temperature">no</span> ºC; Precipitation: <span id="precipitation">no</span> cm; Elevation: <span id="elevation">no</span> m; Biom: <span id="biom">no</span>;
|
||||
</div>
|
||||
<div id="options" style="font-size: small;" hidden>
|
||||
<div style="width:50%; float: right;">
|
||||
<label>Map Type: </label><select id="mapType">
|
||||
<option value="heightmap" selected>Heightmap</option>
|
||||
<option value="biomes">Biomes</option>
|
||||
</select><br>
|
||||
<label>Map Style: </label><select id="mapStyle">
|
||||
<option value="map_polygonal">Polygonal</option>
|
||||
<option value="map_triangled">Triangled</option>
|
||||
<option value="map_contours">Contours</option>
|
||||
<option value="map_noisy">Noisy</option>
|
||||
<option value="map_relaxed" selected>Relaxed</option>
|
||||
<option value="map_shaded">Shaded</option>
|
||||
<option value="map_flat">Flat</option>
|
||||
</select><br>
|
||||
<label>Slope hatching
|
||||
<input id="hatchingInput" type="checkbox">
|
||||
</label><br>
|
||||
<label>Coast Style: </label><select id="coastStyle">
|
||||
<option value="simple" selected>Simple</option>
|
||||
<option value="outlined">Outlined</option>
|
||||
<option value="hatched">Hatched</option>
|
||||
</select><br>
|
||||
<label>Map Color: </label><select id="mapColor">
|
||||
<option value="bright" selected>Bright</option>
|
||||
<option value="light">Light</option>
|
||||
<option value="green">Green</option>
|
||||
<option value="blue">Blue</option>
|
||||
<option value="monochrome">Monochrome</option>
|
||||
</select><br>
|
||||
<label>Blur
|
||||
<input id="blurInput" type="checkbox">
|
||||
</label><br>
|
||||
<label>Voronoi polygons
|
||||
<input id="strokesInput" type="checkbox">
|
||||
</label><br>
|
||||
<label>Toggle flux map
|
||||
<input id="fluxInput" type="checkbox">
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<label>Wave power:</label>
|
||||
<input id="wavepowerInput" value="0.5" type="range" min="0" max="1" step="0.01" oninput="wavepowerOutput.value = wavepowerInput.valueAsNumber">
|
||||
<output id="wavepowerOutput">0.5</output>
|
||||
<br>
|
||||
<label>Downcutting:</label>
|
||||
<input id="downcuttingInput" value="0.05" type="range" min="0" max="0.3" step="0.01" oninput="downcuttingOutput.value = downcuttingInput.valueAsNumber">
|
||||
<output id="downcuttingOutput">0.05</output>
|
||||
<br><label>Temperature:</label>
|
||||
<input id="temperatureInput" value="10" type="range" min="0" max="25" step="1" oninput="temperatureOutput.value = temperatureInput.valueAsNumber; randomTemp.checked = false;">
|
||||
<output id="temperatureOutput">10</output> <label>(random<input type="checkbox" id="randomTemp" checked>)</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="initial">
|
||||
<div id="title_name" class="title">Azgaar's</div>
|
||||
<div id="title" class="title">Fantasy Map Generator</div>
|
||||
<div id="version" class="title">ver. 0.26a</div>
|
||||
<div id="explore" class="buttonBig">Explore the Map<span>show the current map</span></div>
|
||||
<div id="new_journey" class="buttonBig">Creation Journey<span>create a new map</span></div>
|
||||
<div id="new_random" class="buttonBig">Random Map<span>generate a new random map</span></div>
|
||||
<div id="about" onclick="window.open('http://www.azgaar.wordpress.com')" class="buttonBig">Development Blog<span>read about generator creation process</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="operative">
|
||||
Color: <input class="jscolor" value="0A1726"></input><br>
|
||||
Angle modifier: <input id="angleInput" value="15" type="range" min="0" max="50" step="1" onchange="angleOutpoot.value = this.value"></input>
|
||||
<output id="angleOutpoot">15</output><br>
|
||||
Alignment: <input id="alignmentInput" value="0.2"></input><br>
|
||||
Separation: <input id="separationInput" value="0.5"></input><br>
|
||||
Persistence: <input id="persistenceInput" value="0.1"></input><br>
|
||||
</div>
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</body>
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
function Vec2(x, y) {
|
||||
this.x = x || 0;
|
||||
this.y = y || 0;
|
||||
return this;
|
||||
}
|
||||
|
||||
Vec2.prototype.add = function(v) {
|
||||
this.x += v.x;
|
||||
this.y += v.y;
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.subtract = function(v) {
|
||||
this.x -= v.x;
|
||||
this.y -= v.y;
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.scale = function(s) {
|
||||
this.x = this.x * s;
|
||||
this.y = this.y * s;
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.scaleTo = function(s) {
|
||||
var length = this.length();
|
||||
this.x = this.x * s / length;
|
||||
this.y = this.y * s / length;
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.normalize = function() {
|
||||
var length = this.length();
|
||||
this.x = this.x / length;
|
||||
this.y = this.y / length;
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.length = function() {
|
||||
return Math.sqrt(this.x * this.x + this.y * this.y);
|
||||
};
|
||||
|
||||
Vec2.prototype.truncate = function(max) {
|
||||
var length = this.length();
|
||||
if (length > max) {
|
||||
this.x = this.x * max / length;
|
||||
this.y = this.y * max / length;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Vec2.prototype.dot = function(v) {
|
||||
return this.x * v.x + this.y * v.y;
|
||||
};
|
||||
|
||||
Vec2.prototype.clone = function() {
|
||||
return new Vec2(this.x, this.y);
|
||||
};
|
||||
|
||||
Vec2.prototype.turn = function(a) {
|
||||
this.x = this.x * Math.cos(a) - this.y * Math.sin(a),
|
||||
this.y = this.x * Math.sin(a) + this.y * Math.cos(a)
|
||||
return this;
|
||||
};
|
||||
210
icons.css
Normal file
BIN
images/Facebook.png
Normal file
|
After Width: | Height: | Size: 318 B |
BIN
images/Pinterest.png
Normal file
|
After Width: | Height: | Size: 443 B |
BIN
images/Reddit.png
Normal file
|
After Width: | Height: | Size: 509 B |
BIN
images/Tumblr.png
Normal file
|
After Width: | Height: | Size: 310 B |
BIN
images/Twitter.png
Normal file
|
After Width: | Height: | Size: 379 B |
BIN
images/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 740 B |
BIN
images/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
images/preview.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
index.css
Normal file
|
|
@ -1,23 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Azgaar's Fantasy Map Generator Demo</title>
|
||||
<meta name="author" content="Azgaar (Max Ganiev)">
|
||||
<meta charset="utf-8">
|
||||
<meta name="description" content="Azgaar's Fantasy Map Generator demo. Based on D3 Voronoi diagram rendered to svg.">
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
|
||||
<script src="https://d3js.org/d3.v4.min.js"></script>
|
||||
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
|
||||
<script src="https://mewo2.com/js/priority-queue.js"></script>
|
||||
<script src="https://rawgit.com/LuisSevillano/9f6c9edd7f90ac6cca54ed744e28f3ee/raw/38f9774f83f00b286360db1ea97d851f79e594aa/polylabel.js"></script>
|
||||
<meta name="author" content="Azgaar (Max Ganiev)">
|
||||
<meta name="description" content="Azgaar's Fantasy Map Generator (demo version). Based on D3 Voronoi diagram rendered to svg">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:url" content="https://azgaar.github.io/Fantasy-Map-Generator/">
|
||||
<meta property="og:title" content="Azgaar's Fantasy Map Generator">
|
||||
<meta property="og:description" content="Demo version. Based on D3 Voronoi diagram rendered to svg">
|
||||
<meta property="og:image" content="images/preview.png">
|
||||
<link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32"/>
|
||||
<link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16"/>
|
||||
<link rel="canonical" href="https://azgaar.github.io/Fantasy-Map-Generator/">
|
||||
<script src="libs/jquery-3.1.1.min.js"></script>
|
||||
<script src="libs/d3.v4.min.js"></script>
|
||||
<script src="libs/d3-scale-chromatic.v1.min.js"></script>
|
||||
<script src="libs/priority-queue.js"></script>
|
||||
<script src="names.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="index.css?version=0.52b"/>
|
||||
<script src="libs/jquery-ui.min.js"></script>
|
||||
<script src="libs/polylabel.js"></script>
|
||||
<script src="libs/quantize.js" defer></script>
|
||||
<script src="libs/d3-hexbin.v0.2.min.js" defer></script>
|
||||
<link rel="stylesheet" type="text/css" href="index.css?version=0.554b"/>
|
||||
<link rel="stylesheet" type="text/css" href="icons.css?version=0.554b"/>
|
||||
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="./font/fontello.css"/>
|
||||
<script src="quantize.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="540">
|
||||
<body class="fullscreen">
|
||||
<div id="loading">
|
||||
<h1 class="icon-cog spin"></h1>
|
||||
<p id="loading-text">Loading...</p>
|
||||
</div>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="fullscreen">
|
||||
<defs>
|
||||
<filter id="blurFilter" x="-1" y="-1" width="100" height="100">
|
||||
<feGaussianBlur in="SourceGraphic" stdDeviation="0.2"/>
|
||||
|
|
@ -34,7 +47,7 @@
|
|||
<mask id="shape" x="0" y="0" width="100%" height="100%" fill="black"></mask>
|
||||
</g>
|
||||
<g id="defs-icons">
|
||||
<symbol id="icon-anchor" viewBox="0 0 28 28">
|
||||
<symbol id="icon-anchor" viewBox="0 0 28 32">
|
||||
<title>Anchor</title>
|
||||
<path d="M15 4c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM28 18.5v5.5c0 0.203-0.125 0.391-0.313 0.469-0.063 0.016-0.125 0.031-0.187 0.031-0.125 0-0.25-0.047-0.359-0.141l-1.453-1.453c-2.453 2.953-6.859 4.844-11.688 4.844s-9.234-1.891-11.688-4.844l-1.453 1.453c-0.094 0.094-0.234 0.141-0.359 0.141-0.063 0-0.125-0.016-0.187-0.031-0.187-0.078-0.313-0.266-0.313-0.469v-5.5c0-0.281 0.219-0.5 0.5-0.5h5.5c0.203 0 0.391 0.125 0.469 0.313s0.031 0.391-0.109 0.547l-1.563 1.563c1.406 1.891 4.109 3.266 7.203 3.687v-10.109h-3c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h3v-2.547c-1.188-0.688-2-1.969-2-3.453 0-2.203 1.797-4 4-4s4 1.797 4 4c0 1.484-0.812 2.766-2 3.453v2.547h3c0.547 0 1 0.453 1 1v2c0 0.547-0.453 1-1 1h-3v10.109c3.094-0.422 5.797-1.797 7.203-3.687l-1.563-1.563c-0.141-0.156-0.187-0.359-0.109-0.547s0.266-0.313 0.469-0.313h5.5c0.281 0 0.5 0.219 0.5 0.5z"></path>
|
||||
</symbol>
|
||||
|
|
@ -51,9 +64,48 @@
|
|||
</filter>
|
||||
<rect width='16' height='9' filter="url(#turb)"/>
|
||||
</pattern>
|
||||
<g id="rose" stroke-width="1">
|
||||
<g id="sL" stroke="#3f3f3f">
|
||||
<line x1="0" y1="-10000" x2="0" y2="10000"/>
|
||||
<line x1="-10000" y1="0" x2="10000" y2="0"/>
|
||||
</g>
|
||||
<use xlink:href="#sL" transform="rotate(45)"/>
|
||||
<use xlink:href="#sL" transform="rotate(22.5)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-22.5)"/>
|
||||
<use xlink:href="#sL" transform="rotate(11.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-11.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(56.25)"/>
|
||||
<use xlink:href="#sL" transform="rotate(-56.25)"/>
|
||||
<g stroke-width="8">
|
||||
<circle r="9" stroke="#000000" fill="#1b1b1b"/>
|
||||
<circle r="75" stroke="#008000" fill="#ffffff" fill-opacity=".1"></circle>
|
||||
<circle r="212" stroke="#1b1b1b"></circle>
|
||||
<circle r="211" stroke="#008000" fill="#ffffff" fill-opacity=".1"></circle>
|
||||
</g>
|
||||
<g stroke="#1b1b1b">
|
||||
<circle r="71"/>
|
||||
<circle r="79"/>
|
||||
<circle r="94"/>
|
||||
<circle r="152"/>
|
||||
<circle r="164"/>
|
||||
<circle r="207"/>
|
||||
</g>
|
||||
<g id="s3">
|
||||
<g id="s2">
|
||||
<g id="s1" stroke="#1b1b1b">
|
||||
<path d="M 39.416,95.16 C 33.65,103.95 30.76,110.5 28.93,117.18 C 15.24,113.43 13.54,127.15 23.04,131 C 13.71,145.8 7.84,173.93 0,212 L 0,103 A 103,103 0 0,0 39.416,95.16 z" fill="#47a3d1"/>
|
||||
<path d="M 39.416,95.16 C 33.65,103.95 30.76,110.5 28.93,117.18 C 15.24,113.43 13.54,127.15 23.04,131 C 13.71,145.8 7.84,173.93 0,212 L 0,103 A 103,103 0 0,0 39.416,95.16 z" fill="black" transform="scale(-1,1)"/>
|
||||
<path d="M -31.995,160.849 A 164,164 0 0,0 31.995,160.849 C 18.9,170.1 8.4,176.3 0,207 C -8.4,176.3 -18.9,170.1 -31.995,160.849 z" fill="#c2390f" transform="rotate(22.5)"/>
|
||||
</g>
|
||||
<use xlink:href="#s1" transform="rotate(45)"/>
|
||||
</g>
|
||||
<use xlink:href="#s2" transform="rotate(90)"/>
|
||||
</g>
|
||||
<use xlink:href="#s3" transform="scale(-1)"/>
|
||||
</g>
|
||||
</defs>
|
||||
</svg>
|
||||
<canvas id="canvas" width="960" height="540" style="opacity: 0;"></canvas>
|
||||
<canvas id="canvas" style="opacity: 0"></canvas>
|
||||
<div id="optionsContainer">
|
||||
<div id="collapsible">
|
||||
<button id="optionsTrigger" class="options" title="Click to display Options">▶</button>
|
||||
|
|
@ -66,6 +118,7 @@
|
|||
<button id="styleTab" class="options">Style</button>
|
||||
<button id="optionsTab" class="options">Options</button>
|
||||
<button id="customizeTab" class="options">Customize</button>
|
||||
<button id="aboutTab" class="options">?</button>
|
||||
</div>
|
||||
<div id="layoutContent" class="tabcontent">
|
||||
<p style="display: inline-block;">Select preset:</p>
|
||||
|
|
@ -81,13 +134,14 @@
|
|||
<li title="Toggle Ocean, not movable" id="toggleOcean" onclick="$('#oceanPattern').fadeToggle()" class="solid">Ocean</li>
|
||||
<li title="Toggle Landmass, not movable" id="toggleLandmass" onclick="$('#landmass').fadeToggle()" class="solid">Landmass</span></li>
|
||||
<li title="Toggle Heightmap" id="toggleHeight" class="buttonoff">Heightmap</li>
|
||||
<li title="Toggle Grid" id="toggleGrid" class="buttonoff" onclick="$('#grid').fadeToggle()">Grid</li>
|
||||
<li title="Toggle Overlay" id="toggleOverlay" class="buttonoff">Overlay</li>
|
||||
<li title="Toggle Cultures map" id="toggleCultures" class="buttonoff">Cultures</li>
|
||||
<li title="Toggle Routes" id="toggleRoutes" onclick="$('#routes').fadeToggle()">Routes</li>
|
||||
<li title="Toggle Rivers" id="toggleRivers" onclick="$('#rivers').fadeToggle()">Rivers</li>
|
||||
<li title="Toggle Countries" id="toggleCountries">Countries</li>
|
||||
<li title="Toggle Borders" id="toggleBorders" onclick="$('#borders').fadeToggle()">Borders</li>
|
||||
<li title="Toggle Relief icons" id="toggleRelief" onclick="$('#terrain').fadeToggle()">Relief</li>
|
||||
<li title="Toggle Grid" id="toggleGrid" class="buttonoff" onclick="$('#grid').fadeToggle()">Grid</li>
|
||||
<li title="Toggle Labels" id="toggleLabels" onclick="$('#labels').fadeToggle()">Labels</li>
|
||||
<li title="Toggle Burg icons" id="toggleIcons" onclick="$('#burgs').fadeToggle()">Burgs</li>
|
||||
</div>
|
||||
|
|
@ -97,6 +151,8 @@
|
|||
<select id="styleElementSelect">
|
||||
<option value="oceanBase" selected>Ocean</option>
|
||||
<option value="landmass">Landmass</option>
|
||||
<option value="grid">Grid</option>
|
||||
<option value="overlay">Overlay</option>
|
||||
<option value="terrs">Heightmap</option>
|
||||
<option value="cults">Cultures</option>
|
||||
<option value="roads">Roads</option>
|
||||
|
|
@ -109,11 +165,21 @@
|
|||
<option value="neutralBorders">Neutral Borders</option>
|
||||
<option value="coastline">Coastline</option>
|
||||
<option value="lakes">Lakes</option>
|
||||
<option value="grid">Grid</option>
|
||||
<option value="labels">Labels</option>
|
||||
<option value="burgs">Burgs</option>
|
||||
<option value="scaleBar">Scale bar</option>
|
||||
<option value="ruler">Rulers</option>
|
||||
</select>
|
||||
<div id="styleInputs">
|
||||
<div id="styleOverlay">
|
||||
<br>Overlay type: <select id="styleOverlayType" class="pureInput">
|
||||
<option value="hex" selected>Hex grid</option>
|
||||
<option value="square">Square grid</option>
|
||||
<option value="windrose">Wind rose</option>
|
||||
</select><br>
|
||||
<br>Size: <input id="styleOverlaySize" type="range" min="2" max="20" step="0.2" value="5">
|
||||
<output id="styleOverlaySizeOutput">5</output>
|
||||
</div>
|
||||
<div id="styleFill">
|
||||
Fill: <input id="styleFillInput" type="color" value="#5E4FA2"/>
|
||||
<output id="styleFillOutput">#5E4FA2</output>
|
||||
|
|
@ -164,16 +230,30 @@
|
|||
<option value="monochrome">Monochrome</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<p>Toggle filters:</p>
|
||||
<button onclick="$('svg').toggleClass('grayscale')" class="buttonoff">Grayscale</button>
|
||||
<button onclick="$('svg').toggleClass('sepia')" class="buttonoff">Sepia</button>
|
||||
<button onclick="$('svg').toggleClass('tint')" class="buttonoff">Tint</button>
|
||||
<button onclick="$('svg').toggleClass('dingy')" class="buttonoff">Dingy</button>
|
||||
</div>
|
||||
<div id="mapFilters">
|
||||
<p>Toggle filters:</p>
|
||||
<button id="grayscale" class="radio">Grayscale</button>
|
||||
<button id="sepia" class="radio">Sepia</button>
|
||||
<button id="tint" class="radio">Tint</button>
|
||||
<button id="dingy" class="radio">Dingy</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="optionsContent" class="tabcontent">
|
||||
<p>Generate new map to apply the options!</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td title="Canvas size">Map size</td>
|
||||
<td style="width: 130px;">
|
||||
<span title="width">w:</span>
|
||||
<input class="pairedNumber" id="mapWidthInput" type="number" min="240" value="960">
|
||||
<span title="height">h:</span>
|
||||
<input class="pairedNumber" id="mapHeightInput" type="number" min="135" value="540">
|
||||
</td>
|
||||
<td>
|
||||
<a title="Toggle full-screen / window view" id="mapScreenSize" class="icon-resize-small"></a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Select template to be used for a Heightmap generation">Heightmap template</td>
|
||||
<td>
|
||||
|
|
@ -190,14 +270,23 @@
|
|||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Set the graph size. A non-default values are not properly tested yet! Works good with converted maps">Graph size</td>
|
||||
<td title="Set the graph size. Map on size 3 and 4 requires up to 1 minute to be generated!">Graph size</td>
|
||||
<td>
|
||||
<input id="sizeInput" type="range" min="0.8" max="4" step="0.1" value="1">
|
||||
<input id="sizeInput" type="range" min="1" max="4" value="1">
|
||||
</td>
|
||||
<td>
|
||||
<output id="sizeOutput">1</output>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Allow options randomization">Randomize</td>
|
||||
<td>
|
||||
<input id="randomizeInput" type="range" min="0" max="1" value="1">
|
||||
</td>
|
||||
<td>
|
||||
<output id="randomizeOutput">✓</output>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Define how many Settlements should be placed">Burgs count</td>
|
||||
<td>
|
||||
|
|
@ -226,12 +315,21 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Maximum distance to a closer manor to consider polygon as a Neutral Land">Burg influence radius</td>
|
||||
<td title="Distance to a consider a land as neutral">Neutral distance</td>
|
||||
<td>
|
||||
<input id="neutralInput" type="range" min="1" max="100" step="1" value="100">
|
||||
<input id="neutralInput" type="range" min="1" max="500" step="1" value="200">
|
||||
</td>
|
||||
<td>
|
||||
<output id="neutralOutput">100</output>
|
||||
<output id="neutralOutput">200</output>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td title="Set precipitation level. Controls river quantity and power">Precipitation</td>
|
||||
<td>
|
||||
<input id="precInput" type="range" min="0" max="50" value="15">
|
||||
</td>
|
||||
<td>
|
||||
<output id="precOutput">15</output>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
@ -283,57 +381,66 @@
|
|||
</table>
|
||||
</div>
|
||||
<div id="customizeContent" class="tabcontent" style="display: block;">
|
||||
<p title="Click "Start" to initiate customization, "Complete" to finalize the Heightmap">Heightmap customization:</p>
|
||||
<div id="customizationMain">
|
||||
<button title="Roll back to Heightmap customization" id="fromHeightmap">Roll back</button>
|
||||
<button title="Start from scratch" id="fromScratch">Clear All</button>
|
||||
<button class="buttonoff" title="Finalize the Heightmap. Not allowed if landmass area is insufficient" id="getMap" disabled="disabled">Complete</button>
|
||||
<div id="openEditor">
|
||||
<p>Customize:</p>
|
||||
<button id="editHeightmap">Heightmap</button>
|
||||
<button id="editCountries">Countries</button>
|
||||
<button id="editScale">Scale</button>
|
||||
</div>
|
||||
<div id="customizationMenu" style="display: none;">
|
||||
<div id="customizeTools">
|
||||
<label title="Customization Tools">Tools:</label><br>
|
||||
<button title="Open template editor" id="applyTemplate">Apply Template</button>
|
||||
<button title="Open Image Convertion master" id="convertImage">Convert Image</button>
|
||||
<button title="Rescale elevation" id="rescale">Rescale</button>
|
||||
<div id="customizeHeightmap" style="display: none;">
|
||||
<p title="Click 'Start' to initiate customization, 'Complete' to finalize the Heightmap">Heightmap customization:</p>
|
||||
<div>
|
||||
<button title="Roll back to Heightmap customization" id="fromHeightmap">Roll back</button>
|
||||
<button title="Start from scratch" id="fromScratch">Clear all</button>
|
||||
<button class="buttonoff" title="Finalize the Heightmap. Not allowed if landmass area is insufficient" id="getMap" disabled="disabled">Complete</button>
|
||||
</div>
|
||||
<div id="customizationMenu" style="display: none;">
|
||||
<div id="customizeTools">
|
||||
<label title="Customization Tools">Tools:</label><br>
|
||||
<button title="Display brushes panel" id="paintBrushes">Paint Brushes</button>
|
||||
<button title="Open template editor" id="applyTemplate">Template Editor</button>
|
||||
<button title="Open Image Converter" id="convertImage">Image Converter</button>
|
||||
<button title="Show Heightmap in perspective" id="perspectiveView">Perspective View</button>
|
||||
</div>
|
||||
<label title="Count of Land cells and Land-Map ratio">Landmass: <span id="landmassCounter">0</span></label><hr>
|
||||
</div>
|
||||
<div id="customizeBrushes">
|
||||
<label title="Select brush and click on the map to use it">Free Draw brushes:</label><br>
|
||||
<button id="brushElevate" title="Click and drag the map to increase cells elevation" class="radio">↥</button>
|
||||
<button id="brushDepress" title="Click and drag the map to decrease cells elevation" class="radio">↧</button>
|
||||
<button id="brushAlign" title="Click and drag the map to align cells elevation" class="radio">=</button>
|
||||
<button id="brushSmooth" title="Click and drag the map to smooth cells elevation" class="radio">~</button>
|
||||
<button id="brushHill" title="Click on the map to place a Hill" class="radio pressed">H</button>
|
||||
<button id="brushPit" title="Click on the map to place a Pit" class="radio">P</button>
|
||||
<button id="brushRange" title="Select two points to place a Range" class="radio">R</button>
|
||||
<button id="brushTrough" title="Select two points to place a Trought" class="radio">T</button>
|
||||
<button title="Smooth all heights" id="smoothHeights">≈</button>
|
||||
<br><label title="Set the brush power">Brush power:</label>
|
||||
<input id="brushPower" type="range" min="0.01" max="0.3" step="0.01" value="0.05">
|
||||
<output id="brushPowerOutput">0.05</output><br>
|
||||
</div><br>
|
||||
<label title="Count of Land cells and Land-Map ratio">Landmass: <span id="landmassCounter">0</span></label><hr>
|
||||
</div>
|
||||
<p>Click to add a Label:</p>
|
||||
<button id="addLabel" class="radio">Label</button>
|
||||
<button id="addBurg" class="radio">Burg</button>
|
||||
<div>
|
||||
<p>Save / Load map:</p>
|
||||
<button id="saveMap" title="Save in .map format to be loaded later as fully functional map">Save Map</button>
|
||||
<button id="loadMap" title="Load fully functional map in a .map format">Load Map</button>
|
||||
<button id="savePNG" title="Download the visible part of the map as .png image">Get PNG</button>
|
||||
<button id="saveSVG" title="Download the map as .svg image for later use in vector graphics editors">Get SVG</button>
|
||||
<input type="file" accept=".map" id="fileToLoad">
|
||||
<div id="addFeature">
|
||||
<p>Click to add:</p>
|
||||
<button id="addLabel" title="Click on map to place label. Hold Shift to place several labels" class="radio">Label</button>
|
||||
<button id="addBurg" title="Click on map to place burg icon with lbel. Hold Shift to place several" class="radio">Burg</button>
|
||||
<button id="addRiver" title="Click on map to place new river on extend an existing one" class="radio">River</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="aboutContent" class="tabcontent">
|
||||
<p><a href="https://github.com/Azgaar/Fantasy-Map-Generator" target="_blank">Fantasy Map Generator</a> is an online tool which produces a procedurally generated fantasy maps. You may either use an auto-generated maps or create you own map manually or with a help of templates or image converter. Check out the <a href="https://github.com/Azgaar/Fantasy-Map-Generator/wiki" target="_blank">wiki</a> for guidance.<p/>
|
||||
<p>This is a Demo version, project is still under development. For older versions see the <a href="https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Changelog" target="_blank">changelog</a>. Some details are covered in my <a href="https://azgaar.wordpress.com/" target="_blank">blog</a>. To track the current progress see the <a href="https://trello.com/b/7x832DG4/fantasy-map-generator" target="_blank">devboard</a>.<p/>
|
||||
<p>Please report bugs and suggest new features <a href="https://github.com/Azgaar/Fantasy-Map-Generator/issues" target="_blank">here</a>. You may also <a href="mailto:maxganiev@yandex.ru">send me</a> an email.<p/>
|
||||
<ul class="share-buttons">
|
||||
<li><a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F"e=" title="Share on Facebook" target="_blank"><img alt="Share on Facebook" src="images/Facebook.png" /></a></li>
|
||||
<li><a href="https://twitter.com/intent/tweet?source=https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F&text=:%20https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F" target="_blank" title="Tweet"><img alt="Tweet" src="images/Twitter.png" /></a></li>
|
||||
<li><a href="http://www.tumblr.com/share?v=3&u=https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F"e=&s=" target="_blank" title="Post to Tumblr"><img alt="Post to Tumblr" src="images/Tumblr.png" /></a></li>
|
||||
<li><a href="http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F&description=" target="_blank" title="Pin it"><img alt="Pin it" src="images/Pinterest.png" /></a></li>
|
||||
<li><a href="http://www.reddit.com/submit?url=https%3A%2F%2Fazgaar.github.io%2FFantasy-Map-Generator%2F&title=" target="_blank" title="Submit to Reddit"><img alt="Submit to Reddit" src="images/Reddit.png" /></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="sticked">
|
||||
<button id="randomMap" title="Generate new random map based on options being set" class="options">New Map</button>
|
||||
<div style="float:right; margin-right:5px;">
|
||||
<button id="saveButton" title="Select file format to save map" class="options">Save as</button>
|
||||
<div id="saveDropdown">
|
||||
<div id="saveMap" title="Save as fully functional map in .map format">.map</div>
|
||||
<div id="saveSVG" title="Download the map as .svg image for later use in vector graphics editors">.svg</div>
|
||||
<div id="savePNG" title="Download the visible part of the map as .png image">.png</div>
|
||||
<div id="activeZooming" title="Click to show hidden elements (like labels)" class="icon-eye-off"></div>
|
||||
</div>
|
||||
<button id="loadMap" title="Load fully functional map in a .map format" class="options">Load</button>
|
||||
<input type="file" accept=".map" id="fileToLoad">
|
||||
<button id="printMap" title="Print visible part of the map" class="options">Print</button>
|
||||
<button id="zoomReset" title="Reset map zoom to default" class="options">Reset Zoom</button>
|
||||
<!-- Zoom should be smooth and centrified, to be fixed later
|
||||
<button id="zoomMinus" title="Zoom out" class="options">-</button>
|
||||
<button id="zoomPlus" title="Zoom in" class="options">+</button>
|
||||
-->
|
||||
<button id="zoomReset" title="Reset map zoom to default" class="options">Reset Zoom</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -367,24 +474,29 @@
|
|||
</div>
|
||||
|
||||
<div id="riverEditor" style="display: none">
|
||||
<button id="riverRisize" title="Resize (rotate, scale) river" class="editButton icon-arrows-cw"></button>
|
||||
<i id="riverAngleIcon" title="Rotate river" class="dialog-icon icon-cw"></i>
|
||||
<input id="riverAngle" class="editTrigger" value="0" type="range" min="-180" max="180" step="0.2">
|
||||
<button id="riverWidth" title="Change river width and widening" class="editButton icon-sort-alt-up"></button>
|
||||
<i id="riverWidthIcon" title="Change river width" class="dialog-icon icon-w"></i>
|
||||
<input id="riverWidthInput" title="Change river width" class="editTrigger" value="1" type="range" min="0.2" max="5" step="0.1">
|
||||
<i id="riverIncrementIcon" title="Change river bed increment (widening speed)" class="dialog-icon icon-i"></i>
|
||||
<input id="riverIncrement" title="Change river bed increment (widening speed)" class="editTrigger" value="1" type="range" min="0.02" max="2" step="0.02">
|
||||
<button id="riverRegenerate" title="Regenerate river" class="editButton icon-shuffle"></button>
|
||||
<button id="riverResize" title="Visually transform (rotate, scale) river" class="editButton icon-arrows-cw"></button>
|
||||
<i id="riverAngleIcon" title="Rotate river (set angle)" class="dialog-icon icon-a"></i>
|
||||
<input id="riverAngle" title="Rotate river (set angle)" class="editTrigger" value="0" type="range" min="-180" max="180" step="0.2">
|
||||
<span id="riverAngleValue" class="editValue">0°</span>
|
||||
<i id="riverScaleIcon" title="Change river scale" class="dialog-icon icon-link-ext"></i>
|
||||
<input id="riverScale" class="editTrigger" value="1" type="number" min="0.1" max="3" step="0.01">
|
||||
<span id="riverReset" title="Reset transformation" class="editButtonS icon-cancel-circled2"></span>
|
||||
<button id="riverRenegerate" title="Regenerate river" class="editButton icon-shuffle"></button>
|
||||
<i id="riverScaleIcon" title="Change river scale" class="dialog-icon icon-s"></i>
|
||||
<input id="riverScale" title="Change river scale" class="editTrigger" value="1" type="number" min="0.1" max="3" step="0.01">
|
||||
<span id="riverReset" title="Reset transformation to default" class="editButtonS icon-ccw"></span>
|
||||
<button id="riverAddPoint" title="Click to add a river point" class="editButton icon-plus-squared-alt"></button>
|
||||
<button id="riverRemovePoint" title="Click on red circle to remove river point" class="editButton icon-minus-squared-alt"></button>
|
||||
<button id="riverCopy" title="Copy river" class="editButton icon-clone"></button>
|
||||
<button id="riverNew" title="Create new river clicking on map" class="editButton icon-map-pin"></button>
|
||||
<button id="riverNew" title="Create new river clicking on map" class="editButton icon-pin"></button>
|
||||
<button id="riverRemove" title="Remove river" class="editButton icon-trash"></button>
|
||||
</div>
|
||||
|
||||
<div id="templateEditor" style="display: none">
|
||||
<div id="templateEditor" class="dialog" style="display: none">
|
||||
<div id="templateTop">
|
||||
Base template: <select id="templateSelect" data-prev="templateNew" title="Select base template"/>
|
||||
Base template: <select id="templateSelect" data-prev="templateCustom" title="Select base template"/>
|
||||
<option value="templateCustom" selected>Custom</option>
|
||||
<option value="templateVolcano">Volcano</option>
|
||||
<option value="templateHighIsland">High Island</option>
|
||||
|
|
@ -398,7 +510,7 @@
|
|||
<button id="templateMountain" title="Mountain: high big blob. Can be placed only once and only as a first step" class="noicon">M</button>
|
||||
<button id="templateHill" title="Hill: small blob" class="noicon">H</button>
|
||||
<button id="templatePit" title="Pit: round depression" class="noicon">P</button>
|
||||
<button id="templateRange" title="Pit: elongated elevation" class="noicon">R</button>
|
||||
<button id="templateRange" title="Range: elongated elevation" class="noicon">R</button>
|
||||
<button id="templateTrough" title="Trough: elongated depression" class="noicon">T</button>
|
||||
<button id="templateStrait" title="Strait: centered vertical depression" class="noicon">S</button>
|
||||
<button id="templateAdd" title="Add or subtract value from all heights" class="noicon">+</button>
|
||||
|
|
@ -411,8 +523,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div id="templateBottom">
|
||||
<button id="templateRun" title="Apply current template" class="icon-play"></button>
|
||||
<button id="templateClear" title="Clear the map" class="icon-cancel-circled2"></button>
|
||||
<button id="templateRun" title="Apply current template" class="icon-play-circled2"></button>
|
||||
<button id="templateClear" title="Clear the map" class="icon-eraser"></button>
|
||||
<button id="templateComplete" title="Finalize the Heightmap. Not allowed if insufficient land area available" class="icon-check"></button>
|
||||
<button id="templateLoad" title="Open previously saved template" class="icon-upload"></button>
|
||||
<input type="file" accept=".txt" id="templateToLoad" style="display: none;">
|
||||
|
|
@ -420,7 +532,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="imageConverter" style="display: none">
|
||||
<div id="imageConverter" class="dialog" style="display: none">
|
||||
<div id="convertImageButtons">
|
||||
<input type="file" accept="image/*" id="imageToLoad" style="display: none;">
|
||||
<button id="convertImageLoad" title="Load image to convert" class="icon-upload"></button>
|
||||
|
|
@ -447,12 +559,186 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div id="heightmapRescaler" style="display: none">
|
||||
<div id="rescalerButtons">
|
||||
<button id="rescaleMultiply" title="Multiply heights by value" class="icon-cancel-circled"></button>
|
||||
<button id="rescaleAdd" title="Add value to heights" class="icon-plus-circled"></button>
|
||||
<input id="rescaleModifier" class="pureInput" title="Set modifier value. Value may be positive, negative, fractional, '^2', '^3'" type="number" value="1.1" min="0" max="10" step="0.01">
|
||||
<input id="rescaleSubject" class="pureInput" title="Select change subject: 'all', 'land' or interval with hyphen withount space, e.g. '0.17-0.2'" value="land">
|
||||
<div id="brushesPanel" class="dialog" style="display: none">
|
||||
<div id="brushesButtons">
|
||||
<button id="brushHill" title="Click on the map to place a Hill" class="feature noicon radio pressed">H</button>
|
||||
<button id="brushPit" title="Click on the map to place a Pit" class="feature noicon radio">P</button>
|
||||
<button id="brushRange" title="Select two points to place a Range" class="feature noicon radio">R</button>
|
||||
<button id="brushTrough" title="Select two points to place a Trought" class="feature noicon radio">T</button>
|
||||
<button id="brushElevate" title="Click and drag the map to increase cells elevation" class="noicon radio">↥</button>
|
||||
<button id="brushDepress" title="Click and drag the map to decrease cells elevation" class="noicon radio">↧</button>
|
||||
<button id="brushAlign" title="Click and drag the map to align cells elevation" class="noicon radio">=</button>
|
||||
<button id="brushSmooth" title="Click and drag the map to smooth cells elevation" class="noicon radio">~</button>
|
||||
</div>
|
||||
<div style="display: table;">
|
||||
<label title="Set the brush power" class="italic">H:</label>
|
||||
<input id="brushPower" onchange="this.title = this.value" type="range" min="0.01" max="0.3" step="0.01" value="0.05">
|
||||
<label id="brushRadiusLabel" title="Set the brush effective radius. Works only with 4 brushes above" class="disabled italic" disabled>R:</label>
|
||||
<input id="brushRadius" onchange="this.title = this.value" type="range" min="1" max="10" value="3" class="disabled" disabled>
|
||||
</div>
|
||||
<div id="modifyButtons">
|
||||
<button id="undo" title="Up-do the latest action" class="icon-ccw" disabled></button>
|
||||
<button id="redo" title="Re-do the action" class="icon-cw" disabled></button>
|
||||
<button id="rescaleButton" title="Show rescaler slider" class="icon-exchange"></button>
|
||||
<input id="rescaler" title="Slide to change map height" type="range" min="1" max="10" step="0.1" value="5" class="hidden">
|
||||
<button id="rescaleCondButton" title="Conditional rescaler" class="icon-if"></button>
|
||||
<label class="condition hidden">h ≥</label>
|
||||
<input id="rescaleLower" class="condition hidden" title="Set lower threshold" value="0.2" type="number" min="0" max="1" step="0.01">
|
||||
<label class="condition hidden">≤</label>
|
||||
<input id="rescaleHigher" class="condition hidden" title="Set higher threshold" value="1" type="number" min="0.01" max="1" step="0.01">
|
||||
<label class="condition hidden">⇒</label>
|
||||
<select class="condition hidden" id="conditionSign">
|
||||
<option value="×" selected>×</option>
|
||||
<option value="÷">÷</option>
|
||||
<option value="+">+</option>
|
||||
<option value="-">-</option>
|
||||
<option value="^">^</option>
|
||||
</select>
|
||||
<input id="rescaleModifier" title="Set modifier value" type="number" value="0.9" min="0" max="1.5" step="0.01" class="condition hidden">
|
||||
<button id="rescaleExecute" title="Run condition" class="icon-play-circled2 condition hidden"></button>
|
||||
<button id="smoothHeights" title="Smooth all heights" class="icon-smooth"></button>
|
||||
<button id="disruptHeights" title="Disrupt (randomize) heights" class="icon-disrupt"></button>
|
||||
<button id="brushClear" title="Clear all height" class="icon-eraser"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="perspectivePanel" class="dialog" style="display: none">
|
||||
<div id="lineSlider" class="slider">
|
||||
<div id="lineHandle0" class="ui-slider-handle" data-value=240></div>
|
||||
<div id="lineHandle1" class="ui-slider-handle" data-value=90></div>
|
||||
</div><br>
|
||||
<div id="ySlider" class="slider">
|
||||
<div id="yHandle" class="ui-slider-handle" data-value=4></div>
|
||||
</div><br>
|
||||
<div id="scaleSlider" class="slider">
|
||||
<div id="scaleHandle" class="ui-slider-handle" data-value=1></div>
|
||||
</div><br>
|
||||
<div id="heightSlider" class="slider">
|
||||
<div id="heightHandle" class="ui-slider-handle" data-value=30></div>
|
||||
</div><br>
|
||||
<canvas id="perspective" width="480" height="200"></canvas>
|
||||
</div>
|
||||
|
||||
<div id="countriesEditor" class="dialog" style="display: none" data-type="absolute">
|
||||
<div id="countriesHeader">
|
||||
<div style="margin-left: 14px" title="Click to sort alphabetically by country name" class="sortable alphabetically" data-sortby="country">Country </div>
|
||||
<div style="margin-left: 30px" title="Click to sort alphabetically by capital name" class="sortable alphabetically" data-sortby="capital">Capital </div>
|
||||
<div style="margin-left: 24px" title="Click to sort by country expansion value" class="sortable hidden" data-sortby="expansion">Expan. </div>
|
||||
<div style="margin-left: 30px" title="Click to sort by country cells count" class="sortable" data-sortby="cells">Cells </div>
|
||||
<div style="margin-left: 6px" title="Click to sort by country burgs count" class="sortable" data-sortby="burgs">Burgs </div>
|
||||
<div style="margin-left: 20px" title="Click to sort by country area" class="sortable" data-sortby="area">Area </div>
|
||||
<div style="margin-left: 22px" title="Click to sort by country population" class="sortable" data-sortby="population">Population </div>
|
||||
</div>
|
||||
<div id="countriesBody"></div>
|
||||
<div id="countriesFooter" class="totalLine">
|
||||
<div style="margin-left: 5px">Countries: <span id="countriesFooterCountries">0</span></div>
|
||||
<div style="margin-left: 20px">Burgs: <span id="countriesFooterBurgs">0</span></div>
|
||||
<div style="margin-left: 20px">Land Area: <span id="countriesFooterArea">0</span></div>
|
||||
<div style="margin-left: 20px">Population: <span id="countriesFooterPopulation">0</span></div>
|
||||
</div>
|
||||
<div id="countriesBottom">
|
||||
<button id="editScale" title="Change demographical and geographical measurements" class="icon-map-signs"></button>
|
||||
<button id="countriesPercentage" title="Toggle percentage / absolut values views" class="icon-percent"></button>
|
||||
<button id="countriesRegenerate" title='Regenerate countries based on amended "Expansion" values' class="icon-cw"></button>
|
||||
<button id="countriesManually" title="Manually re-assign countries (select a country and drag the map)" class="icon-brush"></button>
|
||||
<div id="countriesManuallyButtons" style="display: none">
|
||||
<button id="countriesManuallyComplete" title="Apply assignment" class="icon-check"></button>
|
||||
<button id="countriesAdd" title="Add country" class="icon-plus"></button>
|
||||
<button id="countriesManuallyCancel" title="Cancel assignment" class="icon-cancel"></button>
|
||||
<label title="Set the brush power" class="italic">Brush size:</label>
|
||||
<input id="countriesManuallyBrush" onchange="this.title = this.value" type="range" min="1" max="7" value="2">
|
||||
</div>
|
||||
<div id="countriesRegenerateButtons" style="display: none">
|
||||
<button id="countriesManuallyCancel" title="Apply assignment" class="icon-check"></button>
|
||||
<button id="countriesRandomize" title='Randomize countries "Expansion" value' class="icon-shuffle"></button>
|
||||
<button id="countriesAdd" title="Add country" class="icon-plus"></button>
|
||||
<label title="Distance to a consider a land as neutral" class="italic">Neutral distance:</label>
|
||||
<input id="countriesNeutral" onchange="this.title = this.value" type="range" min="1" max="500" value="200">
|
||||
</div>
|
||||
<button id="countriesAdd" title="Add country" class="icon-plus"></button>
|
||||
<button id="countriesExport" title="Save country-related data as a text file (.csv)" class="icon-download"></button>
|
||||
<button id="removeCountries" title="Remove all countries" class="icon-trash"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="burgsEditor" class="dialog" style="display: none">
|
||||
<div id="burgsHeader">
|
||||
<div style="margin-left: 19px" title="Click to sort alphabetically by burg name" class="sortable alphabetically" data-sortby="burg">Burg </div>
|
||||
<div style="margin-left: 29px" title="Click to sort alphabetically by culture name" class="sortable alphabetically" data-sortby="culture">Culture </div>
|
||||
<div style="margin-left: 14px" title="Click to sort by country population" class="sortable" data-sortby="population">Population </div>
|
||||
<div style="margin-left: 6px" title="Click to sort by country burg type" class="sortable alphabetically" data-sortby="type">Type </div>
|
||||
</div>
|
||||
<div id="burgsBody"></div>
|
||||
<div id="burgsFooter" class="totalLine">
|
||||
<div title="Burgs number" style="margin-left: 4px">Burgs: <span title="Burgs number" id="burgsFooterBurgs">0</span></div>
|
||||
<div style="margin-left: 10px">Average burg:
|
||||
<span title="Dominant culture" class="icon-book"></span>
|
||||
<span title="Dominant culture" id="burgsFooterCulture">no</span>
|
||||
<span title="Average burg population" class="icon-male"></span>
|
||||
<input title="Average burg population. Change to recalculate population for all burgs within country" id="burgsFooterPopulation" type="number" min="1" max="1000000" step="100" value="0">
|
||||
</div>
|
||||
</div>
|
||||
<div id="burgsBottom">
|
||||
<button id="editScale" title="Change demographical and geographical measurements" class="icon-map-signs"></button>
|
||||
<button id="changeCapital" title="Click on a burg line to make it a new capital" class="icon-star"></button>
|
||||
<button id="regenerateBurgNames" title="Regenerate burg names" class="icon-shuffle"></button>
|
||||
<button id="burgAdd" title="Add new burg" class="icon-plus"></button>
|
||||
<button id="removeBurgs" title="Remove all burgs" class="icon-trash"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="scaleEditor" class="dialog" style="display: none">
|
||||
<div id="scaleBody">
|
||||
<div class="scaleHeader">
|
||||
<span class="icon-map-signs"></span>
|
||||
<div>Distances: </div>
|
||||
</div>
|
||||
<div>
|
||||
<div>Distance unit: </div>
|
||||
<select title="Select Distance unit" id="distanceUnit">
|
||||
<option value="km" selected>Kilometer</option>
|
||||
<option value="mi">Mile</option>
|
||||
<option value="lg">League</option>
|
||||
<option value="vr">Versta</option>
|
||||
<option value="custom_name">Custom name</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<div title="Select how many distance unit are in one pixel">1 map pixel =</div>
|
||||
<input id="distanceScale" title="Select how many distance unit are in one pixel" type="range" min="0.1" max="10" value="3" step="0.1">
|
||||
<output id="scaleOutput">3 km</output>
|
||||
</div>
|
||||
<div>
|
||||
<div title="Change scale bar size">Scale bar size: </div>
|
||||
<input id="barSize" title="Set scale bar size" type="range" min="0.5" max="3" value="1.5" step="0.1">
|
||||
<output id="barSizeOutput">1</output>
|
||||
</div>
|
||||
<div>
|
||||
<div title="Type area unit name, leave 'square' just to add ² to the distance unit selected above">Area unit: </div>
|
||||
<input id="areaUnit" title="Type area unit name, leave 'square' just to add ² to the distance unit selected above" type="text" value="square">
|
||||
</div>
|
||||
<div class="scaleHeader">
|
||||
<span class="icon-male"></span>
|
||||
<div>Population: </div>
|
||||
</div>
|
||||
<div>
|
||||
<div title="Set how many people are in one population point">1 population point =</div>
|
||||
<input id="populationRate" title="Set how many people are in one population point" type="range" min="0.1" max="10" value="1" step="0.1">
|
||||
<output id="populationRateOutput">1K</output>
|
||||
</div>
|
||||
<div>
|
||||
<div>Urbanization rate: </div>
|
||||
<input id="urbanization" title="Set the ubranization (burgs population relative to all population) rate" type="range" min="0.02" max="2" value="0.3" step="0.02">
|
||||
<output id="urbanizationOutput">0.3</output>
|
||||
</div>
|
||||
</div>
|
||||
<div id="scaleBottom">
|
||||
<button id="toggleScaleBar" title="Click to toggle scale bar" class="icon-align-center"></button>
|
||||
<button title="Click to toggle ruler" class="icon-eye-off" onclick='$("#ruler").fadeToggle()'></button>
|
||||
<button id="addOpisometer" title="Drag the map to measure curve length with opisometer" class="icon-brush"></button>
|
||||
<button id="addRuler" title="Click to place additional ruler on map" class="icon-resize-horizontal"></button>
|
||||
<button id="addPlanimeter" title="Drag the map to determine a polygon area with planimeter" class="icon-edit"></button>
|
||||
<button id="removeAllRulers" title="Remove all rulers from the map. Click on ruler label to remove ruler separately" class="icon-trash"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -464,14 +750,8 @@
|
|||
Coord: <span id="lx">0</span>/<span id="ly">0</span>;
|
||||
Cell: <span id="cell">0</span>;
|
||||
Height: <span id="height">0</span>;
|
||||
Type: <span id="feature">no</span>;
|
||||
Flux: <span id="flux">0</span>;
|
||||
Region: <span id="region">no</span>;
|
||||
Culture: <span id="culture">no</span>;
|
||||
River: <span id="river">no</span>;
|
||||
Path: <span id="path">no</span>;
|
||||
Score: <span id="score">no</span>.
|
||||
Type: <span id="feature">no</span>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="script.js?version=0.52b"></script>
|
||||
<script type="text/javascript" src="script.js?version=0.554b"></script>
|
||||
</body>
|
||||
3
index.md
|
|
@ -1,3 +0,0 @@
|
|||
[](https://azgaar.wordpress.com)
|
||||
|
||||
Check out the demo [here](https://bl.ocks.org/Azgaar/b845ce22ea68090d43a4ecfb914f51bd). Devlog is [here](https://azgaar.wordpress.com/).
|
||||
2
libs/d3-hexbin.v0.2.min.js
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
// https://github.com/d3/d3-hexbin Version 0.2.2. Copyright 2017 Mike Bostock.
|
||||
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.d3=n.d3||{})}(this,function(n){"use strict";function t(n){return n[0]}function r(n){return n[1]}var e=Math.PI/3,u=[0,e,2*e,3*e,4*e,5*e],o=function(){function n(n){var t,r={},e=[],u=n.length;for(t=0;t<u;++t)if(!isNaN(i=+d.call(null,o=n[t],t,n))&&!isNaN(c=+p.call(null,o,t,n))){var o,i,c,s=Math.round(c/=f),h=Math.round(i=i/a-(1&s)/2),l=c-s;if(3*Math.abs(l)>1){var v=i-h,M=h+(i<h?-1:1)/2,x=s+(c<s?-1:1),g=i-M,m=c-x;v*v+l*l>g*g+m*m&&(h=M+(1&s?1:-1)/2,s=x)}var y=h+"-"+s,j=r[y];j?j.push(o):(e.push(j=r[y]=[o]),j.x=(h+(1&s)/2)*a,j.y=s*f)}return e}function o(n){var t=0,r=0;return u.map(function(e){var u=Math.sin(e)*n,o=-Math.cos(e)*n,i=u-t,a=o-r;return t=u,r=o,[i,a]})}var i,a,f,c=0,s=0,h=1,l=1,d=t,p=r;return n.hexagon=function(n){return"m"+o(null==n?i:+n).join("l")+"z"},n.centers=function(){for(var n=[],t=Math.round(s/f),r=Math.round(c/a),e=t*f;e<l+i;e+=f,++t)for(var u=r*a+(1&t)*a/2;u<h+a/2;u+=a)n.push([u,e]);return n},n.mesh=function(){var t=o(i).slice(0,4).join("l");return n.centers().map(function(n){return"M"+n+"m"+t}).join("")},n.x=function(t){return arguments.length?(d=t,n):d},n.y=function(t){return arguments.length?(p=t,n):p},n.radius=function(t){return arguments.length?(i=+t,a=2*i*Math.sin(e),f=1.5*i,n):i},n.size=function(t){return arguments.length?(c=s=0,h=+t[0],l=+t[1],n):[h-c,l-s]},n.extent=function(t){return arguments.length?(c=+t[0][0],s=+t[0][1],h=+t[1][0],l=+t[1][1],n):[[c,s],[h,l]]},n.radius(1)};n.hexbin=o,Object.defineProperty(n,"__esModule",{value:!0})});
|
||||
2
libs/d3-scale-chromatic.v1.min.js
vendored
Normal file
2
libs/d3.v4.min.js
vendored
Normal file
4
libs/jquery-3.1.1.min.js
vendored
Normal file
13
libs/jquery-ui.min.js
vendored
Normal file
232
libs/polylabel.js
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.polylabel = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
'use strict';
|
||||
|
||||
var Queue = require('tinyqueue');
|
||||
|
||||
module.exports = polylabel;
|
||||
|
||||
function polylabel(polygon, precision, debug) {
|
||||
precision = precision || 1.0;
|
||||
|
||||
// find the bounding box of the outer ring
|
||||
var minX, minY, maxX, maxY;
|
||||
for (var i = 0; i < polygon[0].length; i++) {
|
||||
var p = polygon[0][i];
|
||||
if (!i || p[0] < minX) minX = p[0];
|
||||
if (!i || p[1] < minY) minY = p[1];
|
||||
if (!i || p[0] > maxX) maxX = p[0];
|
||||
if (!i || p[1] > maxY) maxY = p[1];
|
||||
}
|
||||
|
||||
var width = maxX - minX;
|
||||
var height = maxY - minY;
|
||||
var cellSize = Math.min(width, height);
|
||||
var h = cellSize / 2;
|
||||
|
||||
// a priority queue of cells in order of their "potential" (max distance to polygon)
|
||||
var cellQueue = new Queue(null, compareMax);
|
||||
|
||||
// cover polygon with initial cells
|
||||
for (var x = minX; x < maxX; x += cellSize) {
|
||||
for (var y = minY; y < maxY; y += cellSize) {
|
||||
cellQueue.push(new Cell(x + h, y + h, h, polygon));
|
||||
}
|
||||
}
|
||||
|
||||
// take centroid as the first best guess
|
||||
var bestCell = getCentroidCell(polygon);
|
||||
var numProbes = cellQueue.length;
|
||||
|
||||
while (cellQueue.length) {
|
||||
// pick the most promising cell from the queue
|
||||
var cell = cellQueue.pop();
|
||||
|
||||
// update the best cell if we found a better one
|
||||
if (cell.d > bestCell.d) {
|
||||
bestCell = cell;
|
||||
if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);
|
||||
}
|
||||
|
||||
// do not drill down further if there's no chance of a better solution
|
||||
if (cell.max - bestCell.d <= precision) continue;
|
||||
|
||||
// split the cell into four cells
|
||||
h = cell.h / 2;
|
||||
cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));
|
||||
cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));
|
||||
cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));
|
||||
cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));
|
||||
numProbes += 4;
|
||||
}
|
||||
|
||||
if (debug) {
|
||||
console.log('num probes: ' + numProbes);
|
||||
console.log('best distance: ' + bestCell.d);
|
||||
}
|
||||
|
||||
return [bestCell.x, bestCell.y];
|
||||
}
|
||||
|
||||
function compareMax(a, b) {
|
||||
return b.max - a.max;
|
||||
}
|
||||
|
||||
function Cell(x, y, h, polygon) {
|
||||
this.x = x; // cell center x
|
||||
this.y = y; // cell center y
|
||||
this.h = h; // half the cell size
|
||||
this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon
|
||||
this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell
|
||||
}
|
||||
|
||||
// signed distance from point to polygon outline (negative if point is outside)
|
||||
function pointToPolygonDist(x, y, polygon) {
|
||||
var inside = false;
|
||||
var minDistSq = Infinity;
|
||||
|
||||
for (var k = 0; k < polygon.length; k++) {
|
||||
var ring = polygon[k];
|
||||
|
||||
for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) {
|
||||
var a = ring[i];
|
||||
var b = ring[j];
|
||||
|
||||
if ((a[1] > y !== b[1] > y) &&
|
||||
(x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside;
|
||||
|
||||
minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));
|
||||
}
|
||||
}
|
||||
|
||||
return (inside ? 1 : -1) * Math.sqrt(minDistSq);
|
||||
}
|
||||
|
||||
// get polygon centroid
|
||||
function getCentroidCell(polygon) {
|
||||
var area = 0;
|
||||
var x = 0;
|
||||
var y = 0;
|
||||
var points = polygon[0];
|
||||
|
||||
for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {
|
||||
var a = points[i];
|
||||
var b = points[j];
|
||||
var f = a[0] * b[1] - b[0] * a[1];
|
||||
x += (a[0] + b[0]) * f;
|
||||
y += (a[1] + b[1]) * f;
|
||||
area += f * 3;
|
||||
}
|
||||
return new Cell(x / area, y / area, 0, polygon);
|
||||
}
|
||||
|
||||
// get squared distance from a point to a segment
|
||||
function getSegDistSq(px, py, a, b) {
|
||||
|
||||
var x = a[0];
|
||||
var y = a[1];
|
||||
var dx = b[0] - x;
|
||||
var dy = b[1] - y;
|
||||
|
||||
if (dx !== 0 || dy !== 0) {
|
||||
|
||||
var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);
|
||||
|
||||
if (t > 1) {
|
||||
x = b[0];
|
||||
y = b[1];
|
||||
|
||||
} else if (t > 0) {
|
||||
x += dx * t;
|
||||
y += dy * t;
|
||||
}
|
||||
}
|
||||
|
||||
dx = px - x;
|
||||
dy = py - y;
|
||||
|
||||
return dx * dx + dy * dy;
|
||||
}
|
||||
|
||||
},{"tinyqueue":2}],2:[function(require,module,exports){
|
||||
'use strict';
|
||||
|
||||
module.exports = TinyQueue;
|
||||
|
||||
function TinyQueue(data, compare) {
|
||||
if (!(this instanceof TinyQueue)) return new TinyQueue(data, compare);
|
||||
|
||||
this.data = data || [];
|
||||
this.length = this.data.length;
|
||||
this.compare = compare || defaultCompare;
|
||||
|
||||
if (data) for (var i = Math.floor(this.length / 2); i >= 0; i--) this._down(i);
|
||||
}
|
||||
|
||||
function defaultCompare(a, b) {
|
||||
return a < b ? -1 : a > b ? 1 : 0;
|
||||
}
|
||||
|
||||
TinyQueue.prototype = {
|
||||
|
||||
push: function (item) {
|
||||
this.data.push(item);
|
||||
this.length++;
|
||||
this._up(this.length - 1);
|
||||
},
|
||||
|
||||
pop: function () {
|
||||
var top = this.data[0];
|
||||
this.data[0] = this.data[this.length - 1];
|
||||
this.length--;
|
||||
this.data.pop();
|
||||
this._down(0);
|
||||
return top;
|
||||
},
|
||||
|
||||
peek: function () {
|
||||
return this.data[0];
|
||||
},
|
||||
|
||||
_up: function (pos) {
|
||||
var data = this.data,
|
||||
compare = this.compare;
|
||||
|
||||
while (pos > 0) {
|
||||
var parent = Math.floor((pos - 1) / 2);
|
||||
if (compare(data[pos], data[parent]) < 0) {
|
||||
swap(data, parent, pos);
|
||||
pos = parent;
|
||||
|
||||
} else break;
|
||||
}
|
||||
},
|
||||
|
||||
_down: function (pos) {
|
||||
var data = this.data,
|
||||
compare = this.compare,
|
||||
len = this.length;
|
||||
|
||||
while (true) {
|
||||
var left = 2 * pos + 1,
|
||||
right = left + 1,
|
||||
min = pos;
|
||||
|
||||
if (left < len && compare(data[left], data[min]) < 0) min = left;
|
||||
if (right < len && compare(data[right], data[min]) < 0) min = right;
|
||||
|
||||
if (min === pos) return;
|
||||
|
||||
swap(data, min, pos);
|
||||
pos = min;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function swap(data, i, j) {
|
||||
var tmp = data[i];
|
||||
data[i] = data[j];
|
||||
data[j] = tmp;
|
||||
}
|
||||
|
||||
},{}]},{},[1])(1)
|
||||
});
|
||||
387
libs/priority-queue.js
Normal file
|
|
@ -0,0 +1,387 @@
|
|||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.PriorityQueue = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
|
||||
var AbstractPriorityQueue, ArrayStrategy, BHeapStrategy, BinaryHeapStrategy, PriorityQueue,
|
||||
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||
hasProp = {}.hasOwnProperty;
|
||||
|
||||
AbstractPriorityQueue = _dereq_('./PriorityQueue/AbstractPriorityQueue');
|
||||
|
||||
ArrayStrategy = _dereq_('./PriorityQueue/ArrayStrategy');
|
||||
|
||||
BinaryHeapStrategy = _dereq_('./PriorityQueue/BinaryHeapStrategy');
|
||||
|
||||
BHeapStrategy = _dereq_('./PriorityQueue/BHeapStrategy');
|
||||
|
||||
PriorityQueue = (function(superClass) {
|
||||
extend(PriorityQueue, superClass);
|
||||
|
||||
function PriorityQueue(options) {
|
||||
options || (options = {});
|
||||
options.strategy || (options.strategy = BinaryHeapStrategy);
|
||||
options.comparator || (options.comparator = function(a, b) {
|
||||
return (a || 0) - (b || 0);
|
||||
});
|
||||
PriorityQueue.__super__.constructor.call(this, options);
|
||||
}
|
||||
|
||||
return PriorityQueue;
|
||||
|
||||
})(AbstractPriorityQueue);
|
||||
|
||||
PriorityQueue.ArrayStrategy = ArrayStrategy;
|
||||
|
||||
PriorityQueue.BinaryHeapStrategy = BinaryHeapStrategy;
|
||||
|
||||
PriorityQueue.BHeapStrategy = BHeapStrategy;
|
||||
|
||||
module.exports = PriorityQueue;
|
||||
|
||||
|
||||
},{"./PriorityQueue/AbstractPriorityQueue":2,"./PriorityQueue/ArrayStrategy":3,"./PriorityQueue/BHeapStrategy":4,"./PriorityQueue/BinaryHeapStrategy":5}],2:[function(_dereq_,module,exports){
|
||||
var AbstractPriorityQueue;
|
||||
|
||||
module.exports = AbstractPriorityQueue = (function() {
|
||||
function AbstractPriorityQueue(options) {
|
||||
var ref;
|
||||
if ((options != null ? options.strategy : void 0) == null) {
|
||||
throw 'Must pass options.strategy, a strategy';
|
||||
}
|
||||
if ((options != null ? options.comparator : void 0) == null) {
|
||||
throw 'Must pass options.comparator, a comparator';
|
||||
}
|
||||
this.priv = new options.strategy(options);
|
||||
this.length = (options != null ? (ref = options.initialValues) != null ? ref.length : void 0 : void 0) || 0;
|
||||
}
|
||||
|
||||
AbstractPriorityQueue.prototype.queue = function(value) {
|
||||
this.length++;
|
||||
this.priv.queue(value);
|
||||
return void 0;
|
||||
};
|
||||
|
||||
AbstractPriorityQueue.prototype.dequeue = function(value) {
|
||||
if (!this.length) {
|
||||
throw 'Empty queue';
|
||||
}
|
||||
this.length--;
|
||||
return this.priv.dequeue();
|
||||
};
|
||||
|
||||
AbstractPriorityQueue.prototype.peek = function(value) {
|
||||
if (!this.length) {
|
||||
throw 'Empty queue';
|
||||
}
|
||||
return this.priv.peek();
|
||||
};
|
||||
|
||||
AbstractPriorityQueue.prototype.clear = function() {
|
||||
this.length = 0;
|
||||
return this.priv.clear();
|
||||
};
|
||||
|
||||
return AbstractPriorityQueue;
|
||||
|
||||
})();
|
||||
|
||||
|
||||
},{}],3:[function(_dereq_,module,exports){
|
||||
var ArrayStrategy, binarySearchForIndexReversed;
|
||||
|
||||
binarySearchForIndexReversed = function(array, value, comparator) {
|
||||
var high, low, mid;
|
||||
low = 0;
|
||||
high = array.length;
|
||||
while (low < high) {
|
||||
mid = (low + high) >>> 1;
|
||||
if (comparator(array[mid], value) >= 0) {
|
||||
low = mid + 1;
|
||||
} else {
|
||||
high = mid;
|
||||
}
|
||||
}
|
||||
return low;
|
||||
};
|
||||
|
||||
module.exports = ArrayStrategy = (function() {
|
||||
function ArrayStrategy(options) {
|
||||
var ref;
|
||||
this.options = options;
|
||||
this.comparator = this.options.comparator;
|
||||
this.data = ((ref = this.options.initialValues) != null ? ref.slice(0) : void 0) || [];
|
||||
this.data.sort(this.comparator).reverse();
|
||||
}
|
||||
|
||||
ArrayStrategy.prototype.queue = function(value) {
|
||||
var pos;
|
||||
pos = binarySearchForIndexReversed(this.data, value, this.comparator);
|
||||
this.data.splice(pos, 0, value);
|
||||
return void 0;
|
||||
};
|
||||
|
||||
ArrayStrategy.prototype.dequeue = function() {
|
||||
return this.data.pop();
|
||||
};
|
||||
|
||||
ArrayStrategy.prototype.peek = function() {
|
||||
return this.data[this.data.length - 1];
|
||||
};
|
||||
|
||||
ArrayStrategy.prototype.clear = function() {
|
||||
this.data.length = 0;
|
||||
return void 0;
|
||||
};
|
||||
|
||||
return ArrayStrategy;
|
||||
|
||||
})();
|
||||
|
||||
|
||||
},{}],4:[function(_dereq_,module,exports){
|
||||
var BHeapStrategy;
|
||||
|
||||
module.exports = BHeapStrategy = (function() {
|
||||
function BHeapStrategy(options) {
|
||||
var arr, i, j, k, len, ref, ref1, shift, value;
|
||||
this.comparator = (options != null ? options.comparator : void 0) || function(a, b) {
|
||||
return a - b;
|
||||
};
|
||||
this.pageSize = (options != null ? options.pageSize : void 0) || 512;
|
||||
this.length = 0;
|
||||
shift = 0;
|
||||
while ((1 << shift) < this.pageSize) {
|
||||
shift += 1;
|
||||
}
|
||||
if (1 << shift !== this.pageSize) {
|
||||
throw 'pageSize must be a power of two';
|
||||
}
|
||||
this._shift = shift;
|
||||
this._emptyMemoryPageTemplate = arr = [];
|
||||
for (i = j = 0, ref = this.pageSize; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
|
||||
arr.push(null);
|
||||
}
|
||||
this._memory = [];
|
||||
this._mask = this.pageSize - 1;
|
||||
if (options.initialValues) {
|
||||
ref1 = options.initialValues;
|
||||
for (k = 0, len = ref1.length; k < len; k++) {
|
||||
value = ref1[k];
|
||||
this.queue(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BHeapStrategy.prototype.queue = function(value) {
|
||||
this.length += 1;
|
||||
this._write(this.length, value);
|
||||
this._bubbleUp(this.length, value);
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype.dequeue = function() {
|
||||
var ret, val;
|
||||
ret = this._read(1);
|
||||
val = this._read(this.length);
|
||||
this.length -= 1;
|
||||
if (this.length > 0) {
|
||||
this._write(1, val);
|
||||
this._bubbleDown(1, val);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype.peek = function() {
|
||||
return this._read(1);
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype.clear = function() {
|
||||
this.length = 0;
|
||||
this._memory.length = 0;
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype._write = function(index, value) {
|
||||
var page;
|
||||
page = index >> this._shift;
|
||||
while (page >= this._memory.length) {
|
||||
this._memory.push(this._emptyMemoryPageTemplate.slice(0));
|
||||
}
|
||||
return this._memory[page][index & this._mask] = value;
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype._read = function(index) {
|
||||
return this._memory[index >> this._shift][index & this._mask];
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype._bubbleUp = function(index, value) {
|
||||
var compare, indexInPage, parentIndex, parentValue;
|
||||
compare = this.comparator;
|
||||
while (index > 1) {
|
||||
indexInPage = index & this._mask;
|
||||
if (index < this.pageSize || indexInPage > 3) {
|
||||
parentIndex = (index & ~this._mask) | (indexInPage >> 1);
|
||||
} else if (indexInPage < 2) {
|
||||
parentIndex = (index - this.pageSize) >> this._shift;
|
||||
parentIndex += parentIndex & ~(this._mask >> 1);
|
||||
parentIndex |= this.pageSize >> 1;
|
||||
} else {
|
||||
parentIndex = index - 2;
|
||||
}
|
||||
parentValue = this._read(parentIndex);
|
||||
if (compare(parentValue, value) < 0) {
|
||||
break;
|
||||
}
|
||||
this._write(parentIndex, value);
|
||||
this._write(index, parentValue);
|
||||
index = parentIndex;
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BHeapStrategy.prototype._bubbleDown = function(index, value) {
|
||||
var childIndex1, childIndex2, childValue1, childValue2, compare;
|
||||
compare = this.comparator;
|
||||
while (index < this.length) {
|
||||
if (index > this._mask && !(index & (this._mask - 1))) {
|
||||
childIndex1 = childIndex2 = index + 2;
|
||||
} else if (index & (this.pageSize >> 1)) {
|
||||
childIndex1 = (index & ~this._mask) >> 1;
|
||||
childIndex1 |= index & (this._mask >> 1);
|
||||
childIndex1 = (childIndex1 + 1) << this._shift;
|
||||
childIndex2 = childIndex1 + 1;
|
||||
} else {
|
||||
childIndex1 = index + (index & this._mask);
|
||||
childIndex2 = childIndex1 + 1;
|
||||
}
|
||||
if (childIndex1 !== childIndex2 && childIndex2 <= this.length) {
|
||||
childValue1 = this._read(childIndex1);
|
||||
childValue2 = this._read(childIndex2);
|
||||
if (compare(childValue1, value) < 0 && compare(childValue1, childValue2) <= 0) {
|
||||
this._write(childIndex1, value);
|
||||
this._write(index, childValue1);
|
||||
index = childIndex1;
|
||||
} else if (compare(childValue2, value) < 0) {
|
||||
this._write(childIndex2, value);
|
||||
this._write(index, childValue2);
|
||||
index = childIndex2;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else if (childIndex1 <= this.length) {
|
||||
childValue1 = this._read(childIndex1);
|
||||
if (compare(childValue1, value) < 0) {
|
||||
this._write(childIndex1, value);
|
||||
this._write(index, childValue1);
|
||||
index = childIndex1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
return BHeapStrategy;
|
||||
|
||||
})();
|
||||
|
||||
|
||||
},{}],5:[function(_dereq_,module,exports){
|
||||
var BinaryHeapStrategy;
|
||||
|
||||
module.exports = BinaryHeapStrategy = (function() {
|
||||
function BinaryHeapStrategy(options) {
|
||||
var ref;
|
||||
this.comparator = (options != null ? options.comparator : void 0) || function(a, b) {
|
||||
return a - b;
|
||||
};
|
||||
this.length = 0;
|
||||
this.data = ((ref = options.initialValues) != null ? ref.slice(0) : void 0) || [];
|
||||
this._heapify();
|
||||
}
|
||||
|
||||
BinaryHeapStrategy.prototype._heapify = function() {
|
||||
var i, j, ref;
|
||||
if (this.data.length > 0) {
|
||||
for (i = j = 1, ref = this.data.length; 1 <= ref ? j < ref : j > ref; i = 1 <= ref ? ++j : --j) {
|
||||
this._bubbleUp(i);
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype.queue = function(value) {
|
||||
this.data.push(value);
|
||||
this._bubbleUp(this.data.length - 1);
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype.dequeue = function() {
|
||||
var last, ret;
|
||||
ret = this.data[0];
|
||||
last = this.data.pop();
|
||||
if (this.data.length > 0) {
|
||||
this.data[0] = last;
|
||||
this._bubbleDown(0);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype.peek = function() {
|
||||
return this.data[0];
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype.clear = function() {
|
||||
this.length = 0;
|
||||
this.data.length = 0;
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype._bubbleUp = function(pos) {
|
||||
var parent, x;
|
||||
while (pos > 0) {
|
||||
parent = (pos - 1) >>> 1;
|
||||
if (this.comparator(this.data[pos], this.data[parent]) < 0) {
|
||||
x = this.data[parent];
|
||||
this.data[parent] = this.data[pos];
|
||||
this.data[pos] = x;
|
||||
pos = parent;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
BinaryHeapStrategy.prototype._bubbleDown = function(pos) {
|
||||
var last, left, minIndex, right, x;
|
||||
last = this.data.length - 1;
|
||||
while (true) {
|
||||
left = (pos << 1) + 1;
|
||||
right = left + 1;
|
||||
minIndex = pos;
|
||||
if (left <= last && this.comparator(this.data[left], this.data[minIndex]) < 0) {
|
||||
minIndex = left;
|
||||
}
|
||||
if (right <= last && this.comparator(this.data[right], this.data[minIndex]) < 0) {
|
||||
minIndex = right;
|
||||
}
|
||||
if (minIndex !== pos) {
|
||||
x = this.data[minIndex];
|
||||
this.data[minIndex] = this.data[pos];
|
||||
this.data[pos] = x;
|
||||
pos = minIndex;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return void 0;
|
||||
};
|
||||
|
||||
return BinaryHeapStrategy;
|
||||
|
||||
})();
|
||||
|
||||
|
||||
},{}]},{},[1])(1)
|
||||
});
|
||||