├── _layouts
├── about.html
├── home.html
├── page.html
├── post.html
└── default.html
├── _sass
├── support
│ ├── mixins
│ │ ├── mixins.scss
│ │ ├── _buttons.scss
│ │ ├── _layout.scss
│ │ └── _typography.scss
│ ├── support.scss
│ ├── _functions.scss
│ └── _variables.scss
├── utilities
│ ├── utilities.scss
│ ├── _lists.scss
│ ├── _typography.scss
│ ├── _layout.scss
│ ├── _spacing.scss
│ └── _colors.scss
├── color_schemes
│ └── dark.scss
├── labels.scss
├── typography.scss
├── tables.scss
├── base.scss
├── vendor
│ └── normalize.scss
│ │ ├── package.json
│ │ ├── README.md
│ │ └── normalize.scss
├── content.scss
├── search.scss
├── navigation.scss
├── buttons.scss
├── layout.scss
├── custom
│ └── custom.scss
└── code.scss
├── assets
├── images
│ ├── favicon.ico
│ ├── just-the-docs.png
│ ├── gee-dev-docs-icon.png
│ ├── search.svg
│ ├── gee-dev-docs-icon.svg
│ ├── gee-dev-docs-icon-alt.svg
│ └── gee-dev-docs-logo.svg
├── js
│ ├── search-data.json
│ ├── just-the-docs.js
│ └── vendor
│ │ └── lunr.min.js
├── css
│ ├── dark-mode-preview.scss
│ └── just-the-docs.scss
└── py
│ └── reformat_example-scripts.py
├── _config.yml
├── docs
├── science
│ ├── science-home.md
│ ├── science-topic1-home.md
│ └── science-topic2-home.md
├── Tutorials
│ └── tutorials-home.md
├── API
│ ├── api-home.md
│ ├── date-ranges-home.md
│ └── confusion-matrices-home.md
├── methods
│ ├── generic
│ │ ├── file-add.md
│ │ ├── methods-generic-topic2.md
│ │ └── methods-generic-topic1.md
│ ├── methods-specific-home.md
│ ├── methods-generic-home.md
│ ├── methods-home.md
│ ├── generic3.md
│ └── specific
│ │ ├── methods-specific-topic1.md
│ │ └── methods-specific-topic2.md
└── styleguide.md
├── terms
├── just-the-docs-license.md
└── code-of-conduct.md
├── _includes
├── head.html
└── nav.html
├── README.md
├── index.md
└── staging
└── staging.md
/_layouts/about.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{ content }}
6 |
--------------------------------------------------------------------------------
/_layouts/home.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{ content }}
6 |
--------------------------------------------------------------------------------
/_layouts/page.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{ content }}
6 |
--------------------------------------------------------------------------------
/_layouts/post.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | ---
4 |
5 | {{ content }}
6 |
--------------------------------------------------------------------------------
/_sass/support/mixins/mixins.scss:
--------------------------------------------------------------------------------
1 | @import "./layout";
2 | @import "./buttons";
3 | @import "./typography";
4 |
--------------------------------------------------------------------------------
/_sass/support/support.scss:
--------------------------------------------------------------------------------
1 | @import "./variables";
2 | @import "./functions";
3 | @import "./mixins/mixins";
4 |
--------------------------------------------------------------------------------
/assets/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/GEE-Dev-Docs/master/assets/images/favicon.ico
--------------------------------------------------------------------------------
/assets/images/just-the-docs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/GEE-Dev-Docs/master/assets/images/just-the-docs.png
--------------------------------------------------------------------------------
/assets/images/gee-dev-docs-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gee-community/GEE-Dev-Docs/master/assets/images/gee-dev-docs-icon.png
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | search_enabled: true
2 | aux_links:
3 | "GEE Dev Docs on GitHub":
4 | - "https://github.com/gee-community/GEE-Dev-Docs"
5 |
--------------------------------------------------------------------------------
/_sass/utilities/utilities.scss:
--------------------------------------------------------------------------------
1 | @import "./colors";
2 | @import "./layout";
3 | @import "./typography";
4 | @import "./lists";
5 | @import "./spacing";
6 |
--------------------------------------------------------------------------------
/docs/science/science-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Science
3 | layout: default
4 | has_children: true
5 | nav_order: 2
6 | ---
7 |
8 | This is a landing page for science applications
--------------------------------------------------------------------------------
/docs/Tutorials/tutorials-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tutorials
3 | layout: default
4 | has_children: true
5 | nav_order: 1
6 | ---
7 |
8 | This is a landing page for full self-paced tutorials.
9 |
--------------------------------------------------------------------------------
/docs/API/api-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: API
3 | layout: default
4 | has_children: true
5 | nav_order: 1
6 | ---
7 |
8 | This is a landing page for API examples.
9 | {: .fs-6 .fw-300 }
10 |
--------------------------------------------------------------------------------
/docs/methods/generic/file-add.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Add Test
3 | layout: default
4 | parent: Generic
5 | grand_parent: Method
6 | nav_order: 3
7 | ---
8 |
9 | Added this file through GitHub - no local commit and push.
10 |
--------------------------------------------------------------------------------
/docs/methods/methods-specific-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Specific
3 | layout: default
4 | parent: Methods
5 | has_children: true
6 | permalink: /docs/methods/specific
7 | nav_order: 2
8 | ---
9 |
10 |
11 | This is specific methods content
--------------------------------------------------------------------------------
/_sass/support/_functions.scss:
--------------------------------------------------------------------------------
1 | @function rem($size, $unit:"") {
2 | $remSize: $size / $root-font-size;
3 |
4 | @if ($unit == false) {
5 | @return #{$remSize};
6 | }
7 | @else {
8 | @return #{$remSize}rem;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/docs/methods/methods-generic-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Generic
3 | layout: default
4 | parent: Methods
5 | has_children: true
6 | permalink: /docs/methods/generic
7 | nav_order: 1
8 | ---
9 |
10 |
11 | This is generic methods content
12 |
13 |
--------------------------------------------------------------------------------
/docs/methods/methods-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Methods
3 | layout: default
4 | has_children: true
5 | nav_order: 1
6 | ---
7 |
8 | This is a landing page for methods
9 |
10 |
11 | This line was added from GitHub - no local commit and push
12 |
--------------------------------------------------------------------------------
/docs/science/science-topic1-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Broad Topic 1
3 | layout: default
4 | parent: Science
5 | has_children: true
6 | permalink: /docs/science/broad-topic-1
7 | nav_order: 1
8 | ---
9 |
10 |
11 | This is specific methods content
--------------------------------------------------------------------------------
/_sass/utilities/_lists.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes for lists
3 | //
4 |
5 | // stylelint-disable primer/selector-no-utility
6 |
7 | .list-style-none {
8 | padding: 0 !important;
9 | margin: 0 !important;
10 | list-style: none !important;
11 | }
12 |
--------------------------------------------------------------------------------
/docs/science/science-topic2-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Broad Topic 2
3 | layout: default
4 | parent: Science
5 | has_children: true
6 | permalink: /docs/science/broad-topic-2
7 | nav_order: 2
8 | ---
9 |
10 |
11 | This is specific methods content.
12 |
13 | New edit.
14 |
--------------------------------------------------------------------------------
/_sass/color_schemes/dark.scss:
--------------------------------------------------------------------------------
1 |
2 | $body-background-color: $grey-dk-300;
3 | $sidebar-color: $grey-dk-300;
4 | $border-color: $grey-dk-200;
5 |
6 | $body-text-color: $grey-lt-300;
7 | $body-heading-color: $grey-lt-000;
8 | $nav-child-link-color: $grey-dk-000;
9 |
10 | $link-color: $blue-000;
11 | $btn-primary-color: $blue-200;
12 | $base-button-color: $grey-dk-250;
13 |
14 | $code-background-color: $grey-dk-250;
15 |
--------------------------------------------------------------------------------
/docs/methods/generic/methods-generic-topic2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Topic 2
3 | layout: default
4 | parent: Generic
5 | grand_parent: Method
6 | nav_order: 2
7 | ---
8 |
9 | This is generic methods sub-sub topics
10 |
11 | 1. TOC
12 | {:toc}
13 |
14 | ### Example 1
15 |
16 | ```js
17 | some code
18 | ```
19 | [Try live](https://code.earthengine.google.com/){: .btn }
20 |
21 |
22 | ### Example 2
23 |
24 | ### Example 3
25 |
--------------------------------------------------------------------------------
/assets/images/search.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/js/search-data.json:
--------------------------------------------------------------------------------
1 | ---
2 | ---
3 | {
4 | {% for page in site.html_pages %}{% if page.search_exclude != true %}"{{ forloop.index0 }}": {
5 | "id": "{{ forloop.index0 }}",
6 | "title": "{{ page.title | replace: '&', '&' }}",
7 | "content": "{{ page.content | markdownify | strip_html | escape_once | remove: 'Table of contents' | remove: '```' | remove: '---' | replace: '\', ' ' | normalize_whitespace }}",
8 | "url": "{{ page.url | absolute_url }}",
9 | "tags": "{% for tag in page.tags %}{{tag}},{% endfor %}",
10 | "relUrl": "{{ page.url }}"
11 | }{% unless forloop.last %},{% endunless %}
12 | {% endif %}{% endfor %}
13 | }
14 |
--------------------------------------------------------------------------------
/docs/methods/generic3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Topic 3
3 | layout: default
4 | parent: Generic
5 | grand_parent: Method
6 | nav_order: 1
7 | ---
8 |
9 | This is generic methods sub-sub topics
10 |
11 | ## Table of Contents
12 |
13 | 1. TOC
14 | {:toc}
15 |
16 | ### Example 1
17 |
18 | ```js
19 | some code
20 | ```
21 | [Try live](https://code.earthengine.google.com/){: .btn }
22 |
23 |
24 |
25 | ### Example 2
26 |
27 | a
28 |
29 | a
30 |
31 | a
32 |
33 | a
34 |
35 | a
36 |
37 | a
38 |
39 | a
40 |
41 | a
42 |
43 | a
44 |
45 | a
46 |
47 | a
48 |
49 | a
50 |
51 | a
52 |
53 | a
54 |
55 | a
56 |
57 | a
58 |
59 | a
60 |
61 | a
62 |
63 | a
64 |
65 | a
66 |
67 | a
68 |
69 | a
70 |
71 | a
72 |
73 | ### Example 3
74 |
--------------------------------------------------------------------------------
/_sass/labels.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Labels (not the form kind)
3 | //
4 |
5 | .label,
6 | .label-blue {
7 | display: inline-block;
8 | padding-top: 0.16em;
9 | padding-right: 0.42em;
10 | padding-bottom: 0.16em;
11 | padding-left: 0.42em;
12 | margin-right: $sp-1;
13 | margin-left: $sp-1;
14 | color: $white;
15 | text-transform: uppercase;
16 | vertical-align: middle;
17 | background-color: $blue-100;
18 | @include fs-2;
19 | }
20 |
21 | .label-green {
22 | background-color: $green-200;
23 | }
24 |
25 | .label-purple {
26 | background-color: $purple-100;
27 | }
28 |
29 | .label-red {
30 | background-color: $red-200;
31 | }
32 |
33 | .label-yellow {
34 | color: $grey-dk-200;
35 | background-color: $yellow-200;
36 | }
37 |
--------------------------------------------------------------------------------
/docs/methods/generic/methods-generic-topic1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Topic 1
3 | layout: default
4 | parent: Generic
5 | grand_parent: Method
6 | nav_order: 1
7 | ---
8 |
9 | This is generic methods sub-sub topics
10 |
11 | ## Table of Contents
12 |
13 | 1. TOC
14 | {:toc}
15 |
16 | ### Example 1
17 |
18 | ```js
19 | some code
20 | ```
21 | [Try live](https://code.earthengine.google.com/){: .btn }
22 |
23 |
24 |
25 | ### Example 2
26 |
27 | a
28 |
29 | a
30 |
31 | a
32 |
33 | a
34 |
35 | a
36 |
37 | a
38 |
39 | a
40 |
41 | a
42 |
43 | a
44 |
45 | a
46 |
47 | a
48 |
49 | a
50 |
51 | a
52 |
53 | a
54 |
55 | a
56 |
57 | a
58 |
59 | a
60 |
61 | a
62 |
63 | a
64 |
65 | a
66 |
67 | a
68 |
69 | a
70 |
71 | a
72 |
73 | ### Example 3
74 |
75 |
--------------------------------------------------------------------------------
/docs/methods/specific/methods-specific-topic1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Topic 1
3 | layout: default
4 | parent: Specific
5 | grand_parent: Method
6 | nav_order: 1
7 | ---
8 |
9 | Metadata: method1; method2
10 |
11 | This is specific methods sub-sub topics
12 |
13 |
14 | ## Table of Contents
15 |
16 | 1. TOC
17 | {:toc}
18 |
19 | ### Example 1
20 |
21 | ```js
22 | some code
23 | ```
24 | [Try live](https://code.earthengine.google.com/){: .btn }
25 |
26 |
27 |
28 | ### Example 2
29 |
30 | a
31 |
32 | a
33 |
34 | a
35 |
36 | a
37 |
38 | a
39 |
40 | a
41 |
42 | a
43 |
44 | a
45 |
46 | a
47 |
48 | a
49 |
50 | a
51 |
52 | a
53 |
54 | a
55 |
56 | a
57 |
58 | a
59 |
60 | a
61 |
62 | a
63 |
64 | a
65 |
66 | a
67 |
68 | a
69 |
70 | a
71 |
72 | a
73 |
74 | a
75 |
76 | ### Example 3
77 |
78 |
--------------------------------------------------------------------------------
/_sass/support/mixins/_buttons.scss:
--------------------------------------------------------------------------------
1 | // Colored button
2 |
3 | @mixin btn-color($fg, $bg) {
4 | color: $fg;
5 | background-color: darken($bg, 2%);
6 | background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));
7 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), 0 4px 10px rgba(0, 0, 0, 0.12);
8 |
9 | &:hover,
10 | &.zeroclipboard-is-hover {
11 | color: $fg;
12 | background-color: darken($bg, 4%);
13 | background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));
14 | }
15 |
16 | &:active,
17 | &.selected,
18 | &.zeroclipboard-is-active {
19 | background-color: darken($bg, 5%);
20 | background-image: none;
21 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
22 | }
23 |
24 | &.selected:hover {
25 | background-color: darken($bg, 10%);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/assets/css/dark-mode-preview.scss:
--------------------------------------------------------------------------------
1 | ---
2 | # this ensures Jekyll reads the file to be transformed into CSS later
3 | # only Main files contain this front matter, not partials.
4 | ---
5 |
6 | //
7 | // Import external dependencies
8 | //
9 |
10 | @import "./vendor/normalize.scss/normalize.scss";
11 |
12 | //
13 | // Import Just the Docs scss
14 | //
15 |
16 | // Support
17 | @import "./support/support";
18 |
19 | //
20 | // Import custom color scheme scss
21 | //
22 |
23 | @import "./color_schemes/dark.scss";
24 |
25 | // Modules
26 | @import "./base";
27 | @import "./layout";
28 | @import "./content";
29 | @import "./navigation";
30 | @import "./typography";
31 | @import "./labels";
32 | @import "./buttons";
33 | @import "./search";
34 | @import "./tables";
35 | @import "./code";
36 | @import "./utilities/utilities";
37 |
38 | //
39 | // Import custom overrides
40 | //
41 | @import "./custom/custom";
42 |
--------------------------------------------------------------------------------
/_sass/support/mixins/_layout.scss:
--------------------------------------------------------------------------------
1 | // Media query
2 |
3 | // Media query mixin
4 | // Usage:
5 | // @include mq(md) {
6 | // ..medium and up styles
7 | // }
8 | @mixin mq($name) {
9 | // Retrieves the value from the key
10 | $value: map-get($media-queries, $name);
11 |
12 | // If the key exists in the map
13 | @if $value != null {
14 | // Prints a media query based on the value
15 | @media (min-width: rem($value)) {
16 | @content;
17 | }
18 | }
19 |
20 | @else {
21 | @warn "No value could be retrieved from `#{$media-query}`. "
22 | + "Please make sure it is defined in `$media-queries` map.";
23 | }
24 | }
25 |
26 | // Responsive container
27 |
28 | @mixin container {
29 | padding-right: $gutter-spacing-sm;
30 | padding-left: $gutter-spacing-sm;
31 |
32 | @include mq(md) {
33 | padding-right: $gutter-spacing;
34 | padding-left: $gutter-spacing;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/_sass/typography.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Typography
3 | //
4 | // stylelint-disable primer/selector-no-utility, selector-no-type, selector-max-type
5 |
6 | h1,
7 | .text-alpha {
8 | @include fs-8;
9 | font-weight: 300;
10 | }
11 |
12 | h2,
13 | .text-beta {
14 | @include fs-6;
15 | }
16 |
17 | h3,
18 | .text-gamma {
19 | @include fs-5;
20 | }
21 |
22 | h4,
23 | .text-delta {
24 | @include fs-2;
25 | font-weight: 300;
26 | text-transform: uppercase;
27 | letter-spacing: 0.1em;
28 | }
29 |
30 | h5,
31 | .text-epsilon {
32 | @include fs-3;
33 | color: $grey-dk-200;
34 | }
35 |
36 | h6,
37 | .text-zeta {
38 | @include fs-2;
39 | color: $grey-dk-200;
40 | }
41 |
42 | li {
43 | .highlight {
44 | margin-top: $sp-2;
45 | }
46 | }
47 |
48 | .text-small {
49 | @include fs-2;
50 | }
51 |
52 | .text-mono {
53 | font-family: $mono-font-family !important;
54 | }
55 |
56 | .text-center {
57 | text-align: center !important;
58 | }
59 |
--------------------------------------------------------------------------------
/assets/css/just-the-docs.scss:
--------------------------------------------------------------------------------
1 | ---
2 | # this ensures Jekyll reads the file to be transformed into CSS later
3 | # only Main files contain this front matter, not partials.
4 | ---
5 |
6 | //
7 | // Import external dependencies
8 | //
9 |
10 | @import "./vendor/normalize.scss/normalize.scss";
11 |
12 | //
13 | // Import Just the Docs scss
14 | //
15 |
16 | // Support
17 | @import "./support/support";
18 |
19 | //
20 | // Import custom color scheme scss
21 | //
22 |
23 | {% if site.color_scheme == "dark" %}
24 | @import "./color_schemes/dark.scss";
25 | {% endif %}
26 |
27 | // Modules
28 | @import "./base";
29 | @import "./layout";
30 | @import "./content";
31 | @import "./navigation";
32 | @import "./typography";
33 | @import "./labels";
34 | @import "./buttons";
35 | @import "./search";
36 | @import "./tables";
37 | @import "./code";
38 | @import "./utilities/utilities";
39 |
40 | //
41 | // Import custom overrides
42 | //
43 | @import "./custom/custom";
44 |
--------------------------------------------------------------------------------
/terms/just-the-docs-license.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Just the Docs License
3 | layout: default
4 | nav_exclude: true
5 | ---
6 |
7 | The MIT License (MIT)
8 |
9 | Copyright (c) 2016 Patrick Marsceill
10 |
11 | Permission is hereby granted, free of charge, to any person obtaining a copy
12 | of this software and associated documentation files (the "Software"), to deal
13 | in the Software without restriction, including without limitation the rights
14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 | copies of the Software, and to permit persons to whom the Software is
16 | furnished to do so, subject to the following conditions:
17 |
18 | The above copyright notice and this permission notice shall be included in
19 | all copies or substantial portions of the Software.
20 |
21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 | THE SOFTWARE.
28 |
--------------------------------------------------------------------------------
/docs/methods/specific/methods-specific-topic2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Topic 2
3 | layout: default
4 | parent: Specific
5 | grand_parent: Method
6 | nav_order: 2
7 | tags:
8 | - cloud-masking
9 | - prism
10 | - palettes
11 | ---
12 |
13 | This is specific methods sub-sub topics
14 |
15 | 1. TOC
16 | {:toc}
17 |
18 | ### Example 1
19 |
20 | This is a test of labels - use these for search tags
21 |
22 | Landsat
23 | {: .label }
24 |
25 | Cloud masking
26 | {: .label }
27 |
28 | Image collection building
29 | {: .label }
30 |
31 | Here is some code using Jekyll’s built-in syntax highlighting with Rouge
32 |
33 | ```js
34 | // Load some raster data: CONUS mean daily max temperature for January 2010
35 | var tmax = ee.Image('OREGONSTATE/PRISM/AN81m/201001').select('tmax');
36 |
37 | // Get a palette: a list of hex strings
38 | var palettes = require('users/gena/packages:palettes');
39 | var palette = palettes.misc.tol_rainbow[7];
40 |
41 | // Display max temp with defined palette stretched between selected min and max
42 | Map.addLayer(tmax, {min: -11, max: 25, palette: palette}, 'tmax');
43 | ```
44 | [Try live](https://code.earthengine.google.com/){: .btn }
45 |
46 | Edit this
47 |
48 | ### Example 2
49 |
50 | ### Example 3
51 |
--------------------------------------------------------------------------------
/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {% if page.description %}
7 |
8 | {% endif %}
9 |
10 | {{ page.title }} - {{ site.title }}
11 |
12 |
13 | {% if site.ga_tracking != nil %}
14 |
19 |
20 | {% endif %}
21 |
22 | {% if site.search_enabled != nil %}
23 |
24 | {% endif %}
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/_sass/utilities/_typography.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes for typography
3 | //
4 |
5 | // stylelint-disable primer/selector-no-utility
6 |
7 | .fs-1 {
8 | @include fs-1;
9 | }
10 |
11 | .fs-2 {
12 | @include fs-2;
13 | }
14 |
15 | .fs-3 {
16 | @include fs-3;
17 | }
18 |
19 | .fs-4 {
20 | @include fs-4;
21 | }
22 |
23 | .fs-5 {
24 | @include fs-5;
25 | }
26 |
27 | .fs-6 {
28 | @include fs-6;
29 | }
30 |
31 | .fs-7 {
32 | @include fs-7;
33 | }
34 |
35 | .fs-8 {
36 | @include fs-8;
37 | }
38 |
39 | .fs-9 {
40 | @include fs-9;
41 | }
42 |
43 | .fs-10 {
44 | @include fs-10;
45 | }
46 |
47 | .fw-300 {
48 | font-weight: 300 !important;
49 | }
50 |
51 | .fw-400 {
52 | font-weight: 400 !important;
53 | }
54 |
55 | .fw-500 {
56 | font-weight: 500 !important;
57 | }
58 |
59 | .fw-700 {
60 | font-weight: 700 !important;
61 | }
62 |
63 | .lh-0 {
64 | line-height: 0 !important;
65 | }
66 |
67 | .lh-default {
68 | line-height: $body-line-height;
69 | }
70 |
71 | .lh-tight {
72 | line-height: $body-heading-line-height;
73 | }
74 |
75 | .ls-5 {
76 | letter-spacing: 0.05em !important;
77 | }
78 |
79 | .ls-10 {
80 | letter-spacing: 0.1em !important;
81 | }
82 |
83 | .ls-0 {
84 | letter-spacing: 0 !important;
85 | }
86 |
87 | .text-uppercase {
88 | text-transform: uppercase !important;
89 | }
90 |
91 | // stylelint-enable primer/selector-no-utility
92 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # _This project is inactive, please see: https://github.com/google/earthengine-community_
4 |
5 | ## Welcome to the GEE Dev Docs repo.
6 |
7 | GEE Dev Docs is a collaborative platform for accessing and submitting [Google Earth Engine](https://earthengine.google.com/) tutorials.
8 |
9 | Please see the [site](https://gee-community.github.io/GEE-Dev-Docs/) for more information.
10 |
11 |
12 | ### Code of Conduct
13 |
14 | GEE Dev Docs is committed to fostering a welcoming community.
15 | Please read our [Code of Conduct](https://gee-community.github.io/GEE-Dev-Docs/terms/code-of-conduct.html)
16 | before participating.
17 |
18 | ### License
19 |
20 | Except as otherwise noted, the content in this repository is [licensed](https://gee-community.github.io/GEE-Dev-Docs/terms/gee-dev-docs-license.html) under the
21 | [Creative Commons Attribution 4.0 International (CC BY 4.0) License](https://creativecommons.org/licenses/by/4.0/), and
22 | code samples are licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).
23 |
24 | The GEE Dev Docs site renders content using [Just the Docs](https://github.com/pmarsceill/just-the-docs),
25 | a documentation theme for Jekyll, distributed under an [MIT License](https://gee-community.github.io/GEE-Dev-Docs/terms/just-the-docs-license.html).
26 |
--------------------------------------------------------------------------------
/_sass/utilities/_layout.scss:
--------------------------------------------------------------------------------
1 | // stylelint-disable primer/selector-no-utility
2 | //
3 | // Utility classes for layout
4 | //
5 |
6 | // Display
7 |
8 | .d-block { display: block !important; }
9 | .d-flex { display: flex !important; }
10 | .d-inline { display: inline !important; }
11 | .d-inline-block { display: inline-block !important; }
12 | .d-none { display: none !important; }
13 |
14 | @each $media-query in map-keys($media-queries) {
15 | @for $i from 1 through length($spacers) {
16 | @include mq($media-query) {
17 | $size: #{map-get($spacers, sp-#{$i - 1})};
18 | $scale: #{$i - 1};
19 |
20 | // .d-sm-block, .d-md-none, .d-lg-inline
21 | .d-#{$media-query}-block { display: block !important; }
22 | .d-#{$media-query}-flex { display: flex !important; }
23 | .d-#{$media-query}-inline { display: inline !important; }
24 | .d-#{$media-query}-inline-block { display: inline-block !important; }
25 | .d-#{$media-query}-none { display: none !important; }
26 |
27 | }
28 | }
29 | }
30 |
31 | // Vertical alignment
32 |
33 | .v-align-baseline { vertical-align: baseline !important; }
34 | .v-align-bottom { vertical-align: bottom !important; }
35 | .v-align-middle { vertical-align: middle !important; }
36 | .v-align-text-bottom { vertical-align: text-bottom !important; }
37 | .v-align-text-top { vertical-align: text-top !important; }
38 | .v-align-top { vertical-align: top !important; }
39 |
--------------------------------------------------------------------------------
/_sass/support/mixins/_typography.scss:
--------------------------------------------------------------------------------
1 | // Font size
2 |
3 | @mixin fs-1 {
4 | font-size: 9px !important;
5 |
6 | @include mq(sm) {
7 | font-size: 10px !important;
8 | }
9 | }
10 |
11 | @mixin fs-2 {
12 | font-size: 11px !important;
13 |
14 | @include mq(sm) {
15 | font-size: 12px !important;
16 | }
17 | }
18 |
19 | @mixin fs-3 {
20 | font-size: 12px !important;
21 |
22 | @include mq(sm) {
23 | font-size: 14px !important;
24 | }
25 | }
26 |
27 | @mixin fs-4 {
28 | font-size: 14px !important;
29 |
30 | @include mq(sm) {
31 | font-size: 16px !important;
32 | }
33 | }
34 |
35 | @mixin fs-5 {
36 | font-size: 16px !important;
37 |
38 | @include mq(sm) {
39 | font-size: 18px !important;
40 | }
41 | }
42 |
43 | @mixin fs-6 {
44 | font-size: 18px !important;
45 |
46 | @include mq(sm) {
47 | font-size: 24px !important;
48 | }
49 | }
50 |
51 | @mixin fs-7 {
52 | font-size: 24px !important;
53 |
54 | @include mq(sm) {
55 | font-size: 32px !important;
56 | }
57 | }
58 |
59 | @mixin fs-8 {
60 | font-size: 32px !important;
61 |
62 | @include mq(sm) {
63 | font-size: 36px !important;
64 | }
65 | }
66 |
67 | @mixin fs-9 {
68 | font-size: 36px !important;
69 |
70 | @include mq(sm) {
71 | font-size: 42px !important;
72 | }
73 | }
74 |
75 | @mixin fs-10 {
76 | font-size: 42px !important;
77 |
78 | @include mq(sm) {
79 | font-size: 48px !important;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Welcome
3 | ---
4 |
5 |
6 |
7 | # Welcome
8 |
9 | This is GEE Dev Docs, a collaborative platform for accessing and submitting [Google Earth Engine](https://earthengine.google.com/) tutorials.
10 |
11 | ## Contribute
12 |
13 | It's really easy - [check out the style guide](https://gee-community.github.io/GEE-Dev-Docs/docs/styleguide.html)
14 |
15 | ---
16 |
17 | ## About the project
18 |
19 | ### Code of Conduct
20 |
21 | GEE Dev Docs is committed to fostering a welcoming community.
22 | Please read our [Code of Conduct](https://gee-community.github.io/GEE-Dev-Docs/terms/code-of-conduct.html)
23 | before participating.
24 |
25 | ### License
26 |
27 | Except as otherwise noted, the content in this repository is [licensed](https://gee-community.github.io/GEE-Dev-Docs/terms/gee-dev-docs-license.html) under the
28 | [Creative Commons Attribution 4.0 International (CC BY 4.0) License](https://creativecommons.org/licenses/by/4.0/), and
29 | code samples are licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).
30 |
31 | The GEE Dev Docs site renders content using [Just the Docs](https://github.com/pmarsceill/just-the-docs),
32 | a documentation theme for Jekyll, distributed under an [MIT License](https://gee-community.github.io/GEE-Dev-Docs/terms/just-the-docs-license.html).
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/_sass/tables.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Tables
3 | //
4 | // stylelint-disable max-nesting-depth, selector-no-type, selector-max-type
5 |
6 | table {
7 | display: block;
8 | width: 100%;
9 | max-width: 100%;
10 | margin-bottom: $sp-5;
11 | overflow-x: auto;
12 | border-collapse: separate;
13 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05);
14 |
15 | @include mq(sm) {
16 | display: table;
17 | }
18 | }
19 |
20 | th,
21 | td {
22 | @include fs-3;
23 | min-width: 120px;
24 | padding-top: $sp-2;
25 | padding-right: $sp-3;
26 | padding-bottom: $sp-2;
27 | padding-left: $sp-3;
28 | background-color: lighten($body-background-color, 2%);
29 | border-bottom: $border rgba($border-color, 0.5);
30 | border-left: $border $border-color;
31 |
32 | &:first-of-type {
33 | border-left: 0;
34 | }
35 | }
36 |
37 | thead,
38 | tbody:first-child {
39 | tr {
40 | &:first-of-type {
41 | th,
42 | td {
43 | &:first-of-type {
44 | border-top-left-radius: $border-radius;
45 | }
46 |
47 | &:last-of-type {
48 | border-top-right-radius: $border-radius;
49 | }
50 | }
51 | }
52 | }
53 | }
54 |
55 | tbody {
56 | tr {
57 | &:last-of-type {
58 | th,
59 | td {
60 | border-bottom: 0;
61 |
62 | &:first-of-type {
63 | border-bottom-left-radius: $border-radius;
64 | }
65 |
66 | &:last-of-type {
67 | border-bottom-right-radius: $border-radius;
68 | }
69 | }
70 | }
71 | }
72 | }
73 |
74 | thead {
75 | th {
76 | border-bottom: 1px solid $border-color;
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/_sass/base.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Base element style overrides
3 | //
4 | // stylelint-disable selector-no-type, selector-max-type
5 |
6 | * {
7 | box-sizing: border-box;
8 | }
9 |
10 | ::selection {
11 | color: $white;
12 | background: $link-color;
13 | }
14 |
15 | html {
16 | @include fs-4;
17 | }
18 |
19 | body {
20 | font-family: $body-font-family;
21 | font-size: inherit;
22 | line-height: $body-line-height;
23 | color: $body-text-color;
24 | background-color: $body-background-color;
25 | }
26 |
27 | p,
28 | h1,
29 | h2,
30 | h3,
31 | h4,
32 | h5,
33 | h6,
34 | ol,
35 | ul,
36 | pre,
37 | address,
38 | blockquote,
39 | dl,
40 | div,
41 | fieldset,
42 | form,
43 | hr,
44 | noscript,
45 | table {
46 | margin-top: 0;
47 | }
48 |
49 | h1,
50 | h2,
51 | h3,
52 | h4,
53 | h5,
54 | h6 {
55 | margin-top: 1.2em;
56 | margin-bottom: 0.8em;
57 | font-weight: 500;
58 | line-height: $body-heading-line-height;
59 | color: $body-heading-color;
60 | }
61 |
62 | p {
63 | margin-bottom: 1em;
64 | }
65 |
66 | a {
67 | color: $link-color;
68 | text-decoration: none;
69 | }
70 |
71 | a:not([class]) {
72 | text-decoration: none;
73 | background-image: linear-gradient($border-color 0%, $border-color 100%);
74 | background-repeat: repeat-x;
75 | background-position: 0 100%;
76 | background-size: 1px 1px;
77 |
78 | &:hover {
79 | background-image: linear-gradient(rgba($link-color, 0.45) 0%, rgba($link-color, 0.45) 100%);
80 | background-size: 1px 1px;
81 |
82 | }
83 | }
84 |
85 | code {
86 | font-family: $mono-font-family;
87 | font-size: 12px;
88 | line-height: $body-line-height;
89 | }
90 |
91 | figure {
92 | margin: 0;
93 | }
94 |
95 | li {
96 | margin: 0.25em 0;
97 | }
98 |
99 | img {
100 | max-width: 100%;
101 | height: auto;
102 | }
103 |
104 | hr {
105 | height: 1px;
106 | padding: 0;
107 | margin: $sp-6 0;
108 | background-color: $border-color;
109 | border: 0;
110 | }
111 |
--------------------------------------------------------------------------------
/_sass/vendor/normalize.scss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "_args": [
3 | [
4 | "normalize.scss",
5 | "/Users/pmarsceill/_projects/just-the-docs"
6 | ]
7 | ],
8 | "_from": "normalize.scss@*",
9 | "_id": "normalize.scss@0.1.0",
10 | "_inCache": true,
11 | "_installable": true,
12 | "_location": "/normalize.scss",
13 | "_nodeVersion": "0.10.32",
14 | "_npmUser": {
15 | "email": "alexguerrero1092@gmail.com",
16 | "name": "alexguerrero"
17 | },
18 | "_npmVersion": "2.0.2",
19 | "_phantomChildren": {},
20 | "_requested": {
21 | "name": "normalize.scss",
22 | "raw": "normalize.scss",
23 | "rawSpec": "",
24 | "scope": null,
25 | "spec": "*",
26 | "type": "range"
27 | },
28 | "_requiredBy": [
29 | "#DEV:/"
30 | ],
31 | "_resolved": "https://registry.npmjs.org/normalize.scss/-/normalize.scss-0.1.0.tgz",
32 | "_shasum": "4a21dc25bd4c019c857785f829b658aba2a8f9ab",
33 | "_shrinkwrap": null,
34 | "_spec": "normalize.scss",
35 | "_where": "/Users/pmarsceill/_projects/just-the-docs",
36 | "author": "",
37 | "bugs": {
38 | "url": "https://github.com/guerrero/normalize.scss/issues"
39 | },
40 | "dependencies": {},
41 | "description": "Normalize.scss as a node packaged module",
42 | "devDependencies": {},
43 | "directories": {},
44 | "dist": {
45 | "shasum": "4a21dc25bd4c019c857785f829b658aba2a8f9ab",
46 | "tarball": "https://registry.npmjs.org/normalize.scss/-/normalize.scss-0.1.0.tgz"
47 | },
48 | "files": [
49 | "normalize.scss"
50 | ],
51 | "gitHead": "d67d517e28615a873066438af1d4845c157c9baf",
52 | "homepage": "https://github.com/guerrero/normalize.scss",
53 | "license": "MIT",
54 | "maintainers": [
55 | {
56 | "name": "alexguerrero",
57 | "email": "alexguerrero1092@gmail.com"
58 | }
59 | ],
60 | "name": "normalize.scss",
61 | "optionalDependencies": {},
62 | "readme": "ERROR: No README data found!",
63 | "repository": {
64 | "type": "git",
65 | "url": "git://github.com/guerrero/normalize.scss.git"
66 | },
67 | "scripts": {},
68 | "style": "normalize.scss",
69 | "version": "0.1.0"
70 | }
71 |
--------------------------------------------------------------------------------
/_sass/content.scss:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | //
4 | // Styles for rendered markdown in the .main-content container
5 | //
6 | // stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type
7 |
8 | .page-content {
9 | a {
10 | overflow: hidden;
11 | text-overflow: ellipsis;
12 | white-space: nowrap;
13 | }
14 |
15 | ul,
16 | ol {
17 | padding-left: 1.5em;
18 | }
19 |
20 | ol {
21 | list-style-type: none;
22 | counter-reset: step-counter;
23 |
24 | > li {
25 | position: relative;
26 |
27 | &::before {
28 | position: absolute;
29 | top: 0.2em;
30 | left: -1.6em;
31 | color: $grey-dk-000;
32 | content: counter(step-counter);
33 | counter-increment: step-counter;
34 | @include fs-3;
35 |
36 | @include mq(sm) {
37 | top: 0.11em;
38 | }
39 | }
40 |
41 | ol {
42 | counter-reset: sub-counter;
43 |
44 | li {
45 | &::before {
46 | content: counter(sub-counter, lower-alpha);
47 | counter-increment: sub-counter;
48 | }
49 | }
50 | }
51 | }
52 | }
53 |
54 | ul {
55 | list-style: none;
56 |
57 | > li {
58 | &::before {
59 | position: absolute;
60 | margin-left: -1.4em;
61 | color: $grey-dk-000;
62 | content: "•";
63 | }
64 | }
65 | }
66 |
67 | .task-list {
68 | padding-left: 0;
69 | }
70 |
71 | .task-list-item {
72 | display: flex;
73 | align-items: center;
74 |
75 | &::before {
76 | content: "";
77 | }
78 | }
79 |
80 | .task-list-item-checkbox {
81 | margin-right: 0.6em;
82 | }
83 |
84 | hr + * {
85 | margin-top: 0;
86 | }
87 |
88 | h1:first-of-type {
89 | margin-top: 0.5em;
90 | }
91 |
92 | dl {
93 | display: grid;
94 | grid-template-columns: max-content 1fr;
95 | }
96 |
97 | dt,
98 | dd {
99 | margin: 0.25em 0;
100 | }
101 |
102 | dt {
103 | text-align: right;
104 |
105 | &::after {
106 | content: ":";
107 | }
108 | }
109 |
110 | dd {
111 | margin-left: 1em;
112 | font-weight: 500;
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/assets/py/reformat_example-scripts.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | Created on Tue Feb 26 08:59:56 2019
4 |
5 | @author: braatenj
6 | """
7 |
8 |
9 |
10 | import os
11 |
12 | outFile = r'C:\Users\braatenj\Documents\GitHub\GEE-Dev-Docs\docs\API\date-ranges-home.md'
13 | lookHere = r'C:\Users\braatenj\Documents\GitHub\example-scripts\DateRanges'
14 |
15 | info = [
16 | {'title':'Creating DateRanges','pages':[
17 | 'ee.DateRange.md',
18 | 'ee.DateRange.unbounded.md',
19 | ]},
20 | {'title':'Transforming DateRanges','pages':[
21 | 'dateRange.union.md',
22 | 'dateRange.intersection.md',
23 | ]},
24 | {'title':'Querying DateRanges','pages':[
25 | 'dateRange.start.md',
26 | 'dateRange.end.md',
27 | ]},
28 | {'title':'Describing DateRanges','pages':[
29 | 'dateRange.intersects.md',
30 | 'dateRange.contains.md',
31 | 'dateRange.isEmpty.md',
32 | 'dateRange.isUnbounded.md'
33 | ]}
34 | ]
35 |
36 |
37 | divider = ['\n\n\n',
38 | '\n',
39 | '\n\n\n']
40 | divider = ''.join(divider)
41 |
42 |
43 | with open(outFile, 'w') as outfile:
44 | for i in range(len(info)):
45 | newSection = 1
46 | for j in range(len(info[i]['pages'])):
47 | if newSection == 1:
48 | addThis = divider.replace('replace', info[i]['title'])+'## '+info[i]['title']+'\n\n\n'
49 | else:
50 | addThis = '\n\n\n\n\n'
51 |
52 | with open(os.path.join(lookHere,info[i]['pages'][j])) as infile:
53 | out = infile.read()
54 | out = addThis+out
55 | out = out.replace('## Syntax', '**Syntax**')
56 | out = out.replace('## Example', '**Example**')
57 | out = out.replace('#### Javascript', '*Javascript*')
58 | out = out.replace('\n# ', '\n### ')
59 | outfile.write(out)
60 |
61 | newSection = 0
--------------------------------------------------------------------------------
/_sass/search.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Search input and autocomplete
3 | //
4 |
5 | .search {
6 | position: relative;
7 | z-index: 99;
8 | display: none;
9 | flex-grow: 1;
10 | padding: $sp-2;
11 | margin-bottom: $sp-3;
12 | background-color: $white;
13 | border-radius: 3px;
14 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07), 0 3px 10px rgba(0, 0, 0, 0.05);
15 |
16 | @include mq(md) {
17 | display: block;
18 | padding-top: $sp-1;
19 | padding-right: 0;
20 | padding-bottom: 0;
21 | padding-left: 0;
22 | margin-bottom: 0;
23 | background-color: transparent;
24 | box-shadow: none;
25 | }
26 |
27 | &.nav-open {
28 | display: block;
29 | }
30 | }
31 |
32 | .search-results-wrap {
33 | display: none;
34 |
35 | &.active {
36 | position: absolute;
37 | top: $sp-1;
38 | z-index: 100;
39 | display: block;
40 | width: 300px;
41 | margin-top: $gutter-spacing;
42 | background: lighten($body-background-color, 1%);
43 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.07), 0 4px 14px rgba(0, 0, 0, 0.05);
44 | }
45 | }
46 |
47 | .search-input-wrap {
48 | display: flex;
49 | background-color: $body-background-color;
50 | }
51 |
52 | .search-input {
53 | width: 100%;
54 | padding-top: $sp-1;
55 | padding-bottom: $sp-1;
56 | background-color: $body-background-color;
57 | border-top: 0;
58 | border-right: 0;
59 | border-bottom: 0;
60 | border-left: 0;
61 | order: 2;
62 |
63 | &:focus {
64 | outline: 0;
65 | box-shadow: none;
66 |
67 | + .search-icon {
68 | fill: $link-color;
69 | }
70 | }
71 |
72 | @include fs-5;
73 |
74 | @include mq(sm) {
75 | @include fs-3;
76 | }
77 |
78 | @include mq(md) {
79 | @include fs-2;
80 | }
81 | }
82 |
83 | .search-icon {
84 | align-self: center;
85 | margin-right: $sp-2;
86 | fill: $grey-dk-000;
87 | order: 1;
88 | }
89 |
90 | .search-results-list {
91 | padding-left: 0;
92 | margin-top: $sp-1;
93 | margin-bottom: $sp-1;
94 | list-style: none;
95 | @include fs-3;
96 | }
97 |
98 | .search-results-list-item {
99 | padding: 0;
100 | margin: 0;
101 | }
102 |
103 | .search-results-link {
104 | display: block;
105 | padding-top: $sp-1;
106 | padding-right: $sp-3;
107 | padding-bottom: $sp-1;
108 | padding-left: $sp-3;
109 |
110 | &:hover {
111 | color: $body-heading-color;
112 | background-color: darken($body-background-color, 2%);
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/_includes/nav.html:
--------------------------------------------------------------------------------
1 |
45 |
--------------------------------------------------------------------------------
/_sass/navigation.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Main nav, breadcrumb, etc...
3 | //
4 |
5 | .site-title {
6 | display: block;
7 | flex: 1 1 auto;
8 | color: $body-heading-color;
9 | background-color: $sidebar-color;
10 |
11 | @include mq(md) {
12 | position: absolute;
13 | top: 0;
14 | right: 0;
15 | z-index: 101;
16 | height: 60px;
17 | padding-top: $sp-4;
18 | border-bottom: $border $border-color;
19 | }
20 | }
21 |
22 | .navigation-list {
23 | padding: 0;
24 | margin-top: $sp-4;
25 | margin-bottom: 0;
26 | list-style: none;
27 |
28 | @include mq(md) {
29 | margin-top: 0;
30 | }
31 | }
32 |
33 | .navigation-list-child-list {
34 | padding-left: $sp-3;
35 | list-style: none;
36 |
37 | .navigation-list-link {
38 | color: $nav-child-link-color;
39 | }
40 |
41 | .navigation-list-item {
42 | position: relative;
43 |
44 | &::before {
45 | position: absolute;
46 | margin-top: 0.3em;
47 | margin-left: -0.8em;
48 | color: rgba($body-text-color, 0.3);
49 | content: "- ";
50 | }
51 |
52 | &.active {
53 | &::before {
54 | color: $body-text-color;
55 | }
56 | }
57 | }
58 | }
59 |
60 | .navigation-list-item {
61 | @include fs-4;
62 | margin: 0;
63 |
64 | @include mq(md) {
65 | @include fs-3;
66 | }
67 |
68 | .navigation-list-child-list {
69 | display: none;
70 | }
71 |
72 | &.active {
73 | .navigation-list-child-list {
74 | display: block;
75 | }
76 | }
77 | }
78 |
79 | .navigation-list-link {
80 | display: block;
81 | padding-top: $sp-1;
82 | padding-bottom: $sp-1;
83 |
84 | &.active {
85 | font-weight: 600;
86 | color: $body-heading-color;
87 | text-decoration: none;
88 | }
89 | }
90 |
91 | // Small screen nav
92 |
93 | .main-nav,
94 | .aux-nav {
95 | display: none;
96 |
97 | &.nav-open {
98 | display: block;
99 | }
100 | @include mq(md) {
101 | display: block;
102 | }
103 | }
104 |
105 | .navigation-list-toggle {
106 | position: absolute;
107 | right: $sp-4;
108 |
109 | @include mq(md) {
110 | display: none !important;
111 | }
112 | }
113 |
114 | // Breadcrumb nav
115 | .breadcrumb-nav {
116 | @include mq(md) {
117 | margin-top: -$sp-4;
118 | }
119 | }
120 |
121 | .breadcrumb-nav-list {
122 | padding-left: 0;
123 | margin-bottom: $sp-3;
124 | list-style: none;
125 | }
126 |
127 | .breadcrumb-nav-list-item {
128 | display: table-cell;
129 | @include fs-2;
130 |
131 | &::before {
132 | display: none;
133 | }
134 |
135 | &::after {
136 | display: inline-block;
137 | margin-right: $sp-2;
138 | margin-left: $sp-2;
139 | color: $grey-dk-000;
140 | content: "/";
141 | }
142 |
143 | &:last-child {
144 | &::after {
145 | content: "";
146 | }
147 | }
148 | }
149 |
--------------------------------------------------------------------------------
/_sass/buttons.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Buttons and things that look like buttons
3 | //
4 | // stylelint-disable color-named
5 |
6 | .btn {
7 | display: inline-block;
8 | box-sizing: border-box;
9 | padding-top: 0.3em;
10 | padding-right: 1em;
11 | padding-bottom: 0.3em;
12 | padding-left: 1em;
13 | margin: 0;
14 | font-family: inherit;
15 | font-size: inherit;
16 | font-weight: 500;
17 | line-height: 1.5;
18 | color: $link-color;
19 | text-decoration: none;
20 | vertical-align: baseline;
21 | cursor: pointer;
22 | background-color: $base-button-color;
23 | border-width: 0;
24 | border-radius: 3px;
25 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);
26 | appearance: none;
27 |
28 | &:focus {
29 | text-decoration: none;
30 | outline: none;
31 | box-shadow: 0 0 0 3px rgba(blue, 0.25);
32 | }
33 |
34 | &:focus:hover,
35 | &.selected:focus {
36 | box-shadow: 0 0 0 3px rgba(blue, 0.25);
37 | }
38 |
39 | &:hover,
40 | &.zeroclipboard-is-hover {
41 | color: darken($link-color, 2%);
42 | }
43 |
44 | &:hover,
45 | &:active,
46 | &.zeroclipboard-is-hover,
47 | &.zeroclipboard-is-active {
48 | text-decoration: none;
49 | background-color: darken($base-button-color, 1%);
50 | }
51 |
52 | &:active,
53 | &.selected,
54 | &.zeroclipboard-is-active {
55 | background-color: darken($base-button-color, 3%);
56 | background-image: none;
57 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
58 | }
59 |
60 | &.selected:hover {
61 | background-color: darken(#dcdcdc, 5%);
62 | }
63 |
64 | &:disabled,
65 | &.disabled {
66 | &,
67 | &:hover {
68 | color: rgba(102, 102, 102, 0.5);
69 | cursor: default;
70 | background-color: rgba(229, 229, 229, 0.5);
71 | background-image: none;
72 | box-shadow: none;
73 | }
74 | }
75 | }
76 |
77 | .btn-outline {
78 | color: $link-color;
79 | background: transparent;
80 | box-shadow: inset 0 0 0 2px $grey-lt-300;
81 |
82 | &:hover,
83 | &:active,
84 | &.zeroclipboard-is-hover,
85 | &.zeroclipboard-is-active {
86 | color: darken($link-color, 4%);
87 | text-decoration: none;
88 | background-color: transparent;
89 | box-shadow: inset 0 0 0 3px $grey-lt-300;
90 | }
91 |
92 | &:focus {
93 | text-decoration: none;
94 | outline: none;
95 | box-shadow: inset 0 0 0 2px $grey-dk-100, 0 0 0 3px rgba(blue, 0.25);
96 | }
97 |
98 | &:focus:hover,
99 | &.selected:focus {
100 | box-shadow: inset 0 0 0 2px $grey-dk-100;
101 | }
102 | }
103 |
104 | .btn-primary {
105 | @include btn-color($white, $btn-primary-color);
106 | }
107 |
108 | .btn-purple {
109 | @include btn-color($white, $purple-100);
110 | }
111 |
112 | .btn-blue {
113 | @include btn-color($white, $blue-000);
114 | }
115 |
116 | .btn-green {
117 | @include btn-color($white, $green-100);
118 | }
119 |
--------------------------------------------------------------------------------
/staging/staging.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Staging
3 | layout: default
4 | nav_order: 5
5 | ---
6 |
7 | This is a place to stage tutorials/examples/etc while platform is being built.
8 |
9 |
10 | 1. TOC
11 | {:toc}
12 |
13 |
14 | # How-To
15 |
16 | ## Time series
17 |
18 | ### Series difference
19 |
20 | Given a time series of observations, calculate the differences between observations at a regular step. Similar to Python Pandas [Series.diff](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.diff.html)
21 |
22 | TODO: could be simplifed for brevity - are the two below different cases - option for forward or backward difference
23 |
24 | [GEE JS Example 1](https://code.earthengine.google.com/cfb832f86632f1d3f19268bbee3854f3){: .btn }
25 |
26 | [GEE JS Example 2](https://code.earthengine.google.com/9da59e20575a5f3cf5a1ba2fc2200013){: .btn }
27 |
28 |
29 |
30 | ## Landsat
31 |
32 | ### Correction
33 |
34 | #### Minnaert terrain correction
35 |
36 | Implementation where Minnaert constant k is calculated per pixel as a function of slope.
37 |
38 | TODO: Sun azimuth and zenith angles are taken from image metadata, so represent nadir position and are held constant. Could adjust for every pixel.
39 |
40 | [GEE JS](https://code.earthengine.google.com/1fcc034eb3014d7606eec467241dc1da){: .btn }
41 |
42 | **Landsat7 SLC-off gap filling**
43 |
44 | [GEE JS](https://code.earthengine.google.com/078556a80eee46a8330b2079cd4c9dca){: .btn .btn-outline }
45 |
46 |
47 |
48 | TODO:
49 |
50 |
51 | ## Feature Collection
52 |
53 | **Generate regular grid intersecting a geometry**
54 |
55 | *Author: Gennadii Donchyts*
56 |
57 | https://code.earthengine.google.com/ff50a3e4745b1e732b1b7ac8a12623b6
58 |
59 | Also implemented in `users/gena/packages:grid` library
60 |
61 | ```js
62 | var g = require('users/gena/packages:grid')
63 | var dx = 0.45
64 | var dy = 0.45
65 | var grid = g.generateGridForGeometry(region.bounds(), dx, dy)
66 | ```
67 |
68 | Example of its use in dividing an image for export
69 |
70 | *Author: marortpab*
71 |
72 | https://code.earthengine.google.com/3a413327f67acc350bec59ba5ce1cb3c
73 |
74 | TODO: make reproducable - calls user asset(s)
75 |
76 |
77 | ## Charts
78 |
79 | ### Scatterplot
80 |
81 | **3-band**
82 |
83 | *Author: Gennadii Donchyts*
84 |
85 | https://code.earthengine.google.com/252fda4ed0340c3e926096b01668576b
86 |
87 | **2-band with color for group**
88 |
89 | *Author: barbosaale*
90 |
91 | https://code.earthengine.google.com/41f4c83698112405fcaf591ed9145a25
92 |
93 | TODO: make reproducable - calls user asset(s)
94 |
95 |
96 | ## UI
97 |
98 | ### ui.Label
99 |
100 | **Adjust the position of a label within a panel using `textAlign` style property**
101 |
102 | https://code.earthengine.google.com/b4c03edade9ab3509d0e8a9b5a4e09b1
103 |
104 | # Apps
105 |
106 | ## Forest Change
107 |
108 |
109 |
110 | ## Atmosphere
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
--------------------------------------------------------------------------------
/_sass/layout.scss:
--------------------------------------------------------------------------------
1 | //
2 | // The basic two column layout
3 | //
4 |
5 | .page-wrap {
6 | @include mq(md) {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | display: flex;
11 | width: 100%;
12 | height: 100%;
13 | overflow-x: hidden;
14 | overflow-y: hidden;
15 | }
16 | }
17 |
18 | .side-bar {
19 | z-index: 100;
20 | display: flex;
21 | flex-wrap: wrap;
22 | padding-top: $gutter-spacing-sm;
23 | padding-bottom: $gutter-spacing-sm;
24 | background-color: $sidebar-color;
25 |
26 | @include mq(md) {
27 | flex-wrap: nowrap;
28 | position: absolute;
29 | width: $nav-width + 16px;
30 | height: 100%;
31 | padding-top: $gutter-spacing * 2;
32 | padding-bottom: 0;
33 | flex-direction: column;
34 | border-right: $border $border-color;
35 | align-items: flex-end;
36 | }
37 |
38 | @include mq(lg) {
39 | width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});
40 | min-width: $nav-width;
41 | }
42 | }
43 |
44 | .main-content-wrap {
45 | @include mq(md) {
46 | position: absolute;
47 | top: 0;
48 | left: 0;
49 | width: 100%;
50 | height: 100%;
51 | min-height: 600px;
52 | -webkit-overflow-scrolling: touch;
53 | overflow-x: hidden;
54 | overflow-y: scroll;
55 | }
56 | }
57 |
58 | .main-content {
59 | padding-top: $gutter-spacing-sm;
60 | @include container;
61 |
62 | @include mq(md) {
63 | position: relative;
64 | max-width: $content-width;
65 | padding-top: $gutter-spacing;
66 | padding-bottom: $gutter-spacing;
67 | padding-left: $gutter-spacing * 1.5;
68 | margin-left: $nav-width;
69 | }
70 |
71 | @include mq(lg) {
72 | padding-left: $gutter-spacing;
73 | margin-left: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});
74 | }
75 | }
76 |
77 | .js-main-content:focus {
78 | outline: none;
79 | }
80 |
81 | .page-header {
82 | background-color: $sidebar-color;
83 |
84 | @include mq(md) {
85 | background-color: $body-background-color;
86 | }
87 |
88 | .main-content {
89 | padding-top: 0;
90 |
91 | @include mq(md) {
92 | display: flex;
93 | justify-content: flex-end;
94 | height: 60px;
95 | padding-top: $sp-4;
96 | padding-bottom: $sp-4;
97 | border-bottom: $border $border-color;
98 | }
99 | }
100 | }
101 |
102 | .navigation,
103 | .site-title,
104 | .site-footer {
105 |
106 | @include container;
107 |
108 | width: 100%;
109 |
110 | @include mq(lg) {
111 | width: $nav-width + 32px;
112 | }
113 | }
114 |
115 | .navigation {
116 | @include mq(md) {
117 | padding-top: $sp-8;
118 | overflow-y: auto;
119 | flex: 1 1 auto;
120 | }
121 | }
122 |
123 | // stylelint-disable selector-no-type
124 | body {
125 | position: relative;
126 | padding-bottom: $sp-10;
127 |
128 | @include mq(md) {
129 | position: static;
130 | padding-bottom: 0;
131 | }
132 | }
133 | // stylelint-enable selector-no-type
134 |
135 | .site-footer {
136 | position: absolute;
137 | bottom: 0;
138 | padding-top: $sp-4;
139 | padding-bottom: $sp-4;
140 |
141 | @include mq(md) {
142 | position: static;
143 | align-self: flex-end;
144 | justify-self: end;
145 | background-color: $sidebar-color;
146 | }
147 | }
148 |
--------------------------------------------------------------------------------
/_sass/custom/custom.scss:
--------------------------------------------------------------------------------
1 | // //
2 | // // Typography
3 | // //
4 | //
5 | // $body-font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif;
6 | // $mono-font-family: "SFMono-Regular", Menlo, Consolas, Monospace;
7 | // $root-font-size: 16px; // Base font-size for rems
8 | // $body-line-height: 1.4;
9 | // $body-heading-line-height: 1.15;
10 | //
11 | // //
12 | // // Colors
13 | // //
14 | //
15 | // $white: #fff;
16 | //
17 | // $grey-dk-000: #959396;
18 | // $grey-dk-100: #5c5962;
19 | // $grey-dk-200: #44434d;
20 | // $grey-dk-250: #302d36 !default;
21 | // $grey-dk-300: #27262b;
22 | //
23 | // $grey-lt-000: #f5f6fa;
24 | // $grey-lt-100: #eeebee;
25 | // $grey-lt-200: #ecebed;
26 | // $grey-lt-300: #e6e1e8;
27 | //
28 | // $purple-000: #7253ed;
29 | // $purple-100: #5e41d0;
30 | // $purple-200: #4e26af;
31 | // $purple-300: #381885;
32 | //
33 | // $blue-000: #2c84fa;
34 | // $blue-100: #2869e6;
35 | // $blue-200: #264caf;
36 | // $blue-300: #183385;
37 | //
38 | // $green-000: #41d693;
39 | // $green-100: #11b584;
40 | // $green-200: #009c7b;
41 | // $green-300: #026e57;
42 | //
43 | // $body-background-color: $white !default;
44 | $sidebar-color: $purple-000 !default; //$grey-lt-000
45 | // $code-background-color: $grey-lt-000 !default;
46 |
47 | // $body-text-color: $grey-dk-100 !default;
48 | // $body-heading-color: $grey-dk-300 !default;
49 | // $nav-child-link-color: $grey-dk-100 !default;
50 | $link-color: $blue-000; //$purple-000 !default
51 | // $btn-primary-color: $purple-100 !default;
52 | // $base-button-color: #f7f7f7 !default;
53 | //
54 | // //
55 | // // Media queries in pixels
56 | // //
57 | //
58 | // $media-queries: (
59 | // xs: 320px,
60 | // sm: 500px,
61 | // md: 740px,
62 | // lg: 1120px,
63 | // xl: 1400px
64 | // );
65 | //
66 | // //
67 | // // Spacing
68 | // //
69 | //
70 | // $spacing-unit: 1rem; // 1rem == 16px
71 | //
72 | // $spacers: (
73 | // sp-0: 0,
74 | // sp-1: $spacing-unit * 0.25,
75 | // sp-2: $spacing-unit * 0.5,
76 | // sp-3: $spacing-unit * 0.75,
77 | // sp-4: $spacing-unit,
78 | // sp-5: $spacing-unit * 1.5,
79 | // sp-6: $spacing-unit * 2,
80 | // sp-7: $spacing-unit * 2.5,
81 | // sp-8: $spacing-unit * 3,
82 | // sp-9: $spacing-unit * 3.5,
83 | // sp-10: $spacing-unit * 4
84 | // );
85 | //
86 | // $sp-1: map-get($spacers, sp-1); // 0.25 rem == 4px
87 | // $sp-2: map-get($spacers, sp-2); // 0.5 rem == 8px
88 | // $sp-3: map-get($spacers, sp-3); // 0.75 rem == 12px
89 | // $sp-4: map-get($spacers, sp-4); // 1 rem == 16px
90 | // $sp-5: map-get($spacers, sp-5); // 1.5 rem == 24px
91 | // $sp-6: map-get($spacers, sp-6); // 2 rem == 32px
92 | // $sp-7: map-get($spacers, sp-7); // 2.5 rem == 40px
93 | // $sp-8: map-get($spacers, sp-8); // 3 rem == 48px
94 | // $sp-9: map-get($spacers, sp-9); // 4 rem == 48px
95 | // $sp-10: map-get($spacers, sp-10); // 4.5 rem == 48px
96 | //
97 | // //
98 | // // Borders
99 | // //
100 | //
101 | // $border: 1px solid;
102 | // $border-radius: 4px;
103 | // $border-color: $grey-lt-100;
104 | //
105 | // //
106 | // // Grid system
107 | // //
108 | //
109 | // $gutter-spacing: $sp-6;
110 | // $gutter-spacing-sm: $sp-4;
111 | // $nav-width: 232px;
112 | // $content-width: 800px;
113 | //
114 | // $media-queries: (
115 | // xs: 320px,
116 | // sm: 500px,
117 | // md: 740px,
118 | // lg: 800px,
119 | // xl: 1316px
120 | // );
121 |
--------------------------------------------------------------------------------
/terms/code-of-conduct.md:
--------------------------------------------------------------------------------
1 | ---
2 | tile: Contributor Covenant Code of Conduct
3 | layout: default
4 | nav_exclude: true
5 | ---
6 |
7 | # Contributor Covenant Code of Conduct
8 |
9 | ## Our Pledge
10 |
11 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
12 |
13 | ## Our Standards
14 |
15 | Examples of behavior that contributes to creating a positive environment include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
26 | * Trolling, insulting/derogatory comments, and personal or political attacks
27 | * Public or private harassment
28 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
29 | * Other conduct which could reasonably be considered inappropriate in a professional setting
30 |
31 | ## Our Responsibilities
32 |
33 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
34 |
35 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
36 |
37 | ## Scope
38 |
39 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
40 |
41 | ## Enforcement
42 |
43 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at google-earth-engine-developers@googlegroups.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
44 |
45 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
46 |
47 | ## Attribution
48 |
49 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
50 |
51 | [homepage]: http://contributor-covenant.org
52 | [version]: http://contributor-covenant.org/version/1/4/
53 |
--------------------------------------------------------------------------------
/_sass/vendor/normalize.scss/README.md:
--------------------------------------------------------------------------------
1 | # normalize.scss v0.1.0
2 |
3 | Normalize.scss is the SCSS version of [normalize.css](http://necolas.github.io/normalize.css), a customisable CSS file that makes browsers render all elements more consistently and in line with modern standards.
4 |
5 | [View the normalize.css test file](http://necolas.github.io/normalize.css/latest/test.html)
6 |
7 | ## Install
8 |
9 | * [npm](http://npmjs.org/): `npm install --save normalize.scss`
10 | * [Component(1)](https://github.com/component/component/): `component install guerrero/normalize.scss`
11 | * [Bower](http://bower.io/): `bower install --save normalize.scss`
12 | * Download: Go to [this link](https://raw.githubusercontent.com/guerrero/normalize.scss/master/normalize.scss), press right-click on the page and choose "Save as..."
13 |
14 | No other styles should come before Normalize.scss.
15 |
16 | It's recommendable to modify `normalize.scss` to suit it to your project
17 |
18 | ## What does it do?
19 |
20 | * Preserves useful defaults, unlike many CSS resets.
21 | * Normalizes styles for a wide range of elements.
22 | * Corrects bugs and common browser inconsistencies.
23 | * Improves usability with subtle improvements.
24 | * Explains what code does using detailed comments.
25 |
26 | ## Browser support
27 |
28 | * Google Chrome (latest)
29 | * Mozilla Firefox (latest)
30 | * Mozilla Firefox 4
31 | * Opera (latest)
32 | * Apple Safari 6+
33 | * Internet Explorer 8+
34 |
35 | [Normalize.css v1 provides legacy browser
36 | support](https://github.com/necolas/normalize.css/tree/v1) (IE 6+, Safari 4+),
37 | but is no longer actively developed.
38 |
39 | ## Extended details
40 |
41 | Additional detail and explanation of the esoteric parts of normalize.css.
42 |
43 | #### `pre, code, kbd, samp`
44 |
45 | The `font-family: monospace, monospace` hack fixes the inheritance and scaling
46 | of font-size for preformated text. The duplication of `monospace` is
47 | intentional. [Source](http://en.wikipedia.org/wiki/User:Davidgothberg/Test59).
48 |
49 | #### `sub, sup`
50 |
51 | Normally, using `sub` or `sup` affects the line-box height of text in all
52 | browsers. [Source](http://gist.github.com/413930).
53 |
54 | #### `svg:not(:root)`
55 |
56 | Adding `overflow: hidden` fixes IE9's SVG rendering. Earlier versions of IE
57 | don't support SVG, so we can safely use the `:not()` and `:root` selectors that
58 | modern browsers use in the default UA stylesheets to apply this style. [SVG
59 | Mailing List discussion](http://lists.w3.org/Archives/Public/public-svg-wg/2008JulSep/0339.html)
60 |
61 | #### `input[type="search"]`
62 |
63 | The search input is not fully stylable by default. In Chrome and Safari on
64 | OSX/iOS you can't control `font`, `padding`, `border`, or `background`. In
65 | Chrome and Safari on Windows you can't control `border` properly. It will apply
66 | `border-width` but will only show a border color (which cannot be controlled)
67 | for the outer 1px of that border. Applying `-webkit-appearance: textfield`
68 | addresses these issues without removing the benefits of search inputs (e.g.
69 | showing past searches).
70 |
71 | #### `legend`
72 |
73 | Adding `border: 0` corrects an IE 8–11 bug where `color` (yes, `color`) is not
74 | inherited by `legend`.
75 |
76 | ## Acknowledgements
77 |
78 | Normalize.scss is a project by [Alex Guerrero](https://github.com/guerrero) based on [normalize.css](http://necolas.github.io/normalize.css) from [Nicolas Gallagher](https://github.com/necolas), co-created with [Jonathan Neal](https://github.com/jonathantneal).
79 |
--------------------------------------------------------------------------------
/_sass/support/_variables.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Typography
3 | //
4 |
5 | $body-font-family: -apple-system, BlinkMacSystemFont, "helvetica neue", helvetica, roboto, noto, "segoe ui", arial, sans-serif !default;
6 | $mono-font-family: "SFMono-Regular", Menlo, Consolas, Monospace !default;
7 | $root-font-size: 16px !default; // Base font-size for rems
8 | $body-line-height: 1.4 !default;
9 | $body-heading-line-height: 1.15 !default !default;
10 |
11 | //
12 | // Colors
13 | //
14 |
15 | $white: #fff !default;
16 |
17 | $grey-dk-000: #959396 !default;
18 | $grey-dk-100: #5c5962 !default;
19 | $grey-dk-200: #44434d !default;
20 | $grey-dk-250: #302d36 !default;
21 | $grey-dk-300: #27262b !default;
22 |
23 | $grey-lt-000: #f5f6fa !default;
24 | $grey-lt-100: #eeebee !default;
25 | $grey-lt-200: #ecebed !default;
26 | $grey-lt-300: #e6e1e8 !default;
27 |
28 | $purple-000: #7253ed !default;
29 | $purple-100: #5e41d0 !default;
30 | $purple-200: #4e26af !default;
31 | $purple-300: #381885 !default;
32 |
33 | $blue-000: #2c84fa !default;
34 | $blue-100: #2869e6 !default;
35 | $blue-200: #264caf !default;
36 | $blue-300: #183385 !default;
37 |
38 | $green-000: #41d693 !default;
39 | $green-100: #11b584 !default;
40 | $green-200: #009c7b !default;
41 | $green-300: #026e57 !default;
42 |
43 | $yellow-000: #ffeb82 !default;
44 | $yellow-100: #fadf50 !default;
45 | $yellow-200: #f7d12e !default;
46 | $yellow-300: #e7af06 !default;
47 |
48 | $red-000: #f77e7e !default;
49 | $red-100: #f96e65 !default;
50 | $red-200: #e94c4c !default;
51 | $red-300: #dd2e2e !default;
52 |
53 | $body-background-color: $white !default;
54 | $sidebar-color: $grey-lt-000 !default;
55 | $code-background-color: $grey-lt-000 !default;
56 |
57 | $body-text-color: $grey-dk-100 !default;
58 | $body-heading-color: $grey-dk-300 !default;
59 | $nav-child-link-color: $grey-dk-100 !default;
60 | $link-color: $purple-000 !default;
61 | $btn-primary-color: $purple-100 !default;
62 | $base-button-color: #f7f7f7 !default;
63 |
64 | //
65 | // Media queries in pixels
66 | //
67 |
68 | $media-queries: (
69 | xs: 320px,
70 | sm: 500px,
71 | md: 740px,
72 | lg: 1120px,
73 | xl: 1400px
74 | ) !default;
75 |
76 | //
77 | // Spacing
78 | //
79 |
80 | $spacing-unit: 1rem; // 1rem == 16px
81 |
82 | $spacers: (
83 | sp-0: 0,
84 | sp-1: $spacing-unit * 0.25,
85 | sp-2: $spacing-unit * 0.5,
86 | sp-3: $spacing-unit * 0.75,
87 | sp-4: $spacing-unit,
88 | sp-5: $spacing-unit * 1.5,
89 | sp-6: $spacing-unit * 2,
90 | sp-7: $spacing-unit * 2.5,
91 | sp-8: $spacing-unit * 3,
92 | sp-9: $spacing-unit * 3.5,
93 | sp-10: $spacing-unit * 4
94 | ) !default;
95 |
96 | $sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px
97 | $sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px
98 | $sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px
99 | $sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px
100 | $sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px
101 | $sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px
102 | $sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px
103 | $sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px
104 | $sp-9: map-get($spacers, sp-9) !default; // 4 rem == 48px
105 | $sp-10: map-get($spacers, sp-10) !default; // 4.5 rem == 48px
106 |
107 | //
108 | // Borders
109 | //
110 |
111 | $border: 1px solid !default;
112 | $border-radius: 4px !default;
113 | $border-color: $grey-lt-100 !default;
114 |
115 | //
116 | // Grid system
117 | //
118 |
119 | $gutter-spacing: $sp-6 !default;
120 | $gutter-spacing-sm: $sp-4 !default;
121 | $nav-width: 232px !default;
122 | $content-width: 800px !default;
123 |
124 | $media-queries: (
125 | xs: 320px,
126 | sm: 500px,
127 | md: 740px,
128 | lg: 800px,
129 | xl: 1316px
130 | ) !default;
131 |
--------------------------------------------------------------------------------
/_sass/utilities/_spacing.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes for margins and padding
3 | //
4 |
5 | // scss-lint:disable SpaceAfterPropertyName
6 | // stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before, primer/selector-no-utility
7 |
8 | // Margin spacer utilities
9 |
10 | @for $i from 1 through length($spacers) {
11 | $size: #{map-get($spacers, sp-#{$i - 1})};
12 | $scale: #{$i - 1};
13 |
14 | // .m-0, .m-1, .m-2...
15 | .m-#{$scale} { margin: #{$size} !important; }
16 | .mt-#{$scale} { margin-top: #{$size} !important; }
17 | .mr-#{$scale} { margin-right: #{$size} !important; }
18 | .mb-#{$scale} { margin-bottom: #{$size} !important; }
19 | .ml-#{$scale} { margin-left: #{$size} !important; }
20 |
21 | .mx-#{$scale} {
22 | margin-right: #{$size} !important;
23 | margin-left: #{$size} !important;
24 | }
25 |
26 | .my-#{$scale} {
27 | margin-top: #{$size} !important;
28 | margin-bottom: #{$size} !important;
29 | }
30 |
31 | .mxn-#{$scale} {
32 | margin-right: -#{$size} !important;
33 | margin-left: -#{$size} !important;
34 | }
35 | }
36 |
37 | .mx-auto {
38 | margin-right: auto !important;
39 | margin-left: auto !important;
40 | }
41 |
42 | @each $media-query in map-keys($media-queries) {
43 | @for $i from 1 through length($spacers) {
44 | @include mq($media-query) {
45 | $size: #{map-get($spacers, sp-#{$i - 1})};
46 | $scale: #{$i - 1};
47 |
48 | // .m-sm-0, .m-md-1, .m-lg-2...
49 | .m-#{$media-query}-#{$scale} { margin: #{$size} !important; }
50 | .mt-#{$media-query}-#{$scale} { margin-top: #{$size} !important; }
51 | .mr-#{$media-query}-#{$scale} { margin-right: #{$size} !important; }
52 | .mb-#{$media-query}-#{$scale} { margin-bottom: #{$size} !important; }
53 | .ml-#{$media-query}-#{$scale} { margin-left: #{$size} !important; }
54 |
55 | .mx-#{$media-query}-#{$scale} {
56 | margin-right: #{$size} !important;
57 | margin-left: #{$size} !important;
58 | }
59 |
60 | .my-#{$media-query}-#{$scale} {
61 | margin-top: #{$size} !important;
62 | margin-bottom: #{$size} !important;
63 | }
64 |
65 | .mxn-#{$media-query}-#{$scale} {
66 | margin-right: -#{$size} !important;
67 | margin-left: -#{$size} !important;
68 | }
69 | }
70 | }
71 | }
72 |
73 | // Padding spacer utilities
74 |
75 | @for $i from 1 through length($spacers) {
76 | $size: #{map-get($spacers, sp-#{$i - 1})};
77 | $scale: #{$i - 1};
78 |
79 | // .p-0, .p-1, .p-2...
80 | .p-#{$scale} { padding: #{$size} !important; }
81 | .pt-#{$scale} { padding-top: #{$size} !important; }
82 | .pr-#{$scale} { padding-right: #{$size} !important; }
83 | .pb-#{$scale} { padding-bottom: #{$size} !important; }
84 | .pl-#{$scale} { padding-left: #{$size} !important; }
85 |
86 | .px-#{$scale} {
87 | padding-right: #{$size} !important;
88 | padding-left: #{$size} !important;
89 | }
90 |
91 | .py-#{$scale} {
92 | padding-top: #{$size} !important;
93 | padding-bottom: #{$size} !important;
94 | }
95 | }
96 |
97 | @each $media-query in map-keys($media-queries) {
98 | @include mq($media-query) {
99 | @for $i from 1 through length($spacers) {
100 | $size: #{map-get($spacers, sp-#{$i - 1})};
101 | $scale: #{$i - 1};
102 |
103 | // .p-sm-0, .p-md-1, .p-lg-2...
104 | .p-#{$media-query}-#{$scale} { padding: #{$size} !important; }
105 | .pt-#{$media-query}-#{$scale} { padding-top: #{$size} !important; }
106 | .pr-#{$media-query}-#{$scale} { padding-right: #{$size} !important; }
107 | .pb-#{$media-query}-#{$scale} { padding-bottom: #{$size} !important; }
108 | .pl-#{$media-query}-#{$scale} { padding-left: #{$size} !important; }
109 |
110 | .px-#{$media-query}-#{$scale} {
111 | padding-right: #{$size} !important;
112 | padding-left: #{$size} !important;
113 | }
114 |
115 | .py-#{$media-query}-#{$scale} {
116 | padding-top: #{$size} !important;
117 | padding-bottom: #{$size} !important;
118 | }
119 | }
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 |
8 |
9 |
GEE Dev Docs
10 |
11 |
12 | {% include nav.html %}
13 |
14 |
17 |
18 |
19 |
39 |
40 | {% unless page.url == "/" %}
41 | {% if page.parent %}
42 |
53 | {% endif %}
54 | {% endunless %}
55 |
56 | {{ content }}
57 |
58 | {% if page.has_children == true and page.has_toc != false %}
59 |
60 |
Table of contents
61 | {% assign children_list = site.pages | sort:"nav_order" %}
62 |
63 | {% for child in children_list %}
64 | {% if child.parent == page.title and child.title != page.title %}
65 | -
66 | {{ child.title }}
67 |
68 | {% endif %}
69 | {% endfor %}
70 |
71 | {% endif %}
72 |
73 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/_sass/utilities/_colors.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes for colors
3 | //
4 |
5 | // Text colors
6 |
7 | .text-grey-dk-000 {
8 | color: $grey-dk-000 !important;
9 | }
10 |
11 | .text-grey-dk-100 {
12 | color: $grey-dk-100 !important;
13 | }
14 |
15 | .text-grey-dk-200 {
16 | color: $grey-dk-200 !important;
17 | }
18 |
19 | .text-grey-dk-250 {
20 | color: $grey-dk-250 !important;
21 | }
22 |
23 | .text-grey-dk-300 {
24 | color: $grey-dk-300 !important;
25 | }
26 |
27 | .text-grey-lt-000 {
28 | color: $grey-lt-000 !important;
29 | }
30 |
31 | .text-grey-lt-100 {
32 | color: $grey-lt-100 !important;
33 | }
34 |
35 | .text-grey-lt-200 {
36 | color: $grey-lt-200 !important;
37 | }
38 |
39 | .text-grey-lt-300 {
40 | color: $grey-lt-300 !important;
41 | }
42 |
43 | .text-blue-000 {
44 | color: $blue-000 !important;
45 | }
46 |
47 | .text-blue-100 {
48 | color: $blue-100 !important;
49 | }
50 |
51 | .text-blue-200 {
52 | color: $blue-200 !important;
53 | }
54 |
55 | .text-blue-300 {
56 | color: $blue-300 !important;
57 | }
58 |
59 | .text-green-000 {
60 | color: $green-000 !important;
61 | }
62 |
63 | .text-green-100 {
64 | color: $green-100 !important;
65 | }
66 |
67 | .text-green-200 {
68 | color: $green-200 !important;
69 | }
70 |
71 | .text-green-300 {
72 | color: $green-300 !important;
73 | }
74 |
75 | .text-purple-000 {
76 | color: $purple-000 !important;
77 | }
78 |
79 | .text-purple-100 {
80 | color: $purple-100 !important;
81 | }
82 |
83 | .text-purple-200 {
84 | color: $purple-200 !important;
85 | }
86 |
87 | .text-purple-300 {
88 | color: $purple-300 !important;
89 | }
90 |
91 | .text-yellow-000 {
92 | color: $yellow-000 !important;
93 | }
94 |
95 | .text-yellow-100 {
96 | color: $yellow-100 !important;
97 | }
98 |
99 | .text-yellow-200 {
100 | color: $yellow-200 !important;
101 | }
102 |
103 | .text-yellow-300 {
104 | color: $yellow-300 !important;
105 | }
106 |
107 | .text-red-000 {
108 | color: $red-000 !important;
109 | }
110 |
111 | .text-red-100 {
112 | color: $red-100 !important;
113 | }
114 |
115 | .text-red-200 {
116 | color: $red-200 !important;
117 | }
118 |
119 | .text-red-300 {
120 | color: $red-300 !important;
121 | }
122 |
123 | // Background colors
124 |
125 | .bg-grey-dk-000 {
126 | background-color: $grey-dk-000 !important;
127 | }
128 |
129 | .bg-grey-dk-100 {
130 | background-color: $grey-dk-100 !important;
131 | }
132 |
133 | .bg-grey-dk-200 {
134 | background-color: $grey-dk-200 !important;
135 | }
136 |
137 | .bg-grey-dk-250 {
138 | background-color: $grey-dk-250 !important;
139 | }
140 |
141 | .bg-grey-dk-300 {
142 | background-color: $grey-dk-300 !important;
143 | }
144 |
145 | .bg-grey-lt-000 {
146 | background-color: $grey-lt-000 !important;
147 | }
148 |
149 | .bg-grey-lt-100 {
150 | background-color: $grey-lt-100 !important;
151 | }
152 |
153 | .bg-grey-lt-200 {
154 | background-color: $grey-lt-200 !important;
155 | }
156 |
157 | .bg-grey-lt-300 {
158 | background-color: $grey-lt-300 !important;
159 | }
160 |
161 | .bg-blue-000 {
162 | background-color: $blue-000 !important;
163 | }
164 |
165 | .bg-blue-100 {
166 | background-color: $blue-100 !important;
167 | }
168 |
169 | .bg-blue-200 {
170 | background-color: $blue-200 !important;
171 | }
172 |
173 | .bg-blue-300 {
174 | background-color: $blue-300 !important;
175 | }
176 |
177 | .bg-green-000 {
178 | background-color: $green-000 !important;
179 | }
180 |
181 | .bg-green-100 {
182 | background-color: $green-100 !important;
183 | }
184 |
185 | .bg-green-200 {
186 | background-color: $green-200 !important;
187 | }
188 |
189 | .bg-green-300 {
190 | background-color: $green-300 !important;
191 | }
192 |
193 | .bg-purple-000 {
194 | background-color: $purple-000 !important;
195 | }
196 |
197 | .bg-purple-100 {
198 | background-color: $purple-100 !important;
199 | }
200 |
201 | .bg-purple-200 {
202 | background-color: $purple-200 !important;
203 | }
204 |
205 | .bg-purple-300 {
206 | background-color: $purple-300 !important;
207 | }
208 |
209 | .bg-yellow-000 {
210 | background-color: $yellow-000 !important;
211 | }
212 |
213 | .bg-yellow-100 {
214 | background-color: $yellow-100 !important;
215 | }
216 |
217 | .bg-yellow-200 {
218 | background-color: $yellow-200 !important;
219 | }
220 |
221 | .bg-yellow-300 {
222 | background-color: $yellow-300 !important;
223 | }
224 |
225 | .bg-red-000 {
226 | background-color: $red-000 !important;
227 | }
228 |
229 | .bg-red-100 {
230 | background-color: $red-100 !important;
231 | }
232 |
233 | .bg-red-200 {
234 | background-color: $red-200 !important;
235 | }
236 |
237 | .bg-red-300 {
238 | background-color: $red-300 !important;
239 | }
240 |
--------------------------------------------------------------------------------
/_sass/code.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Code and syntax highlighting
3 | //
4 | // stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type
5 |
6 | code {
7 | padding: 0.2em 0.15em;
8 | font-weight: 400;
9 | background-color: $code-background-color;
10 | border: $border $border-color;
11 | border-radius: $border-radius;
12 | }
13 |
14 | pre.highlight {
15 | padding: $sp-3;
16 | margin-bottom: 0;
17 | -webkit-overflow-scrolling: touch;
18 | background-color: $code-background-color;
19 |
20 | code {
21 | padding: 0;
22 | border: 0;
23 | }
24 | }
25 |
26 | .highlighter-rouge {
27 | margin-bottom: $sp-3;
28 | overflow: hidden;
29 | border-radius: $border-radius;
30 | }
31 |
32 | .highlight .c { color: #586e75; } // comment //
33 | .highlight .err { color: #93a1a1; } // error //
34 | .highlight .g { color: #93a1a1; } // generic //
35 | .highlight .k { color: #859900; } // keyword //
36 | .highlight .l { color: #93a1a1; } // literal //
37 | .highlight .n { color: #93a1a1; } // name //
38 | .highlight .o { color: #859900; } // operator //
39 | .highlight .x { color: #cb4b16; } // other //
40 | .highlight .p { color: #93a1a1; } // punctuation //
41 | .highlight .cm { color: #586e75; } // comment.multiline //
42 | .highlight .cp { color: #859900; } // comment.preproc //
43 | .highlight .c1 { color: #586e75; } // comment.single //
44 | .highlight .cs { color: #859900; } // comment.special //
45 | .highlight .gd { color: #2aa198; } // generic.deleted //
46 | .highlight .ge { font-style: italic; color: #93a1a1; } // generic.emph //
47 | .highlight .gr { color: #dc322f; } // generic.error //
48 | .highlight .gh { color: #cb4b16; } // generic.heading //
49 | .highlight .gi { color: #859900; } // generic.inserted //
50 | .highlight .go { color: #93a1a1; } // generic.output //
51 | .highlight .gp { color: #93a1a1; } // generic.prompt //
52 | .highlight .gs { font-weight: bold; color: #93a1a1; } // generic.strong //
53 | .highlight .gu { color: #cb4b16; } // generic.subheading //
54 | .highlight .gt { color: #93a1a1; } // generic.traceback //
55 | .highlight .kc { color: #cb4b16; } // keyword.constant //
56 | .highlight .kd { color: #268bd2; } // keyword.declaration //
57 | .highlight .kn { color: #859900; } // keyword.namespace //
58 | .highlight .kp { color: #859900; } // keyword.pseudo //
59 | .highlight .kr { color: #268bd2; } // keyword.reserved //
60 | .highlight .kt { color: #dc322f; } // keyword.type //
61 | .highlight .ld { color: #93a1a1; } // literal.date //
62 | .highlight .m { color: #2aa198; } // literal.number //
63 | .highlight .s { color: #2aa198; } // literal.string //
64 | .highlight .na { color: #93a1a1; } // name.attribute //
65 | .highlight .nb { color: #b58900; } // name.builtin //
66 | .highlight .nc { color: #268bd2; } // name.class //
67 | .highlight .no { color: #cb4b16; } // name.constant //
68 | .highlight .nd { color: #268bd2; } // name.decorator //
69 | .highlight .ni { color: #cb4b16; } // name.entity //
70 | .highlight .ne { color: #cb4b16; } // name.exception //
71 | .highlight .nf { color: #268bd2; } // name.function //
72 | .highlight .nl { color: #93a1a1; } // name.label //
73 | .highlight .nn { color: #93a1a1; } // name.namespace //
74 | .highlight .nx { color: #555; } // name.other //
75 | .highlight .py { color: #93a1a1; } // name.property //
76 | .highlight .nt { color: #268bd2; } // name.tag //
77 | .highlight .nv { color: #268bd2; } // name.variable //
78 | .highlight .ow { color: #859900; } // operator.word //
79 | .highlight .w { color: #93a1a1; } // text.whitespace //
80 | .highlight .mf { color: #2aa198; } // literal.number.float //
81 | .highlight .mh { color: #2aa198; } // literal.number.hex //
82 | .highlight .mi { color: #2aa198; } // literal.number.integer //
83 | .highlight .mo { color: #2aa198; } // literal.number.oct //
84 | .highlight .sb { color: #586e75; } // literal.string.backtick //
85 | .highlight .sc { color: #2aa198; } // literal.string.char //
86 | .highlight .sd { color: #93a1a1; } // literal.string.doc //
87 | .highlight .s2 { color: #2aa198; } // literal.string.double //
88 | .highlight .se { color: #cb4b16; } // literal.string.escape //
89 | .highlight .sh { color: #93a1a1; } // literal.string.heredoc //
90 | .highlight .si { color: #2aa198; } // literal.string.interpol //
91 | .highlight .sx { color: #2aa198; } // literal.string.other //
92 | .highlight .sr { color: #dc322f; } // literal.string.regex //
93 | .highlight .s1 { color: #2aa198; } // literal.string.single //
94 | .highlight .ss { color: #2aa198; } // literal.string.symbol //
95 | .highlight .bp { color: #268bd2; } // name.builtin.pseudo //
96 | .highlight .vc { color: #268bd2; } // name.variable.class //
97 | .highlight .vg { color: #268bd2; } // name.variable.global //
98 | .highlight .vi { color: #268bd2; } // name.variable.instance //
99 | .highlight .il { color: #2aa198; } // literal.number.integer.long //
100 |
101 | //
102 | // Code examples (rendered)
103 | //
104 |
105 | .code-example {
106 | padding: $sp-3;
107 | margin-bottom: $sp-3;
108 | overflow: auto;
109 | border: 1px solid $border-color;
110 | border-radius: $border-radius;
111 |
112 | + .highlighter-rouge,
113 | + figure.highlight {
114 | position: relative;
115 | margin-top: -$sp-4;
116 | border-right: 1px solid $border-color;
117 | border-bottom: 1px solid $border-color;
118 | border-left: 1px solid $border-color;
119 | border-top-left-radius: 0;
120 | border-top-right-radius: 0;
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/assets/js/just-the-docs.js:
--------------------------------------------------------------------------------
1 | // Event handling
2 |
3 | function addEvent(el, type, handler) {
4 | if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler);
5 | }
6 | function removeEvent(el, type, handler) {
7 | if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler);
8 | }
9 |
10 | // Show/hide mobile menu
11 |
12 | function toggleNav(){
13 | const nav = document.querySelector('.js-main-nav');
14 | const auxNav = document.querySelector('.js-aux-nav');
15 | const navTrigger = document.querySelector('.js-main-nav-trigger');
16 | const search = document.querySelector('.js-search');
17 |
18 | addEvent(navTrigger, 'click', function(){
19 | var text = navTrigger.innerText;
20 | var textToggle = navTrigger.getAttribute('data-text-toggle');
21 |
22 | nav.classList.toggle('nav-open');
23 | auxNav.classList.toggle('nav-open');
24 | navTrigger.classList.toggle('nav-open');
25 | search.classList.toggle('nav-open');
26 | navTrigger.innerText = textToggle;
27 | navTrigger.setAttribute('data-text-toggle', text);
28 | textToggle = text;
29 | })
30 | }
31 |
32 | // Site search
33 |
34 | function initSearch() {
35 | var index = lunr(function () {
36 | this.ref('id');
37 | this.field('title', { boost: 10 });
38 | this.field('tags', { boost: 20 });
39 | this.field('content');
40 | //this.field('url');
41 | });
42 |
43 | // Get the generated search_data.json file so lunr.js can search it locally.
44 |
45 | sc = document.getElementsByTagName("script");
46 | source = '';
47 |
48 | for(idx = 0; idx < sc.length; idx++)
49 | {
50 | s = sc.item(idx);
51 |
52 | if(s.src && s.src.match(/just-the-docs\.js$/))
53 | { source = s.src; }
54 | }
55 |
56 | jsPath = source.replace('just-the-docs.js', '');
57 |
58 | jsonPath = jsPath + 'search-data.json';
59 |
60 | var request = new XMLHttpRequest();
61 | request.open('GET', jsonPath, true);
62 |
63 | request.onload = function() {
64 | if (request.status >= 200 && request.status < 400) {
65 | // Success!
66 | var data = JSON.parse(request.responseText);
67 | var keys = Object.keys(data);
68 |
69 | for(var i in data) {
70 | index.add({
71 | id: data[i].id,
72 | title: data[i].title,
73 | content: data[i].content,
74 | url: data[i].url,
75 | tags: data[i].tags
76 | });
77 | }
78 | searchResults(data);
79 | } else {
80 | // We reached our target server, but it returned an error
81 | console.log('Error loading ajax request. Request status:' + request.status);
82 | }
83 | };
84 |
85 | request.onerror = function() {
86 | // There was a connection error of some sort
87 | console.log('There was a connection error');
88 | };
89 |
90 | request.send();
91 |
92 | function searchResults(dataStore) {
93 | var searchInput = document.querySelector('.js-search-input');
94 | var searchResults = document.querySelector('.js-search-results');
95 | var store = dataStore;
96 |
97 | function hideResults() {
98 | searchResults.innerHTML = '';
99 | searchResults.classList.remove('active');
100 | }
101 |
102 | addEvent(searchInput, 'keyup', function(e){
103 | var query = this.value;
104 |
105 | searchResults.innerHTML = '';
106 | searchResults.classList.remove('active');
107 |
108 | if (query === '') {
109 | hideResults();
110 | } else {
111 | var results = index.search(query);
112 |
113 | if (results.length > 0) {
114 | searchResults.classList.add('active');
115 | var resultsList = document.createElement('ul');
116 | searchResults.appendChild(resultsList);
117 |
118 | for (var i in results) {
119 | var resultsListItem = document.createElement('li');
120 | var resultsLink = document.createElement('a');
121 | var resultsUrlDesc = document.createElement('span');
122 | var resultsUrl = store[results[i].ref].url;
123 | var resultsRelUrl = store[results[i].ref].relUrl;
124 | var resultsTitle = store[results[i].ref].title;
125 |
126 | resultsLink.setAttribute('href', resultsUrl);
127 | resultsLink.innerText = resultsTitle;
128 | resultsUrlDesc.innerText = resultsRelUrl;
129 |
130 | resultsList.classList.add('search-results-list');
131 | resultsListItem.classList.add('search-results-list-item');
132 | resultsLink.classList.add('search-results-link');
133 | resultsUrlDesc.classList.add('fs-2','text-grey-dk-000','d-block');
134 |
135 | resultsList.appendChild(resultsListItem);
136 | resultsListItem.appendChild(resultsLink);
137 | resultsLink.appendChild(resultsUrlDesc);
138 | }
139 | }
140 |
141 | // When esc key is pressed, hide the results and clear the field
142 | if (e.keyCode == 27) {
143 | hideResults();
144 | searchInput.value = '';
145 | }
146 | }
147 | });
148 |
149 | addEvent(searchInput, 'blur', function(){
150 | setTimeout(function(){ hideResults() }, 300);
151 | });
152 | }
153 | }
154 |
155 | function pageFocus() {
156 | var mainContent = document.querySelector('.js-main-content');
157 | mainContent.focus();
158 | console.log(mainContent)
159 | }
160 |
161 |
162 | // Document ready
163 |
164 | function ready(){
165 | toggleNav();
166 | pageFocus();
167 | if (typeof lunr !== 'undefined') {
168 | initSearch();
169 | }
170 | }
171 |
172 | // in case the document is already rendered
173 | if (document.readyState!='loading') ready();
174 | // modern browsers
175 | else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready);
176 | // IE <= 8
177 | else document.attachEvent('onreadystatechange', function(){
178 | if (document.readyState=='complete') ready();
179 | });
180 |
--------------------------------------------------------------------------------
/_sass/vendor/normalize.scss/normalize.scss:
--------------------------------------------------------------------------------
1 | /*! normalize.scss v0.1.0 | MIT License | based on git.io/normalize */
2 |
3 | /**
4 | * 1. Set default font family to sans-serif.
5 | * 2. Prevent iOS text size adjust after orientation change, without disabling
6 | * user zoom.
7 | */
8 |
9 | html {
10 | font-family: sans-serif; /* 1 */
11 | -ms-text-size-adjust: 100%; /* 2 */
12 | -webkit-text-size-adjust: 100%; /* 2 */
13 | }
14 |
15 | /**
16 | * Remove default margin.
17 | */
18 |
19 | body {
20 | margin: 0;
21 | }
22 |
23 | /* HTML5 display definitions
24 | ========================================================================== */
25 |
26 | /**
27 | * Correct `block` display not defined for any HTML5 element in IE 8/9.
28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11
29 | * and Firefox.
30 | * Correct `block` display not defined for `main` in IE 11.
31 | */
32 |
33 | article,
34 | aside,
35 | details,
36 | figcaption,
37 | figure,
38 | footer,
39 | header,
40 | hgroup,
41 | main,
42 | menu,
43 | nav,
44 | section,
45 | summary {
46 | display: block;
47 | }
48 |
49 | /**
50 | * 1. Correct `inline-block` display not defined in IE 8/9.
51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52 | */
53 |
54 | audio,
55 | canvas,
56 | progress,
57 | video {
58 | display: inline-block; /* 1 */
59 | vertical-align: baseline; /* 2 */
60 | }
61 |
62 | /**
63 | * Prevent modern browsers from displaying `audio` without controls.
64 | * Remove excess height in iOS 5 devices.
65 | */
66 |
67 | audio:not([controls]) {
68 | display: none;
69 | height: 0;
70 | }
71 |
72 | /**
73 | * Address `[hidden]` styling not present in IE 8/9/10.
74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75 | */
76 |
77 | [hidden],
78 | template {
79 | display: none;
80 | }
81 |
82 | /* Links
83 | ========================================================================== */
84 |
85 | /**
86 | * Remove the gray background color from active links in IE 10.
87 | */
88 |
89 | a {
90 | background-color: transparent;
91 | }
92 |
93 | /**
94 | * Improve readability when focused and also mouse hovered in all browsers.
95 | */
96 |
97 | a:active,
98 | a:hover {
99 | outline: 0;
100 | }
101 |
102 | /* Text-level semantics
103 | ========================================================================== */
104 |
105 | /**
106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107 | */
108 |
109 | abbr[title] {
110 | border-bottom: 1px dotted;
111 | }
112 |
113 | /**
114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115 | */
116 |
117 | b,
118 | strong {
119 | font-weight: bold;
120 | }
121 |
122 | /**
123 | * Address styling not present in Safari and Chrome.
124 | */
125 |
126 | dfn {
127 | font-style: italic;
128 | }
129 |
130 | /**
131 | * Address variable `h1` font-size and margin within `section` and `article`
132 | * contexts in Firefox 4+, Safari, and Chrome.
133 | */
134 |
135 | h1 {
136 | font-size: 2em;
137 | margin: 0.67em 0;
138 | }
139 |
140 | /**
141 | * Address styling not present in IE 8/9.
142 | */
143 |
144 | mark {
145 | background: #ff0;
146 | color: #000;
147 | }
148 |
149 | /**
150 | * Address inconsistent and variable font size in all browsers.
151 | */
152 |
153 | small {
154 | font-size: 80%;
155 | }
156 |
157 | /**
158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers.
159 | */
160 |
161 | sub,
162 | sup {
163 | font-size: 75%;
164 | line-height: 0;
165 | position: relative;
166 | vertical-align: baseline;
167 | }
168 |
169 | sup {
170 | top: -0.5em;
171 | }
172 |
173 | sub {
174 | bottom: -0.25em;
175 | }
176 |
177 | /* Embedded content
178 | ========================================================================== */
179 |
180 | /**
181 | * Remove border when inside `a` element in IE 8/9/10.
182 | */
183 |
184 | img {
185 | border: 0;
186 | }
187 |
188 | /**
189 | * Correct overflow not hidden in IE 9/10/11.
190 | */
191 |
192 | svg:not(:root) {
193 | overflow: hidden;
194 | }
195 |
196 | /* Grouping content
197 | ========================================================================== */
198 |
199 | /**
200 | * Address margin not present in IE 8/9 and Safari.
201 | */
202 |
203 | figure {
204 | margin: 1em 40px;
205 | }
206 |
207 | /**
208 | * Address differences between Firefox and other browsers.
209 | */
210 |
211 | hr {
212 | -moz-box-sizing: content-box;
213 | box-sizing: content-box;
214 | height: 0;
215 | }
216 |
217 | /**
218 | * Contain overflow in all browsers.
219 | */
220 |
221 | pre {
222 | overflow: auto;
223 | }
224 |
225 | /**
226 | * Address odd `em`-unit font size rendering in all browsers.
227 | */
228 |
229 | code,
230 | kbd,
231 | pre,
232 | samp {
233 | font-family: monospace, monospace;
234 | font-size: 1em;
235 | }
236 |
237 | /* Forms
238 | ========================================================================== */
239 |
240 | /**
241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited
242 | * styling of `select`, unless a `border` property is set.
243 | */
244 |
245 | /**
246 | * 1. Correct color not being inherited.
247 | * Known issue: affects color of disabled elements.
248 | * 2. Correct font properties not being inherited.
249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
250 | */
251 |
252 | button,
253 | input,
254 | optgroup,
255 | select,
256 | textarea {
257 | color: inherit; /* 1 */
258 | font: inherit; /* 2 */
259 | margin: 0; /* 3 */
260 | }
261 |
262 | /**
263 | * Address `overflow` set to `hidden` in IE 8/9/10/11.
264 | */
265 |
266 | button {
267 | overflow: visible;
268 | }
269 |
270 | /**
271 | * Address inconsistent `text-transform` inheritance for `button` and `select`.
272 | * All other form control elements do not inherit `text-transform` values.
273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
274 | * Correct `select` style inheritance in Firefox.
275 | */
276 |
277 | button,
278 | select {
279 | text-transform: none;
280 | }
281 |
282 | /**
283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
284 | * and `video` controls.
285 | * 2. Correct inability to style clickable `input` types in iOS.
286 | * 3. Improve usability and consistency of cursor style between image-type
287 | * `input` and others.
288 | */
289 |
290 | button,
291 | html input[type="button"], /* 1 */
292 | input[type="reset"],
293 | input[type="submit"] {
294 | -webkit-appearance: button; /* 2 */
295 | cursor: pointer; /* 3 */
296 | }
297 |
298 | /**
299 | * Re-set default cursor for disabled elements.
300 | */
301 |
302 | button[disabled],
303 | html input[disabled] {
304 | cursor: default;
305 | }
306 |
307 | /**
308 | * Remove inner padding and border in Firefox 4+.
309 | */
310 |
311 | button::-moz-focus-inner,
312 | input::-moz-focus-inner {
313 | border: 0;
314 | padding: 0;
315 | }
316 |
317 | /**
318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in
319 | * the UA stylesheet.
320 | */
321 |
322 | input {
323 | line-height: normal;
324 | }
325 |
326 | /**
327 | * It's recommended that you don't attempt to style these elements.
328 | * Firefox's implementation doesn't respect box-sizing, padding, or width.
329 | *
330 | * 1. Address box sizing set to `content-box` in IE 8/9/10.
331 | * 2. Remove excess padding in IE 8/9/10.
332 | */
333 |
334 | input[type="checkbox"],
335 | input[type="radio"] {
336 | box-sizing: border-box; /* 1 */
337 | padding: 0; /* 2 */
338 | }
339 |
340 | /**
341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain
342 | * `font-size` values of the `input`, it causes the cursor style of the
343 | * decrement button to change from `default` to `text`.
344 | */
345 |
346 | input[type="number"]::-webkit-inner-spin-button,
347 | input[type="number"]::-webkit-outer-spin-button {
348 | height: auto;
349 | }
350 |
351 | /**
352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
354 | * (include `-moz` to future-proof).
355 | */
356 |
357 | input[type="search"] {
358 | -webkit-appearance: textfield; /* 1 */
359 | -moz-box-sizing: content-box;
360 | -webkit-box-sizing: content-box; /* 2 */
361 | box-sizing: content-box;
362 | }
363 |
364 | /**
365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X.
366 | * Safari (but not Chrome) clips the cancel button when the search input has
367 | * padding (and `textfield` appearance).
368 | */
369 |
370 | input[type="search"]::-webkit-search-cancel-button,
371 | input[type="search"]::-webkit-search-decoration {
372 | -webkit-appearance: none;
373 | }
374 |
375 | /**
376 | * Define consistent border, margin, and padding.
377 | */
378 |
379 | fieldset {
380 | border: 1px solid #c0c0c0;
381 | margin: 0 2px;
382 | padding: 0.35em 0.625em 0.75em;
383 | }
384 |
385 | /**
386 | * 1. Correct `color` not being inherited in IE 8/9/10/11.
387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets.
388 | */
389 |
390 | legend {
391 | border: 0; /* 1 */
392 | padding: 0; /* 2 */
393 | }
394 |
395 | /**
396 | * Remove default vertical scrollbar in IE 8/9/10/11.
397 | */
398 |
399 | textarea {
400 | overflow: auto;
401 | }
402 |
403 | /**
404 | * Don't inherit the `font-weight` (applied by a rule above).
405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
406 | */
407 |
408 | optgroup {
409 | font-weight: bold;
410 | }
411 |
412 | /* Tables
413 | ========================================================================== */
414 |
415 | /**
416 | * Remove most spacing between table cells.
417 | */
418 |
419 | table {
420 | border-collapse: collapse;
421 | border-spacing: 0;
422 | }
423 |
424 | td,
425 | th {
426 | padding: 0;
427 | }
428 |
--------------------------------------------------------------------------------
/docs/API/date-ranges-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Date Ranges
3 | layout: default
4 | parent: API
5 | nav_order: 1
6 | ---
7 |
8 | # Date Ranges
9 | {: .no_toc }
10 |
11 | A dateRange is an Earth Engine parameter object that represents the span of time from the beginning of “start” date onward
12 | until (but not including) the beginning of an “end” date. DateRanges can be processed by using operations of the types
13 | listed below, which vary according to the nature of that processing. Each operation name is linked to a separate
14 | page describing that operation.
15 |
16 | ## Table of contents
17 | {: .no_toc .text-delta }
18 |
19 | 1. TOC
20 | {:toc}
21 |
22 |
23 |
24 |
25 |
26 |
27 | ## Creating DateRanges
28 |
29 |
30 | ### ee.DateRange
31 | - Creates a DateRange object extending from a specified starting date to a specified stopping date and including both of those dates.
32 |
33 | **Syntax**
34 |
35 | *Javascript*
36 |
37 | ```
38 | newDateRange = ee.DateRange( startingDate, stoppingDate, timeZone )
39 | ```
40 |
41 | - *newDateRange* is The new DateRange.
42 |
43 | **Example**
44 |
45 | *Javascript*
46 |
47 | ```javascript
48 | var TheDATERANGE = ee.DateRange( '1950-12-25', '1990-07-16' );
49 | print( TheDATERANGE );
50 | ```
51 |
52 |
53 |
54 |
55 |
56 | ### dateRange.isUnbounded
57 | - Creates a new Boolean set to true (only) if a specified dateRange contains all possible dates.
58 |
59 | **Syntax**
60 |
61 | *Javascript*
62 |
63 | ```
64 | newBoolean = oldDateRange.isUnbounded( )
65 | ```
66 |
67 | - *newBoolean* is the new Boolean.
68 | - *oldDateRange.isUnbounded( )* is the specified dateRange.
69 |
70 | **Example**
71 |
72 | *Javascript*
73 |
74 | ```javascript
75 | var TheDATERANGE = ee.DateRange.unbounded( );
76 | print( TheDATERANGE );
77 | ```
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | ## Transforming DateRanges
86 |
87 |
88 | #### dateRange.union
89 | - Creates a new dateRange encompassing the union of two specified dateRanges.
90 |
91 | **Syntax**
92 |
93 | *Javascript*
94 |
95 | ```
96 | newDateRange = 1stDateRange.union( 2ndDateRange )
97 | ```
98 |
99 | - *newDateRange* is The new DateRange.
100 | - *1stDateRange.union* is the first specified dateRange.
101 | - *2ndDateRange* is the first specified dateRange.
102 |
103 | **Example**
104 |
105 | *Javascript*
106 |
107 | ```javascript
108 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
109 | var BeethovenDATERANGE = ee.DateRange( '1770-12-17', '1827-3-26' );
110 | var TheirTotalDATERANGE = MozartDATERANGE.union( BeethovenDATERANGE );
111 | print( 'DateRange for Mozart', MozartDATERANGE );
112 | print( 'DateRange for Beethoven', BeethovenDATERANGE );
113 | print( 'DateRange when Either Was Alive', TheirTotalDATERANGE );
114 | ```
115 |
116 |
117 |
118 |
119 |
120 | #### dateRange.intersection
121 | - Creates a new dateRange encompassing the intersection of two specified dateRanges.
122 |
123 | **Syntax**
124 |
125 | *Javascript*
126 |
127 | ```
128 | newDateRange = 1stDateRange.intersection( 2ndDateRange )
129 | ```
130 |
131 | - *newDateRange* is The new DateRange.
132 | - *1stDateRange.intersection* is the first specified dateRange
133 | - *2ndDateRange* is the second specified dateRange.
134 |
135 | **Example**
136 |
137 | *Javascript*
138 |
139 | ```javascript
140 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
141 | var BeethovenDATERANGE = ee.DateRange( '1770-12-17', '1827-3-26' );
142 | var TheirSharedDATERANGE = MozartDATERANGE.intersection( BeethovenDATERANGE );
143 | print( 'DateRange for Mozart', MozartDATERANGE );
144 | print( 'DateRange for Beethoven', BeethovenDATERANGE );
145 | print( 'DateRange when Both Were Alive', TheirSharedDATERANGE );
146 | ```
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 | ## Querying DateRanges
155 |
156 |
157 | ### dateRange.start
158 | - Creates a new date set to the (inclusive) start of a specified dateRange.
159 |
160 | **Syntax**
161 |
162 | *Javascript*
163 |
164 | ```
165 | newDate = oldDateRange.start( )
166 | ```
167 |
168 | - *newDate* is The new Date.
169 | - *oldDateRange.start( )* is the specified dateRange.
170 |
171 | **Example**
172 |
173 | *Javascript*
174 |
175 | ```javascript
176 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
177 | var MozartBirthDATE = MozartDATERANGE.start( );
178 | print( 'DateRange for Mozart', MozartDATERANGE );
179 | print( 'So he was born on the following date.', MozartBirthDATE );
180 | ```
181 |
182 |
183 |
184 |
185 |
186 | ### dateRange.end
187 | - Creates a new date set to the (exclusive) end of a specified dateRange.
188 |
189 | **Syntax**
190 |
191 | *Javascript*
192 |
193 | ```
194 | newDate = oldDateRange.end( )
195 | ```
196 |
197 | - *newDate* is the new Date.
198 | - *oldDateRange.end( )* is the specified dateRange.
199 | **Example**
200 |
201 | *Javascript*
202 |
203 | ```javascript
204 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
205 | var MozartDeathDATE = MozartDATERANGE.end( );
206 | print( 'DateRange for Mozart', MozartDATERANGE );
207 | print( 'So he died on the following date.', MozartDeathDATE );
208 | ```
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 | ## Describing DateRanges
217 |
218 |
219 | ### dateRange.intersects
220 | - Creates a new Boolean set to true (only) if one specified dateRange overlaps at all with another specified dateRange.
221 |
222 | **Syntax**
223 |
224 | *Javascript*
225 |
226 | ```
227 | newBoolean = 1stDateRange.intersects( 2ndDateRange )
228 | ```
229 |
230 | - *newBoolean* is the new Boolean.
231 | - *1stDateRange.intersects* is the first specified dateRange.
232 | - *2ndDateRange* is the second specified dateRange.
233 |
234 | **Example**
235 |
236 | *Javascript*
237 |
238 | ```javascript
239 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
240 | var BeethovenDATERANGE = ee.DateRange( '1770-12-17', '1827-3-26' );
241 | var TheBOOLEAN = MozartDATERANGE.intersects( BeethovenDATERANGE );
242 | print( 'DateRange for Mozart', MozartDATERANGE );
243 | print( 'DateRange for Beethoven', BeethovenDATERANGE );
244 | print( 'Is it true that Mozart’s lifespan overlaps Beethoven’s?', TheBOOLEAN );
245 | ```
246 |
247 |
248 |
249 |
250 |
251 | ### dateRange.contains
252 | - Creates a new Boolean set to true (only) if a specified dateRange contains another specified date or dateRange.
253 |
254 | **Syntax**
255 |
256 | *Javascript*
257 |
258 | ```
259 | newBoolean = oldDateRange.contains( anotherDateOrDateRange )
260 | ```
261 |
262 | - *newBoolean* is the new Boolean
263 | - *oldDateRange.contains* is the specified “container” dateRange
264 | - *anotherDateOrDateRange* is the specified “containee” date or dateRange
265 |
266 | **Example**
267 |
268 | *Javascript*
269 |
270 | ```javascript
271 | var MozartDATERANGE = ee.DateRange( '1756-1-27', '1791-12-5' );
272 | var BeethovenDATERANGE = ee.DateRange( '1770-12-17', '1827-3-26' );
273 | var TheBOOLEAN = MozartDATERANGE.contains( BeethovenDATERANGE );
274 | print( 'DateRange for Mozart', MozartDATERANGE );
275 | print( 'DateRange for Beethoven', BeethovenDATERANGE );
276 | print( 'Is it true that Mozart’s lifespan contain Beethoven’s?', TheBOOLEAN );
277 | ```
278 |
279 |
280 |
281 |
282 |
283 | ### dateRange.isEmpty
284 | - Creates a new Boolean set to true (only) if a specified dateRange contains no dates (because its ending date precedes
285 |
286 | **Syntax**
287 |
288 | *Javascript*
289 |
290 | ```
291 | newBoolean = oldDateRange.isEmpty( )
292 | ```
293 |
294 | - *newBoolean* is the new Boolean.
295 | - *oldDateRange.isEmpty( )* is the specified dateRange.
296 |
297 | **Example**
298 |
299 | *Javascript*
300 |
301 | ```javascript
302 | var TheDATERANGE = ee.DateRange( '1990-07-16', '1950-12-25');
303 | var TheBOOLEAN = TheDATERANGE.isEmpty( );
304 | print( TheDATERANGE );
305 | print( 'Is it true that this dateRange is empty?', TheBOOLEAN );
306 | ```
307 |
308 |
309 |
310 |
311 |
312 | ### dateRange.isUnbounded
313 | - Creates a new Boolean set to true (only) if a specified dateRange contains all possible dates.
314 |
315 | **Syntax**
316 |
317 | *Javascript*
318 |
319 | ```
320 | newBoolean = oldDateRange.isUnbounded( )
321 | ```
322 |
323 | - *newBoolean* is the new Boolean.
324 | - *oldDateRange.isUnbounded* is the specified dateRange.
325 |
326 | **Example**
327 |
328 | *Javascript*
329 |
330 | ```javascript
331 | var TheDATERANGE = ee.DateRange.unbounded( );
332 | print( TheDATERANGE );
333 | ```
334 |
--------------------------------------------------------------------------------
/docs/API/confusion-matrices-home.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Confusion Matrices
3 | layout: default
4 | parent: API
5 | nav_order: 2
6 | ---
7 |
8 | # Confusion Matrices
9 | {: .no_toc }
10 |
11 | A confusion matrix is an Earth Engine variable object that represents what is sometimes called an “error matrix” or a “contingency table.” It is an array of two similar axes, one representing a set of known values and the other representing a corresponding set of predicted values. The array then records how often each of a set of predictions associates a particular known value with a particular predicted value. These predictions are usually those generated by a classifier or stored as a collection of trained features for multispectral satellite image classification. Confusion matrices can be processed by using operations of the types listed below.
12 |
13 | ## Table of contents
14 | {: .no_toc .text-delta }
15 |
16 | 1. TOC
17 | {:toc}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | ## Creating Confusion Matrices
26 |
27 | ### ee.ConfusionMatrix
28 | Creates a new confusion matrix from a specified two-dimensional array whose
29 | - horizontal rows (axis 1) represent known classes
30 | - vertical columns (axis 0) represent predicted classes
31 | - values indicate the number cases in which a given known value was classfified as a given predicted value
32 |
33 | **Syntax**
34 |
35 | *Javascript*
36 |
37 | ```
38 | newConfusionMatrix = ee.ConfusionMatrix(array,order)
39 | ```
40 | - *newConfusionMatrix* is the new confusion matrix.
41 | - *array* is the specified array.
42 | - *order* is the row and column size and order of a non-contiguous or non-zero matrix, given as a list.
43 |
44 | **Example**
45 |
46 | *Javascript*
47 | ```javascript
48 | var TheARRAY = ee.Array( [ [0,2,0,0],
49 | [0,1,0,0],
50 | [0,1,3,1],
51 | [0,1,3,4] ] );
52 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
53 | print( TheCONFUSIONMATRIX );
54 | ```
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | ## Reproducing Confusion Matrices
63 |
64 | ### confusionMatrix.array
65 | - Creates a creates a new two-dimensional array from a specified confusion matrix.
66 |
67 | **Syntax**
68 |
69 | *Javascript*
70 |
71 | ```
72 | newArray = oldConfusionMatrix.array()
73 | ```
74 | - *newArray* is the new array.
75 | - *oldConfusionMatrix* is the specified confusion matrix.
76 |
77 | **Example**
78 |
79 | *Javascript*
80 | ```javascript
81 | var TheARRAY = ee.Array( [ [0,2,0,0],
82 | [0,1,0,0],
83 | [0,1,3,1],
84 | [0,1,3,4] ] );
85 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
86 | var NewARRAY = TheCONFUSIONMATRIX.array();
87 | print( NewARRAY );
88 | ```
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 | ## Describing Confusion Matrices
97 |
98 | ### confusionMatrix.kappa
99 | - Creates a new floating-point number indicating the Kappa statistic for a specified confusion matrix.
100 | - This measures the agreement between two datasets on a scale that genereally ranges from 0 to 1.
101 |
102 | **Syntax**
103 |
104 | *Javascript*
105 |
106 | ```
107 | newNumber = oldConfusionMatrix.kappa()
108 | ```
109 | - *newNumber* is the new number.
110 | - *oldConfusionMatrix* is the specified confusion matrix.
111 |
112 | **Example**
113 |
114 | *Javascript*
115 | ```javascript
116 | var TheARRAY = ee.Array( [ [0,2,0,0],
117 | [0,1,0,0],
118 | [0,1,3,1],
119 | [0,1,3,4] ] );
120 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
121 | var NewNumber = TheCONFUSIONMATRIX.kappa();
122 | print( TheCONFUSIONMATRIX );
123 | print( NewNumber );
124 | ```
125 |
126 |
127 |
128 |
129 |
130 | ### confusionMatrix.accuracy
131 | - Creates a new floating-point number indicating the accuracy of a specified confusion matrix.
132 | - Computed as the number of correct classifications divided by the total number of classifications.
133 |
134 | **Syntax**
135 |
136 | *JavaScript*
137 |
138 | ```
139 | newNumber = oldConfusionMatrix.accuracy()
140 | ```
141 | - *newNumber* is the new number.
142 | - *oldConfusionMatrix* is the specified confusion matrix.
143 |
144 | **Example**
145 |
146 | ############## JavaScript
147 | ```javascript
148 | var TheARRAY = ee.Array( [ [0,2,0,0],
149 | [0,1,0,0],
150 | [0,1,3,1],
151 | [0,1,3,4] ] );
152 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
153 | var NewNumber = TheCONFUSIONMATRIX.accuracy();
154 | print(TheCONFUSIONMATRIX);
155 | print( NewNumber );
156 | ```
157 |
158 |
159 |
160 |
161 |
162 | ### confusionMatrix.producersAccuracy
163 | - creates a new array indicating the consumer's accuracy(reliability) of a specified confusion matrix.
164 | - computed as the number of correct classifications divided by the the total number of classifications for each column.
165 |
166 | **Syntax**
167 |
168 | *Javascript*
169 |
170 | ```
171 | newArray = oldConfusionMatrix.producersAccuracy()
172 | ```
173 | - *newArray* is the new array.
174 | - *oldConfusionMatrix* is the specified confusion matrix.
175 |
176 | **Example**
177 |
178 | *Javascript*
179 | ```javascript
180 | var TheARRAY = ee.Array( [ [0,2,0,0],
181 | [0,1,0,0],
182 | [0,1,3,1],
183 | [0,1,3,4] ] );
184 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
185 | var NewARRAY = TheCONFUSIONMATRIX.producersAccuracy();
186 | print (TheCONFUSIONMATRIX);
187 | print( NewARRAY );
188 | ```
189 |
190 |
191 |
192 |
193 |
194 | ### confusionMatrix.consumersAccuracy
195 | - Creates a new array indicating the consumer's accuracy(reliability) of a specified confusion matrix.
196 | - Computed as the number of correct classifications divided by the the total number of classifications for each row.
197 |
198 | **Syntax**
199 |
200 | *Javascript*
201 |
202 | ```
203 | newArray = oldConfusionMatrix.consumersAccuracy()
204 | ```
205 | - *newNumber* is the new number.
206 | - *oldConfusionMatrix* is the specified confusion matrix.
207 |
208 | **Example**
209 |
210 | *Javascript*
211 | ```javascript
212 | var TheARRAY = ee.Array( [ [0,2,0,0],
213 | [0,1,0,0],
214 | [0,1,3,1],
215 | [0,1,3,4] ] );
216 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
217 | var NewARRAY = TheCONFUSIONMATRIX.consumersAccuracy();
218 | print (TheCONFUSIONMATRIX);
219 | print( NewARRAY );
220 | ```
221 |
222 |
223 |
224 |
225 |
226 | ### confusionMatrix.order
227 | - Creates a new list indicating the name and order of the rows and columns of a specified confusion matrix.
228 |
229 | **Syntax**
230 |
231 | *Javascript*
232 |
233 | ```
234 | newList = oldConfusionMatrix.order()
235 | ```
236 | - *newList* is the new list of name and order of rows and columns.
237 | - *oldConfusionMatrix* is the specified confusion matrix.
238 |
239 | **Example**
240 |
241 | *Javascript*
242 | ```javascript
243 | var TheARRAY = ee.Array( [ [0,2,0,0],
244 | [0,1,0,0],
245 | [0,1,3,1],
246 | [0,1,3,4] ] );
247 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY, [3,2,1,0] );
248 | var NewLIST = TheCONFUSIONMATRIX.order();
249 | print( TheCONFUSIONMATRIX );
250 | print( NewLIST );
251 | ```
252 |
253 |
254 |
255 |
256 |
257 | ### confusionMatrix.getInfo
258 | - Creates a JSON-compatible text object representing a specified confusion matrix.
259 |
260 | **Syntax**
261 |
262 | *Javascript*
263 |
264 | ```
265 | newObject = oldConfusionMatrix.getInfo()
266 | ```
267 | - *newObject* is the new text object.
268 | - *oldConfusionMatrix* is the specified confusion matrix.
269 | - alternatively, you could also use ee.Algorithms.Describe(oldConfusionMatrix) to achieve the same results
270 |
271 | **Example**
272 |
273 | *Javascript*
274 | ```javascript
275 | var TheARRAY = ee.Array( [ [0,2,0,0],
276 | [0,1,0,0],
277 | [0,1,3,1],
278 | [0,1,3,4] ] );
279 | var TheCONFUSIONMATRIX = ee.ConfusionMatrix( TheARRAY );
280 | print( TheCONFUSIONMATRIX.getInfo( ) );
281 |
282 | //alternatively
283 | print( ee.Algorithms.Describe( TheCONFUSIONMATRIX ) );
284 |
285 | ```
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 | ## Documenting Confusion Matrices
294 |
295 | ### confusionMatrix.getInfo
296 |
297 | Contribute!
298 |
299 |
300 |
301 |
302 | ### confusionMatrix.toString
303 |
304 | Contribute!
305 |
306 |
307 |
308 |
309 |
310 | ### ee.Algorithms.Describe
311 |
312 | Contribute!
313 |
314 |
315 |
316 |
317 |
318 | ### confusionMatrix.serialize
319 |
320 | Contribute!
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 | ## Presenting Confusion Matrices
329 |
330 | ### In Print
331 |
332 | #### print(confusionMatrix)
333 |
334 | #### alert(confusionMatrix)
335 |
336 | #### console.log(confusionMatrix)
337 |
338 | #### confirm
339 |
340 |
341 |
342 |
--------------------------------------------------------------------------------
/assets/js/vendor/lunr.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 1.0.0
3 | * Copyright (C) 2017 Oliver Nightingale
4 | * @license MIT
5 | */
6 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="1.0.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.separator):[]},t.tokenizer.separator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n
2 |
3 |
4 |
--------------------------------------------------------------------------------
/docs/styleguide.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Google Earth Engive Dev Docs Style Guide
3 | description: Learn about proper style for writing content for the Gee-Dev-Docs repository.
4 | tags: Tutorial, Write, Styleguide
5 | nav_exclude: true
6 | ---
7 |
8 | This document provides guidance for contributors to the GEE-Dev-Docs repository.
9 |
10 | **...Possible language for how attribution could be handled...**
11 |
12 | Please note that content you contribute will be licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) License, and code samples under the Apache 2.0 License. The terms of these licences state that material distributed publicly must attribute the creator(s). This is a challenge for a collaborative project with many authors often working on the same file. GitHub tracks edits and contributions from authors precisely, but for the average person who wants to share a tutorial with their class (for instance), it could be a significant burden to attribute individual creators. We have endeavored to provide thorough instructions for content distributors to attribute work, but we cannot guarantee that attribution will be made to specific contributors. At the very least we are asking content distributors to link to the full list of repository contributors and when possible attribute by name or GitHub alias specific authors of a file. By contributing content to this platform you are agreeing to group attribution of creative content under the umbrella of the GEE Dev Docs Developer Community.
13 |
14 |
15 |
16 |
17 | * [Caveats](#caveats)
18 | * [Types of documentation](#types-of-documentation)
19 | * [Designing a doc](#designing-a-doc)
20 | * [Visual assets](#visual-assets)
21 | * [File organization in GitHub](#file-organization-in-github)
22 | * [General content guidelines](#general-content-guidelines)
23 | * [General style guidelines](#general-style-guidelines)
24 | * [Markdown usage](#markdown-usage)
25 | * [Voice and tone](#voice-and-tone)
26 | * [Including source code](#including-source-code)
27 |
28 | ## Caveats
29 |
30 | Let's get these things out of the way right up front:
31 |
32 | * Don't sell or do marketing.
33 | * Don't editorialize. Document.
34 | * Don't make assumptions about your reader unless you state the assumptions up front.
35 | * Don't use absolutes, such as "instantaneously," "perfectly," "absolutely," "totally," or "100%," unless you can back up what you're saying with documentation.
36 | * Don't use superlatives, such as "the best solution," "the perfect answer," and so on.
37 | * Don't use logos or trademarks unless you have explicit permission.
38 | * Don't make performance claims unless you back them up with current data. This means either external links, or links to benchmarking code.
39 | * Don't include diagrams or pictures that you have no legal rights to include.
40 | * Don't alter or truncate Google Earth Engine commands. For example, it's Export.image.toAsset(), not image.toAsset().
41 | * Don't alter or truncate Google Cloud Platform product names. For example, it’s Cloud Bigtable, not Bigtable.
42 | * Don't alter or truncate other Google names. For example, it's Google Apps, not Apps.
43 |
44 | ## Types of documentation
45 |
46 | Documentation submitted by contributors is usually one of these types:
47 |
48 | * **API**: Helps the user gain deeper understanding of a particular part of the Google Earth Engine API....
49 | **Example**: TBD
50 |
51 | * **Tutorial**: Walks a user through a real-world, end-to-end scenario that uses Google Earth Engine (but possibly other tools as well).
52 | Tutorials teach "how to do Y in the context of ABC." Tutorials contain numbered steps that
53 | prescribe what to do. They can have enough supporting conceptual information,
54 | interspersed among the steps, to help the reader understand what they're
55 | doing, why they're doing it, and how and why it works. The end result is a
56 | working example. Usually, a link to a full Javascript code in GEE or a Python Jupyther Notebook/Colab link supports the document.
57 |
58 | **Example**:
59 |
60 | ## Designing a doc
61 |
62 | Just as you design an app before you start coding, designing how your doc works
63 | before you write saves you writing time, helps focus your document, and helps to
64 | make sure you're giving the reader the right information.
65 | [A good way to design your document is by outlining](https://owl.english.purdue.edu/owl/resource/544/02/).
66 |
67 | As you develop your outline, ask yourself:
68 |
69 | * In one sentence, what is my doc about? You can reuse a version of this sentence as the opener in the doc.
70 | * What does my reader need to know before they can understand the contents? This question can lead to a set of prerequisites.
71 | * Why does the reader care? This information will be part of your introduction.
72 | * Am I building concepts for the reader from most general to most specific?
73 | * Am I introducing ideas in the right order?
74 | * Is there anything I can remove?
75 | * Is there anything missing?
76 | * Have I made the right assumptions about my audience?
77 |
78 | The following sections show the main, top-level organization for different doc types. Use these sections to start your outlines. There are also template files linked below which you can rename and use to start writing!
79 |
80 | ### Writing a API doc
81 |
82 | To help you create new API documentation, you can use the template file HERE NEED TO ADD
83 |
84 | A API doc has these major sections:
85 |
86 | * Title
87 | * Use the full GEE command for which you are developing an API document e.g. ee.Classifier.gmoMaxEnt
88 | * Overview
89 | * Explain here what this API command does in at most three sentences.
90 | * Body
91 | * Provides the details.
92 | * Contains headings and subheadings as needed to make the content easy to skim.
93 |
94 | ### Writing a Tutorial
95 |
96 | To help you create new tutorials, you can use the template file HERE
97 |
98 | A Tutorial doc has these major sections. Items in bold below are literal heading names:
99 |
100 | * Title
101 | * Overview
102 | * First sentence tells what the page is about
103 | * Tell the user what they're going to learn and provide any concise background information that's helpful.
104 | * Don't use the heading "Overview." Just get right to it.
105 | * Provide a visualization of the final result, map or graphs produced by GEE - this would motivate people to read your tutorial!
106 |
107 | * **Objectives**
108 | * A short, bulleted list of what the tutorial teaches the reader.
109 |
110 | * **Before you begin**
111 | * A numbered list of steps required to set up for the tutorial.
112 | * Any general prerequisites.
113 | * Don't assume anything about the user's environment. Assume that the user has only basic operating system installed. If doing the tutorial requires the user to have a specific environment, state what is required. For easy-to-install environment bits, just give them the instructions, such as "Run apt-get install…". For more complex setups, link to official documentation.
114 |
115 | * **Costs** (optional)
116 | * Tell the reader which technologies will be used and what it costs to use them.
117 | * Link to the [Pricing Calculator](https://cloud.google.com/products/calculator/), preconfigured, if possible.
118 | * If there are no costs to be incurred, state that.
119 |
120 | * Body
121 | * Use as many headings and subheadings as needed.
122 | * Use numbered steps in each section.
123 | * Start each step with the action: "Click," "Run," "Enter," and so on.
124 | * Keep numbered step lists to around 7 or less, if possible. If you need more steps, break it up into subheadings.
125 | * Provide context and explain what's going on.
126 | * Use screenshots when they help the reader. Don't provide a screenshot for every step.
127 | * Show what success looks like along the way. For example, showing console output or describing what happens helps the reader to feel like they're doing it right and help them know things are working so far.
128 |
129 | * **Cleaning up**
130 | * Omit this section if you stated there are no costs in the Costs section.
131 | * Tell the user how to shut down what they built to avoid incurring further costs.
132 |
133 | ## Visual assets
134 |
135 | GCP offers a set of logos and architectural diagram assets for your use:
136 |
137 | [https://cloud.google.com/icons/](https://cloud.google.com/icons/)
138 |
139 | ## File organization in GitHub
140 |
141 | Follow these guidelines for how to organize your documents:
142 |
143 | * Create a new folder for your document.
144 | * Name the folder by [slugifying](http://slugify.net/) your doc's title. You can omit articles such as "and" and "the."
145 | * Name your new doc `index.md`.
146 | * Store images in the same folder.
147 |
148 | For example, if you submit a tutorial named "Using Cloud SQL to Conquer the World":
149 |
150 | * **Folder name**: `using-cloud-sql-conquer-world`
151 | * **URL**: `https://cloud.google.com/community/tutorials/using-cloud-sql-conquer-world/`
152 |
153 | If you don't have any additional files that go along with your tutorial, you can
154 | simply make a top-level Markdown file within the `tutorials/` folder, e.g.
155 | `tutorials/using-cloud-sql-conquer-world.md` instead of
156 | `tutorials/using-cloud-sql-conquer-world/index.md`.
157 |
158 | ## General content guidelines
159 |
160 | This site seeks technical content. While it's fine and often appropriate to point out the advantages of a particular product or Cloud Platform, don't give sales pitches in the document. Here are some guidelines:
161 |
162 | + Write for a technical audience.
163 | + If the document looks like a sales brochure, it's not appropriate as GCP content.
164 | + Avoid superlatives. Don't say "the best," "amazing," "fantastic," and so on. No exclamation points.
165 |
166 | ### Ambiguity
167 |
168 | Ambiguity is the enemy of technical content. Re-read what you've written to check whether it can be read to mean more than one thing.
169 |
170 | ### Repetition
171 |
172 | Avoid needless repetition. Telling the reader a fact one time usually suffices.
173 |
174 | ## General style guidelines
175 |
176 | Here are style guidelines to help you craft a great article.
177 |
178 | ### Headings
179 |
180 | Use headings to organize your page into sections and subsections. Headings make it easier for readers to skim and understand what the article is about. Capitalize only the first word and product names in your headings.
181 |
182 | **For example:**
183 |
184 | Creating a new object
185 |
186 | **Not:**
187 |
188 | Creating a New Object
189 |
190 |
191 | ### Lists
192 |
193 | Lists help make your page more scannable.
194 |
195 |
196 | ### Numbered lists
197 |
198 | Use numbered lists when it's essential that the items be done in a specific order. Otherwise, use a bulleted list. Don't use a numbered list as a way to count the things in the list.
199 |
200 | **For example:**
201 |
202 | 1. Do this.
203 | 1. Do that.
204 | 1. Do another thing.
205 |
206 | **Not:**
207 |
208 | There are three colors that I like:
209 |
210 | 1. Red
211 | 1. Blue
212 | 1. Yellow
213 |
214 | **Think about the order**. When writing instructions, give the reader orientation cues in the proper order. Think about moving someone's eyes around the screen.
215 |
216 | **For example:**
217 |
218 | "Click the OK button in the Cloud Console, on the VM instances page, in the Compute Engine section."
219 |
220 | **Not this**, because it causes someone to visually search backwards:
221 |
222 | "Click the OK button in the Compute Engine section of the VM instances page of the Cloud Console."
223 |
224 |
225 | ### Bulleted lists
226 |
227 | Use bulleted lists for lists that don't imply a sequence. End each item with a period if the item is a sentence or a phrase. Don't use periods for lists of single words or if the list contains only product names.
228 |
229 | **For example:**
230 |
231 | I have three favorite colors:
232 |
233 | * Red
234 | * Blue
235 | * Yellow
236 |
237 | ### Parallelism
238 |
239 | Try to keep your language across list items in a similar format. For example, start each item with a noun or a verb, but don't mix the formats.
240 |
241 | **For example:**
242 |
243 | * Write the docs.
244 | * Write them well.
245 | * Enjoy the process.
246 |
247 | **Not:**
248 |
249 | * Write the docs.
250 | * The docs should be great.
251 | * You can have fun writing the docs.
252 |
253 | ### Tables
254 |
255 | Tables are a great way to help the reader compare a set of items, such as mutually exclusive options. Tables work well when there's a consistent set of properties for each item in a list.
256 |
257 | Use the parallelism principle previously described for table headings and the first column.
258 |
259 | ### Images
260 |
261 | A well-designed diagram or a screen shot can save you a lot of writing and help the reader better understand a complex idea. Make sure any text is legible at the display size in the doc (800 pixels wide or less). If the image itself becomes too complex, consider breaking it up into more than one picture.
262 |
263 | * Don't use images you don't have rights to use.
264 | * Store the images in the same folder where your document's `index.md` file is stored.
265 |
266 | ### Code
267 |
268 | Format code, command lines, paths, and file names as code font.
269 |
270 | ### Linking
271 |
272 | Provide inline links to relevant information, where appropriate. For example, link to:
273 |
274 | * "One source of truth" content.
275 | * Anything that's likely to go out of date quickly if you copied it into your article.
276 | * Information that gives more depth than is appropriate for the current context.
277 |
278 | Provide direct links to pages in the Google Cloud Console when you give Cloud Console-based instructions. These _deep links_ save the reader time spent looking for the right page and can save you time writing descriptions of how to find the page. Deep links open the page with the project set to the user's last-used project.
279 |
280 | ## Markdown usage
281 |
282 | This site uses Markdown when publishing tutorial content. The site recognizes
283 | basic Markdown with a few extensions and edge cases.
284 |
285 | ### Autolinks
286 |
287 | Publishing recognizes and adds links to URLs without `http://` or `https://`
288 | prefixes when they are delimited by whitespace, parentheses, or text formatting
289 | characters (`*_~`). Do not use `<` and `>` delimiters for these, as they will be
290 | stripped out as raw HTML.
291 |
292 | ### Disallowed Raw HTML
293 |
294 | Publishing strips *all* possible HTML from tutorial content, essentially anything contained within `<` and `>` delimiters. Note that this is stricter than standard GFM, which only strips certain "unsafe" HTML.
295 |
296 | ### Strikethrough
297 |
298 | Publishing formats text delimited in tildes (`~`) as strikethrough, making
299 | `~a bad example~` look like ~a bad example~ in your document.
300 |
301 | ### Tables
302 |
303 | Publishing formats text blocks as tables if they have consistent pipe (`|`) separators and a second delimiter row with just hyphens (`-`), optionally using `:` to specify left, right, or centered alignment. Publishing converts this:
304 |
305 | ```markdown
306 | | Table | header | row | default is centered |
307 | | :- | :--: | ---: | ---- |
308 | | Table | data | row | default is left |
309 | | ----------------- | ----------------- | ----------------- | ---------------------------------------------- |
310 | ```
311 | into this:
312 |
313 | | Table | header | row | default is centered |
314 | | :- | :--: | ---: | ---- |
315 | | Table | data | row | default is left |
316 | | ----------------- | ----------------- | ----------------- | ---------------------------------------------- |
317 |
318 | You cannot create multi-line cells (although other Markdown dialects allow this), and while you can omit both the initial and final pipe separators, it can break table recognition if the first cell looks like a list item.
319 |
320 | ### Code within lists
321 |
322 | The site's Markdown parser does not understand code fences (triple backticks)
323 | within lists. You should instead use indentation to signify code within lists.
324 |
325 | ## Voice and tone
326 |
327 | ### Active voice
328 |
329 | **Use active voice**. Active voice makes it obvious who is performing the action, which makes your writing clearer and stronger.
330 |
331 | **For example**:
332 |
333 | "The logging agent writes a line to the log file."
334 |
335 | **Not**:
336 |
337 | "A line is written in the log file by the logging agent."
338 |
339 | It's okay to use passive voice when you'd have to go out of your way to use active voice. For example, sometimes you don't need to include the actor in the sentence because the actor isn't relevant. Just use passive voice, instead.
340 |
341 | **For example:**
342 |
343 | "RFID tag readers are typically positioned in multiple locations in a retail store."
344 |
345 | **Not:**
346 |
347 | "System engineers typically place RFID tag readers in multiple locations in a retail store."
348 |
349 | ### Direct
350 |
351 | **Speak to the reader**. Documentation reads better if you speak to the reader in the second person. That means use "you" and avoid "I" or "we."
352 |
353 | **For example:**
354 |
355 | "Now load your data into BigQuery. Follow these steps: ..."
356 |
357 | **Not:**
358 |
359 | "Now we'll load the data into BigQuery."
360 |
361 | ### Present tense
362 |
363 | **Keep to present tense**. Avoid using future or past tenses.
364 |
365 | **For example:**
366 |
367 | "The Cloud Console downloads a JSON file to your computer."
368 |
369 | **Not:**
370 |
371 | "The Cloud Console will download a JSON file to your computer."
372 |
373 | ### Simple
374 |
375 | **Keep it simple**. Use short, simple sentences. They are easier for readers to parse and understand. Omit unnecessary words.
376 |
377 | **For example:**
378 |
379 | "Click Change to set a new owner."
380 |
381 | **Not:**
382 |
383 | "It is possible for you to set a different owner by clicking the Change button."
384 |
385 | Also, keep your paragraphs short and to the point. On the web, people skim more and expect shorter content than when they read books. Five sentences or less per paragraph is a good guideline.
386 |
387 | If a sentence is long, even with straightforward word choices, break it up into multiple, shorter sentences.
388 |
389 | Re-read what you wrote and then eliminate all the unnecessary words.
390 |
391 | ## Including source code
392 |
393 | If you would like to include source code within your tutorial, you have two
394 | options:
395 |
396 | ### Option 1
397 |
398 | Just embed the source code directly in the tutorial. Wrap the code in three
399 | backticks or indent by four spaces to achieve proper formatting.
400 |
401 | This option is the simplest, but offers no way to test the code, and does not
402 | allow the user to view actual source code files as they might exist in a real
403 | project.
404 |
405 | For an example, see [Run Koa.js on Google App Engine Flexible Environment](https://github.com/GoogleCloudPlatform/community/blob/master/tutorials/run-koajs-on-google-app-engine.md).
406 |
407 | ### Option 2
408 |
409 | Instead of a Markdown file in the `tutorials/` directory, create a folder for
410 | your files. The Markdown for the tutorial should be in an `index.md` file within
411 | the new folder, and the rest of the source code files must be in the new folder
412 | as well. You can use [EmbedMd](https://github.com/campoy/embedmd) to include
413 | snippets from the source code files in the Markdown file. You should run the
414 | `embedmd` program on `index.md` to actually include the code block in the
415 | Markdown source in one of the commits for your pull request.
416 |
417 | This option is more complicated, but allows us to test the code, and allows the
418 | user to view real source code files.
419 |
420 | For an example, see [Using Node.js to Calculate the Size of a BigQuery Dataset](https://github.com/GoogleCloudPlatform/community/blob/master/tutorials/using-nodejs-to-calculate-the-size-of-a-bigquery-dataset).
421 |
422 |
--------------------------------------------------------------------------------
/assets/images/gee-dev-docs-icon-alt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/assets/images/gee-dev-docs-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------