Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
01ac18b3f4
|
|||
|
84f9846a0c
|
|||
|
f09acd4fc7
|
|||
|
4a43d69a1a
|
|||
|
e64c265280
|
|||
|
26c2c3caa4
|
|||
|
b32bc8a8a1
|
|||
|
25b9feeb91
|
|||
|
91f9d91edd
|
|||
|
49f589031f
|
|||
|
d9a005f44a
|
|||
|
83406ceb7d
|
|||
|
10eae1319b
|
@@ -1,39 +0,0 @@
|
||||
---
|
||||
name: Build and Deploy Documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: gitea.psi.ch/hpce/gitea-pages
|
||||
env:
|
||||
JEKYLL_ENV: production
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Build Jekyll website
|
||||
run: |
|
||||
bundle exec jekyll --version
|
||||
bundle exec jekyll build -d public
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config --global user.name "Gitea Actions"
|
||||
git config --global user.email "actions@gitea.local"
|
||||
|
||||
- name: Push to gitea-pages branch
|
||||
run: |
|
||||
git checkout --orphan gitea-pages
|
||||
git reset --hard
|
||||
ls -la
|
||||
cp -r ./public/* .
|
||||
git add .
|
||||
git commit -m "Deploy site"
|
||||
git push -f https://${{secrets.GITHUB_TOKEN}}@gitea.psi.ch/${{ github.repository }}.git gitea-pages
|
||||
13
.gitignore
vendored
@@ -1,10 +1,3 @@
|
||||
_site/
|
||||
.sass-cache/
|
||||
.jekyll-metadata
|
||||
_pdf
|
||||
.DS_Store
|
||||
.idea
|
||||
vendor/
|
||||
.bundle/
|
||||
.ruby-gemset
|
||||
.ruby-version
|
||||
# mkdocs
|
||||
.cache/
|
||||
site/
|
||||
|
||||
6
404.md
@@ -1,6 +0,0 @@
|
||||
---
|
||||
title: "Page Not Found"
|
||||
search: exclude
|
||||
---
|
||||
|
||||
Sorry, but the page you were trying to view does not exist. Try searching for it or looking at the URL to see if it looks correct.
|
||||
26
Dockerfile
@@ -1,24 +1,4 @@
|
||||
FROM alpine:3.13
|
||||
FROM docker.io/squidfunk/mkdocs-material:9.7
|
||||
|
||||
WORKDIR /tmp
|
||||
COPY Gemfile /tmp/
|
||||
COPY Gemfile.lock /tmp/
|
||||
|
||||
RUN apk list -I && apk --no-cache add \
|
||||
libatomic readline readline-dev libxml2 libxml2-dev \
|
||||
ncurses-terminfo-base ncurses-terminfo \
|
||||
libxslt libxslt-dev zlib-dev zlib \
|
||||
ruby ruby-dev yaml yaml-dev \
|
||||
libffi-dev build-base git nodejs \
|
||||
&& gem env \
|
||||
&& gem install etc --no-document \
|
||||
&& gem install bundler -v 2.4.22 --no-document \
|
||||
&& pwd \
|
||||
&& ls -l \
|
||||
&& bundle install
|
||||
|
||||
VOLUME /src
|
||||
EXPOSE 4001
|
||||
|
||||
WORKDIR /src
|
||||
CMD ["jekyll", "serve", "--livereload", "-H", "0.0.0.0"]
|
||||
# add some plugins
|
||||
RUN pip install mkdocs-glightbox=='0.5.*'
|
||||
|
||||
23
Gemfile
@@ -1,23 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
# to publish on github page
|
||||
# gem 'github-pages', group: :jekyll_plugins
|
||||
gem 'github-pages', "~> 215"
|
||||
|
||||
# to publish without github page
|
||||
# gem "jekyll-redirect-from", group: :jekyll_plugins
|
||||
gem "jekyll-redirect-from", "~> 0.16.0"
|
||||
gem "json", "~> 2.2"
|
||||
gem "webrick", "~> 1.7.0"
|
||||
gem "etc", "~> 1.2.0"
|
||||
gem "bigdecimal", "~> 1.4"
|
||||
gem 'eventmachine', "~> 1.2.7"
|
||||
gem 'faraday', "~> 1.4.3"
|
||||
gem 'addressable', "~> 2.7.0"
|
||||
gem 'faraday-net_http_persistent', "~> 1.1.0"
|
||||
gem 'ruby2_keywords', "~> 0.0.4"
|
||||
gem 'rubyzip', "~> 2.3.0"
|
||||
#
|
||||
gem 'ffi', "~> 1.15.3"
|
||||
gem 'http_parser.rb', "~> 0.6.0" # requires mkdir in /usr/bin/mkdir
|
||||
gem "jekyll", "~> 3.9.0"
|
||||
292
Gemfile.lock
@@ -1,292 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (6.0.6.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
tzinfo (~> 1.1)
|
||||
zeitwerk (~> 2.2, >= 2.2.2)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
bigdecimal (1.4.4)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.11.1)
|
||||
colorator (1.1.0)
|
||||
commonmarker (0.17.13)
|
||||
ruby-enum (~> 0.5)
|
||||
concurrent-ruby (1.2.3)
|
||||
dnsruby (1.70.0)
|
||||
simpleidn (~> 0.2.1)
|
||||
em-websocket (0.5.3)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0)
|
||||
etc (1.2.0)
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
eventmachine (1.2.7)
|
||||
execjs (2.9.1)
|
||||
faraday (1.4.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http_persistent (1.1.0)
|
||||
ffi (1.15.5)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.1)
|
||||
github-pages (215)
|
||||
github-pages-health-check (= 1.17.2)
|
||||
jekyll (= 3.9.0)
|
||||
jekyll-avatar (= 0.7.0)
|
||||
jekyll-coffeescript (= 1.1.1)
|
||||
jekyll-commonmark-ghpages (= 0.1.6)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.15.1)
|
||||
jekyll-gist (= 1.5.0)
|
||||
jekyll-github-metadata (= 2.13.0)
|
||||
jekyll-mentions (= 1.6.0)
|
||||
jekyll-optional-front-matter (= 0.3.2)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.3.0)
|
||||
jekyll-redirect-from (= 0.16.0)
|
||||
jekyll-relative-links (= 0.6.1)
|
||||
jekyll-remote-theme (= 0.4.3)
|
||||
jekyll-sass-converter (= 1.5.2)
|
||||
jekyll-seo-tag (= 2.7.1)
|
||||
jekyll-sitemap (= 1.4.0)
|
||||
jekyll-swiss (= 1.0.0)
|
||||
jekyll-theme-architect (= 0.1.1)
|
||||
jekyll-theme-cayman (= 0.1.1)
|
||||
jekyll-theme-dinky (= 0.1.1)
|
||||
jekyll-theme-hacker (= 0.1.2)
|
||||
jekyll-theme-leap-day (= 0.1.1)
|
||||
jekyll-theme-merlot (= 0.1.1)
|
||||
jekyll-theme-midnight (= 0.1.1)
|
||||
jekyll-theme-minimal (= 0.1.1)
|
||||
jekyll-theme-modernist (= 0.1.1)
|
||||
jekyll-theme-primer (= 0.5.4)
|
||||
jekyll-theme-slate (= 0.1.1)
|
||||
jekyll-theme-tactile (= 0.1.1)
|
||||
jekyll-theme-time-machine (= 0.1.1)
|
||||
jekyll-titles-from-headings (= 0.5.3)
|
||||
jemoji (= 0.12.0)
|
||||
kramdown (= 2.3.1)
|
||||
kramdown-parser-gfm (= 1.1.0)
|
||||
liquid (= 4.0.3)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.5.1)
|
||||
nokogiri (>= 1.10.4, < 2.0)
|
||||
rouge (= 3.26.0)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.17.2)
|
||||
addressable (~> 2.3)
|
||||
dnsruby (~> 1.60)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
typhoeus (~> 1.3)
|
||||
html-pipeline (2.14.3)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.9.0)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (>= 1.17, < 3)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.7.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-coffeescript (1.1.1)
|
||||
coffee-script (~> 2.2)
|
||||
coffee-script-source (~> 1.11.1)
|
||||
jekyll-commonmark (1.3.1)
|
||||
commonmarker (~> 0.14)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-commonmark-ghpages (0.1.6)
|
||||
commonmarker (~> 0.17.6)
|
||||
jekyll-commonmark (~> 1.2)
|
||||
rouge (>= 2.0, < 4.0)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.15.1)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-gist (1.5.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.13.0)
|
||||
jekyll (>= 3.4, < 5.0)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-mentions (1.6.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-optional-front-matter (0.3.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.3.0)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
jekyll-redirect-from (0.16.0)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-relative-links (0.6.1)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-remote-theme (0.4.3)
|
||||
addressable (~> 2.0)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
||||
rubyzip (>= 1.3.0, < 3.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.7.1)
|
||||
jekyll (>= 3.8, < 5.0)
|
||||
jekyll-sitemap (1.4.0)
|
||||
jekyll (>= 3.7, < 5.0)
|
||||
jekyll-swiss (1.0.0)
|
||||
jekyll-theme-architect (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-cayman (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-dinky (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-hacker (0.1.2)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-leap-day (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-merlot (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-midnight (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-minimal (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-modernist (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-primer (0.5.4)
|
||||
jekyll (> 3.5, < 5.0)
|
||||
jekyll-github-metadata (~> 2.9)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-slate (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-tactile (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-theme-time-machine (0.1.1)
|
||||
jekyll (~> 3.5)
|
||||
jekyll-seo-tag (~> 2.0)
|
||||
jekyll-titles-from-headings (0.5.3)
|
||||
jekyll (>= 3.3, < 5.0)
|
||||
jekyll-watch (2.2.1)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.12.0)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0, < 5.0)
|
||||
json (2.7.1)
|
||||
kramdown (2.3.1)
|
||||
rexml
|
||||
kramdown-parser-gfm (1.1.0)
|
||||
kramdown (~> 2.0)
|
||||
liquid (4.0.3)
|
||||
listen (3.8.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.8.5)
|
||||
minima (2.5.1)
|
||||
jekyll (>= 3.5, < 5.0)
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-seo-tag (~> 2.1)
|
||||
minitest (5.21.2)
|
||||
multipart-post (2.3.0)
|
||||
nokogiri (1.15.5)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
octokit (4.25.1)
|
||||
faraday (>= 1, < 3)
|
||||
sawyer (~> 0.9)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (4.0.7)
|
||||
racc (1.7.3)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rexml (3.2.6)
|
||||
rouge (3.26.0)
|
||||
ruby-enum (0.9.0)
|
||||
i18n
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
safe_yaml (1.0.5)
|
||||
sass (3.7.4)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sawyer (0.9.2)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (>= 0.17.3, < 3)
|
||||
simpleidn (0.2.1)
|
||||
unf (~> 0.1.4)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
typhoeus (1.4.1)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (1.2.11)
|
||||
thread_safe (~> 0.1)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.9.1)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
zeitwerk (2.6.12)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
addressable (~> 2.7.0)
|
||||
bigdecimal (~> 1.4)
|
||||
etc (~> 1.2.0)
|
||||
eventmachine (~> 1.2.7)
|
||||
faraday (~> 1.4.3)
|
||||
faraday-net_http_persistent (~> 1.1.0)
|
||||
ffi (~> 1.15.3)
|
||||
github-pages (~> 215)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
jekyll (~> 3.9.0)
|
||||
jekyll-redirect-from (~> 0.16.0)
|
||||
json (~> 2.2)
|
||||
ruby2_keywords (~> 0.0.4)
|
||||
rubyzip (~> 2.3.0)
|
||||
webrick (~> 1.7.0)
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.26
|
||||
9
LICENSE
Normal file
@@ -0,0 +1,9 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 PSI
|
||||
|
||||
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.
|
||||
80
README.md
@@ -1,74 +1,50 @@
|
||||
# HPCE Documentation
|
||||
|
||||
This site contains internal documentation of HCPE services at Paul Scherrer Institute, particularly the *Merlin 6* and *Merlin 7* clusters.
|
||||
Live pages are available at <https://hpce.pages.psi.ch>.
|
||||
This site contains internal documentation of HCPE services at Paul Scherrer
|
||||
Institute, particularly the *Merlin 6* and *Merlin 7* clusters. Live pages are
|
||||
available at <https://hpce.pages.psi.ch>.
|
||||
|
||||
## Installation
|
||||
## Development
|
||||
|
||||
### Docker
|
||||
### Using Docker Compose (Recommended)
|
||||
|
||||
The easiest and most reproducable way to test changes is using docker.
|
||||
From the top directory, run the following:
|
||||
```bash
|
||||
# Start the development server
|
||||
docker compose up
|
||||
|
||||
```console
|
||||
$ docker compose build
|
||||
$ docker compose up
|
||||
# Or run in background
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
This will start a webserver on `http://0.0.0.0:4001/`. Changes to most pages
|
||||
will be automatically reflected in the website (with the exception of changes
|
||||
to `config.yml`, which requires restarting the webserver).
|
||||
The documentation will be available at `http://localhost:8000`.
|
||||
|
||||
### Running locally
|
||||
> [!NOTE]
|
||||
> We use several MkDocs plugins, which need to be installed by hand. We do this by
|
||||
> using a Dockerfile that pulls in the `squidfunk/mkdocs-material` image and runs
|
||||
> some `pip install` commands. This means that on the first `compose up` call, a
|
||||
> new docker image will be built locally on your machine.
|
||||
|
||||
Building locally requires ruby 2.5 and bundler. To install:
|
||||
### Deployment
|
||||
|
||||
```console
|
||||
$ gem install bundler jekyll
|
||||
$ bundle
|
||||
```
|
||||
The site is automatically deployed to `https://hpce.pages.psi.ch/` via Gitea Pages.
|
||||
|
||||
To run a local webserver:
|
||||
## Contributing
|
||||
|
||||
```console
|
||||
$ bundle exec jekyll serve
|
||||
```
|
||||
Please follow established conventions when adding new documentation:
|
||||
|
||||
## Theme
|
||||
1. Use clear, descriptive filenames
|
||||
2. Follow the existing directory structure
|
||||
3. Include appropriate metadata in frontmatter
|
||||
4. Test locally before committing
|
||||
|
||||
The theme is derived from the
|
||||
[Jekyll Doc Theme 6.0](https://github.com/tomjoht/documentation-theme-jekyll)
|
||||
by Tom Johnson.
|
||||
## Repository Structure
|
||||
|
||||
### Organization
|
||||
TBD
|
||||
|
||||
- Documentation is organized within the `pages` directory
|
||||
- Add the following frontmatter to each (Merlin6) page:
|
||||
## Contact
|
||||
|
||||
```md
|
||||
---
|
||||
title: Introduction
|
||||
sidebar: merlin6_sidebar
|
||||
permalink: /merlin6/introduction.html
|
||||
keywords: key1, key2
|
||||
---
|
||||
```
|
||||
|
||||
- Sidebars are specified in data files, e.g. `_data/sidebars/merlin6_sidebar.yml`.
|
||||
- The top menu is controlled by `_data/topnav.yml`
|
||||
- News can be addin in `_posts`. Filenames must include the date.
|
||||
- Lots of features still need to be configured (e.g. pdf output, tags, etc)
|
||||
- The search bar uses finds substring of the title, tags, keywords, and summary frontmatter.
|
||||
|
||||
## Deployment
|
||||
|
||||
We use the Gitea workflow (see `.gitea/workflow/deploy-pages.yml` for details). The
|
||||
pages are automatically re-generated on each push to `master` branch. The resulting website
|
||||
is stored under the `gitea-pages` branch, and is automatically exposed.
|
||||
For questions or issues with this documentation, contact the HPCE team.
|
||||
|
||||
## License
|
||||
|
||||
Theme content is licensed under the MIT license.
|
||||
The Navgoco jQuery component used in the sidebar is licensed under the BSD
|
||||
license.
|
||||
See licenses subdirectory for license terms.
|
||||
|
||||
128
_config.yml
@@ -1,128 +0,0 @@
|
||||
output: web
|
||||
# this property is useful for conditional filtering of content that is separate from the PDF.
|
||||
|
||||
topnav_title: HPCE@PSI
|
||||
# this appears on the top navigation bar next to the home button
|
||||
|
||||
site_title: HPC and Emerging Technologies Documentation
|
||||
# this appears in the html browser tab for the site title (seen mostly by search engines, not users)
|
||||
|
||||
company_name: Paul Scherrer Institute, CSD/HPC and Emerging Technologies Group
|
||||
# this appears in the footer
|
||||
|
||||
github_editme_path:
|
||||
# github_editme_path: tomjoht/documentation-theme-jekyll/blob/gh-pages/
|
||||
# if you're using Github, provide the basepath to the branch you've created for reviews, following the sample here. if not, leave this value blank.
|
||||
|
||||
# gitlab_editme_path: tomjoht/documentation-theme-jekyll/blob/gh-pages/
|
||||
# if you're using GitLab, provide the basepath to the branch you've created for reviews, following the sample here. if not, leave this value blank.
|
||||
|
||||
google_analytics:
|
||||
#google_analytics: UA-66296557-1
|
||||
# if you have google-analytics ID, put it in. if not, edit this value to blank.
|
||||
|
||||
host: 127.0.0.1
|
||||
# the preview server used. Leave as is.
|
||||
|
||||
port: 4001
|
||||
# the port where the preview is rendered. You can leave this as is unless you have other Jekyll builds using this same port that might cause conflicts. in that case, use another port such as 4006.
|
||||
|
||||
exclude:
|
||||
- README.md
|
||||
- .idea/
|
||||
- .gitignore
|
||||
- vendor
|
||||
- .vscode
|
||||
# these are the files and directories that jekyll will exclude from the build
|
||||
|
||||
feedback_subject_line: HPCE Documentation feedback
|
||||
|
||||
feedback_email: merlin-admins@lists.psi.ch
|
||||
# feedback_email: tomjoht@gmail.com
|
||||
# used as a contact email for the Feedback link in the top navigation bar
|
||||
|
||||
# feedback_disable: true
|
||||
# if you uncomment the previous line, the Feedback link gets removed
|
||||
|
||||
# feedback_text: "Need help?"
|
||||
# if you uncomment the previous line, it changes the Feedback text
|
||||
|
||||
# feedback_link: "http://helpy.io/"
|
||||
# if you uncomment the previous line, it changes where the feedback link points to
|
||||
|
||||
plugins:
|
||||
- jekyll-redirect-from
|
||||
|
||||
whitelist:
|
||||
- jekyll-redirect-from
|
||||
|
||||
highlighter: rouge
|
||||
# library used for syntax highlighting
|
||||
|
||||
markdown: kramdown
|
||||
kramdown:
|
||||
input: GFM
|
||||
auto_ids: true
|
||||
hard_wrap: false
|
||||
syntax_highlighter: rouge
|
||||
|
||||
# filter used to process markdown. note that kramdown differs from github-flavored markdown in some subtle ways
|
||||
|
||||
collections:
|
||||
tooltips:
|
||||
output: false
|
||||
# collections are declared here. this renders the content in _tooltips and processes it, but doesn't output it as actual files in the output unless you change output to true
|
||||
|
||||
defaults:
|
||||
-
|
||||
scope:
|
||||
path: ""
|
||||
type: "pages"
|
||||
values:
|
||||
layout: "page"
|
||||
comments: true
|
||||
# if you don't want to use Commento.io and just hide comments, change true to false wherever you see the comments property
|
||||
search: true
|
||||
sidebar: home_sidebar
|
||||
topnav: topnav
|
||||
-
|
||||
scope:
|
||||
path: ""
|
||||
type: "tooltips"
|
||||
values:
|
||||
layout: "page"
|
||||
comments: true
|
||||
# if you don't want to use Commento.io and just hide comments, change true to false wherever you see the comments property
|
||||
search: true
|
||||
tooltip: true
|
||||
|
||||
-
|
||||
scope:
|
||||
path: ""
|
||||
type: "posts"
|
||||
values:
|
||||
layout: "post"
|
||||
comments: true
|
||||
# if you don't want to use Commento.io and just hide comments, change true to false wherever you see the comments property
|
||||
search: true
|
||||
sidebar: home_sidebar
|
||||
topnav: topnav
|
||||
|
||||
# these are defaults used for the frontmatter for these file types
|
||||
|
||||
sidebars:
|
||||
- home_sidebar
|
||||
- mydoc_sidebar
|
||||
- product1_sidebar
|
||||
- product2_sidebar
|
||||
- other
|
||||
|
||||
description: "Merlin is the HPC cluster at Paul Scherrer Institute in Switzerland."
|
||||
# the description is used in the feed.xml file
|
||||
|
||||
# needed for sitemap.xml file only
|
||||
url: "https://hpce.pages.psi.ch"
|
||||
baseurl: /
|
||||
|
||||
|
||||
github: [metadata]
|
||||
@@ -1,15 +0,0 @@
|
||||
tip: '<div class="alert alert-success" role="alert"><i class="fa fa-check-square-o"></i> <b>Tip: </b>'
|
||||
note: '<div class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>Note: </b>'
|
||||
important: '<div class="alert alert-warning" role="alert"><i class="fa fa-warning"></i> <b>Important: </b>'
|
||||
warning: '<div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-circle"></i> <b>Warning: </b>'
|
||||
end: '</div>'
|
||||
|
||||
callout_danger: '<div class="bs-callout bs-callout-danger">'
|
||||
callout_default: '<div class="bs-callout bs-callout-default">'
|
||||
callout_primary: '<div class="bs-callout bs-callout-primary">'
|
||||
callout_success: '<div class="bs-callout bs-callout-success">'
|
||||
callout_info: '<div class="bs-callout bs-callout-info">'
|
||||
callout_warning: '<div class="bs-callout bs-callout-warning">'
|
||||
|
||||
hr_faded: '<hr class="faded"/>'
|
||||
hr_shaded: '<hr class="shaded"/>'
|
||||
@@ -1,9 +0,0 @@
|
||||
elephant: "This is a sample definition."
|
||||
|
||||
baseball: "Baseball is considered America's pasttime sport, though that may be more of a historical term than a current one. There's a lot more excitement about football than baseball. A baseball game is somewhat of a snooze to watch, for the most part."
|
||||
|
||||
basketball: "Basketball is a sport involving two teams of five players each competing to put a ball through a small circular rim 10 feet above the ground. Basketball requires players to be in top physical condition, since they spend most of the game running back and forth along a 94-foot-long floor."
|
||||
|
||||
football: "No doubt the most fun sport to watch, football also manages to accrue the most injuries with the players. From concussions to blown knees, football players have short sport lives."
|
||||
|
||||
soccer: "If there's one sport that dominates the world landscape, it's soccer. However, US soccer fans are few and far between. Apart from the popularity of soccer during the World Cup, most people don't even know the name of the professional soccer organization in their area."
|
||||
@@ -1,11 +0,0 @@
|
||||
jekyll_platform: "Jekyll is a static site generator that builds sites using most modern web technologies."
|
||||
|
||||
fractious: "Like a little mischevious child, full of annoying and constant trouble."
|
||||
|
||||
gratuitous: "Something that is unwarranted and uncouth, like the social equivalent of a flagrant foul."
|
||||
|
||||
haughty: "Proud and flaunting it. Holding your head high up like a snooty, too-good-for-everything rich person."
|
||||
|
||||
impertinent: "Someone acting rude and insensitive to others."
|
||||
|
||||
intrepid: "Brave and courageous especially in a difficult, dangerous situation."
|
||||
@@ -1,107 +0,0 @@
|
||||
entries:
|
||||
- title: Sidebar
|
||||
folders:
|
||||
- title: Food
|
||||
|
||||
folderitems:
|
||||
- title: Bananas
|
||||
url: bananas.html
|
||||
|
||||
subfolders:
|
||||
- title: Apples
|
||||
|
||||
subfolderitems:
|
||||
- title: Fuji apples
|
||||
url: fuji_apples.html
|
||||
|
||||
|
||||
- title: Gala apples
|
||||
url: gala_apples.html
|
||||
|
||||
name:
|
||||
husband: Tom
|
||||
wife: Shannon
|
||||
|
||||
bikes:
|
||||
- title: mountain bikes
|
||||
- title: road bikes
|
||||
- title: hybrid bikes
|
||||
|
||||
|
||||
salesteams:
|
||||
- title: Regions
|
||||
subfolderitems:
|
||||
- location: US
|
||||
- location: Spain
|
||||
- location: France
|
||||
|
||||
toc:
|
||||
- title: Group 1
|
||||
subfolderitems:
|
||||
- page: Thing 1
|
||||
- page: Thing 2
|
||||
- page: Thing 3
|
||||
- title: Group 2
|
||||
subfolderitems:
|
||||
- page: Piece 1
|
||||
- page: Piece 2
|
||||
- page: Piece 3
|
||||
- title: Group 3
|
||||
subfolderitems:
|
||||
- page: Widget 1
|
||||
- page: Widget 2
|
||||
- page: Widget 3
|
||||
|
||||
something: &hello Greetings earthling!
|
||||
myref: *hello
|
||||
|
||||
about:
|
||||
- zero
|
||||
- one
|
||||
- two
|
||||
- three
|
||||
|
||||
numbercolors:
|
||||
- zero:
|
||||
properties: red
|
||||
- one:
|
||||
properties: yellow
|
||||
- two:
|
||||
properties: green
|
||||
- three:
|
||||
properties: blue
|
||||
|
||||
mypages:
|
||||
- section1: Section 1
|
||||
audience: developers
|
||||
product: acme
|
||||
url: facebook.com
|
||||
- section2: Section 2
|
||||
audience: writers
|
||||
product: acme
|
||||
url: google.com
|
||||
- section3: Section 3
|
||||
audience: developers
|
||||
product: acme
|
||||
url: amazon.com
|
||||
- section4: Section 4
|
||||
audience: writers
|
||||
product: gizmo
|
||||
url: apple.com
|
||||
- section5: Section 5
|
||||
audience: writers
|
||||
product: acme
|
||||
url: microsoft.com
|
||||
|
||||
feedback: >
|
||||
This is my feedback to you.
|
||||
Even if I include linebreaks here,
|
||||
all of the linebreaks will be removed when the value is inserted.
|
||||
|
||||
block: |
|
||||
This pipe does something a little different.
|
||||
It preserves the breaks.
|
||||
This is really helpful for code samples,
|
||||
since you can format the code samples with
|
||||
the appropriate
|
||||
white spacing.
|
||||
@@ -1,15 +0,0 @@
|
||||
|
||||
# Follow the pattern here for the URLs -- no slash at the beginning, and include the .html. The link here is rendered exactly as is in the Markdown references.
|
||||
|
||||
entries:
|
||||
- product: PSI HPC@CSCS
|
||||
folders:
|
||||
- title: Overview
|
||||
# URLs for top-level folders are optional. If omitted it is a bit easier to toggle the accordion.
|
||||
folderitems:
|
||||
- title: Overview
|
||||
url: /CSCS/index.html
|
||||
- title: Operations
|
||||
folderitems:
|
||||
- title: Transfer Data
|
||||
url: /CSCS/transfer-data.html
|
||||
@@ -1,17 +0,0 @@
|
||||
# Follow the pattern here for the URLs -- no slash at the beginning, and include the .html. The link here is rendered exactly as is in the Markdown references.
|
||||
|
||||
entries:
|
||||
- product: MEG
|
||||
version:
|
||||
folders:
|
||||
- title: Quick Start Guide
|
||||
folderitems:
|
||||
- title: Introduction
|
||||
url: /meg/introduction.html
|
||||
- title: Support
|
||||
folderitems:
|
||||
- title: MeG Migration Guide
|
||||
url: /meg/migrating.html
|
||||
- title: Contact
|
||||
url: /meg/contact.html
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
|
||||
|
||||
# placed here for translation purposes
|
||||
search_placeholder_text: search...
|
||||
search_no_results_text: No results found.
|
||||
@@ -1,15 +0,0 @@
|
||||
# Note:
|
||||
# If you are using the createtag script, don't leave an blank line at the end of this file.
|
||||
# In other words, the last line must be the last tag in the allowed-tags list.
|
||||
allowed-tags:
|
||||
- getting_started
|
||||
- content_types
|
||||
- navigation
|
||||
- formatting
|
||||
- publishing
|
||||
- single_sourcing
|
||||
- special_layouts
|
||||
- collaboration
|
||||
- news
|
||||
- troubleshooting
|
||||
- mobile
|
||||
@@ -1,3 +0,0 @@
|
||||
hpc: "High Performance Computing"
|
||||
hpce: "High Performance Computing and Emerging Technologies; our group at PSI"
|
||||
psi: "Paul Scherrer Institute"
|
||||
@@ -1,36 +0,0 @@
|
||||
## Topnav single links
|
||||
## if you want to list an external url, use external_url instead of url. the theme will apply a different link base.
|
||||
topnav:
|
||||
- title: Topnav
|
||||
items:
|
||||
# - title: GitHub
|
||||
# external_url: https://github.com/tomjoht/documentation-theme-jekyll
|
||||
- title: News
|
||||
url: /news.html
|
||||
|
||||
#Topnav dropdowns
|
||||
topnav_dropdowns:
|
||||
- title: Topnav dropdowns
|
||||
folders:
|
||||
- title: Quick Start
|
||||
folderitems:
|
||||
- title: Introduction
|
||||
url: /merlin6/introduction.html
|
||||
- title: Requesting Merlin Access
|
||||
url: /merlin6/request-account.html
|
||||
- title: Requesting Merlin Projects
|
||||
url: /merlin6/request-project.html
|
||||
- title: Accessing the Interactive Nodes
|
||||
url: /merlin6/interactive.html
|
||||
- title: Accessing the Slurm Clusters
|
||||
url: /merlin6/slurm-access.html
|
||||
- title: Clusters
|
||||
folderitems:
|
||||
- title: Merlin 5
|
||||
url: /merlin5/slurm-configuration.html
|
||||
- title: Merlin 6
|
||||
url: /merlin6/slurm-configuration.html
|
||||
- title: Merlin 6 GPU
|
||||
url: /gmerlin6/slurm-configuration.html
|
||||
- title: Merlin 7
|
||||
url: /merlin7/slurm-configuration.html
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
type: archive
|
||||
---
|
||||
|
||||
<div class="post-header">
|
||||
<h1 class="post-title-main">{{ page.title }}</h1>
|
||||
</div>
|
||||
<div class="post-content">
|
||||
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{% comment %}
|
||||
A "callout" (section with colored title and left margin)
|
||||
|
||||
Parameters:
|
||||
- type: A bootstrap color for the callout (info, warning, danger, default, success,
|
||||
and primary
|
||||
- content: markdown content
|
||||
{% endcomment -%}
|
||||
<div markdown="1" class="bs-callout bs-callout-{{include.type}}">{{include.content}}
|
||||
</div>
|
||||
@@ -1,19 +0,0 @@
|
||||
<div class="seriesContext">
|
||||
<div class="btn-group">
|
||||
<button type="button" data-toggle="dropdown" class="btn btn-primary dropdown-toggle">Getting Started <span class="caret"></span></button>
|
||||
<ol class="dropdown-menu">
|
||||
{% assign pages = site.pages | sort:"weight" %}
|
||||
{% for p in pages %}
|
||||
{% if p.series == "Getting Started" %}
|
||||
{% if p.url == page.url %}
|
||||
<li class="active"> → {{p.title}}</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{{p.url | remove: "/"}}">{{p.title}}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,10 +0,0 @@
|
||||
<p>{% assign series_pages = site.tags.series_acme %}
|
||||
{% for p in pages %}
|
||||
{% if p.series == "Getting Started" %}
|
||||
{% assign nextTopic = page.weight | plus: "1" %}
|
||||
{% if p.weight == nextTopic %}
|
||||
<a href="{{p.url | remove: "/"}}"><button type="button" class="btn btn-primary">Next: {{p.title}}</button></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
@@ -1,19 +0,0 @@
|
||||
<div class="seriesContext">
|
||||
<div class="btn-group">
|
||||
<button type="button" data-toggle="dropdown" class="btn btn-primary dropdown-toggle">Series Demo <span class="caret"></span></button>
|
||||
<ol class="dropdown-menu">
|
||||
{% assign pages = site.pages | sort:"weight" %}
|
||||
{% for p in pages %}
|
||||
{% if p.series == "ACME series" %}
|
||||
{% if p.url == page.url %}
|
||||
<li class="active"> → {{p.weight}}. {{p.title}}</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{{p.url | remove: "/"}}">{{p.weight}}. {{p.title}}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,30 +0,0 @@
|
||||
<div class="seriesContext">
|
||||
<a>
|
||||
{% assign pages = site.pages | sort:"weight" %}
|
||||
{% for pg in pages %}
|
||||
{% if pg.series == "ACME series" %}
|
||||
{% if pg.weight > page.weight %}
|
||||
<a href="{{pg.url | remove: '/'}}"><button type="button" class="btn btn-primary">Next: {{pg.title}}</button></a>
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</a>
|
||||
|
||||
<div class="btn-group">
|
||||
<button type="button" data-toggle="dropdown" class="btn btn-primary dropdown-toggle">Jump to: <span class="caret"></span></button>
|
||||
<ol class="dropdown-menu">
|
||||
{% for pg in pages %}
|
||||
{% if pg.series == "ACME series" %}
|
||||
{% if pg.url == page.url %}
|
||||
<li class="active"> → {{pg.weight}}. {{pg.title}}</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a href="{{pg.url | remove: '/'}}">{{pg.title}}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,14 +0,0 @@
|
||||
|
||||
<div id="userMap">
|
||||
<div class="content"><a href="p2_sample1.html"><div class="box box1">Connect to ADB</div></a></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="content"><a href="p2_sample2.html"><div class="box box2">Download and Build the Starter Kit</div></a></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="content"><a href="p2_sample3.html"><div class="box box3">Take a Tour</div></a></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="content"><a href="p2_sample4.html"><div class="box box4">Load Your Widgets</div></a></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="content"><a href="p2_sample5.html"><div class="box box5">Query for Something</div></a></div>
|
||||
<div class="clearfix"></div>
|
||||
|
||||
</div>
|
||||
@@ -1,91 +0,0 @@
|
||||
<div id="userMap">
|
||||
|
||||
<!-- Button trigger modal -->
|
||||
<button type="button" class="btn btn-default btn-lg modalButton1" data-toggle="modal" data-target="#myModal1">Get Started</button>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="myModal1" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">Get Started</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>This is just dummy text ... Your first steps should be to get started. You will need to do the following:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="p2_sample6.html">Sample 6</a></li>
|
||||
<li><a href="p2_sample7.html">Sample 7</a></li>
|
||||
<li><a href="p2_sample8.html">Sample 8</a></li>
|
||||
</ul>
|
||||
<p>If you run into any of these setup issues, you must solve them before you can continue on.</p>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span class="complexArrow">→</span>
|
||||
|
||||
<!-- Button trigger modal -->
|
||||
<button type="button" class="btn btn-default btn-lg modalButton2" data-toggle="modal" data-target="#myModal2">Build your widgets</button>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">Build your widgets</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>In this step, you will build the widgets for your system. The widgets form the various components that blah blah blah this is dummy text power the nuclear capabilities of your energy transformer into deep space using wormhole technology and warp drive speeds.</p>
|
||||
|
||||
<p>In order to configure your widgets, you will need to follow these topics:</p>
|
||||
<ul>
|
||||
<li><a href="p2_sample9.html">Sample 9</a></li>
|
||||
<li><a href="p2_sample10.html">Sample 10</a></li>
|
||||
<li><a href="p2_sample11.html">Sample 11</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span class="complexArrow">→</span>
|
||||
|
||||
<!-- Button trigger modal -->
|
||||
<button type="button" class="btn btn-default btn-lg modalButton3" data-toggle="modal" data-target="#myModal3">Publish your app</button>
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="myModal3" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title" id="myModalLabel">Publish your app</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>After you've configured all the necessary components to build your space transformer, you need to publish your app. Of course this content is also just dummy text. Pay no particular attention to the content but rather the format and placement of the map.</p>
|
||||
<p>To publish your app, see the following:
|
||||
<ul>
|
||||
<li><a href="p2_sample12.html">Sample 12</a></li>
|
||||
<li><a href="p2_sample13.html">Sample 13</a></li>
|
||||
<li><a href="p2_sample14.html">Sample 14</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="clearfix"></div>
|
||||
|
||||
</div>
|
||||
@@ -1,17 +0,0 @@
|
||||
{% if site.disqus_shortname %}
|
||||
|
||||
<div id="disqus_thread"></div>
|
||||
<script type="text/javascript">
|
||||
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
||||
var disqus_shortname = '{{site.disqus_shortname}}'; // required: replace example with your forum shortname
|
||||
|
||||
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||
(function() {
|
||||
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
||||
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||
|
||||
{% endif %}
|
||||
@@ -1,13 +0,0 @@
|
||||
<li>
|
||||
{% if site.feedback_text %}
|
||||
{% assign feedback_text = site.feedback_text %}
|
||||
{% else %}
|
||||
{% assign feedback_text = "Feedback" %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.feedback_link %}
|
||||
<a class="email" title="Submit feedback" href="{{site.feedback_link}}">{{feedback_text}}</a>
|
||||
{% else %}
|
||||
<a class="email" title="Submit feedback" href="#" onclick="javascript:window.location='mailto:{{site.feedback_email}}?subject={{site.feedback_subject_line}} feedback&body=I have some feedback about the {{page.title}} page: ' + window.location.href;"><i class="fa fa-envelope-o"></i> {{feedback_text}}</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
@@ -1,9 +0,0 @@
|
||||
<footer>
|
||||
<div class="row">
|
||||
<div class="col-lg-12 footer">
|
||||
©{{ site.time | date: "%Y" }} {{site.company_name}}. All rights reserved. <br />
|
||||
{% if page.last_updated %}<span>Page last updated:</span> {{page.last_updated}}<br/>{% endif %} Site last generated: {{ site.time | date: "%b %-d, %Y" }} <br />
|
||||
<p><img style="margin-top: 1em;" src="{{ "/images/psi-logo.png"}}" alt="PSI logo"/></p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -1,6 +0,0 @@
|
||||
<!-- the google_analytics_id gets auto inserted from the config file -->
|
||||
|
||||
{% if site.google_analytics %}
|
||||
|
||||
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','{{site.google_analytics}}','auto');ga('require','displayfeatures');ga('send','pageview');</script>
|
||||
{% endif %}
|
||||
@@ -1,43 +0,0 @@
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="{% if page.summary %}{{ page.summary | strip_html | strip_newlines | truncate: 160 }}{% endif %}">
|
||||
<meta name="keywords" content="{{page.tags}}{% if page.tags %}, {% endif %} {{page.keywords}}">
|
||||
<title>{{ page.title }} | {{ site.site_title }}</title>
|
||||
<link rel="stylesheet" href="{{ "/css/syntax.css"}}">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="{{ "/css/font-awesome.min.css" }}">
|
||||
<!--<link rel="stylesheet" type="text/css" href="{{ "/css/bootstrap.min.css"}}">-->
|
||||
<link rel="stylesheet" href="{{ "/css/modern-business.css"}}">
|
||||
<!-- Latest compiled and minified CSS -->
|
||||
<link rel="stylesheet" href="{{ "/css/bootstrap.min.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/customstyles.css"}}">
|
||||
<link rel="stylesheet" href="{{ "/css/boxshadowproperties.css"}}">
|
||||
<!-- most color styles are extracted out to here -->
|
||||
<link rel="stylesheet" href="{{ "/css/theme-blue.css"}}">
|
||||
|
||||
<script src="{{ "/js/jquery.min.js" }}"></script>
|
||||
|
||||
<script src="{{ "/js/jquery.cookie.min.js" }}"></script>
|
||||
<script src="{{ "/js/jquery.navgoco.min.js"}}"></script>
|
||||
|
||||
|
||||
<!-- Latest compiled and minified JavaScript -->
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
<!-- Anchor.js -->
|
||||
<script src="{{ "/js/anchor.min.js" }}"></script>
|
||||
<script src="{{ "/js/toc.js"}}"></script>
|
||||
<script src="{{ "/js/customscripts.js"}}"></script>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="{{ "/js/html5shiv.js" }}"></script>
|
||||
<script src="{{ "/js/respond.min.js" }}"></script>
|
||||
<![endif]-->
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.url }}">
|
||||
@@ -1,28 +0,0 @@
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="{% if page.summary %}{{ page.summary | strip_html | strip_newlines | truncate: 160 }}{% endif %}">
|
||||
<meta name="keywords" content="{{page.tags}}{% if page.tags %}, {% endif %} {{page.keywords}}">
|
||||
<title>{% if page.homepage == true %} {{site.homepage_title}} {% elsif page.title %}{{ page.title }}{% endif %} | {{ site.site_title }}</title>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="{{ "/css/syntax.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/font-awesome.min.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/bootstrap.min.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/modern-business.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/customstyles.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/theme-blue.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/syntax.css" }}">
|
||||
<link rel="stylesheet" href="{{ "/css/printstyles.css" }}">
|
||||
|
||||
<script>
|
||||
Prince.addScriptFunc("datestamp", function() {
|
||||
return "PDF last generated: {{ site.time | date: '%B %d, %Y' }}";
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
Prince.addScriptFunc("guideName", function() {
|
||||
return "{{site.print_title}} User Guide";
|
||||
});
|
||||
</script>
|
||||
@@ -1 +0,0 @@
|
||||
<figure>{% if {{include.url}} %}<a class="no_icon" target="_blank" rel="noopener" href="{{include.url}}">{% endif %}<img class="docimage" src="{{ "/images/"}}{{include.file}}" alt="{{include.alt}}" {% if {{include.max-width}} %}style="max-width: {{include.max-width}}px"{% endif %} />{% if {{include.url}} %}</a>{% endif %}{% if {{include.caption}} %}<figcaption>{{include.caption}}</figcaption>{% endif %}</figure>
|
||||
@@ -1 +0,0 @@
|
||||
<div markdown="1" class="alert alert-warning" role="alert"><i class="fa fa-warning"></i> <b>Important:</b> {{include.content}}</div>
|
||||
@@ -1,130 +0,0 @@
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' });
|
||||
});
|
||||
|
||||
</script>
|
||||
<!-- shuffle -->
|
||||
<script>
|
||||
var shuffleme = (function( $ ) {
|
||||
'use strict';
|
||||
|
||||
var $grid = $('#grid'),
|
||||
$filterOptions = $('.filter-options'),
|
||||
$sizer = $grid.find('.shuffle_sizer'),
|
||||
|
||||
init = function() {
|
||||
|
||||
// None of these need to be executed synchronously
|
||||
setTimeout(function() {
|
||||
listen();
|
||||
setupFilters();
|
||||
}, 100);
|
||||
|
||||
// instantiate the plugin
|
||||
$grid.shuffle({
|
||||
itemSelector: '[class*="col-"]',
|
||||
sizer: $sizer
|
||||
});
|
||||
},
|
||||
|
||||
// Set up button clicks
|
||||
setupFilters = function() {
|
||||
var $btns = $filterOptions.children();
|
||||
$btns.on('click', function() {
|
||||
var $this = $(this),
|
||||
isActive = $this.hasClass( 'active' ),
|
||||
group = isActive ? 'all' : $this.data('group');
|
||||
|
||||
// Hide current label, show current label in title
|
||||
if ( !isActive ) {
|
||||
$('.filter-options .active').removeClass('active');
|
||||
}
|
||||
|
||||
$this.toggleClass('active');
|
||||
|
||||
// Filter elements
|
||||
$grid.shuffle( 'shuffle', group );
|
||||
});
|
||||
|
||||
$btns = null;
|
||||
},
|
||||
|
||||
// Re layout shuffle when images load. This is only needed
|
||||
// below 768 pixels because the .picture-item height is auto and therefore
|
||||
// the height of the picture-item is dependent on the image
|
||||
// I recommend using imagesloaded to determine when an image is loaded
|
||||
// but that doesn't support IE7
|
||||
listen = function() {
|
||||
var debouncedLayout = $.throttle( 300, function() {
|
||||
$grid.shuffle('update');
|
||||
});
|
||||
|
||||
// Get all images inside shuffle
|
||||
$grid.find('img').each(function() {
|
||||
var proxyImage;
|
||||
|
||||
// Image already loaded
|
||||
if ( this.complete && this.naturalWidth !== undefined ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If none of the checks above matched, simulate loading on detached element.
|
||||
proxyImage = new Image();
|
||||
$( proxyImage ).on('load', function() {
|
||||
$(this).off('load');
|
||||
debouncedLayout();
|
||||
});
|
||||
|
||||
proxyImage.src = this.src;
|
||||
});
|
||||
|
||||
// Because this method doesn't seem to be perfect.
|
||||
setTimeout(function() {
|
||||
debouncedLayout();
|
||||
}, 500);
|
||||
};
|
||||
|
||||
return {
|
||||
init: init
|
||||
};
|
||||
}( jQuery ));
|
||||
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
shuffleme.init();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<!-- new attempt-->
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
/* initialize shuffle plugin */
|
||||
var $grid = $('#grid');
|
||||
|
||||
$grid.shuffle({
|
||||
itemSelector: '.item' // the selector for the items in the grid
|
||||
});
|
||||
|
||||
});</script>
|
||||
|
||||
<script>
|
||||
$('#filter a').click(function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
// set active class
|
||||
$('#filter a').removeClass('active');
|
||||
$(this).addClass('active');
|
||||
|
||||
// get group name from clicked item
|
||||
var groupName = $(this).attr('data-group');
|
||||
|
||||
// reshuffle grid
|
||||
$grid.shuffle('shuffle', groupName );
|
||||
});</script>
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<img class="inline" src="{{ "/images/"}}{{include.file}}" alt="{{include.alt}}" />
|
||||
@@ -1,44 +0,0 @@
|
||||
{% comment %}Get links from each sidebar, as listed in the _config.yml file under sidebars{% endcomment %}
|
||||
|
||||
{% for sidebar in site.sidebars %}
|
||||
{% for entry in site.data.sidebars[sidebar].entries %}
|
||||
{% for folder in entry.folders %}
|
||||
{% for folderitem in folder.folderitems %}
|
||||
{% if folderitem.url contains "html#" %}
|
||||
[{{folderitem.url | remove: "/" }}]: {{folderitem.url | remove: "/"}}
|
||||
{% else %}
|
||||
[{{folderitem.url | remove: "/" | remove: ".html"}}]: {{folderitem.url | remove: "/"}}
|
||||
{% endif %}
|
||||
{% for subfolders in folderitem.subfolders %}
|
||||
{% for subfolderitem in subfolders.subfolderitems %}
|
||||
[{{subfolderitem.url | remove: "/" | remove: ".html"}}]: {{subfolderitem.url | remove: "/"}}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% comment %} Get links from topnav {% endcomment %}
|
||||
|
||||
{% for entry in site.data.topnav.topnav %}
|
||||
{% for item in entry.items %}
|
||||
{% if item.external_url == null %}
|
||||
[{{item.url | remove: "/" | remove: ".html"}}]: {{item.url | remove: "/"}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% comment %}Get links from topnav dropdowns {% endcomment %}
|
||||
|
||||
{% for entry in site.data.topnav.topnav_dropdowns %}
|
||||
{% for folder in entry.folders %}
|
||||
{% for folderitem in folder.folderitems %}
|
||||
{% if folderitem.external_url == null %}
|
||||
[{{folderitem.url | remove: "/" | remove: ".html"}}]: {{folderitem.url | remove: "/"}}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
{% comment %}
|
||||
A blue alert box.
|
||||
|
||||
Parameters:
|
||||
- title: Initial word (default "Note")
|
||||
- content: markdown content
|
||||
{% endcomment -%}
|
||||
<div markdown="1" class="alert alert-info" role="alert"><i class="fa fa-info-circle"></i> <b>{{ include.title | default:"Note"}}:</b> {{include.content}}</div>
|
||||
@@ -1,67 +0,0 @@
|
||||
{% assign sidebar = site.data.sidebars[page.sidebar].entries %}
|
||||
<ul id="mysidebar" class="nav">
|
||||
<li class="sidebarTitle">{{sidebar[0].product}} {{sidebar[0].version}}</li>
|
||||
{% for entry in sidebar %}
|
||||
{% for folder in entry.folders %}
|
||||
{% if folder.output == nil or folder.output contains "web"%}
|
||||
{% if folder.url != nil and page.url contains folder.url %}
|
||||
<li class = "active" >
|
||||
{% else %}
|
||||
<li>
|
||||
{% endif %}
|
||||
<a title="{{folder.title}}" href="{{folder.url | default:"#" }}">{{folder.title}}</a>
|
||||
<ul>
|
||||
{% for folderitem in folder.folderitems %}
|
||||
{% if folderitem.output == nil or folderitem.output contains "web" %}
|
||||
{% if folderitem.external_url %}
|
||||
<li><a title="{{folderitem.title}}" href="{{folderitem.external_url}}" target="_blank" rel="noopener">{{folderitem.title}}</a></li>
|
||||
{% elsif page.url contains folderitem.url %}
|
||||
<li class="active"><a title="{{folderitem.title}}" href="{{folderitem.url}}">{{folderitem.title}}</a></li>
|
||||
{% elsif folderitem.type == "empty" %}
|
||||
<li><a title="{{folderitem.title}}" href="{{folderitem.url}}">{{folderitem.title}}</a></li>
|
||||
|
||||
{% else %}
|
||||
<li><a title="{{folderitem.title}}" href="{{folderitem.url}}">{{folderitem.title}}</a></li>
|
||||
{% endif %}
|
||||
{% for subfolders in folderitem.subfolders %}
|
||||
{% if subfolders.output == nil or subfolders.output contains "web" %}
|
||||
<li class="subfolders">
|
||||
<a title="{{subfolders.title}}" href="{{subfolders.url | default:"#" }}">{{ subfolders.title }}</a>
|
||||
<ul>
|
||||
{% for subfolderitem in subfolders.subfolderitems %}
|
||||
{% if subfolderitem.output == nil or subfolderitem.output contains "web" %}
|
||||
{% if subfolderitem.external_url %}
|
||||
<li><a title="{{subfolderitem.title}}" href="{{subfolderitem.external_url}}" target="_blank" rel="noopener">{{subfolderitem.title}}</a></li>
|
||||
{% elsif page.url == subfolderitem.url %}
|
||||
<li class="active"><a title="{{subfolderitem.title}}" href="{{subfolderitem.url}}">{{subfolderitem.title}}</a></li>
|
||||
{% else %}
|
||||
<li><a title="{{subfolderitem.title}}" href="{{subfolderitem.url }}">{{subfolderitem.title}}</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<!-- if you aren't using the accordion, uncomment this block:
|
||||
<p class="external">
|
||||
<a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a>
|
||||
</p>
|
||||
-->
|
||||
</ul>
|
||||
|
||||
<!--
|
||||
This highlights the active parent class in the navgoco sidebar. This is
|
||||
critical so that the parent expands when you're viewing a page. This must
|
||||
appear below the sidebar code above. Otherwise, if placed inside
|
||||
customscripts.js, the script runs before the sidebar code runs and the
|
||||
class never gets inserted.
|
||||
-->
|
||||
<script>$("li.active").parents('li').addClass("active");</script>
|
||||
@@ -1,32 +0,0 @@
|
||||
<p>The following pages and posts are tagged with <button type="button" style="cursor: default" class="btn btn-default navbar-btn">{{page.tagName}}</button></p>
|
||||
<table><thead><tr><th>Title</th><th>Type</th><th>Excerpt</th></tr></thead>
|
||||
<tbody>
|
||||
{% assign thisTag = page.tagName %}
|
||||
{% for page in site.pages %}
|
||||
{% for tag in page.tags %}
|
||||
{% if tag == thisTag %}
|
||||
|
||||
<tr><td><a href="{{ page.url | remove: "/" }}">{{page.title}}</a></td>
|
||||
<td><span class="label label-default">Page</span></td>
|
||||
<td>{% if page.summary %} {{ page.summary | strip_html | strip_newlines | truncate: 160 }} {% else %} {{ page.content | truncatewords: 50 | strip_html }} {% endif %}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
{% assign thisTag = page.tagName %}
|
||||
{% for post in site.posts %}
|
||||
{% for tag in post.tags %}
|
||||
{% if tag == thisTag %}
|
||||
|
||||
<tr><td><a href="{{ post.url | remove: "/" }}">{{post.title}}</a></td>
|
||||
<td><span class="label label-primary">Post</span></td>
|
||||
<td>{% if post.summary %} {{ post.summary | strip_html | strip_newlines | truncate: 160 }} {% else %} {{ post.content | truncatewords: 50 | strip_html }} {% endif %}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<div markdown="1" class="alert alert-success" role="alert"><i class="fa fa-check-square-o"></i> <b>Tip:</b> {{include.content}}</div>
|
||||
@@ -1,21 +0,0 @@
|
||||
|
||||
<!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
|
||||
<script>
|
||||
$( document ).ready(function() {
|
||||
// Handler for .ready() called.
|
||||
|
||||
$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' });
|
||||
|
||||
/* this offset helps account for the space taken up by the floating toolbar. */
|
||||
$('#toc').on('click', 'a', function() {
|
||||
var target = $(this.getAttribute('href'))
|
||||
, scroll_target = target.offset().top
|
||||
|
||||
$(window).scrollTop(scroll_target - 10);
|
||||
return false
|
||||
})
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="toc"></div>
|
||||
@@ -1,81 +0,0 @@
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-inverse navbar-static-top">
|
||||
<div class="container topnavlinks">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="fa fa-home fa-lg navbar-brand" href="{{ "/index.html" }}"> <span class="projectTitle"> {{site.topnav_title}}</span></a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<!-- toggle sidebar button -->
|
||||
<li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li>
|
||||
<!-- entries without drop-downs appear here -->
|
||||
|
||||
{% assign topnav = site.data[page.topnav] %}
|
||||
{% assign topnav_dropdowns = site.data[page.topnav].topnav_dropdowns %}
|
||||
|
||||
{% for entry in topnav.topnav %}
|
||||
{% for item in entry.items %}
|
||||
{% if item.external_url %}
|
||||
<li><a href="{{item.external_url}}" target="_blank" rel="noopener">{{item.title}}</a></li>
|
||||
{% elsif page.url contains item.url %}
|
||||
<li class="active"><a href="{{item.url }}">{{item.title}}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{item.url}}">{{item.title}}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<!-- entries with drop-downs appear here -->
|
||||
<!-- conditional logic to control which topnav appears for the audience defined in the configuration file.-->
|
||||
{% for entry in topnav_dropdowns %}
|
||||
{% for folder in entry.folders %}
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ folder.title }}<b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
{% for folderitem in folder.folderitems %}
|
||||
{% if folderitem.external_url %}
|
||||
<li><a href="{{folderitem.external_url}}" target="_blank" rel="noopener">{{folderitem.title}}</a></li>
|
||||
{% elsif page.url contains folderitem.url %}
|
||||
<li class="dropdownActive"><a href="{{folderitem.url}}">{{folderitem.title}}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{folderitem.url }}">{{folderitem.title}}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% if site.feedback_disable == null or site.feedback_disable == false %}
|
||||
{% include feedback.html %}
|
||||
{% endif %}
|
||||
<!--comment out this block if you want to hide search-->
|
||||
<li>
|
||||
<!--start search-->
|
||||
<div id="search-demo-container">
|
||||
<input type="text" id="search-input" placeholder="{{site.data.strings.search_placeholder_text}}">
|
||||
<ul id="results-container"></ul>
|
||||
</div>
|
||||
<script src="{{ "/js/jekyll-search.js"}}" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
SimpleJekyllSearch.init({
|
||||
searchInput: document.getElementById('search-input'),
|
||||
resultsContainer: document.getElementById('results-container'),
|
||||
dataSource: '{{ "/search.json"}}',
|
||||
searchResultTemplate: '<li><a href="{url}" title="{{page.title | escape }}">{title}</a></li>',
|
||||
noResultsText: '{{site.data.strings.search_no_results_text}}',
|
||||
limit: 10,
|
||||
fuzzy: true,
|
||||
})
|
||||
</script>
|
||||
<!--end search-->
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</nav>
|
||||
@@ -1,8 +0,0 @@
|
||||
{% comment %}
|
||||
A red alert box.
|
||||
|
||||
Parameters:
|
||||
- title: Initial word (default "warning")
|
||||
- content: markdown content
|
||||
{% endcomment -%}
|
||||
<div markdown="1" class="alert alert-danger" role="alert"><i class="fa fa-exclamation-circle"></i> <b>{{include.title | default:"Warning"}}:</b> {{include.content}}</div>
|
||||
@@ -1,106 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
{% include head.html %}
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
// Initialize navgoco with default options
|
||||
$("#mysidebar").navgoco({
|
||||
caretHtml: '',
|
||||
accordion: true,
|
||||
openClass: 'active', // open
|
||||
save: false, // leave false or nav highlighting doesn't work right
|
||||
cookie: {
|
||||
name: 'navgoco',
|
||||
expires: false,
|
||||
path: '/'
|
||||
},
|
||||
slide: {
|
||||
duration: 400,
|
||||
easing: 'swing'
|
||||
}
|
||||
});
|
||||
|
||||
$("#collapseAll").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("#mysidebar").navgoco('toggle', false);
|
||||
});
|
||||
|
||||
$("#expandAll").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("#mysidebar").navgoco('toggle', true);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#tg-sb-link").click(function() {
|
||||
$("#tg-sb-sidebar").toggle();
|
||||
$("#tg-sb-content").toggleClass('col-md-9');
|
||||
$("#tg-sb-content").toggleClass('col-md-12');
|
||||
$("#tg-sb-icon").toggleClass('fa-toggle-on');
|
||||
$("#tg-sb-icon").toggleClass('fa-toggle-off');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% if page.datatable == true %}
|
||||
<!-- Include the standard DataTables bits -->
|
||||
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.css">
|
||||
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.js"></script>
|
||||
<!-- First, this walks through the tables that occur between ...-begin
|
||||
and ...-end and add the "datatable" class to them.
|
||||
Then it invokes DataTable's standard initializer
|
||||
Credit here: http://www.beardedhacker.com/blog/2015/08/28/add-class-attribute-to-markdown-table/
|
||||
-->
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('div.datatable-begin').nextUntil('div.datatable-end', 'table').addClass('display');
|
||||
$('table.display').DataTable( {
|
||||
paging: true,
|
||||
stateSave: true,
|
||||
searching: true
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
{% include topnav.html %}
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<div id="main">
|
||||
<!-- Content Row -->
|
||||
<div class="row">
|
||||
{% assign content_col_size = "col-md-12" %}
|
||||
{% unless page.hide_sidebar %}
|
||||
<!-- Sidebar Column -->
|
||||
<div class="col-md-3" id="tg-sb-sidebar">
|
||||
{% include sidebar.html %}
|
||||
</div>
|
||||
{% assign content_col_size = "col-md-9" %}
|
||||
{% endunless %}
|
||||
|
||||
<!-- Content Column -->
|
||||
<div class="{{content_col_size}}" id="tg-sb-content">
|
||||
{{content}}
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
</div>
|
||||
<!-- /#main -->
|
||||
</div>
|
||||
|
||||
</body>
|
||||
{% if site.google_analytics %}
|
||||
{% include google_analytics.html %}
|
||||
{% endif %}
|
||||
</html>
|
||||
@@ -1,25 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html>
|
||||
<head>
|
||||
{% include head_print.html %}
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body class="{% if page.type == "title"%}title{% elsif page.type == "frontmatter" %}frontmatter{% elsif page.type == "first_page" %}first_page{% endif %} print">
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="container">
|
||||
<!-- Content Column -->
|
||||
<div class="col-md-9">
|
||||
|
||||
{{content}}
|
||||
</div>
|
||||
|
||||
</div> <!-- /.container -->
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
---
|
||||
---
|
||||
{{content}}
|
||||
@@ -1,68 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<div class="post-header">
|
||||
<h1 class="post-title-main">{{ page.title }}</h1>
|
||||
</div>
|
||||
|
||||
{% if page.simple_map == true %}
|
||||
|
||||
<script>
|
||||
$(document).ready ( function(){
|
||||
$('.box{{page.box_number}}').addClass('active');
|
||||
});
|
||||
</script>
|
||||
|
||||
{% include custom/{{page.map_name}}.html %}
|
||||
|
||||
{% elsif page.complex_map == true %}
|
||||
|
||||
<script>
|
||||
$(document).ready ( function(){
|
||||
$('.modalButton{{page.box_number}}').addClass('active');
|
||||
});
|
||||
</script>
|
||||
|
||||
{% include custom/{{page.map_name}}.html %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
<div class="post-content">
|
||||
|
||||
{% if page.summary %}
|
||||
<div class="summary">{{page.summary}}</div>
|
||||
{% endif %}
|
||||
|
||||
{% unless page.toc == false %}
|
||||
{% include toc.html %}
|
||||
{% endunless %}
|
||||
|
||||
|
||||
{% if site.github_editme_path %}
|
||||
|
||||
<a target="_blank" rel="noopener" href="https://github.com/{{site.github_editme_path}}{{page.path}}" class="btn btn-default githubEditButton" role="button"><i class="fa fa-github fa-lg"></i> Edit me</a>
|
||||
|
||||
{% endif %}
|
||||
|
||||
{{content}}
|
||||
|
||||
<div class="tags">
|
||||
{% if page.tags != null %}
|
||||
<b>Tags: </b>
|
||||
{% assign projectTags = site.data.tags.allowed-tags %}
|
||||
{% for tag in page.tags %}
|
||||
{% if projectTags contains tag %}
|
||||
<a href="{{ "tag_" | append: tag | append: ".html" }}" class="btn btn-default navbar-btn cursorNorm" role="button">{{page.tagName}}{{tag}}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% include disqus.html %}
|
||||
|
||||
</div>
|
||||
|
||||
{{site.data.alerts.hr_shaded}}
|
||||
|
||||
{% include footer.html %}
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
layout: default_print
|
||||
comments: true
|
||||
---
|
||||
<div class="post-header">
|
||||
<h1 class="post-title-main" id="{{page.permalink | replace: '/', '' }}">{{ page.title }}</h1>
|
||||
</div>
|
||||
|
||||
<div class="post-content">
|
||||
|
||||
{% if page.summary %}
|
||||
<div class="summary">{{page.summary}}</div>
|
||||
{% endif %}
|
||||
{{ content }}
|
||||
</div>
|
||||
@@ -1,39 +0,0 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
<article class="post" itemscope itemtype="https://schema.org/BlogPosting">
|
||||
|
||||
<header class="post-header">
|
||||
<h1 class="post-title" itemprop="name headline">{{ page.title }}</h1>
|
||||
<p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time> {% if page.author %}<span itemprop="author" itemscope itemtype="https://schema.org/Person"><span itemprop="name">/ {{ page.author }}</span></span>{% endif %}{% if page.tags != null %}/
|
||||
{% assign projectTags = site.data.tags.allowed-tags %}
|
||||
{% for tag in page.tags %}
|
||||
{% if projectTags contains tag %}
|
||||
<a href="{{ "tag_" | append: tag | append: ".html"}}">{{tag}}</a>{% unless forloop.last %}, {% endunless%}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
</header>
|
||||
|
||||
<div class="post-content" itemprop="articleBody">
|
||||
|
||||
{% if page.summary %}
|
||||
<div class="summary">{{page.summary}}</div>
|
||||
{% endif %}
|
||||
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
{% include disqus.html %}
|
||||
|
||||
{{site.data.alerts.hr_shaded}}
|
||||
|
||||
{% include footer.html %}
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
title: "Merlin 6 documentation available"
|
||||
published: true
|
||||
# permalink: samplepost.html
|
||||
summary: "More pages will be coming soon."
|
||||
tags: [news, getting_started]
|
||||
---
|
||||
|
||||
Merlin 6 docs are now available at https://hpce.pages.psi.ch/merlin6!
|
||||
|
||||
More complete documentation will be coming shortly.
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
doc_id: baseball
|
||||
product: mydoc
|
||||
---
|
||||
|
||||
{{site.data.definitions.baseball}}
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
doc_id: basketball
|
||||
product: mydoc
|
||||
---
|
||||
|
||||
{{site.data.definitions.basketball}}
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
doc_id: football
|
||||
product: mydoc
|
||||
---
|
||||
|
||||
{{site.data.definitions.football}}
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
doc_id: soccer
|
||||
product: mydoc
|
||||
---
|
||||
|
||||
{{site.data.definitions.soccer}}
|
||||
|
Before Width: | Height: | Size: 34 KiB |
14
compose.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
services:
|
||||
mkdocs:
|
||||
build: .
|
||||
# explicitly force live-reloading per https://github.com/squidfunk/mkdocs-material/issues/8478
|
||||
command: serve --dev-addr=0.0.0.0:8000 --livereload
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
volumes:
|
||||
- ./:/docs
|
||||
ports:
|
||||
- 8000:8000
|
||||
healthcheck:
|
||||
test: wget --spider --quiet http://127.0.0.1:8000
|
||||
54
createtag
@@ -1,54 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Using a 'cat' here document, create a file for jekyll
|
||||
# website containing what's required for tag pages.
|
||||
|
||||
# Pass in tag name(s)
|
||||
# ./createtag linux bsd
|
||||
|
||||
CMDLINEPARAM=1 # Takes at least one param.
|
||||
TAGDIR="pages/tags"
|
||||
|
||||
if [ $# -ge $CMDLINEPARAM ]
|
||||
then
|
||||
tags=$@
|
||||
else
|
||||
echo "Atleast ${CMDLINEPARAM} tag name is required."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -d "${TAGDIR}" ]; then
|
||||
|
||||
echo "Creating tag(s) for ${tags}"
|
||||
|
||||
for tag in ${tags}; do
|
||||
echo "Title for $tag:"
|
||||
read title
|
||||
# Cannot indent here string.
|
||||
cat <<EOF >"${TAGDIR}/tag_${tag}.md"
|
||||
---
|
||||
title: "${title}"
|
||||
tagName: ${tag}
|
||||
search: exclude
|
||||
permalink: tag_${tag}.html
|
||||
sidebar: mydoc_sidebar
|
||||
hide_sidebar: true
|
||||
folder: tags
|
||||
---
|
||||
|
||||
{% include taglogic.html %}
|
||||
|
||||
{% include links.html %}
|
||||
EOF
|
||||
|
||||
echo " - ${tag}" >> _data/tags.yml
|
||||
|
||||
done
|
||||
|
||||
else
|
||||
echo "Directory ${TAGDIR} doesn't exist or you are not in the top-level directory."
|
||||
echo "Please run again from the root directory of your project."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit
|
||||
6
css/bootstrap.min.css
vendored
@@ -1,24 +0,0 @@
|
||||
/* box-shadow fonts return errors with prince, so extracting here to put in web output only */
|
||||
|
||||
#search-demo-container ul#results-container {
|
||||
box-shadow: 2px 3px 2px #dedede;
|
||||
}
|
||||
|
||||
|
||||
hr.shaded {
|
||||
box-shadow: inset 0 6px 6px -6px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.videoThumbs img {
|
||||
box-shadow: 2px 2px 1px #f0f0f0;
|
||||
}
|
||||
|
||||
.box {
|
||||
box-shadow: 2px 2px 4px #dedede;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
.navbar-collapse {
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
|
||||
}
|
||||
}
|
||||
1217
css/customstyles.css
4
css/font-awesome.min.css
vendored
|
Before Width: | Height: | Size: 434 KiB |
@@ -1,89 +0,0 @@
|
||||
/*!
|
||||
* Start Bootstrap - Modern Business HTML Template (http://startbootstrap.com)
|
||||
* Code licensed under the Apache License v2.0.
|
||||
* For details, see http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*/
|
||||
|
||||
/* Global Styles */
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.img-portfolio {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.img-hover:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
/* Home Page Carousel */
|
||||
|
||||
header.carousel {
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
header.carousel .item,
|
||||
header.carousel .item.active,
|
||||
header.carousel .carousel-inner {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
header.carousel .fill {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
/* 404 Page Styles */
|
||||
|
||||
.error-404 {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
/* Pricing Page Styles */
|
||||
|
||||
.price {
|
||||
display: block;
|
||||
font-size: 50px;
|
||||
line-height: 50px;
|
||||
}
|
||||
|
||||
.price sup {
|
||||
top: -20px;
|
||||
left: 2px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.period {
|
||||
display: block;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Footer Styles */
|
||||
|
||||
footer {
|
||||
margin: 50px 0;
|
||||
}
|
||||
|
||||
/* Responsive Styles */
|
||||
|
||||
@media(max-width:991px) {
|
||||
.client-img,
|
||||
.img-related {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width:767px) {
|
||||
.img-portfolio {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
header.carousel .carousel {
|
||||
height: 70%;
|
||||
}
|
||||
}
|
||||
@@ -1,159 +0,0 @@
|
||||
|
||||
/*body.print .container {max-width: 650px;}*/
|
||||
|
||||
body {
|
||||
font-size:14px;
|
||||
}
|
||||
.nav ul li a {border-top:0px; background-color:transparent; color: #808080; }
|
||||
#navig a[href] {color: #595959 !important;}
|
||||
table .table {max-width:650px;}
|
||||
|
||||
#navig li.sectionHead {font-weight: bold; font-size: 18px; color: #595959 !important; }
|
||||
#navig li {font-weight: normal; }
|
||||
|
||||
#navig a[href]::after { content: leader(".") target-counter(attr(href), page); }
|
||||
|
||||
a[href]::after {
|
||||
content: " (page " target-counter(attr(href), page) ")"
|
||||
}
|
||||
|
||||
a[href^="http:"]::after, a[href^="https:"]::after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
a[href] {
|
||||
color: blue !important;
|
||||
}
|
||||
a[href*="mailto"]::after, a[data-toggle="tooltip"]::after, a[href].noCrossRef::after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
||||
@page {
|
||||
margin: 60pt 90pt 60pt 90pt;
|
||||
font-family: sans-serif;
|
||||
font-style:none;
|
||||
color: gray;
|
||||
|
||||
}
|
||||
|
||||
.printTitle {
|
||||
line-height:30pt;
|
||||
font-size:27pt;
|
||||
font-weight: bold;
|
||||
letter-spacing: -.5px;
|
||||
margin-bottom:25px;
|
||||
}
|
||||
|
||||
.printSubtitle {
|
||||
font-size: 19pt;
|
||||
color: #cccccc !important;
|
||||
font-family: "Grotesque MT Light";
|
||||
line-height: 22pt;
|
||||
letter-spacing: -.5px;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
.printTitleArea hr {
|
||||
color: #999999 !important;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.printTitleImage {
|
||||
max-width:300px;
|
||||
margin-bottom:200px;
|
||||
}
|
||||
|
||||
|
||||
.printTitleImage {
|
||||
max-width: 250px;
|
||||
}
|
||||
|
||||
#navig {
|
||||
/*page-break-before: always;*/
|
||||
}
|
||||
|
||||
.copyrightBoilerplate {
|
||||
page-break-before:always;
|
||||
font-size:14px;
|
||||
}
|
||||
|
||||
.lastGeneratedDate {
|
||||
font-style: italic;
|
||||
font-size:14px;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.alert a {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
|
||||
body.title { page: title }
|
||||
|
||||
@page title {
|
||||
@top-left {
|
||||
content: " ";
|
||||
}
|
||||
@top-right {
|
||||
content: " "
|
||||
}
|
||||
@bottom-right {
|
||||
content: " ";
|
||||
}
|
||||
@bottom-left {
|
||||
content: " ";
|
||||
}
|
||||
}
|
||||
|
||||
body.frontmatter { page: frontmatter }
|
||||
body.frontmatter {counter-reset: page 1}
|
||||
|
||||
|
||||
@page frontmatter {
|
||||
@top-left {
|
||||
content: prince-script(guideName);
|
||||
}
|
||||
@top-right {
|
||||
content: prince-script(datestamp);
|
||||
}
|
||||
@bottom-right {
|
||||
content: counter(page, lower-roman);
|
||||
}
|
||||
@bottom-left {
|
||||
content: "youremail@domain.com"; }
|
||||
}
|
||||
|
||||
body.first_page {counter-reset: page 1}
|
||||
|
||||
h1 { string-set: doctitle content() }
|
||||
|
||||
@page {
|
||||
@top-left {
|
||||
content: string(doctitle);
|
||||
font-size: 11px;
|
||||
font-style: italic;
|
||||
}
|
||||
@top-right {
|
||||
content: prince-script(datestamp);
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
@bottom-right {
|
||||
content: "Page " counter(page);
|
||||
font-size: 11px;
|
||||
}
|
||||
@bottom-left {
|
||||
content: prince-script(guideName);
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
.alert {
|
||||
background-color: #fafafa !important;
|
||||
border-color: #dedede !important;
|
||||
color: black;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
.highlight { background: #ffffff; }
|
||||
.highlight .c { color: #999988; font-style: italic } /* Comment */
|
||||
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||
.highlight .k { font-weight: bold } /* Keyword */
|
||||
.highlight .o { font-weight: bold } /* Operator */
|
||||
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
|
||||
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
|
||||
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
|
||||
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .gr { color: #aa0000 } /* Generic.Error */
|
||||
.highlight .gh { color: #999999 } /* Generic.Heading */
|
||||
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
|
||||
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
|
||||
.highlight .go { color: #888888 } /* Generic.Output */
|
||||
.highlight .gp { color: #555555 } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
|
||||
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
|
||||
.highlight .kc { font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
|
||||
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
|
||||
.highlight .m { color: #009999 } /* Literal.Number */
|
||||
.highlight .s { color: #d14 } /* Literal.String */
|
||||
.highlight .na { color: #008080 } /* Name.Attribute */
|
||||
.highlight .nb { color: #0086B3 } /* Name.Builtin */
|
||||
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #008080 } /* Name.Constant */
|
||||
.highlight .ni { color: #800080 } /* Name.Entity */
|
||||
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
|
||||
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
|
||||
.highlight .nn { color: #555555 } /* Name.Namespace */
|
||||
.highlight .nt { color: #000080 } /* Name.Tag */
|
||||
.highlight .nv { color: #008080 } /* Name.Variable */
|
||||
.highlight .ow { font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.highlight .mf { color: #009999 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
|
||||
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #d14 } /* Literal.String.Char */
|
||||
.highlight .sd { color: #d14 } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #d14 } /* Literal.String.Double */
|
||||
.highlight .se { color: #d14 } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #d14 } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #d14 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #009926 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #d14 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
|
||||
.highlight .vc { color: #008080 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #008080 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
|
||||
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
|
||||
@@ -1,121 +0,0 @@
|
||||
.summary {
|
||||
color: #808080;
|
||||
border-left: 5px solid #ED1951;
|
||||
font-size:16px;
|
||||
}
|
||||
|
||||
|
||||
h3 {color: #ED1951; }
|
||||
h4 {color: #808080; }
|
||||
|
||||
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
|
||||
background-color: #248ec2;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav > li.active > a {
|
||||
background-color: #347DBE;
|
||||
}
|
||||
|
||||
.nav > li > a:hover {
|
||||
background-color: #248ec2;
|
||||
}
|
||||
|
||||
div.navbar-collapse .dropdown-menu > li > a:hover {
|
||||
background-color: #347DBE;
|
||||
}
|
||||
|
||||
.nav li.thirdlevel > a {
|
||||
background-color: #FAFAFA !important;
|
||||
color: #248EC2;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a[data-toggle="tooltip"] {
|
||||
color: #649345;
|
||||
font-style: italic;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.navbar-inverse {
|
||||
background-color: #347DBE;
|
||||
border-color: #015CAE;
|
||||
}
|
||||
.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-brand {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav>li>a:hover, a.fa.fa-home.fa-lg.navbar-brand:hover {
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
a.navbar-brand:hover {
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
|
||||
color: #015CAE;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
|
||||
background-color: #015CAE;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
|
||||
border-color: #248ec2 !important;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #ffffff;
|
||||
background-color: #347DBE;
|
||||
border-color: #347DBE;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
|
||||
background-color: #347DBE;
|
||||
}
|
||||
|
||||
.btn-primary:hover,
|
||||
.btn-primary:focus,
|
||||
.btn-primary:active,
|
||||
.btn-primary.active,
|
||||
.open .dropdown-toggle.btn-primary {
|
||||
background-color: #248ec2;
|
||||
border-color: #347DBE;
|
||||
}
|
||||
|
||||
.printTitle {
|
||||
color: #015CAE !important;
|
||||
}
|
||||
|
||||
body.print h1 {color: #015CAE !important; font-size:28px !important;}
|
||||
body.print h2 {color: #595959 !important; font-size:20px !important;}
|
||||
body.print h3 {color: #E50E51 !important; font-size:14px !important;}
|
||||
body.print h4 {color: #679DCE !important; font-size:14px; font-style: italic !important;}
|
||||
|
||||
.anchorjs-link:hover {
|
||||
color: #216f9b;
|
||||
}
|
||||
|
||||
div.sidebarTitle {
|
||||
color: #015CAE;
|
||||
}
|
||||
|
||||
li.sidebarTitle {
|
||||
margin-top:20px;
|
||||
font-weight:normal;
|
||||
font-size:130%;
|
||||
color: #ED1951;
|
||||
margin-bottom:10px;
|
||||
margin-left: 5px;
|
||||
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover {
|
||||
background-color: #015CAE;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-toggle {
|
||||
border-color: #015CAE;
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
.summary {
|
||||
color: #808080;
|
||||
border-left: 5px solid #E50E51;
|
||||
font-size:16px;
|
||||
}
|
||||
|
||||
|
||||
h3 {color: #E50E51; }
|
||||
h4 {color: #808080; }
|
||||
|
||||
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
|
||||
background-color: #248ec2;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav > li.active > a {
|
||||
background-color: #72ac4a;
|
||||
}
|
||||
|
||||
.nav > li > a:hover {
|
||||
background-color: #72ac4a;
|
||||
}
|
||||
|
||||
div.navbar-collapse .dropdown-menu > li > a:hover {
|
||||
background-color: #72ac4a;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-brand {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav>li>a:hover, a.fa.fa-home.fa-lg.navbar-brand:hover {
|
||||
color: #f0f0f0;
|
||||
}
|
||||
|
||||
.nav li.thirdlevel > a {
|
||||
background-color: #FAFAFA !important;
|
||||
color: #72ac4a;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a[data-toggle="tooltip"] {
|
||||
color: #649345;
|
||||
font-style: italic;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.navbar-inverse {
|
||||
background-color: #72ac4a;
|
||||
border-color: #5b893c;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
|
||||
color: #5b893c;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
|
||||
background-color: #5b893c;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
/* not sure if using this ...*/
|
||||
.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
|
||||
border-color: #72ac4a !important;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #ffffff;
|
||||
background-color: #5b893c;
|
||||
border-color: #5b893c;
|
||||
}
|
||||
|
||||
.btn-primary:hover,
|
||||
.btn-primary:focus,
|
||||
.btn-primary:active,
|
||||
.btn-primary.active,
|
||||
.open .dropdown-toggle.btn-primary {
|
||||
background-color: #72ac4a;
|
||||
border-color: #5b893c;
|
||||
}
|
||||
|
||||
.printTitle {
|
||||
color: #5b893c !important;
|
||||
}
|
||||
|
||||
body.print h1 {color: #5b893c !important; font-size:28px;}
|
||||
body.print h2 {color: #595959 !important; font-size:24px;}
|
||||
body.print h3 {color: #E50E51 !important; font-size:14px;}
|
||||
body.print h4 {color: #679DCE !important; font-size:14px; font-style: italic;}
|
||||
|
||||
.anchorjs-link:hover {
|
||||
color: #4f7233;
|
||||
}
|
||||
|
||||
div.sidebarTitle {
|
||||
color: #E50E51;
|
||||
}
|
||||
|
||||
li.sidebarTitle {
|
||||
margin-top:20px;
|
||||
font-weight:normal;
|
||||
font-size:130%;
|
||||
color: #ED1951;
|
||||
margin-bottom:10px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover {
|
||||
background-color: #E50E51;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
services:
|
||||
server:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: userdoc/latest
|
||||
ports:
|
||||
- "4001:4001"
|
||||
volumes:
|
||||
- ".:/src"
|
||||
@@ -1,14 +1,4 @@
|
||||
---
|
||||
title: PSI HPC@CSCS
|
||||
#tags:
|
||||
#keywords:
|
||||
last_updated: 20 Nov 2025
|
||||
#summary: ""
|
||||
sidebar: CSCS_sidebar
|
||||
permalink: /CSCS/index.html
|
||||
---
|
||||
|
||||
## PSI HPC@CSCS
|
||||
# PSI HPC@CSCS
|
||||
|
||||
PSI has a long standing collaboration with CSCS for offering high end
|
||||
HPC resources to PSI projects. PSI had co-invested in CSCS' initial
|
||||
@@ -22,24 +12,32 @@ schemes.](https://www.cscs.ch/user-lab/allocation-schemes).
|
||||
We can also help PSI groups to procure additional resources based on
|
||||
the PSI conditions - please contact us in such a case.
|
||||
|
||||
### Yearly survey for requesting a project on the PSI share
|
||||
## Yearly survey for requesting a project on the PSI share
|
||||
|
||||
At the end of each year we prepare a survey process and notify all subscribed users of the specialized **PSI HPC@CSCS mailing list** (see below) and the merlin cluster lists, to enter their next year resource requests. Projects receive resources in the form of allocations over the four quarters of the following year.
|
||||
At the end of each year we prepare a survey process and notify all subscribed
|
||||
users of the specialized **PSI HPC@CSCS mailing list** (see below) and the
|
||||
merlin cluster lists, to enter their next year resource requests. Projects
|
||||
receive resources in the form of allocations over the four quarters of the
|
||||
following year.
|
||||
|
||||
The projects requests get reviewed and requests may get adapted to fit into the available capacity.
|
||||
The projects requests get reviewed and requests may get adapted to fit into the
|
||||
available capacity.
|
||||
|
||||
The survey is done through ServiceNow, please navigate to [Home > Service Catalog > Research Computing > Apply for computing resources at CSCS](https://psi.service-now.com/psisp?id=psi_new_sc_cat_item&sys_id=8d14bd1e4f9c7b407f7660fe0310c7e9) and submit the form.
|
||||
The survey is done through ServiceNow, please navigate to
|
||||
[Home > Service Catalog > Research Computing > Apply for computing resources at CSCS](https://psi.service-now.com/psisp?id=psi_new_sc_cat_item&sys_id=8d14bd1e4f9c7b407f7660fe0310c7e9)
|
||||
and submit the form.
|
||||
|
||||
Applications will be reviewed and the final resource allocations, in case of oversubscription, will be arbitrated by a panel within CSD.
|
||||
Applications will be reviewed and the final resource allocations, in case of
|
||||
oversubscription, will be arbitrated by a panel within CSD.
|
||||
|
||||
#### Instructions for filling out the 2026 survey
|
||||
### Instructions for filling out the 2026 survey
|
||||
|
||||
* We have a budget of 100 kCHF for 2026, which translates to 435'000 multicore node hours or 35'600 node hours on the GPU Grace Hopper nodes. The minimum allocation is 10'000 node hours for multicore projects, an average project allocation would amount to 30'000 node hours
|
||||
* You need to specify the total resource request for your project in node hours, and how you would like to split the resources over the 4 quarters. For the allocations per quarter year, please enter the number in percent (e.g. 25%, 25%, 25%, 25%). If you indicate nothing, a 25% per quarter will be assumed.
|
||||
* We currently have a total of 65 TB of storage for all projects. Additional storage
|
||||
can be obtained, but large storage assignments are not in scope for these projects.
|
||||
|
||||
### CSCS Systems reference information
|
||||
## CSCS Systems reference information
|
||||
|
||||
For 2025 we can offer access to [CSCS Alps](https://www.cscs.ch/computers/alps) Eiger (CPU multicore) and Daint (GPU) systems.
|
||||
|
||||
@@ -50,7 +48,7 @@ For 2025 we can offer access to [CSCS Alps](https://www.cscs.ch/computers/alps)
|
||||
|
||||
## Contact information
|
||||
|
||||
* PSI Contacts:
|
||||
* PSI Contacts:
|
||||
* Mailing list contact: <psi-hpc-at-cscs-admin@lists.psi.ch>
|
||||
* Marc Caubet Serrabou <marc.caubet@psi.ch>
|
||||
* Derek Feichtinger <derek.feichtinger@psi.ch>
|
||||
@@ -1,14 +1,4 @@
|
||||
---
|
||||
title: Transferring Data betweem PSI and CSCS
|
||||
#tags:
|
||||
keywords: CSCS, data-transfer
|
||||
last_updated: 02 March 2022
|
||||
summary: "This Document shows the procedure for transferring data between CSCS and PSI"
|
||||
sidebar: CSCS_sidebar
|
||||
permalink: /CSCS/transfer-data.html
|
||||
---
|
||||
|
||||
# Transferring Data
|
||||
# Transferring Data
|
||||
|
||||
This document shows how to transfer data between PSI and CSCS by using a Linux workstation.
|
||||
|
||||
@@ -37,7 +27,6 @@ Host *.cscs.ch
|
||||
There are many different SSH settings available which would allow advanced configurations.
|
||||
Users may have some configurations already present, therefore would need to adapt it accordingly.
|
||||
|
||||
|
||||
## Transferring files
|
||||
|
||||
Once the above configuration is set, then try to rsync from Merlin to CSCS, on any direction:
|
||||
@@ -37,10 +37,10 @@ independently to ease access for the users and keep independent user accounting.
|
||||
|
||||
The following image shows the Merlin6 cluster architecture diagram:
|
||||
|
||||

|
||||

|
||||
|
||||
### Merlin5 + Merlin6 Slurm Cluster Architecture Design
|
||||
|
||||
The following image shows the Slurm architecture design for the Merlin5 & Merlin6 clusters:
|
||||
|
||||

|
||||

|
||||
@@ -120,15 +120,15 @@ The below table summarizes the hardware setup for the Merlin6 GPU computing node
|
||||
|
||||
### Login Nodes
|
||||
|
||||
The login nodes are part of the **[Merlin6](/merlin6/introduction.html)** HPC cluster,
|
||||
The login nodes are part of the **[Merlin6](../merlin6/cluster-introduction.md)** HPC cluster,
|
||||
and are used to compile and to submit jobs to the different ***Merlin Slurm clusters*** (`merlin5`,`merlin6`,`gmerlin6`,etc.).
|
||||
Please refer to the **[Merlin6 Hardware Documentation](/merlin6/hardware-and-software.html)** for further information.
|
||||
Please refer to the **[Merlin6 Hardware Documentation](../merlin6/hardware-and-software-description.md)** for further information.
|
||||
|
||||
### Storage
|
||||
|
||||
The storage is part of the **[Merlin6](/merlin6/introduction.html)** HPC cluster,
|
||||
The storage is part of the **[Merlin6](../merlin6/cluster-introduction.md)** HPC cluster,
|
||||
and is mounted in all the ***Slurm clusters*** (`merlin5`,`merlin6`,`gmerlin6`,etc.).
|
||||
Please refer to the **[Merlin6 Hardware Documentation](/merlin6/hardware-and-software.html)** for further information.
|
||||
Please refer to the **[Merlin6 Hardware Documentation](../merlin6/hardware-and-software-description.md)** for further information.
|
||||
|
||||
### Network
|
||||
|
||||
@@ -142,7 +142,7 @@ ibstat | grep Rate
|
||||
|
||||
## Software
|
||||
|
||||
In the Merlin6 GPU computing nodes, we try to keep software stack coherency with the main cluster [Merlin6](/merlin6/index.html).
|
||||
In the Merlin6 GPU computing nodes, we try to keep software stack coherency with the main cluster [Merlin6](../merlin6/index.md).
|
||||
|
||||
Due to this, the Merlin6 GPU nodes run:
|
||||
* [**RedHat Enterprise Linux 7**](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.9_release_notes/index)
|
||||
@@ -24,8 +24,8 @@ The table below shows a summary of the hardware setup for the different GPU node
|
||||
| merlin-g-015 | 1 core | 48 cores | 1 | 5120 | 360448 | 360448 | 10000 | **A5000** | 1 | 8 |
|
||||
| merlin-g-100 | 1 core | 128 cores | 2 | 3900 | 998400 | 998400 | 10000 | **A100** | 1 | 8 |
|
||||
|
||||
{{site.data.alerts.tip}}Always check <b>'/etc/slurm/gres.conf'</b> and <b>'/etc/slurm/slurm.conf'</b> for changes in the GPU type and details of the hardware.
|
||||
{{site.data.alerts.end}}
|
||||
!!! tip
|
||||
Always check `/etc/slurm/gres.conf` and `/etc/slurm/slurm.conf` for changes in the GPU type and details of the hardware.
|
||||
|
||||
## Running jobs in the 'gmerlin6' cluster
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 508 KiB After Width: | Height: | Size: 508 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |