From c20190e8e2ccfd419caff4d09285b404f64763d6 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Sat, 17 Nov 2018 13:01:37 -0600 Subject: [PATCH] Add our documentation site using gutenberg and ucg. * gutenberg generates the documentation site * ucg configures the Google cloud storage bucket. --- .gitignore | 3 + docsite/Makefile | 32 ++ docsite/buckets/ucg-docs.ucg | 27 ++ docsite/buckets/ucg-docs.yaml | 26 + docsite/site/config.toml | 19 + docsite/site/content/_index.md | 23 + .../site/content/getting-started/_index.md | 102 ++++ docsite/site/content/reference/_index.md | 35 ++ docsite/site/content/reference/expressions.md | 243 ++++++++++ docsite/site/content/reference/statements.md | 97 ++++ docsite/site/content/reference/types.md | 87 ++++ docsite/site/themes/book/.gitignore | 2 + docsite/site/themes/book/LICENSE | 21 + docsite/site/themes/book/README.md | 54 +++ docsite/site/themes/book/config.toml | 9 + docsite/site/themes/book/content/_index.md | 3 + .../themes/book/content/chapter1/_index.md | 66 +++ .../themes/book/content/chapter1/page1.md | 84 ++++ .../themes/book/content/chapter2/_index.md | 6 + .../themes/book/content/chapter2/page1.md | 14 + .../themes/book/content/chapter3/_index.md | 6 + .../themes/book/content/chapter3/page1.md | 20 + .../themes/book/content/chapter3/page2.md | 20 + .../themes/book/content/chapter4/_index.md | 6 + .../themes/book/content/chapter5/_index.md | 6 + docsite/site/themes/book/sass/_content.scss | 222 +++++++++ docsite/site/themes/book/sass/_header.scss | 160 +++++++ .../site/themes/book/sass/_navigation.scss | 50 ++ docsite/site/themes/book/sass/_normalize.scss | 447 ++++++++++++++++++ docsite/site/themes/book/sass/book.scss | 49 ++ docsite/site/themes/book/screenshot.png | Bin 0 -> 145504 bytes docsite/site/themes/book/static/book.js | 223 +++++++++ docsite/site/themes/book/templates/index.html | 111 +++++ docsite/site/themes/book/templates/page.html | 45 ++ .../site/themes/book/templates/section.html | 50 ++ docsite/site/themes/book/theme.toml | 13 + docsite/ucglib/globals.ucg | 2 + docsite/ucglib/macros.ucg | 40 ++ 38 files changed, 2423 insertions(+) create mode 100644 docsite/Makefile create mode 100644 docsite/buckets/ucg-docs.ucg create mode 100644 docsite/buckets/ucg-docs.yaml create mode 100644 docsite/site/config.toml create mode 100644 docsite/site/content/_index.md create mode 100644 docsite/site/content/getting-started/_index.md create mode 100644 docsite/site/content/reference/_index.md create mode 100644 docsite/site/content/reference/expressions.md create mode 100644 docsite/site/content/reference/statements.md create mode 100644 docsite/site/content/reference/types.md create mode 100644 docsite/site/themes/book/.gitignore create mode 100644 docsite/site/themes/book/LICENSE create mode 100644 docsite/site/themes/book/README.md create mode 100644 docsite/site/themes/book/config.toml create mode 100644 docsite/site/themes/book/content/_index.md create mode 100644 docsite/site/themes/book/content/chapter1/_index.md create mode 100644 docsite/site/themes/book/content/chapter1/page1.md create mode 100644 docsite/site/themes/book/content/chapter2/_index.md create mode 100644 docsite/site/themes/book/content/chapter2/page1.md create mode 100644 docsite/site/themes/book/content/chapter3/_index.md create mode 100644 docsite/site/themes/book/content/chapter3/page1.md create mode 100644 docsite/site/themes/book/content/chapter3/page2.md create mode 100644 docsite/site/themes/book/content/chapter4/_index.md create mode 100644 docsite/site/themes/book/content/chapter5/_index.md create mode 100644 docsite/site/themes/book/sass/_content.scss create mode 100644 docsite/site/themes/book/sass/_header.scss create mode 100644 docsite/site/themes/book/sass/_navigation.scss create mode 100644 docsite/site/themes/book/sass/_normalize.scss create mode 100644 docsite/site/themes/book/sass/book.scss create mode 100644 docsite/site/themes/book/screenshot.png create mode 100644 docsite/site/themes/book/static/book.js create mode 100644 docsite/site/themes/book/templates/index.html create mode 100644 docsite/site/themes/book/templates/page.html create mode 100644 docsite/site/themes/book/templates/section.html create mode 100644 docsite/site/themes/book/theme.toml create mode 100644 docsite/ucglib/globals.ucg create mode 100644 docsite/ucglib/macros.ucg diff --git a/.gitignore b/.gitignore index dc7a101..7b8ee02 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ target +.libtarget .vscode/settings.json +docsite/site/generated +docsite/site/public diff --git a/docsite/Makefile b/docsite/Makefile new file mode 100644 index 0000000..816969b --- /dev/null +++ b/docsite/Makefile @@ -0,0 +1,32 @@ +allyamls := $(shell find . -type f -name '*.yaml') + +shared := $(wildcard ucglib/*.ucg) +bucketucgs := $(wildcard buckets/*.ucg) + +%.yaml: %.ucg .libtarget + ucg build $< + +# This ensures that we rebuild if the dependent ucglibs +# change. +.libtarget: $(shared) + touch .libtarget + +build: bucketconfs gensite + +bucketconfs: .libtarget $(patsubst %.ucg,%.yaml,$(bucketucgs)) + +all: build test + +test: + ucg test -r + +gensite: + cd site; \ + gutenberg build -o generated + +deploysite: gensite + cd site/; \ + gsutil -m rsync -d -r generated gs://ucg.marzhillstudios.com/ + +clean: + rm -f $(allyamls) diff --git a/docsite/buckets/ucg-docs.ucg b/docsite/buckets/ucg-docs.ucg new file mode 100644 index 0000000..9bed465 --- /dev/null +++ b/docsite/buckets/ucg-docs.ucg @@ -0,0 +1,27 @@ +import "../ucglib/globals.ucg" as globals; +import "../ucglib/macros.ucg" as mks; + +let doc_bucket_name = "ucg.marzhillstudios.com"; + +let doc_site_bucket = mks.bucketbase(doc_bucket_name, globals.project, globals.location); + +let resources = [ + doc_site_bucket{ + properties = self.properties{ + website = { + notFoundPage = "404.html", + mainPageSuffix = "index.html", + }, + }, + }, +]; + +let deployment = { + resources = resources, + outputs = [ + mks.bucketSelfLink(doc_bucket_name), + mks.bucketGsLink(doc_bucket_name), + ], +}; + +out yaml deployment; \ No newline at end of file diff --git a/docsite/buckets/ucg-docs.yaml b/docsite/buckets/ucg-docs.yaml new file mode 100644 index 0000000..330f35b --- /dev/null +++ b/docsite/buckets/ucg-docs.yaml @@ -0,0 +1,26 @@ +--- +resources: + - name: ucg.marzhillstudios.com + type: storage.v1.bucket + properties: + bucket: ucg.marzhillstudios.com + project: "ucg-configuration-project" + location: "us-east1" + acl: + - entity: "project-owners-ucg-configuration-project" + role: OWNER + - entity: "project-editors-ucg-configuration-project" + role: WRITER + - entity: "project-viewers-ucg-configuration-project" + role: READER + defaultObjectAcl: + - entity: allUsers + role: READER + website: + notFoundPage: 404.html + mainPageSuffix: index.html +outputs: + - name: ucg.marzhillstudios.comselfLink + value: "https://console.cloud.google.com/storage/browser/ucg.marzhillstudios.com" + - name: ucg.marzhillstudios.comgsLink + value: "gs://ucg.marzhillstudios.com" \ No newline at end of file diff --git a/docsite/site/config.toml b/docsite/site/config.toml new file mode 100644 index 0000000..a4f3a73 --- /dev/null +++ b/docsite/site/config.toml @@ -0,0 +1,19 @@ +# The URL the site will be built for +base_url = "https://ucg.marzhillstudios.com" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Gutenberg +highlight_code = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = true + +# Use the book theme +theme = "book" + +[extra] +# Put all your custom variables here +book_number_chapters = false diff --git a/docsite/site/content/_index.md b/docsite/site/content/_index.md new file mode 100644 index 0000000..c5fb7ce --- /dev/null +++ b/docsite/site/content/_index.md @@ -0,0 +1,23 @@ ++++ +title = "Introduction to UCG" +in_seach_index = true ++++ +[UCG](https://crates.io/crates/ucg) is a universal grammar for configuration. It's goal is not to define a configuration format +like JSON, YAML, or TOML. It is not intended to replace the other configuration formats. Instead +it is intended to provide a common grammar for generating those formats. Currently UCG is able to +generate conversions for the following formats. + +* Environment Variables +* Command Line Flags +* An executable shell launch script combining the two above +* JSON +* YAML +* TOML + +UCG allows you to use one common grammar to generate configuation values for any applications that +use one of provided conversion outputs while also allowing you to easily share common configuration +values like hostnames, jvm settings, and database settings. + +UCG can build an entire directory of files or a single file. + +Next: Getting Started \ No newline at end of file diff --git a/docsite/site/content/getting-started/_index.md b/docsite/site/content/getting-started/_index.md new file mode 100644 index 0000000..3c220b9 --- /dev/null +++ b/docsite/site/content/getting-started/_index.md @@ -0,0 +1,102 @@ ++++ +title = "Getting Started" +slug = "getting-started" +weight = 1 +sort_by = "weight" +in_search_index = true ++++ +Installing +---------- + +### Cargo + +You can install ucg using Rust's Cargo package manager. + +```sh +cargo install ucg +``` + +### Compiling + +You can also install from source yourself. First ensure that you have the latest +version of Rust installed. You can find install instructions for Rust +[here](https://www.rust-lang.org/en-US/install.html). Then you can get the source +from github and use cargo to build. + +```sh +# Get the source code from github +git clone https://github.com/zaphar/ucg +cd ucg +# optionally checkout the current version +git checkout v0.2.3 +# use cargo to build and install +cargo install --path . +``` + +A simple configuration +---------------------- + +To create a configuration and build it in ucg you must first create a ucg file. Copy the below contents into a file called `sample.ucg`. All ucg files must end in the ucg +extension. + +``` +let hostname = "www.example.com"; +let mysql_host = "localhost"; +let mysql_port = 3306; + +let config = { + // This uses a format string to put the hostname into + // the baseUrl. + baseUrl = "http://@" % (hostname), + db = { + host = mysql_host, + port = myssql_port, + }, +} + +// Generate a yaml file from that config. +out yaml config; +``` + +The above binds 3 values to names and then creates a config tuple using those values. +We'll look in more detail at ucg's syntax later. + +To generate a yaml file from the above run the ucg build command. + +```sh +ucg build sample.ucg +cat sample.yaml +``` + +Ucg will generate the yaml file with the same name as the file containing the out statement. + +The ucg command line +----------- + +Ucg has builtin help on the command line. You can + + $> ucg help + ucg 0.2.2 + Jeremy Wall + Universal Configuration Grammar compiler. + + USAGE: + ucg [SUBCOMMAND] + + FLAGS: + -h, --help Prints help information + -V, --version Prints version information + + SUBCOMMANDS: + build Build a list of ucg files. + converters list the available converters + help Prints this message or the help of the given subcommand(s) + inspect Inspect a specific symbol in a ucg file. + test Check a list of ucg files for errors and run test assertions. + +* build will build a list of files or directories of files. +* inspect will allow you to print out the contents of a specific named binding in a ucg file. +* test compiles and runs any test assertions in the provided files or directories of files. +* converters will list the available conversion formats that this ucg tool supports. + +You can get more information about the options for each command by running `ucg help $command` \ No newline at end of file diff --git a/docsite/site/content/reference/_index.md b/docsite/site/content/reference/_index.md new file mode 100644 index 0000000..844007a --- /dev/null +++ b/docsite/site/content/reference/_index.md @@ -0,0 +1,35 @@ ++++ +title = "The UCG Language Reference" +slug = "reference" +weight = 2 +sort_by = "weight" +in_search_index = true ++++ +An Overview +----------- + +UCG is a language specialized for generating configurations. It does not have classes, +inheritance, closures, or a full type system. All values are immutable once bound to +a name. A valid UCG file is composed of a series of statements. Statements can be +an expression, introduce named bindings, or create different outputs. All statements +must be terminiated by a semicolon. + +Some words are reserved in ucg and can not be used as a named binding. + + +* self +* assert +* true +* false +* let +* import +* as +* select +* macro +* env +* map +* filter +* NULL +* out + +Next: Types \ No newline at end of file diff --git a/docsite/site/content/reference/expressions.md b/docsite/site/content/reference/expressions.md new file mode 100644 index 0000000..32fbde9 --- /dev/null +++ b/docsite/site/content/reference/expressions.md @@ -0,0 +1,243 @@ ++++ +title = "UCG Expressions" +weight = 3 +sort_by = "weight" +in_search_index = true ++++ +Ucg expressions can reference a bound name, do math, concatenate lists or strings, +copy and modify a struct, or format a string. + +Symbols +------- + +Many ucg expressions or statements use a symbol. A symbol might be used for either +name for a binding or a name for a field. Symbols must start with an ascii letter and can contain any ascii letter, number, `_`, or `-` characters. + +Selectors +------ + +A UCG selector references a bound value by name. They can descend into tuples or lists +or refer to symbols in imported files. They are symbol followed optionally by a list +of other symbols or numbers separated by a `.` to reference subfields or indexes in a list. + +You can reference a field in a tuple by putting the field name after a dot. Lists are always 0 indexed. You can index into a list by referencing the index after +a `.`. + +``` +let tuple = { + inner = { + field = "value", + }, + list = [1, 2, 3], +}; + +// reference the field in the inner tuple in our tuple defined above. +tuple.inner.field; + +// reference the field in the list contained in our tuple defined above. +tuple.list.0; +``` + +### The environment Selector + +There is a special selector in ucg for obtaining a value from the environment. The +`env` selector references the environment variables in environment at the time of +the build. You reference environment variables just like it was a tuple. Attempting +to reference a variable that doesn't exist will be a compile error. + +``` +let env_name = env.DEPLOY_ENV; +``` + +Binary Operators +---------- + +UCG has a numver of binary infix operators. Some work only on numeric values and others +work on more than one type. + +### Numeric Operators + +ucg supports the following numeric operators, `+`, `-`, `*`, `/` Each one is type safe +and infers the types from the values they operate on. The operators expect both the +left and right operands to be of the same type. + +``` +1 + 1; +1.0 - 1.0; +``` + +### Concatenation + +The `+` operator can also do concatenation on strings and lists. As with the numeric +version both sides must be the same type, either string or list. + +``` +"Hello " + "World"; // "Hello World" +[1, 2] + [3]; // [1, 2, 3] +``` + +### Comparison Operators + +UCG supports the comparison operators `==`, `!=`, `>=`, `<=`, `<`, and `>`. The all +expect both sides to be of the same type. + +The `>`, `<`, `>=`, and `>=` operators are only supported on numeric types (i.e. int, +and float). + +``` +1 > 2; // result is false +2 < 3; // result is true +10 > "9"; // This is a compile error. +(1+2) == 3; +``` + +The equality operators `==` and `!=` are supported for all types and will perform deep +equal comparisons on complex types. + +``` +let tpl1 = { + foo = "bar", + one = 1 +}; +let tpl2 = { + foo = "bar", + one = 1 +}; +tpl1 == tpl2; // returns true +let tpl2 = { + foo = "bar", + one = 1 + duck = "quack", +}; +tpl1 == tpl3; // returns false +``` + +Because tuples are an ordered set both tuples in a comparison must have their fields in +the same order to compare as equal. + +#### Operator Precedence + +UCG binary operators follow the typical operator precedence for math. `*` and `/` are +higher precendence than `+` and `-` which are higher precedence than any of the +comparison operators. + +Copy Expressions +---------------- + +UCG expressions have a special copy expression for tuples. These faciliate a form of +data reuse as well as a way to get a modified version of a tuple. Copy expressions +start with a selector referencing a tuple followed by braces `{}` with `name = value` +pairs separated by commas. Trailing commas are allowed. + +Copied expressions can change base fields in the copied tuple or add new fields. If +you are changing the value of a base field in the copy then the new value must be of +the same type as the base field's value. This allows you to define a base "type" of +sorts and ensure that any modified fields stay the same. + +``` +let base = { + field1 = "value1", + field2 = 100, + field3 = 5.6, +}; + +let overridden = base{ + field1 = "new value" +}; + +let expanded = base{ + field2 = 200, + field3 = "look ma a new field", +}; + +let bad = base{ + field1 = 300, // Error!!! must be a string. +}; + +``` + +There is a special selector that can be used in a copy expression to refer to the base +tuple in a copy called `self`. `self` can only be used in the body of the copy. + +``` +let nestedtpl = { + field1 = "value1", + inner = { + field2 = 2 + inner = { + field3 = "three", + }, + }, +}; + +let copiedtpl = nestedtpl{ + inner = self.inner{ + inner = self.inner{ + field4 = 4, + }, + }, +}; +``` + +Format Expressions +---------- + +UCG has a format expression that has a limited form of string templating. A format +expression starts with a string followed by the `%` operator and a list of arguments +in parentheses separated by commas. Trailing commas are allowed. The format string +should have `@` in each location where a value should be placed. Any primitive value +can be used as an argument. + +``` +"https://@:@/" % (host, port) +``` + +Conditionals +---------- + +UCG supports a limited conditional expression called a select. A select expression +starts with the `select` keyword and is followed by a an expression resolving to a +string naming the field to select, an expression resolving to the default value, and +finally a tuple literal to select the field from. If the field selected is not in the +tuple then the default value will be used. + +``` +let want = "baz"; + +// field default +select want, "quux", { + baz = "foo", + fuzz = "bang", +}; // result will be "foo" + +// field default +select "quack", "quux", { + baz = "foo", + fuzz = "bang", +}; // result will be "quux" +``` + +Macros +----- + +Macros look like functions but they are resolved at compile time and configurations +don't execute so they never appear in output. Macros do not close over their +environment so they can only reference values defined in their arguments. They can't +refer to bindings or other macros defined elsewhere. They are useful for constructing +tuples of a certain shape or otherwise promoting data reuse. You define a macro with +the `macro` keyword followed by the arguments in parentheses, a `=>`, and then a tuple +literal. + +``` +let mymacro = macro (arg1, arg2) => { + host = arg1, + port = arg2, + connstr = "couchdb://@:@" % (arg1, arg2), +} + +let my_dbconf = mymacro("couchdb.example.org", "9090"); + +let my_dbhost = dbconf.host; +``` + +Next: Statements \ No newline at end of file diff --git a/docsite/site/content/reference/statements.md b/docsite/site/content/reference/statements.md new file mode 100644 index 0000000..95550a3 --- /dev/null +++ b/docsite/site/content/reference/statements.md @@ -0,0 +1,97 @@ ++++ +title = "UCG Statements" +weight = 4 +sort_by = "weight" +in_search_index = true ++++ +Expression Statements +------- + +The simplest and least useful is the expression statement. It is any valid expression +followed by a semicolon. + +``` +1; +4 / 2; +"foo"; +"foo" + "bar"; +``` + +Despite the fact that these are valid the results are thrown away and can essentially +be considered a noop. If we ever create a repl for ucg statements they may prove more +useful. + +Named Value Statements +-------- + +### Let statements + +There are two statements that can introduce a named value for a given ucg file. Let +statnements and import statements. Any collisions in binding names inside a file are +treated as compile errors. Bindings are immutable and once bound they can't be +modified. + +``` +let name = "foo"; +``` + +### Import Statement + +The import statement imports the contents of another ucg file into the current file +with a name. The imported files named values are exposed as a tuple in the referencing +file. It starts with the `import` keyword and is followed by a quoted path to the ucg +file, the keyword `as`, and a name for the imported values. + +``` +import "dbconfigs.ucg" as dbconfigs; +let mysqlconf = dbconfigs.mysql; +``` + +Output Statements +----------- + +Some statements in ucg exist to generate an output. Either a compiled configuration or the results of test assertions. + +### Assert Statements + +The assert statement defines an expression that must evaluate to either true or false. +Assert statements are noops except during a validation compile. They give you a way to +assert certains properties about your data and can be used as a form of unit testing +for your configurations. It starts with the `assert` keyword followed by a valid block +of ucg statements delimited by `|` characters. The final statement in the in the block +must evaluate to a boolean expression. + +``` +assert | + host == "www.example.com"; +|; + +assert | + select qa, 443, { + qa = 80, + prod = 443, + } == 443; +|; +``` + +When _test.ucg files are run in a test run then ucg will output a log of all the assertions to stdout. Giving you a simple test harness for your ucg configs. + +### Out Statements + +The Out statement defines the output for a UCG file. It identifies the output +converter type and an expression that will be output. The output converter type is +expected to be one of the registered converters (e.g. json, exec) and the artifact +file will take the same name as the ucg file with the extension replaced by the +defined extension for that converter. + +For a file named api_config.ucg with the following contents: + +``` +let myconf = { + api_url = "https://example.org/api/v1/", + api_token = env.API_TOKEN, +}; +out json myconf; +``` + +ucg will output the myconf tuple as json to a file called api_config.json \ No newline at end of file diff --git a/docsite/site/content/reference/types.md b/docsite/site/content/reference/types.md new file mode 100644 index 0000000..3f1ceea --- /dev/null +++ b/docsite/site/content/reference/types.md @@ -0,0 +1,87 @@ ++++ +title = "UCG types" +weight = 2 +sort_by = "weight" +in_search_index = true ++++ +Primitive Values +------------- + +UCG has a few primitive types. + +### Boolean + +Boolean types can be either `true` or `false`. They are represented by symbols of the +same name. + +``` +true; +false; +``` + +### Integer + +An Integer is any 64 bit integer number. + +``` +1; +``` + +### Float + +A Float is any 64 bit floating point numer. You indicate a number is a Float by +including a decimal point. Any number with a decimal point is a float. + +``` +1.0; +.0; +1.; +``` + +### String + +Strings are any double quoted text. + +``` +"This is a string"; +``` + +### NULL or the Empty type + +NULL is the empty type. It represents the absence of a value. It is represented by the +symbol `NULL`. + +``` +let empty = NULL; +``` + +Complex types +----------- + +UCG also has two complex types. + +### Tuples + +Tuples are an ordered set of name value pairs. They are delimited by braces and should +contain 1 or more `name = expression` pairs separated by commas. Trailing commas are allowed. + +``` +let tuple = { + field = "value", + inner = { + number = 1, + }, +}; +``` + +### Lists + +Lists are a 0 indexed heterogenous list of expressions. The are delimited by square +brackets and should contain 1 or more expressions separated by commas. Trailing commas +are allowed. + +``` +let list = [1, "two", {three = 3},]; +``` + +Next: Expressions \ No newline at end of file diff --git a/docsite/site/themes/book/.gitignore b/docsite/site/themes/book/.gitignore new file mode 100644 index 0000000..4139cd5 --- /dev/null +++ b/docsite/site/themes/book/.gitignore @@ -0,0 +1,2 @@ +.idea/ +public diff --git a/docsite/site/themes/book/LICENSE b/docsite/site/themes/book/LICENSE new file mode 100644 index 0000000..93ab851 --- /dev/null +++ b/docsite/site/themes/book/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Vincent Prouillet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docsite/site/themes/book/README.md b/docsite/site/themes/book/README.md new file mode 100644 index 0000000..f015188 --- /dev/null +++ b/docsite/site/themes/book/README.md @@ -0,0 +1,54 @@ +# book + +A theme based on [Gitbook](https://www.gitbook.com), to write documentation +or books. + +![book screenshot](https://github.com/Keats/book/blob/master/screenshot.png?raw=true) + + +## Contents + +- [Installation](#installation) +- [Options](#options) + - [Numbered chapters](#numbered-chapters) + +## Installation +First download this theme to your `themes` directory: + +```bash +$ cd themes +$ git clone https://github.com/Keats/book.git +``` +and then enable it in your `config.toml`: + +```toml +theme = "book" +# Optional, if you want search +build_search_index = true +``` + +## Usage +Book will generate a book from the files you place in the `content` directory. Your book +can have two levels of hierarchy: chapters and subchapters. + +Each chapter should be a `section` within the Gutenberg site and should have an `_index.md` +file that sets its `weight` front-matter variable to its chapter number. For example, +chapter 2 should have `weight = 2`. Additionally, each chapter should also set the +`sort_by = "weight"` in its front matter. + +Each subchapter should be a `page` and should have its `weight` variable set to the subchapter +number. For example, subchapter 3.4 should have `weight = 4`. + +Finally, you should create an `_index.md` file and set the `redirect_to` front-matter variable +to redirect to the first section of your content. For example, if your first section has the +slug `introduction`, then you would set `redirect_to = "introduction"`. + +## Options + +### Numbered chapters +By default, the `book` theme will number the chapters and pages in the left menu. +You can disable that by setting the `book_numbered_chapters` in `extra`: + +```toml +book_numbered_chapters = false +``` diff --git a/docsite/site/themes/book/config.toml b/docsite/site/themes/book/config.toml new file mode 100644 index 0000000..191bf49 --- /dev/null +++ b/docsite/site/themes/book/config.toml @@ -0,0 +1,9 @@ +base_url = "https://gutenberg-book.netlify.com" +compile_sass = true +title = "book theme" +description = "A book theme" +highlight_code = true +build_search_index = true + +[extra] +book_number_chapters = true diff --git a/docsite/site/themes/book/content/_index.md b/docsite/site/themes/book/content/_index.md new file mode 100644 index 0000000..6abf22b --- /dev/null +++ b/docsite/site/themes/book/content/_index.md @@ -0,0 +1,3 @@ ++++ +redirect_to = "chapter1" ++++ diff --git a/docsite/site/themes/book/content/chapter1/_index.md b/docsite/site/themes/book/content/chapter1/_index.md new file mode 100644 index 0000000..c296793 --- /dev/null +++ b/docsite/site/themes/book/content/chapter1/_index.md @@ -0,0 +1,66 @@ ++++ +title = "Introduction" +weight = 1 +sort_by = "weight" +insert_anchor_links = "right" ++++ + +Testing every `elements` you can find in [CommonMark](http://commonmark.org). + + +Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. + +> This is a quote + +- a +- bullet +- point + +## Some code + +```rust +fn main() { + let greetings = ["Hello", "Hola", "Bonjour", + "Ciao", "こんにちは", "안녕하세요", + "Cześć", "Olá", "Здравствуйте", + "Chào bạn", "您好", "Hallo", + "Hej", "Ahoj", "سلام"]; + + for (num, greeting) in greetings.iter().enumerate() { + print!("{} : ", greeting); + match num { + 0 => println!("This code is editable and runnable!"), + 1 => println!("¡Este código es editable y ejecutable!"), + 2 => println!("Ce code est modifiable et exécutable !"), + 3 => println!("Questo codice è modificabile ed eseguibile!"), + 4 => println!("このコードは編集して実行出来ます!"), + 5 => println!("여기에서 코드를 수정하고 실행할 수 있습니다!"), + 6 => println!("Ten kod można edytować oraz uruchomić!"), + 7 => println!("Este código é editável e executável!"), + 8 => println!("Этот код можно отредактировать и запустить!"), + 9 => println!("Bạn có thể edit và run code trực tiếp!"), + 10 => println!("这段代码是可以编辑并且能够运行的!"), + 11 => println!("Dieser Code kann bearbeitet und ausgeführt werden!"), + 12 => println!("Den här koden kan redigeras och köras!"), + 13 => println!("Tento kód můžete upravit a spustit"), + 14 => println!("این کد قابلیت ویرایش و اجرا دارد!"), + _ => {}, + } + } +} +``` + +## A table + +| a | table | in | markdown | !! | +|----|-------|----|----------|---------------------------------| +| 1 | 2 | 3 | 4 | 5 | +| 1 | we | ew | we | with a longish column inside it | + +## An image + +![a cat](https://i.imgur.com/t6nPdY8.jpg "A cat") + +## An iframe + +{{ youtube(id="dQw4w9WgXcQ") }} diff --git a/docsite/site/themes/book/content/chapter1/page1.md b/docsite/site/themes/book/content/chapter1/page1.md new file mode 100644 index 0000000..0c0697b --- /dev/null +++ b/docsite/site/themes/book/content/chapter1/page1.md @@ -0,0 +1,84 @@ ++++ +title = "Page 1" +weight = 1 ++++ + +Pages and sections are actually very similar. + +## Page variables +Gutenberg will try to load the `templates/page.html` template, the `page.html` template of the theme if one is used +or will render the built-in template: a blank page. + +Whichever template you decide to render, you will get a `page` variable in your template +with the following fields: + + +```ts +content: String; +title: String?; +description: String?; +date: String?; +slug: String; +path: String; +permalink: String; +summary: String?; +tags: Array; +category: String?; +extra: HashMap; +// Naive word count, will not work for languages without whitespace +word_count: Number; +// Based on https://help.medium.com/hc/en-us/articles/214991667-Read-time +reading_time: Number; +// `previous` and `next` are only filled if the content can be sorted +previous: Page?; +next: Page?; +// See the Table of contents section below for more details +toc: Array
; +``` + +## Section variables +By default, Gutenberg will try to load `templates/section.html`. If there isn't +one, it will render the built-in template: a blank page. + +Whichever template you decide to render, you will get a `section` variable in your template +with the following fields: + + +```ts +content: String; +title: String?; +description: String?; +date: String?; +slug: String; +path: String; +permalink: String; +extra: HashMap; +// Pages directly in this section, sorted if asked +pages: Array; +// Direct subsections to this section, sorted by subsections weight +subsections: Array
; +// Naive word count, will not work for languages without whitespace +word_count: Number; +// Based on https://help.medium.com/hc/en-us/articles/214991667-Read-time +reading_time: Number; +// See the Table of contents section below for more details +toc: Array
; +``` + +## Table of contents + +Both page and section have a `toc` field which corresponds to an array of `Header`. +A `Header` has the following fields: + +```ts +// The hX level +level: 1 | 2 | 3 | 4 | 5 | 6; +// The generated slug id +id: String; +// The text of the header +title: String; +// A link pointing directly to the header, using the inserted anchor +permalink: String; +// All lower level headers below this header +children: Array
; +``` diff --git a/docsite/site/themes/book/content/chapter2/_index.md b/docsite/site/themes/book/content/chapter2/_index.md new file mode 100644 index 0000000..86a0d1e --- /dev/null +++ b/docsite/site/themes/book/content/chapter2/_index.md @@ -0,0 +1,6 @@ ++++ +title = "What is Gutenberg" +weight = 2 +sort_by = "weight" +insert_anchor_links = "right" ++++ diff --git a/docsite/site/themes/book/content/chapter2/page1.md b/docsite/site/themes/book/content/chapter2/page1.md new file mode 100644 index 0000000..ecdfc17 --- /dev/null +++ b/docsite/site/themes/book/content/chapter2/page1.md @@ -0,0 +1,14 @@ ++++ +title = "Page 1" +weight = 1 ++++ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar, sem id fermentum sollicitudin, velit sem elementum nisl, at tempus odio lectus eu sapien. Quisque ligula diam, cursus sed nisi et, ultricies rhoncus diam. Integer nec tellus a ante dapibus tincidunt nec id lacus. Quisque eu aliquet dui. Etiam placerat, ex in luctus lobortis, sem augue pellentesque nulla, in gravida lacus dui id arcu. Nam vel metus a ipsum condimentum porta non quis purus. Nullam feugiat vitae felis eu imperdiet. Sed et faucibus ligula. + +Morbi tempus semper tellus eget luctus. Morbi eu dui leo. Aliquam vel neque id risus laoreet pellentesque. In mattis tincidunt nulla, sit amet pharetra tellus facilisis vel. Nulla facilisi. Nunc blandit massa a ante interdum pulvinar. Suspendisse bibendum efficitur gravida. Praesent gravida urna a luctus molestie. Fusce accumsan ipsum elit, quis gravida urna condimentum sed. Aliquam erat volutpat. Quisque eget mollis lorem, sit amet ultricies mauris. Fusce vulputate sollicitudin magna eget facilisis. Nunc id dignissim sapien. + +Nulla pharetra eget ligula vitae auctor. Praesent consectetur consectetur nunc, quis commodo arcu posuere tincidunt. Praesent auctor, augue ut tincidunt semper, dolor ex malesuada justo, sit amet feugiat velit leo a lectus. Curabitur et velit ut magna vulputate vehicula nec sed lorem. Ut rutrum, odio sit amet mollis scelerisque, enim arcu euismod odio, vel faucibus libero ex sit amet nisl. Proin nec orci nec elit vehicula sodales id eget ex. Etiam et aliquet lacus. Cras tortor orci, blandit nec eleifend nec, venenatis at nibh. Vivamus eu feugiat purus. Nam viverra lobortis dui, non eleifend mauris commodo eget. Vestibulum quis erat et turpis maximus pretium. Aenean ac placerat quam. Nulla elit tortor, ornare a libero non, eleifend vestibulum nulla. Donec justo lorem, accumsan a feugiat ullamcorper, fringilla vel augue. Sed convallis et odio rhoncus vestibulum. Vivamus finibus lacinia dui, volutpat tincidunt felis condimentum et. + +Cras accumsan libero sed nulla facilisis varius. Nulla auctor nibh quis mauris tincidunt fermentum. Nulla sed consectetur odio, a fringilla libero. Curabitur tincidunt varius mollis. Cras ornare nec enim in vestibulum. Quisque tempor nunc arcu, eu accumsan tellus pulvinar nec. Donec venenatis cursus est sed gravida. Ut non nisi sit amet ligula facilisis volutpat. Praesent lorem quam, euismod sit amet consequat eu, aliquam at justo. Nunc vel condimentum velit. Duis pharetra laoreet nulla sed consectetur. Pellentesque malesuada mauris id nunc ultricies, quis viverra tellus porttitor. + +Aliquam vitae lectus tortor. Etiam auctor tortor elit, vel scelerisque metus tempor et. Quisque condimentum, massa vel condimentum sagittis, justo risus convallis eros, ac accumsan dolor ante in justo. Quisque et lacus at lectus semper commodo. Cras id viverra sem. Aliquam venenatis, tortor at fringilla semper, metus libero dictum libero, consequat facilisis nunc dolor sed sem. Nulla blandit, justo a condimentum malesuada, mauris mi lacinia orci, at finibus odio mi quis velit. Maecenas vel justo in lorem tristique sodales. diff --git a/docsite/site/themes/book/content/chapter3/_index.md b/docsite/site/themes/book/content/chapter3/_index.md new file mode 100644 index 0000000..8812e6e --- /dev/null +++ b/docsite/site/themes/book/content/chapter3/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Chapter 3" +weight = 3 +sort_by = "weight" +insert_anchor_links = "right" ++++ diff --git a/docsite/site/themes/book/content/chapter3/page1.md b/docsite/site/themes/book/content/chapter3/page1.md new file mode 100644 index 0000000..a6006a1 --- /dev/null +++ b/docsite/site/themes/book/content/chapter3/page1.md @@ -0,0 +1,20 @@ ++++ +title = "Page 1" +weight = 1 ++++ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar, sem id fermentum sollicitudin, velit sem elementum nisl, at tempus odio lectus eu sapien. Quisque ligula diam, cursus sed nisi et, ultricies rhoncus diam. Integer nec tellus a ante dapibus tincidunt nec id lacus. Quisque eu aliquet dui. Etiam placerat, ex in luctus lobortis, sem augue pellentesque nulla, in gravida lacus dui id arcu. Nam vel metus a ipsum condimentum porta non quis purus. Nullam feugiat vitae felis eu imperdiet. Sed et faucibus ligula. + +```js +function isAllowed(user) { + return user.admin || user.staff; +} +``` + +Morbi tempus semper tellus eget luctus. Morbi eu dui leo. Aliquam vel neque id risus laoreet pellentesque. In mattis tincidunt nulla, sit amet pharetra tellus facilisis vel. Nulla facilisi. Nunc blandit massa a ante interdum pulvinar. Suspendisse bibendum efficitur gravida. Praesent gravida urna a luctus molestie. Fusce accumsan ipsum elit, quis gravida urna condimentum sed. Aliquam erat volutpat. Quisque eget mollis lorem, sit amet ultricies mauris. Fusce vulputate sollicitudin magna eget facilisis. Nunc id dignissim sapien. + +Nulla pharetra eget ligula vitae auctor. Praesent consectetur consectetur nunc, quis commodo arcu posuere tincidunt. Praesent auctor, augue ut tincidunt semper, dolor ex malesuada justo, sit amet feugiat velit leo a lectus. Curabitur et velit ut magna vulputate vehicula nec sed lorem. Ut rutrum, odio sit amet mollis scelerisque, enim arcu euismod odio, vel faucibus libero ex sit amet nisl. Proin nec orci nec elit vehicula sodales id eget ex. Etiam et aliquet lacus. Cras tortor orci, blandit nec eleifend nec, venenatis at nibh. Vivamus eu feugiat purus. Nam viverra lobortis dui, non eleifend mauris commodo eget. Vestibulum quis erat et turpis maximus pretium. Aenean ac placerat quam. Nulla elit tortor, ornare a libero non, eleifend vestibulum nulla. Donec justo lorem, accumsan a feugiat ullamcorper, fringilla vel augue. Sed convallis et odio rhoncus vestibulum. Vivamus finibus lacinia dui, volutpat tincidunt felis condimentum et. + +Cras accumsan libero sed nulla facilisis varius. Nulla auctor nibh quis mauris tincidunt fermentum. Nulla sed consectetur odio, a fringilla libero. Curabitur tincidunt varius mollis. Cras ornare nec enim in vestibulum. Quisque tempor nunc arcu, eu accumsan tellus pulvinar nec. Donec venenatis cursus est sed gravida. Ut non nisi sit amet ligula facilisis volutpat. Praesent lorem quam, euismod sit amet consequat eu, aliquam at justo. Nunc vel condimentum velit. Duis pharetra laoreet nulla sed consectetur. Pellentesque malesuada mauris id nunc ultricies, quis viverra tellus porttitor. + +Aliquam vitae lectus tortor. Etiam auctor tortor elit, vel scelerisque metus tempor et. Quisque condimentum, massa vel condimentum sagittis, justo risus convallis eros, ac accumsan dolor ante in justo. Quisque et lacus at lectus semper commodo. Cras id viverra sem. Aliquam venenatis, tortor at fringilla semper, metus libero dictum libero, consequat facilisis nunc dolor sed sem. Nulla blandit, justo a condimentum malesuada, mauris mi lacinia orci, at finibus odio mi quis velit. Maecenas vel justo in lorem tristique sodales. diff --git a/docsite/site/themes/book/content/chapter3/page2.md b/docsite/site/themes/book/content/chapter3/page2.md new file mode 100644 index 0000000..e9b4ca0 --- /dev/null +++ b/docsite/site/themes/book/content/chapter3/page2.md @@ -0,0 +1,20 @@ ++++ +title = "Page 2" +weight = 2 ++++ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pulvinar, sem id fermentum sollicitudin, velit sem elementum nisl, at tempus odio lectus eu sapien. Quisque ligula diam, cursus sed nisi et, ultricies rhoncus diam. Integer nec tellus a ante dapibus tincidunt nec id lacus. Quisque eu aliquet dui. Etiam placerat, ex in luctus lobortis, sem augue pellentesque nulla, in gravida lacus dui id arcu. Nam vel metus a ipsum condimentum porta non quis purus. Nullam feugiat vitae felis eu imperdiet. Sed et faucibus ligula. + +```js +function isAllowed(user) { + return user.admin || user.staff; +} +``` + +Morbi tempus semper tellus eget luctus. Morbi eu dui leo. Aliquam vel neque id risus laoreet pellentesque. In mattis tincidunt nulla, sit amet pharetra tellus facilisis vel. Nulla facilisi. Nunc blandit massa a ante interdum pulvinar. Suspendisse bibendum efficitur gravida. Praesent gravida urna a luctus molestie. Fusce accumsan ipsum elit, quis gravida urna condimentum sed. Aliquam erat volutpat. Quisque eget mollis lorem, sit amet ultricies mauris. Fusce vulputate sollicitudin magna eget facilisis. Nunc id dignissim sapien. + +Nulla pharetra eget ligula vitae auctor. Praesent consectetur consectetur nunc, quis commodo arcu posuere tincidunt. Praesent auctor, augue ut tincidunt semper, dolor ex malesuada justo, sit amet feugiat velit leo a lectus. Curabitur et velit ut magna vulputate vehicula nec sed lorem. Ut rutrum, odio sit amet mollis scelerisque, enim arcu euismod odio, vel faucibus libero ex sit amet nisl. Proin nec orci nec elit vehicula sodales id eget ex. Etiam et aliquet lacus. Cras tortor orci, blandit nec eleifend nec, venenatis at nibh. Vivamus eu feugiat purus. Nam viverra lobortis dui, non eleifend mauris commodo eget. Vestibulum quis erat et turpis maximus pretium. Aenean ac placerat quam. Nulla elit tortor, ornare a libero non, eleifend vestibulum nulla. Donec justo lorem, accumsan a feugiat ullamcorper, fringilla vel augue. Sed convallis et odio rhoncus vestibulum. Vivamus finibus lacinia dui, volutpat tincidunt felis condimentum et. + +Cras accumsan libero sed nulla facilisis varius. Nulla auctor nibh quis mauris tincidunt fermentum. Nulla sed consectetur odio, a fringilla libero. Curabitur tincidunt varius mollis. Cras ornare nec enim in vestibulum. Quisque tempor nunc arcu, eu accumsan tellus pulvinar nec. Donec venenatis cursus est sed gravida. Ut non nisi sit amet ligula facilisis volutpat. Praesent lorem quam, euismod sit amet consequat eu, aliquam at justo. Nunc vel condimentum velit. Duis pharetra laoreet nulla sed consectetur. Pellentesque malesuada mauris id nunc ultricies, quis viverra tellus porttitor. + +Aliquam vitae lectus tortor. Etiam auctor tortor elit, vel scelerisque metus tempor et. Quisque condimentum, massa vel condimentum sagittis, justo risus convallis eros, ac accumsan dolor ante in justo. Quisque et lacus at lectus semper commodo. Cras id viverra sem. Aliquam venenatis, tortor at fringilla semper, metus libero dictum libero, consequat facilisis nunc dolor sed sem. Nulla blandit, justo a condimentum malesuada, mauris mi lacinia orci, at finibus odio mi quis velit. Maecenas vel justo in lorem tristique sodales. diff --git a/docsite/site/themes/book/content/chapter4/_index.md b/docsite/site/themes/book/content/chapter4/_index.md new file mode 100644 index 0000000..d6eb2ef --- /dev/null +++ b/docsite/site/themes/book/content/chapter4/_index.md @@ -0,0 +1,6 @@ ++++ +title = "A chapter without sub-parts" +weight = 4 +sort_by = "weight" +insert_anchor_links = "right" ++++ diff --git a/docsite/site/themes/book/content/chapter5/_index.md b/docsite/site/themes/book/content/chapter5/_index.md new file mode 100644 index 0000000..9ab3fb3 --- /dev/null +++ b/docsite/site/themes/book/content/chapter5/_index.md @@ -0,0 +1,6 @@ ++++ +title = "Another chapter without sub-parts" +weight = 5 +sort_by = "weight" +insert_anchor_links = "right" ++++ diff --git a/docsite/site/themes/book/sass/_content.scss b/docsite/site/themes/book/sass/_content.scss new file mode 100644 index 0000000..541fad8 --- /dev/null +++ b/docsite/site/themes/book/sass/_content.scss @@ -0,0 +1,222 @@ +.page { + position: absolute; + width: calc(100% - #{$sidebar-width}); + height: 100%; + overflow-y: auto; + color: #000; + background: #fff; + padding-bottom: 20px; + transition: 0.5s; + + .gutenberg-anchor { + color: #4183c4; + padding-left: 10px; + text-decoration: none; + font-weight: initial; + + &:hover { + text-decoration: underline; + } + } + + img { + max-width: 100%; + } + + &__content { + a { + color: #4183c4; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + + hr { + height: 4px; + padding: 0; + margin: 1.7em 0; + overflow: hidden; + background-color: #e7e7e7; + border: none; + } + + pre { + padding: 1rem; + + span { + white-space: pre-wrap; + } + } + + blockquote { + margin: 0; + margin-bottom: .85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; + } + + code { + display: inline-block; + vertical-align: middle; + padding: 0.1em 0.3em; + border-radius: 3px; + color: #6e6b5e; + background: #f1f1f1; + font-size: 0.875em; + font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + } + + iframe { + border: 0; + } + + table { + margin: 0 auto; + border-collapse: collapse; + border-color: #cccccc; + + td { + padding: 3px 20px; + border: 1px solid #ccc; + } + + thead { + th { + padding: 6px 13px; + font-weight: bold; + border: 1px solid #ccc; + } + } + } + + font-size: 1.6rem; + word-wrap: break-word; + line-height: 1.7; + position: relative; + left: 0; + max-width: 800px; + margin: 0 auto; + padding: 0 15px 40px; + + p { + margin-top: 0; + margin-bottom: 0.85em; + } + } + + .previous, .next { + position: fixed; + display: flex; + top: 50px; + bottom: 0; + font-size: 2.5em; + color: #ccc; + text-decoration: none; + text-align: center; + margin: 0; + max-width: 150px; + min-width: 90px; + justify-content: center; + align-content: center; + flex-direction: column; + + &:hover { + color: #333; + } + } + + .previous { + left: $sidebar-width; + float: left; + transition: left 0.5s; + } + + .next { + // not 0 as it goes over the sidebar otherwise + right: 15px; + float: right; + } + + @include max-screen(1250px) { + .previous, .next { + position: static; + top: auto; + display: inline-block; + max-width: 49%; + width: 49%; + + &:hover { + text-decoration: none; + } + } + } +} + +@include min-screen(600px) { + .page { + left: $sidebar-width; + } +} + +.page-without-menu { + width: 100%; + left: 0; + + .previous { + left: 15px; + } +} + +@include max-screen(600px) { + .page { + width: 100%; + left: 0; + } +} + +.search-container { + display: none; + + &--is-visible { + display: block; + } + + #search { + width: 100%; + padding: 1rem; + border: 1px solid #aaa; + border-radius: 3px; + background-color: #fafafa; + color: #000; + } + + .search-results { + &__header { + font-weight: bold; + padding: 1rem 0rem; + } + + &__items { + margin: 0; + padding: 0; + list-style: none; + } + + &__item { + margin-bottom: 1rem; + } + + &__teaser { + font-size: 90%; + } + } +} + +.search-mode { + .prev-link, .next-link { + display: none; + } +} diff --git a/docsite/site/themes/book/sass/_header.scss b/docsite/site/themes/book/sass/_header.scss new file mode 100644 index 0000000..a4034c4 --- /dev/null +++ b/docsite/site/themes/book/sass/_header.scss @@ -0,0 +1,160 @@ +@mixin menu-icon() { + @keyframes clickfirst { + 0% { + transform: translateY(6px) rotate(0deg); + + } + + 100% { + transform: translateY(0) rotate(45deg); + } + } + + @keyframes clickmid { + 0% { + opacity: 1; + } + + 100% { + opacity: 0; + } + } + + @keyframes clicklast { + 0% { + transform: translateY(-6px) rotate(0deg); + } + + 100% { + transform: translateY(0) rotate(-45deg); + } + } + + @keyframes outfirst { + 0% { + transform: translateY(0) rotate(-45deg); + } + + 100% { + transform: translateY(-6px) rotate(0deg); + } + } + + @keyframes outmid { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + } + + @keyframes outlast { + 0% { + transform: translateY(0) rotate(45deg); + } + + 100% { + transform: translateY(6px) rotate(0deg); + } + } + + span { + position: absolute; + /* fallback for browsers which still doesn't support for `calc()` */ + left: 15px; + top: 25px; + left: calc((100% - 20px) / 2); + top: calc((100% - 1px) / 2); + width: 20px; + height: 2px; + background-color: rgba(0, 0, 0, 0.5); + + &:nth-child(1) { + transform: translateY(6px) rotate(0deg); + } + + &:nth-child(3) { + transform: translateY(-6px) rotate(0deg); + } + } + + &.icon-click { + span:nth-child(1) { + animation-duration: 0.5s; + animation-fill-mode: both; + animation-name: clickfirst; + } + + span:nth-child(2) { + animation-duration: 0.2s; + animation-fill-mode: both; + animation-name: clickmid; + } + + span:nth-child(3) { + animation-duration: 0.5s; + animation-fill-mode: both; + animation-name: clicklast; + } + } + + &.icon-out { + span:nth-child(1) { + animation-duration: 0.5s; + animation-fill-mode: both; + animation-name: outfirst; + } + + span:nth-child(2) { + animation-duration: 0.2s; + animation-fill-mode: both; + animation-name: outmid; + } + + span:nth-child(3) { + animation-duration: 0.5s; + animation-fill-mode: both; + animation-name: outlast; + } + } +} + +.page__header { + height: 50px; + + .menu-icon { + height: 50px; + width: 50px; + font-size: 24px; + text-align: center; + float: left; + position: relative; + transition: background .5s; + cursor: pointer; + + @include menu-icon(); + + &:hover { + span { + background-color: black; + } + } + } + + .search-icon { + height: 50px; + width: 50px; + display: inline-block; + text-align: center; + line-height: 50px; + color: rgba(0, 0, 0, 0.5); + cursor: pointer; + font-size: 2rem; + + &:hover { + color: black + } + } +} diff --git a/docsite/site/themes/book/sass/_navigation.scss b/docsite/site/themes/book/sass/_navigation.scss new file mode 100644 index 0000000..660af60 --- /dev/null +++ b/docsite/site/themes/book/sass/_navigation.scss @@ -0,0 +1,50 @@ +.menu { + height: 100%; + position: absolute; + left: 0; + overflow-y: auto; + width: 300px; + color: #364149; + background: #fafafa; + border-right: 1px solid rgba(0, 0, 0, 0.07); + transition: 0.5s; + + ul { + list-style: none; + margin: 0; + padding: 0; + + a { + display: block; + color: #364149; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + text-decoration: none; + padding: 10px 15px; + + &:hover { + text-decoration: underline; + } + } + + li.active > a { + color: #008cff; + text-decoration: none; + } + + ul { + padding-left: 20px; + } + } +} + +.menu-hidden { + width: 0; +} + +@include max-screen(600px) { + .menu { + width: 0; + } +} diff --git a/docsite/site/themes/book/sass/_normalize.scss b/docsite/site/themes/book/sass/_normalize.scss new file mode 100644 index 0000000..fa4e73d --- /dev/null +++ b/docsite/site/themes/book/sass/_normalize.scss @@ -0,0 +1,447 @@ +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + +/** + * Add the correct display in IE 9-. + */ + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, +figure, +main { /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, +strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, +video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, +html [type="button"], /* 1 */ +[type="reset"], +[type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, /* 1 */ +menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} diff --git a/docsite/site/themes/book/sass/book.scss b/docsite/site/themes/book/sass/book.scss new file mode 100644 index 0000000..f490617 --- /dev/null +++ b/docsite/site/themes/book/sass/book.scss @@ -0,0 +1,49 @@ +@charset "utf-8"; + +@import "normalize"; + +* { + box-sizing: border-box; +} + +html { + font-size: 62.5%; +} + +body, html { + height: 100%; +} + +body { + text-rendering: optimizeLegibility; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + letter-spacing: 0.2px; +} + +.footnote { + text-decoration: underline; +} + +sup { + font-weight: bold; + font-size: 85%; +} + +@mixin min-screen($min-width: $body-width) { + @media screen and (min-width: $min-width) { + @content; + } +} + +@mixin max-screen($max-width: $body-width) { + @media screen and (max-width: $max-width) { + @content; + } +} + +$sidebar-width: 300px; + +@import "navigation"; +@import "content"; +@import "header"; diff --git a/docsite/site/themes/book/screenshot.png b/docsite/site/themes/book/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d4dfd078436cacf00ce4fa9938a32e506819021a GIT binary patch literal 145504 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 HB{Ts5(S#hF literal 0 HcmV?d00001 diff --git a/docsite/site/themes/book/static/book.js b/docsite/site/themes/book/static/book.js new file mode 100644 index 0000000..8e4fc10 --- /dev/null +++ b/docsite/site/themes/book/static/book.js @@ -0,0 +1,223 @@ +function initToggleMenu() { + var $menu = document.querySelector(".menu"); + var $menuIcon = document.querySelector(".menu-icon"); + var $page = document.querySelector(".page"); + $menuIcon.addEventListener("click", function() { + $menu.classList.toggle("menu-hidden"); + $page.classList.toggle("page-without-menu"); + }); +} + +function debounce(func, wait) { + var timeout; + + return function () { + var context = this; + var args = arguments; + clearTimeout(timeout); + + timeout = setTimeout(function () { + timeout = null; + func.apply(context, args); + }, wait); + }; +} + +// Taken from mdbook +// The strategy is as follows: +// First, assign a value to each word in the document: +// Words that correspond to search terms (stemmer aware): 40 +// Normal words: 2 +// First word in a sentence: 8 +// Then use a sliding window with a constant number of words and count the +// sum of the values of the words within the window. Then use the window that got the +// maximum sum. If there are multiple maximas, then get the last one. +// Enclose the terms in . +function makeTeaser(body, terms) { + var TERM_WEIGHT = 40; + var NORMAL_WORD_WEIGHT = 2; + var FIRST_WORD_WEIGHT = 8; + var TEASER_MAX_WORDS = 30; + + var stemmedTerms = terms.map(function (w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var termFound = false; + var index = 0; + var weighted = []; // contains elements of ["word", weight, index_in_document] + + // split in sentences, then words + var sentences = body.toLowerCase().split(". "); + + for (var i in sentences) { + var words = sentences[i].split(" "); + var value = FIRST_WORD_WEIGHT; + + for (var j in words) { + var word = words[j]; + + if (word.length > 0) { + for (var k in stemmedTerms) { + if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { + value = TERM_WEIGHT; + termFound = true; + } + } + weighted.push([word, value, index]); + value = NORMAL_WORD_WEIGHT; + } + + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + var windowWeights = []; + var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); + // We add a window with all the weights first + var curSum = 0; + for (var i = 0; i < windowSize; i++) { + curSum += weighted[i][1]; + } + windowWeights.push(curSum); + + for (var i = 0; i < weighted.length - windowSize; i++) { + curSum -= weighted[i][1]; + curSum += weighted[i + windowSize][1]; + windowWeights.push(curSum); + } + + // If we didn't find the term, just pick the first window + var maxSumIndex = 0; + if (termFound) { + var maxFound = 0; + // backwards + for (var i = windowWeights.length - 1; i >= 0; i--) { + if (windowWeights[i] > maxFound) { + maxFound = windowWeights[i]; + maxSumIndex = i; + } + } + } + + var teaser = []; + var startIndex = weighted[maxSumIndex][2]; + for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { + var word = weighted[i]; + if (startIndex < word[2]) { + // missing text from index to start of `word` + teaser.push(body.substring(startIndex, word[2])); + startIndex = word[2]; + } + + // add around search terms + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + startIndex = word[2] + word[0].length; + teaser.push(body.substring(word[2], startIndex)); + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + } + teaser.push("…"); + return teaser.join(""); +} + +function formatSearchResultItem(item, terms) { + var li = document.createElement("li"); + li.classList.add("search-results__item"); + li.innerHTML = `${item.doc.title}`; + li.innerHTML += `
${makeTeaser(item.doc.body, terms)}
`; + return li; +} + +// Go from the book view to the search view +function toggleSearchMode() { + var $bookContent = document.querySelector(".book-content"); + var $searchContainer = document.querySelector(".search-container"); + if ($searchContainer.classList.contains("search-container--is-visible")) { + $searchContainer.classList.remove("search-container--is-visible"); + document.body.classList.remove("search-mode"); + $bookContent.style.display = "block"; + } else { + $searchContainer.classList.add("search-container--is-visible"); + document.body.classList.add("search-mode"); + $bookContent.style.display = "none"; + document.getElementById("search").focus(); + } +} + +function initSearch() { + var $searchInput = document.getElementById("search"); + if (!$searchInput) { + return; + } + var $searchIcon = document.querySelector(".search-icon"); + $searchIcon.addEventListener("click", toggleSearchMode); + + var $searchResults = document.querySelector(".search-results"); + var $searchResultsHeader = document.querySelector(".search-results__header"); + var $searchResultsItems = document.querySelector(".search-results__items"); + var MAX_ITEMS = 10; + + var options = { + bool: "AND", + fields: { + title: {boost: 2}, + body: {boost: 1}, + } + }; + var currentTerm = ""; + var index = elasticlunr.Index.load(window.searchIndex); + + $searchInput.addEventListener("keyup", debounce(function() { + var term = $searchInput.value.trim(); + if (term === currentTerm || !index) { + return; + } + $searchResults.style.display = term === "" ? "none" : "block"; + $searchResultsItems.innerHTML = ""; + if (term === "") { + return; + } + + var results = index.search(term, options).filter(function (r) { + return r.doc.body !== ""; + }); + if (results.length === 0) { + $searchResultsHeader.innerText = `No search results for '${term}'.`; + return; + } + + currentTerm = term; + $searchResultsHeader.innerText = `${results.length} search results for '${term}':`; + for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) { + if (!results[i].doc.body) { + continue; + } + // var item = document.createElement("li"); + // item.innerHTML = formatSearchResultItem(results[i], term.split(" ")); + console.log(results[i]); + $searchResultsItems.appendChild(formatSearchResultItem(results[i], term.split(" "))); + } + }, 150)); +} + +if (document.readyState === "complete" || + (document.readyState !== "loading" && !document.documentElement.doScroll) +) { + initToggleMenu(); +} else { + document.addEventListener("DOMContentLoaded", function () { + initToggleMenu(); + initSearch(); + }); +} diff --git a/docsite/site/themes/book/templates/index.html b/docsite/site/themes/book/templates/index.html new file mode 100644 index 0000000..1600fce --- /dev/null +++ b/docsite/site/themes/book/templates/index.html @@ -0,0 +1,111 @@ + + + + + + + + + + {% block title %}{{ config.title }}{% endblock title %} + + {% block js %} + {% endblock js %} + + + {% block css %} + + {% endblock css %} + + {% block extra_head %} + {% endblock extra_head %} + + + + + +
+ + +
+ {% if config.build_search_index %} +
+ +
+
+
    +
    +
    + {% endif %} +
    + {% block content %} +

    {{ section.title }}

    + {{ section.content | safe }} + {% endblock content %} +
    +
    + + + + +
    + + {% block js_body %} + {% if config.build_search_index %} + + + {% endif %} + + {% endblock js_body %} + + + diff --git a/docsite/site/themes/book/templates/page.html b/docsite/site/themes/book/templates/page.html new file mode 100644 index 0000000..524b661 --- /dev/null +++ b/docsite/site/themes/book/templates/page.html @@ -0,0 +1,45 @@ +{% extends "index.html" %} + + +{% block content %} +

    {{ page.title }}

    + {{ page.content | safe }} +{% endblock content %} + +{% block prev_link %} + {% if page.lighter %} + + {% else %} + {# No page before, find the link for the section it's in if there is one #} + {% set index = get_section(path="_index.md") %} + {% for subsection in index.subsections %} + {% for p in subsection.pages %} + {% if p.permalink == page.permalink %} + + {% endif %} + {% endfor %} + {% endfor %} + {% endif %} +{% endblock prev_link %} + +{% block next_link %} + {% if page.heavier %} + + {% else %} + {# No page after, find the link for the following section #} + {% set index = get_section(path="_index.md") %} + {% set found_current = false %} + {% for subsection in index.subsections %} + {% if found_current %} + + {# no break #} + {% set_global found_current = false %} + {% endif %} + {% for p in subsection.pages %} + {% if p.permalink == page.permalink %} + {% set_global found_current = true %} + {% endif %} + {% endfor %} + {% endfor %} + {% endif %} +{% endblock next_link %} diff --git a/docsite/site/themes/book/templates/section.html b/docsite/site/themes/book/templates/section.html new file mode 100644 index 0000000..d8639c5 --- /dev/null +++ b/docsite/site/themes/book/templates/section.html @@ -0,0 +1,50 @@ +{% extends "index.html" %} + +{% block content %} +

    {{ section.title }}

    + {{ section.content | safe }} +{% endblock content %} + +{% block prev_link %} + {# need to find the last page of the previous section or the previous section directly + if there isn't any pages in it #} + {% set index = get_section(path="_index.md") %} + {% set found_current = false %} + {% for subsection in index.subsections | reverse %} + {% if subsection.permalink == section.permalink %} + {% set_global found_current = true %} + {% else %} + {% if found_current %} + {% if subsection.pages %} + {% set last_page = subsection.pages | last %} + + {% else %} + + {% endif %} + {# no break #} + {% set_global found_current = false %} + {% endif %} + {% endif %} + {% endfor %} +{% endblock prev_link %} + +{% block next_link %} + {% if section.pages %} + {% set next_page = section.pages | first %} + + {% else %} + {# No page in the section, find the link for the following section #} + {% set index = get_section(path="_index.md") %} + {% set found_current = false %} + {% for subsection in index.subsections %} + {% if found_current %} + + {# no break #} + {% set_global found_current = false %} + {% endif %} + {% if subsection.permalink == section.permalink %} + {% set_global found_current = true %} + {% endif %} + {% endfor %} + {% endif %} +{% endblock next_link %} diff --git a/docsite/site/themes/book/theme.toml b/docsite/site/themes/book/theme.toml new file mode 100644 index 0000000..c780b74 --- /dev/null +++ b/docsite/site/themes/book/theme.toml @@ -0,0 +1,13 @@ +name = "book" +description = "A book theme inspired from GitBook/mdBook" +license = "MIT" +homepage = "https://github.com/Keats/book" +min_version = "0.4.0" +demo = "https://gutenberg-book.netlify.com" + +[extra] +book_number_chapters = true + +[author] +name = "Vincent Prouillet" +homepage = "https://vincent.is" diff --git a/docsite/ucglib/globals.ucg b/docsite/ucglib/globals.ucg new file mode 100644 index 0000000..7d3a1a8 --- /dev/null +++ b/docsite/ucglib/globals.ucg @@ -0,0 +1,2 @@ +let location = "us-east1"; +let project = "ucg-configuration-project"; \ No newline at end of file diff --git a/docsite/ucglib/macros.ucg b/docsite/ucglib/macros.ucg new file mode 100644 index 0000000..29335a9 --- /dev/null +++ b/docsite/ucglib/macros.ucg @@ -0,0 +1,40 @@ +let bucketbase = macro(name, project, location) => { + name = name, + type = "storage.v1.bucket", + properties = { + bucket = name, + project = project, + location = location, + acl = [ + { + entity = "project-owners-ucg-configuration-project", + role = "OWNER", + }, + { + entity = "project-editors-ucg-configuration-project", + role = "WRITER", + }, + { + entity = "project-viewers-ucg-configuration-project", + role = "READER", + }, + ], + defaultObjectAcl = [ + { + entity = "allUsers", + role = "READER", + }, + ], + + }, +}; + +let bucketSelfLink = macro(bucket) => { + name = "@selfLink" % (bucket), + value = "https://console.cloud.google.com/storage/browser/@" % (bucket), +}; + +let bucketGsLink = macro(bucket) => { + name = "@gsLink" % (bucket), + value = "gs://@" % (bucket), +}; \ No newline at end of file