Merge branch 'master' of github.com:dauxio/daux.io
# Conflicts: # daux_libraries/README.md # src/css/theme_daux/_components.scss # src/css/theme_daux/_fonts.scss # src/css/theme_daux/_homepage.scss # src/css/theme_daux/_mixins.scss # src/css/theme_daux/_print.scss # src/css/theme_daux/_structure.scss # src/css/theme_daux/_typography.scss # src/css/theme_daux/_variables.scss # src/css/theme_daux/theme-blue.scss # src/css/theme_daux/theme-green.scss # src/css/theme_daux/theme-navy.scss # src/css/theme_daux/theme-red.scss # src/css/theme_daux/theme.scss # src/css/theme_daux/vendor/normalize.scss # src/css/theme_daux_singlepage/_fonts.scss # src/css/theme_daux_singlepage/_print.scss # src/css/theme_daux_singlepage/_typography.scss # src/css/theme_daux_singlepage/main.scss # themes/d3/js/README.md # themes/d3/js/daux.js # themes/d3/js/highlight.pack.js # themes/d3/js/html5shiv-3.7.3.min.js # themes/d3/js/jquery-1.11.3.min.js # themes/d3/scss/_components.scss # themes/d3/scss/_fonts.scss # themes/d3/scss/_homepage.scss # themes/d3/scss/_mixins.scss # themes/d3/scss/_print.scss # themes/d3/scss/_structure.scss # themes/d3/scss/_typography.scss # themes/d3/scss/_variables.scss # themes/d3/scss/theme-blue.scss # themes/d3/scss/theme-green.scss # themes/d3/scss/theme-navy.scss # themes/d3/scss/theme-red.scss # themes/d3/scss/theme.scss # themes/d3/scss/vendor/highlight.scss # themes/d3/scss/vendor/normalize.scss # themes/daux/config.json # themes/daux/css/theme-blue.min.css # themes/daux/css/theme-blue.min.css.map # themes/daux/css/theme-green.min.css # themes/daux/css/theme-green.min.css.map # themes/daux/css/theme-navy.min.css # themes/daux/css/theme-navy.min.css.map # themes/daux/css/theme-red.min.css # themes/daux/css/theme-red.min.css.map # themes/daux/js/README.md # themes/daux/scss/_components.scss # themes/daux/scss/_fonts.scss # themes/daux/scss/_homepage.scss # themes/daux/scss/_mixins.scss # themes/daux/scss/_print.scss # themes/daux/scss/_structure.scss # themes/daux/scss/_typography.scss # themes/daux/scss/_variables.scss # themes/daux/scss/theme-blue.scss # themes/daux/scss/theme-green.scss # themes/daux/scss/theme-navy.scss # themes/daux/scss/theme-red.scss # themes/daux/scss/theme.scss # themes/daux/scss/vendor/normalize.scss # themes/daux_singlepage/css/main.min.css # themes/daux_singlepage/css/main.min.css.map
Cette révision appartient à :
révision
48e0d0c734
2
.dockerignore
Fichier normal
2
.dockerignore
Fichier normal
@ -0,0 +1,2 @@
|
||||
vendor
|
||||
node_modules
|
38
.github/ISSUE_TEMPLATE/bug_report.md
externe
Fichier normal
38
.github/ISSUE_TEMPLATE/bug_report.md
externe
Fichier normal
@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
externe
Fichier normal
20
.github/ISSUE_TEMPLATE/feature_request.md
externe
Fichier normal
@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
4
.gitignore
externe
4
.gitignore
externe
@ -5,3 +5,7 @@ node_modules
|
||||
static
|
||||
|
||||
/vendor
|
||||
|
||||
/prettier.config.js
|
||||
/.eslintrc.js
|
||||
/stylelint.config.js
|
||||
|
26
.travis.yml
26
.travis.yml
@ -3,6 +3,7 @@ language: php
|
||||
php:
|
||||
- '7.1'
|
||||
- '7.2'
|
||||
- '7.3'
|
||||
- nightly
|
||||
|
||||
matrix:
|
||||
@ -19,13 +20,18 @@ after_script:
|
||||
- wget https://scrutinizer-ci.com/ocular.phar
|
||||
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
||||
|
||||
before_deploy:
|
||||
- bin/daux generate
|
||||
|
||||
deploy:
|
||||
provider: pages
|
||||
local_dir: static
|
||||
skip_cleanup: true
|
||||
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
|
||||
on:
|
||||
branch: master
|
||||
jobs:
|
||||
include:
|
||||
- stage: "Deploy Documentation"
|
||||
php: "7.3"
|
||||
script: skip
|
||||
before_deploy:
|
||||
- composer install
|
||||
- bin/daux generate
|
||||
deploy:
|
||||
provider: pages
|
||||
local_dir: static
|
||||
skip_cleanup: true
|
||||
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
|
||||
on:
|
||||
branch: master
|
||||
|
76
CODE_OF_CONDUCT.md
Fichier normal
76
CODE_OF_CONDUCT.md
Fichier normal
@ -0,0 +1,76 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at stephane.goetz@onigoetz.ch. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
26
Dockerfile
26
Dockerfile
@ -1,31 +1,31 @@
|
||||
FROM php:7-alpine
|
||||
FROM composer:1.7.2 AS composer
|
||||
|
||||
RUN apk info && apk add --no-cache unzip
|
||||
FROM php:7-stretch
|
||||
|
||||
RUN apt-get update && apt-get install -y libicu-dev git unzip
|
||||
RUN docker-php-ext-configure intl \
|
||||
&& docker-php-ext-install intl
|
||||
|
||||
RUN mkdir /daux && mkdir /build
|
||||
|
||||
WORKDIR /daux
|
||||
|
||||
COPY --from=composer /usr/bin/composer /usr/bin/composer
|
||||
|
||||
# Copy files
|
||||
COPY composer.json /daux/composer.json
|
||||
COPY composer.lock /daux/composer.lock
|
||||
|
||||
RUN composer install --prefer-dist --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader
|
||||
|
||||
COPY bin/ /daux/bin/
|
||||
COPY libs/ /daux/libs/
|
||||
COPY templates/ /daux/templates/
|
||||
COPY themes/ /daux/themes/
|
||||
COPY tipuesearch/ /daux/tipuesearch/
|
||||
COPY daux_libraries/ /daux/daux_libraries/
|
||||
COPY global.json /daux/global.json
|
||||
COPY composer.json /daux/composer.json
|
||||
COPY composer.lock /daux/composer.lock
|
||||
COPY index.php /daux/index.php
|
||||
|
||||
# Composer install
|
||||
RUN cd /daux && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
|
||||
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
|
||||
&& php composer-setup.php \
|
||||
&& rm composer-setup.php \
|
||||
&& php composer.phar install --prefer-dist --no-ansi --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader \
|
||||
&& rm composer.phar
|
||||
|
||||
RUN ln -s /daux/bin/daux /usr/local/bin/daux
|
||||
|
||||
WORKDIR /build
|
||||
|
20
README.md
20
README.md
@ -34,17 +34,17 @@
|
||||
This is a list of sites using Daux.io:
|
||||
|
||||
- With a custom theme:
|
||||
* [Crafty](https://swissquote.github.io/crafty)
|
||||
* [Pixolution flow](https://docs.pixolution.org)
|
||||
* [Crafty](https://swissquote.github.io/crafty)
|
||||
* [Soisy](https://doc.soisy.it/)
|
||||
* [Vulkan Tutorial](https://vulkan-tutorial.com)
|
||||
* [TrackJs](http://docs.trackjs.com)
|
||||
* [3Q](https://docs.3q.video/)
|
||||
- With the default Theme
|
||||
* [Daux.io](https://daux.io/)
|
||||
* [Gltn - An open-source word processor webapp](http://felkerdigitalmedia.com/gltn/docs/)
|
||||
* [Invade & Annex 3 - An Arma 3 Co-operative Mission](http://ia3.ahoyworld.co.uk/)
|
||||
* [Munee: Standalone PHP 5.3 Asset Optimisation & Manipulation](http://mun.ee)
|
||||
* [DoctrineWatcher](https://dsentker.github.io/WatcherDocumentation/)
|
||||
* [DrupalGap](http://docs.drupalgap.org/8/)
|
||||
* [ICADMIN: An admin panel powered by CodeIgniter.](http://istocode.com/shared/ic-admin/)
|
||||
* [Cumulus TV: Android TV app that turns any stream/page into a Live Channel](http://cumulustv.herokuapp.com)
|
||||
* [Munee: Standalone PHP 5.3 Asset Optimisation & Manipulation](http://mun.ee)
|
||||
* [Nuntius: A PHP framework for bots](https://roysegall.github.io/nuntius-bot/)
|
||||
|
||||
Do you use Daux.io? Send me a pull request or open an [issue](https://github.com/dauxio/daux.io/issues) and I will add you to the list.
|
||||
@ -71,7 +71,7 @@ If the command isn't found, ensure your `$PATH` contains `~/.composer/vendor/bin
|
||||
Or if you wish to use Docker, the start of the command will be :
|
||||
|
||||
```bash
|
||||
docker run --rm -it -w /build -v "$PWD":/build daux/daux.io daux
|
||||
docker run --rm -it -w /build -v "$PWD":/build -u "$(id -u):$(id -g)" daux/daux.io daux
|
||||
```
|
||||
|
||||
## Run on a server
|
||||
@ -233,15 +233,15 @@ You can then point your browser to http://localhost:8086
|
||||
|
||||
## PHP Requirements
|
||||
|
||||
Daux.io is compatible with PHP 5.6 and up.
|
||||
Daux.io is compatible with PHP 7.1.3 and up.
|
||||
|
||||
The reason is because some dependencies we have (mainly Symfony and Guzzle) do not support php 5.4 anymore.
|
||||
The reason is because some dependencies we have (mainly Symfony and Guzzle) do not support PHP 5.6 anymore.
|
||||
|
||||
### Extensions
|
||||
|
||||
PHP Needs the following extension to work : `php-mbstring` and `php-xml`.
|
||||
|
||||
If you encounter an error similar to `utf8_decode() not found` this means that you're missing the `php-xml` package. (We've seen it happen only on PHP 7)
|
||||
If you encounter an error similar to `utf8_decode() not found` this means that you're missing the `php-xml` package.
|
||||
|
||||
## Support
|
||||
|
||||
|
@ -19,14 +19,19 @@
|
||||
"require": {
|
||||
"php": ">=7.1.3",
|
||||
"guzzlehttp/guzzle": "~6.0",
|
||||
"league/commonmark": "^0.15",
|
||||
"league/commonmark": "^0.18",
|
||||
"league/plates": "~3.1",
|
||||
"myclabs/deep-copy": "^1.5",
|
||||
"symfony/console": "^4.0",
|
||||
"symfony/http-foundation": "^4.0",
|
||||
"symfony/polyfill-intl-icu": "^1.10",
|
||||
"symfony/process": "^4.0",
|
||||
"webuni/commonmark-table-extension": "0.6.*",
|
||||
"webuni/front-matter": "^1.0.0"
|
||||
"webuni/commonmark-table-extension": "0.9.*",
|
||||
"webuni/front-matter": "^1.0.0",
|
||||
"scrivo/highlight.php": "^9.15"
|
||||
},
|
||||
"suggest":{
|
||||
"ext-intl": "Allows to translate the modified at date"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
@ -37,7 +42,10 @@
|
||||
"justinwalsh/daux.io": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~5.7",
|
||||
"mikey179/vfsStream": "^1.6"
|
||||
"phpunit/phpunit": "~7.4",
|
||||
"mikey179/vfsstream": "^1.6"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "phpunit"
|
||||
}
|
||||
}
|
||||
|
1567
composer.lock
générée
1567
composer.lock
générée
Fichier diff supprimé car celui-ci est trop grand
Voir la Diff
@ -1,46 +1,62 @@
|
||||
|
||||
module.exports = {
|
||||
browsers:
|
||||
"> 0.25%, Edge >= 15, Safari >= 10, iOS >= 10, Chrome >= 56, Firefox >= 51, IE >= 11, not op_mini all",
|
||||
presets: [
|
||||
"@swissquote/crafty-preset-postcss",
|
||||
"@swissquote/crafty-runner-gulp"
|
||||
"@swissquote/crafty-preset-babel",
|
||||
"@swissquote/crafty-runner-rollup",
|
||||
"@swissquote/crafty-preset-postcss",
|
||||
"@swissquote/crafty-runner-gulp"
|
||||
],
|
||||
destination_css: "themes",
|
||||
destination_css: ".",
|
||||
destination_js: ".",
|
||||
stylelint_pattern: [
|
||||
"themes/daux/scss/**/*.scss",
|
||||
"themes/daux_singlepage/scss/**/*.scss",
|
||||
"!*.min.css",
|
||||
"!**/vendor/**/*.scss"
|
||||
"src/css/**/*.scss",
|
||||
"!*.min.css",
|
||||
"!**/vendor/**/*.scss"
|
||||
],
|
||||
stylelint: {
|
||||
rules: {
|
||||
"swissquote/no-type-outside-scope": null
|
||||
}
|
||||
rules: {
|
||||
"swissquote/no-type-outside-scope": null,
|
||||
"plugin/no-unsupported-browser-features": null
|
||||
}
|
||||
},
|
||||
js: {
|
||||
search: {
|
||||
runner: "rollup",
|
||||
source: "src/js/search/index.js",
|
||||
destination: "daux_libraries/search.min.js"
|
||||
},
|
||||
theme_daux: {
|
||||
runner: "rollup",
|
||||
source: "src/js/theme_daux/index.js",
|
||||
destination: "themes/daux/js/daux.min.js"
|
||||
}
|
||||
},
|
||||
css: {
|
||||
"theme_blue": {
|
||||
source: "themes/daux/scss/theme-blue.scss",
|
||||
destination: "daux/css/theme-blue.min.css",
|
||||
watch: ["themes/daux/scss/**"]
|
||||
},
|
||||
"theme_green": {
|
||||
source: "themes/daux/scss/theme-green.scss",
|
||||
destination: "daux/css/theme-green.min.css",
|
||||
watch: ["themes/daux/scss/**"]
|
||||
},
|
||||
"theme_navy": {
|
||||
source: "themes/daux/scss/theme-navy.scss",
|
||||
destination: "daux/css/theme-navy.min.css",
|
||||
watch: ["themes/daux/scss/**"]
|
||||
},
|
||||
"theme_red": {
|
||||
source: "themes/daux/scss/theme-red.scss",
|
||||
destination: "daux/css/theme-red.min.css",
|
||||
watch: ["themes/daux/scss/**"]
|
||||
},
|
||||
"daux_singlepage": {
|
||||
source: "themes/daux_singlepage/scss/main.scss",
|
||||
destination: "daux_singlepage/css/main.min.css",
|
||||
watch: ["themes/daux_singlepage/scss/**"]
|
||||
}
|
||||
theme_blue: {
|
||||
source: "src/css/theme_daux/theme-blue.scss",
|
||||
destination: "themes/daux/css/theme-blue.min.css",
|
||||
watch: ["src/css/**/*.scss"]
|
||||
},
|
||||
theme_green: {
|
||||
source: "src/css/theme_daux/theme-green.scss",
|
||||
destination: "themes/daux/css/theme-green.min.css",
|
||||
watch: ["src/css/**/*.scss"]
|
||||
},
|
||||
theme_navy: {
|
||||
source: "src/css/theme_daux/theme-navy.scss",
|
||||
destination: "themes/daux/css/theme-navy.min.css",
|
||||
watch: ["src/css/**/*.scss"]
|
||||
},
|
||||
theme_red: {
|
||||
source: "src/css/theme_daux/theme-red.scss",
|
||||
destination: "themes/daux/css/theme-red.min.css",
|
||||
watch: ["src/css/**/*.scss"]
|
||||
},
|
||||
daux_singlepage: {
|
||||
source: "src/css/theme_daux_singlepage/main.scss",
|
||||
destination: "themes/daux_singlepage/css/main.min.css",
|
||||
watch: ["src/css/**/*.scss"]
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
12
daux_libraries/README.md
Fichier normal
12
daux_libraries/README.md
Fichier normal
@ -0,0 +1,12 @@
|
||||
|
||||
# Updating Highlight.js
|
||||
|
||||
This build of highlight.js contains all languages. to achieve this, go to : https://highlightjs.org/download/
|
||||
|
||||
And run the following snipped in the console:
|
||||
|
||||
```
|
||||
$$("input[type=checkbox]").forEach(function(checkbox) { checkbox.checked=true; })
|
||||
```
|
||||
|
||||
This will tick all boxes instead of doing it by hand.
|
2
daux_libraries/highlight.pack.js
Fichier normal
2
daux_libraries/highlight.pack.js
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
@ -1,10 +1,3 @@
|
||||
/*
|
||||
Tipue Search 5.0
|
||||
Copyright (c) 2015 Tipue
|
||||
Tipue Search is released under the MIT License
|
||||
http://www.tipue.com/search
|
||||
*/
|
||||
|
||||
body.with-search {
|
||||
overflow: hidden;
|
||||
}
|
||||
@ -16,7 +9,7 @@ body.with-search {
|
||||
margin: 0;
|
||||
|
||||
z-index: 100;
|
||||
position:absolute;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
@ -27,18 +20,17 @@ body.with-search {
|
||||
.SearchResultsBackdrop {
|
||||
z-index: 90;
|
||||
|
||||
width:100%;
|
||||
width: 100%;
|
||||
|
||||
position:absolute;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
|
||||
background: #000;
|
||||
opacity: .6;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
|
||||
.homepage .SearchResults,
|
||||
.homepage .SearchResultsBackdrop {
|
||||
top: 50px;
|
||||
@ -54,11 +46,12 @@ body.with-search {
|
||||
}
|
||||
|
||||
.SearchResults__warning {
|
||||
font-weight:300;
|
||||
font-size:15px;
|
||||
font-weight: 300;
|
||||
font-size: 15px;
|
||||
line-height: 1.6;
|
||||
color: #555;
|
||||
margin: 7px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.SearchResults__warning a {
|
||||
@ -71,8 +64,8 @@ body.with-search {
|
||||
}
|
||||
|
||||
.SearchResults__count {
|
||||
font-weight:300;
|
||||
font-size:15px;
|
||||
font-weight: 300;
|
||||
font-size: 15px;
|
||||
line-height: 1.7;
|
||||
color: #555;
|
||||
}
|
||||
@ -86,12 +79,12 @@ body.with-search {
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
line-height: .8em;
|
||||
line-height: 0.8em;
|
||||
}
|
||||
|
||||
.SearchResults__title {
|
||||
font-weight:300;
|
||||
font-size:21px;
|
||||
font-weight: 300;
|
||||
font-size: 21px;
|
||||
line-height: 1.7;
|
||||
margin-top: 23px;
|
||||
}
|
||||
@ -106,8 +99,8 @@ body.with-search {
|
||||
}
|
||||
|
||||
.SearchResults__url {
|
||||
font-weight:300;
|
||||
font-size:14px;
|
||||
font-weight: 300;
|
||||
font-size: 14px;
|
||||
line-height: 1.9;
|
||||
word-wrap: break-word;
|
||||
hyphens: auto;
|
||||
@ -123,8 +116,8 @@ body.with-search {
|
||||
}
|
||||
|
||||
.SearchResults__text {
|
||||
font-weight:300;
|
||||
font-size:15px;
|
||||
font-weight: 300;
|
||||
font-size: 15px;
|
||||
line-height: 1.6;
|
||||
color: #555;
|
||||
word-wrap: break-word;
|
||||
@ -133,8 +126,8 @@ body.with-search {
|
||||
}
|
||||
|
||||
.SearchResults__debug {
|
||||
font-weight:300;
|
||||
font-size:13px;
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
line-height: 1.6;
|
||||
color: #555;
|
||||
margin: 5px 0;
|
||||
@ -164,7 +157,6 @@ body.with-search {
|
||||
border: 1px solid #e2e2e2;
|
||||
}
|
||||
|
||||
|
||||
/* spinner */
|
||||
|
||||
@media (min-width: 650px) {
|
2
daux_libraries/search.min.js
externe
Fichier normal
2
daux_libraries/search.min.js
externe
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
1
daux_libraries/search.min.js.map
Fichier normal
1
daux_libraries/search.min.js.map
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
@ -36,13 +36,19 @@
|
||||
|
||||
This is a list of sites using Daux.io:
|
||||
|
||||
* [Daux.io](https://dauxio.github.io/)
|
||||
* [DoctrineWatcher](https://dsentker.github.io/WatcherDocumentation/)
|
||||
* [jDrupal](http://jdrupal.easystreet3.com/8/docs/)
|
||||
* [DrupalGap](http://docs.drupalgap.org/8/)
|
||||
* [Invade & Annex 3 - An Arma 3 Co-operative Mission](http://ia3.ahoyworld.co.uk/)
|
||||
* [Munee: Standalone PHP 5.3 Asset Optimisation & Manipulation](http://mun.ee)
|
||||
* [ICADMIN: An admin panel powered by CodeIgniter.](http://istocode.com/shared/ic-admin/)
|
||||
- With a custom theme:
|
||||
* [Crafty](https://swissquote.github.io/crafty)
|
||||
* [Pixolution flow](https://docs.pixolution.org)
|
||||
* [Soisy](https://doc.soisy.it/)
|
||||
* [Vulkan Tutorial](https://vulkan-tutorial.com)
|
||||
* [3Q](https://docs.3q.video/)
|
||||
- With the default Theme
|
||||
* [Daux.io](https://daux.io/)
|
||||
* [DoctrineWatcher](https://dsentker.github.io/WatcherDocumentation/)
|
||||
* [DrupalGap](http://docs.drupalgap.org/8/)
|
||||
* [ICADMIN: An admin panel powered by CodeIgniter.](http://istocode.com/shared/ic-admin/)
|
||||
* [Munee: Standalone PHP 5.3 Asset Optimisation & Manipulation](http://mun.ee)
|
||||
* [Nuntius: A PHP framework for bots](https://roysegall.github.io/nuntius-bot/)
|
||||
|
||||
Do you use Daux.io? Send us a pull request or open an [issue](https://github.com/dauxio/daux.io/issues) and I will add you to the list.
|
||||
|
||||
@ -63,7 +69,7 @@ daux generate
|
||||
|
||||
You can then use the `daux` command line to generate your documentation.
|
||||
|
||||
If the command isn't found, ensure your `$PATH` contains `~/.composer/vendor/bin`
|
||||
If the command isn't found, ensure your `$PATH` contains `~/.composer/vendor/bin` or `~/.config/composer/vendor/bin`.
|
||||
|
||||
#### Docker
|
||||
|
||||
@ -139,9 +145,9 @@ Now that you got the basics, you can also [see what you can configure](05_Config
|
||||
|
||||
## PHP Requirements
|
||||
|
||||
Daux.io is compatible with PHP 5.6 and up.
|
||||
Daux.io is compatible with PHP 7.1.3 and up.
|
||||
|
||||
The reason is because some dependencies we have do not support php 5.5 anymore.
|
||||
The reason is because some dependencies we have (mainly Symfony and Guzzle) do not support PHP 5.6 anymore.
|
||||
|
||||
### Extensions
|
||||
|
||||
|
@ -2,21 +2,27 @@ Highlight.js highlights syntax in code examples on blogs, forums and in fact on
|
||||
|
||||
You can even use [Github Flavored Markdown](!Features/CommonMark_compliant)
|
||||
|
||||
We also use the [scrivo/highlight.php](https://github.com/scrivo/highlight.php) package to highlight on rendering when possible.
|
||||
Highlight.js is a powerful but heavy library, since we don't know which languages you'll use we included all of them.
|
||||
|
||||
The good news is; if you use a fenced code block (` ``` `) with the language defined, the rendering is done on server side and entirely skips loading Highlight.js on the page. While still having the same end-result on your code.
|
||||
|
||||
|
||||
**Python**
|
||||
|
||||
@requires_authorization
|
||||
def somefunc(param1='', param2=0):
|
||||
r'''A docstring'''
|
||||
if param1 > param2: # interesting
|
||||
print 'Gre\'ater'
|
||||
return (param2 - param1 + 1) or None
|
||||
```python
|
||||
@requires_authorization
|
||||
def somefunc(param1='', param2=0):
|
||||
r'''A docstring'''
|
||||
if param1 > param2: # interesting
|
||||
print 'Gre\'ater'
|
||||
return (param2 - param1 + 1) or None
|
||||
|
||||
class SomeClass:<br> pass
|
||||
|
||||
>>> message = '''interpreter
|
||||
... prompt'''
|
||||
class SomeClass:<br> pass
|
||||
|
||||
>>> message = '''interpreter
|
||||
... prompt'''
|
||||
```
|
||||
|
||||
**Python's profiler output**
|
||||
|
||||
|
@ -60,16 +60,6 @@ You can *optionally* specify the separator used for breadcrumbs.
|
||||
}
|
||||
```
|
||||
|
||||
## Code Floating
|
||||
By default your code blocks will be floated to a column on the right side of your content.
|
||||
To disable this feature, set the `float` property to `false`.
|
||||
|
||||
```json
|
||||
{
|
||||
"html": { "float": false }
|
||||
}
|
||||
```
|
||||
|
||||
## Date Modified
|
||||
By default, daux.io will display the last modified time as reported by the system underneath the title for each document.
|
||||
To disable this, change the option in your config.json to `false`.
|
||||
@ -80,17 +70,6 @@ To disable this, change the option in your config.json to `false`.
|
||||
}
|
||||
```
|
||||
|
||||
If you want to use the last modified time you can set the [format](http://php.net/manual/function.date.php) with the `date_modified_format` option.
|
||||
|
||||
```json
|
||||
{
|
||||
"html": {
|
||||
"date_modified": true,
|
||||
"date_modified_format": "l, F j, Y g:i A"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## GitHub Repo
|
||||
Add a 'Fork me on GitHub' ribbon.
|
||||
|
||||
|
@ -16,8 +16,6 @@
|
||||
"breadcrumb_separator": "Chevrons",
|
||||
"toggle_code": true,
|
||||
"date_modified": true,
|
||||
"date_modified_format": "l, F j, Y g:i A",
|
||||
"float": true,
|
||||
"inherit_index": true,
|
||||
|
||||
"repo": "dauxio/daux.io",
|
||||
|
47
global.json
47
global.json
@ -28,12 +28,20 @@
|
||||
"CodeBlocks_inline": "Inline",
|
||||
"CodeBlocks_show": "Show Code Blocks",
|
||||
"Search_placeholder": "Search...",
|
||||
"Search_one_result": "1 result",
|
||||
"Search_results": "!count results",
|
||||
"Search_no_results": "Nothing found",
|
||||
"Search_common_words_ignored": "Common words are largely ignored",
|
||||
"Search_too_short": "Search too short",
|
||||
"Search_one_character_or_more": "Should be one character or more",
|
||||
"Search_should_be_x_or_more": "Should be !min characters or more",
|
||||
"Link_previous": "Previous",
|
||||
"Link_next": "Next",
|
||||
"Edit_on": "Edit on :name:",
|
||||
"View_on_github": "View On GitHub",
|
||||
"View_documentation": "View Documentation",
|
||||
"Table_of_contents": "Table of Contents"
|
||||
"Table_of_contents": "Table of Contents",
|
||||
"Toggle_navigation": "Toggle navigation"
|
||||
},
|
||||
"fr": {
|
||||
"CodeBlocks_title": "Afficher le code",
|
||||
@ -42,6 +50,13 @@
|
||||
"CodeBlocks_inline": "A côté",
|
||||
"CodeBlocks_show": "Afficher le code",
|
||||
"Search_placeholder": "Rechercher...",
|
||||
"Search_one_result": "1 résultat",
|
||||
"Search_results": "!count résultats",
|
||||
"Search_no_results": "Aucun résultat trouvé",
|
||||
"Search_common_words_ignored": "Les mots communs sont ignorés",
|
||||
"Search_too_short": "Critère de recherche trop court",
|
||||
"Search_one_character_or_more": "Doit être un caractère ou plus",
|
||||
"Search_should_be_x_or_more": "Doit être !min caractère ou plus",
|
||||
"Link_previous": "Précédent",
|
||||
"Link_next": "Suivant",
|
||||
"Edit_on": "Editer sur :name:",
|
||||
@ -56,12 +71,40 @@
|
||||
"CodeBlocks_inline": "Linear",
|
||||
"CodeBlocks_show": "Code-Blöcke anzeigen",
|
||||
"Search_placeholder": "Suchen...",
|
||||
"Search_one_result": "1 Ergebnis",
|
||||
"Search_results": "!count Ergebnisse",
|
||||
"Search_no_results": "Nichts gefunden",
|
||||
"Search_common_words_ignored": "Allgemeine Wörter werden weitgehend ignoriert",
|
||||
"Search_too_short": "Suche zu kurz",
|
||||
"Search_one_character_or_more": "Sollte ein Zeichen oder mehr sein",
|
||||
"Search_should_be_x_or_more": "Sollte !min Zeichen oder mehr sein",
|
||||
"Link_previous": "Zurück",
|
||||
"Link_next": "Weiter",
|
||||
"Edit_on": "Bearbeiten bei :name:",
|
||||
"View_on_github": "Bei GitHub anzeigen",
|
||||
"View_documentation": "Dokumentation anzeigen",
|
||||
"Table_of_contents": "Inhaltsverzeichnis"
|
||||
},
|
||||
"it": {
|
||||
"CodeBlocks_title": "Blocchi di codice",
|
||||
"CodeBlocks_hide": "No",
|
||||
"CodeBlocks_below": "Sotto",
|
||||
"CodeBlocks_inline": "In linea",
|
||||
"CodeBlocks_show": "Mostra blocchi di codice",
|
||||
"Search_one_result": "1 risultato",
|
||||
"Search_results": "!count risultati",
|
||||
"Search_no_results": "Nessun risultato trovato",
|
||||
"Search_common_words_ignored": "Le parole comuni vengono per lo più ignorate",
|
||||
"Search_too_short": "Ricerca troppo breve",
|
||||
"Search_one_character_or_more": "Dovrebbe essere composto da uno o più caratteri",
|
||||
"Search_should_be_x_or_more": "Dovrebbe essere composto da almeno !min caratteri",
|
||||
"Search_placeholder": "Cerca...",
|
||||
"Link_previous": "Pagina precedente",
|
||||
"Link_next": "Pagina successiva",
|
||||
"Edit_on": "Modifica su :name:",
|
||||
"View_on_github": "Guarda su GitHub",
|
||||
"View_documentation": "Leggi la documentazione",
|
||||
"Table_of_contents": "Contenuti"
|
||||
}
|
||||
},
|
||||
|
||||
@ -77,8 +120,6 @@
|
||||
"breadcrumb_separator": "Chevrons",
|
||||
"toggle_code": true,
|
||||
"date_modified": false,
|
||||
"date_modified_format": "l, F j, Y g:i A",
|
||||
"float": false,
|
||||
"auto_landing": true,
|
||||
"search": true,
|
||||
"auto_toc": false,
|
||||
|
@ -31,6 +31,5 @@ class Application extends SymfonyApplication
|
||||
|
||||
$this->setVersion($version);
|
||||
$this->setName($app_name);
|
||||
$this->setDefaultCommand('generate');
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ trait RunAction
|
||||
$padding = $width - $this->getLength($title) - 10;
|
||||
|
||||
try {
|
||||
$response = $closure(function ($content) use (&$padding) {
|
||||
$response = $closure(function ($content) use (&$padding, $verbose) {
|
||||
$padding -= $this->getLength($content);
|
||||
Daux::write($content, $verbose);
|
||||
});
|
||||
|
@ -42,19 +42,11 @@ class Serve extends DauxCommand
|
||||
putenv('DAUX_CONFIGURATION=' . $daux->getParams()->getConfigurationOverrideFile());
|
||||
putenv('DAUX_EXTENSION=' . DAUX_EXTENSION);
|
||||
|
||||
$base = ProcessUtils::escapeArgument(__DIR__ . '/../../');
|
||||
$binary = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false));
|
||||
$base = escapeshellarg(__DIR__ . '/../../');
|
||||
$binary = escapeshellarg((new PhpExecutableFinder)->find(false));
|
||||
|
||||
echo "Daux development server started on http://{$host}:{$port}/\n";
|
||||
|
||||
if (defined('HHVM_VERSION')) {
|
||||
if (version_compare(HHVM_VERSION, '3.8.0') >= 0) {
|
||||
passthru("{$binary} -m server -v Server.Type=proxygen -v Server.SourceRoot={$base}/ -v Server.IP={$host} -v Server.Port={$port} -v Server.DefaultDocument=server.php -v Server.ErrorDocument404=server.php");
|
||||
} else {
|
||||
throw new Exception("HHVM's built-in server requires HHVM >= 3.8.0.");
|
||||
}
|
||||
} else {
|
||||
passthru("{$binary} -S {$host}:{$port} {$base}/index.php");
|
||||
}
|
||||
passthru("{$binary} -S {$host}:{$port} {$base}/index.php");
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ class ContentType implements \Todaymade\Daux\ContentTypes\ContentType
|
||||
return $this->doConversion($raw);
|
||||
}
|
||||
|
||||
// TODO :: add daux version to cache key
|
||||
$cacheKey = $this->config->getCacheKey() . sha1($raw);
|
||||
|
||||
$payload = Cache::get($cacheKey);
|
||||
|
@ -109,18 +109,38 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer
|
||||
$urlAndHash = explode('#', $url);
|
||||
$url = $urlAndHash[0];
|
||||
|
||||
$foundWithHash = false;
|
||||
|
||||
try {
|
||||
$file = $this->resolveInternalFile($url);
|
||||
$url = DauxHelper::getRelativePath($this->daux->getCurrentPage()->getUrl(), $file->getUrl());
|
||||
} catch (LinkNotFoundException $e) {
|
||||
if ($this->daux->isStatic()) {
|
||||
throw $e;
|
||||
|
||||
|
||||
|
||||
// For some reason, the filename could contain a # and thus the link needs to resolve to that.
|
||||
try {
|
||||
if (strlen($urlAndHash[1] ?? "") > 0) {
|
||||
$file = $this->resolveInternalFile($url . '#' . $urlAndHash[1]);
|
||||
$url = DauxHelper::getRelativePath($this->daux->getCurrentPage()->getUrl(), $file->getUrl());
|
||||
$foundWithHash = true;
|
||||
}
|
||||
} catch (LinkNotFoundException $e2) {
|
||||
// If it's still not found here, we'll only
|
||||
// report on the first error as the second
|
||||
// one will tell the same.
|
||||
}
|
||||
|
||||
$element->setAttribute('class', 'Link--broken');
|
||||
if (!$foundWithHash) {
|
||||
if ($this->daux->isStatic()) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$element->setAttribute('class', 'Link--broken');
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($urlAndHash[1])) {
|
||||
if (!$foundWithHash && isset($urlAndHash[1])) {
|
||||
$url .= '#' . $urlAndHash[1];
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ class TableOfContentsParser extends AbstractBlockParser
|
||||
}
|
||||
|
||||
$previousState = $cursor->saveState();
|
||||
$cursor->advanceToFirstNonSpace();
|
||||
$cursor->advanceToNextNonSpaceOrNewline();
|
||||
$fence = $cursor->match('/^\[TOC\]/');
|
||||
if (is_null($fence)) {
|
||||
$cursor->restoreState($previousState);
|
||||
|
@ -293,6 +293,20 @@ class Daux
|
||||
return $class;
|
||||
}
|
||||
|
||||
protected function findAlternatives($input, $words) {
|
||||
$alternatives = [];
|
||||
|
||||
foreach ($words as $word) {
|
||||
$lev = levenshtein($input, $word);
|
||||
|
||||
if ($lev <= \strlen($word) / 3) {
|
||||
$alternatives[] = $word;
|
||||
}
|
||||
}
|
||||
|
||||
return $alternatives;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Todaymade\Daux\Format\Base\Generator
|
||||
*/
|
||||
@ -307,7 +321,19 @@ class Daux
|
||||
$format = $this->getParams()->getFormat();
|
||||
|
||||
if (!array_key_exists($format, $generators)) {
|
||||
throw new \RuntimeException("The format '$format' doesn't exist, did you forget to set your processor ?");
|
||||
$message = "The format '$format' doesn't exist, did you forget to set your processor ?";
|
||||
|
||||
$alternatives = $this->findAlternatives($format, array_keys($generators));
|
||||
|
||||
if (0 == \count($alternatives)) {
|
||||
$message .= "\n\nAvailable formats are \n " . implode("\n ", array_keys($generators));
|
||||
} elseif (1 == \count($alternatives)) {
|
||||
$message .= "\n\nDid you mean this?\n " . implode("\n ", $alternatives);
|
||||
} else {
|
||||
$message .= "\n\nDid you mean one of these?\n " . implode("\n ", $alternatives);
|
||||
}
|
||||
|
||||
throw new \RuntimeException($message);
|
||||
}
|
||||
|
||||
$class = $generators[$format];
|
||||
|
@ -189,7 +189,7 @@ class DauxHelper
|
||||
continue;
|
||||
}
|
||||
|
||||
$node = urldecode($node);
|
||||
$node = DauxHelper::slug(urldecode($node));
|
||||
|
||||
// if the node exists in the current request tree,
|
||||
// change the $tree variable to reference the new
|
||||
@ -241,18 +241,21 @@ class DauxHelper
|
||||
*/
|
||||
public static function slug($title)
|
||||
{
|
||||
// Convert to ASCII
|
||||
foreach (static::charsArray() as $key => $value) {
|
||||
$title = str_replace($value, $key, $title);
|
||||
}
|
||||
|
||||
// Remove unsupported characters
|
||||
$title = preg_replace('/[^\x20-\x7E]/u', '', $title);
|
||||
|
||||
$separator = '_';
|
||||
// Convert all dashes into underscores
|
||||
$title = preg_replace('![' . preg_quote('-') . ']+!u', $separator, $title);
|
||||
|
||||
// Remove all characters that are not the separator, letters, numbers, or whitespace.
|
||||
$title = preg_replace('![^' . preg_quote($separator) . '\pL\pN\s]+!u', '', $title);
|
||||
// Remove all characters that are not valid in a URL:
|
||||
// $-_.+!*'(), separator, letters, numbers, or whitespace.
|
||||
$title = preg_replace('![^-' . preg_quote($separator) . '\!\'\(\),\.\+\*\$\pL\pN\s]+!u', '', $title);
|
||||
|
||||
// Replace all separator characters and whitespace by a single separator
|
||||
$title = preg_replace('![' . preg_quote($separator) . '\s]+!u', $separator, $title);
|
||||
@ -485,6 +488,11 @@ class DauxHelper
|
||||
* @return false|null|string
|
||||
*/
|
||||
public static function findLocation($path, $basedir, $var, $type) {
|
||||
// VFS, used only in tests
|
||||
if (substr($path, 0, 6) == "vfs://") {
|
||||
return $path;
|
||||
}
|
||||
|
||||
// When running through `daux --serve` we set an environment variable to know where we started from
|
||||
$env = getenv($var);
|
||||
if ($env && DauxHelper::is($env, $type)) {
|
||||
|
@ -4,6 +4,7 @@ use League\CommonMark\Block\Element\AbstractBlock;
|
||||
use League\CommonMark\Block\Element\FencedCode;
|
||||
use League\CommonMark\ElementRendererInterface;
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\Util\Xml;
|
||||
|
||||
class FencedCodeRenderer extends CodeRenderer
|
||||
{
|
||||
@ -58,7 +59,7 @@ class FencedCodeRenderer extends CodeRenderer
|
||||
return false;
|
||||
}
|
||||
|
||||
$language = $htmlRenderer->escape($infoWords[0], true);
|
||||
$language = Xml::escape($infoWords[0], true);
|
||||
|
||||
if (array_key_exists($language, $this->known_conversions)) {
|
||||
$language = $this->known_conversions[$language];
|
||||
|
@ -104,6 +104,15 @@ class ContentPage extends \Todaymade\Daux\Format\Base\ContentPage
|
||||
|
||||
$context = ['page' => $page, 'params' => $params];
|
||||
|
||||
return $this->templateRenderer->render($this->isLanding() ? 'theme::home' : 'theme::content', $context);
|
||||
$template = "theme::content";
|
||||
if ($this->isLanding()) {
|
||||
$template = "theme::home";
|
||||
}
|
||||
|
||||
if (array_key_exists('template', $page['attributes'])) {
|
||||
$template = "theme::" . $page['attributes']['template'];
|
||||
}
|
||||
|
||||
return $this->templateRenderer->render($template, $context);
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,8 @@ class CommonMarkConverter extends \Todaymade\Daux\ContentTypes\Markdown\CommonMa
|
||||
{
|
||||
parent::extendEnvironment($environment, $config);
|
||||
|
||||
$environment->addBlockRenderer('FencedCode', new FencedCodeRenderer());
|
||||
|
||||
$environment->addDocumentProcessor(new TOC\Processor($config));
|
||||
$environment->addBlockRenderer('Todaymade\Daux\ContentTypes\Markdown\TableOfContents', new TOC\Renderer($config));
|
||||
}
|
||||
|
70
libs/Format/HTML/ContentTypes/Markdown/FencedCodeRenderer.php
Fichier normal
70
libs/Format/HTML/ContentTypes/Markdown/FencedCodeRenderer.php
Fichier normal
@ -0,0 +1,70 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTML\ContentTypes\Markdown;
|
||||
|
||||
use Highlight\Highlighter;
|
||||
use League\CommonMark\Block\Element\AbstractBlock;
|
||||
use League\CommonMark\Block\Element\FencedCode;
|
||||
use League\CommonMark\Block\Renderer\BlockRendererInterface;
|
||||
use League\CommonMark\ElementRendererInterface;
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\Util\Xml;
|
||||
|
||||
class FencedCodeRenderer implements BlockRendererInterface
|
||||
{
|
||||
function __construct() {
|
||||
$this->hl = new Highlighter();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param AbstractBlock $block
|
||||
* @param HtmlRendererInterface $htmlRenderer
|
||||
* @param bool $inTightList
|
||||
*
|
||||
* @return HtmlElement|string
|
||||
*/
|
||||
public function render(AbstractBlock $block, ElementRendererInterface $htmlRenderer, $inTightList = false)
|
||||
{
|
||||
if (!($block instanceof FencedCode)) {
|
||||
throw new \InvalidArgumentException('Incompatible block type: ' . get_class($block));
|
||||
}
|
||||
|
||||
$attrs = [];
|
||||
foreach ($block->getData('attributes', []) as $key => $value) {
|
||||
$attrs[$key] = Xml::escape($value);
|
||||
}
|
||||
|
||||
$content = $block->getStringContent();
|
||||
|
||||
$language = $this->getLanguage($block->getInfoWords());
|
||||
$highlighted = false;
|
||||
if ($language) {
|
||||
$attrs['class'] = isset($attrs['class']) ? $attrs['class'] . ' ' : '';
|
||||
|
||||
try {
|
||||
$highlighted = $this->hl->highlight($language, $content);
|
||||
$content = $highlighted->value;
|
||||
$attrs['class'] .= 'hljs ' . $highlighted->language;
|
||||
} catch (Exception $e) {
|
||||
$attrs['class'] .= 'language-' . $language;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$highlighted) {
|
||||
$content = Xml::escape($content);
|
||||
}
|
||||
|
||||
return new HtmlElement(
|
||||
'pre',
|
||||
[],
|
||||
new HtmlElement('code', $attrs, $content)
|
||||
);
|
||||
}
|
||||
|
||||
public function getLanguage($infoWords)
|
||||
{
|
||||
if (count($infoWords) === 0 || strlen($infoWords[0]) === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Xml::escape($infoWords[0], true);
|
||||
}
|
||||
}
|
@ -254,8 +254,6 @@ class Processor implements DocumentProcessorInterface
|
||||
$method->invoke($subnode, $firstClone);
|
||||
}
|
||||
|
||||
$deepCopy = new DeepCopy();
|
||||
|
||||
return $deepCopy->copy($firstClone)->children();
|
||||
return (new DeepCopy())->copy($firstClone)->children();
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,6 @@ class Renderer implements BlockRendererInterface
|
||||
$content = $htmlRenderer->renderBlocks($block->children());
|
||||
return $this->config->templateRenderer
|
||||
->getEngine($this->config)
|
||||
->render('partials/table_of_contents', ['content' => $content]);
|
||||
->render('theme::partials/table_of_contents', ['content' => $content]);
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ use Todaymade\Daux\Tree\Raw;
|
||||
|
||||
class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
{
|
||||
use RunAction;
|
||||
use RunAction, HTMLUtils;
|
||||
|
||||
/** @var Daux */
|
||||
protected $daux;
|
||||
@ -45,30 +45,6 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
];
|
||||
}
|
||||
|
||||
protected function ensureEmptyDestination($destination)
|
||||
{
|
||||
if (is_dir($destination)) {
|
||||
GeneratorHelper::rmdir($destination);
|
||||
} else {
|
||||
mkdir($destination);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy all files from $local to $destination
|
||||
*
|
||||
* @param string $destination
|
||||
* @param string $local_base
|
||||
*/
|
||||
protected function copyThemes($destination, $local_base)
|
||||
{
|
||||
mkdir($destination . DIRECTORY_SEPARATOR . 'themes');
|
||||
GeneratorHelper::copyRecursive(
|
||||
$local_base,
|
||||
$destination . DIRECTORY_SEPARATOR . 'themes'
|
||||
);
|
||||
}
|
||||
|
||||
public function generateAll(InputInterface $input, OutputInterface $output, $width)
|
||||
{
|
||||
$destination = $input->getOption('destination');
|
||||
@ -96,13 +72,14 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator, LiveGenerator
|
||||
|
||||
$this->generateRecursive($this->daux->tree, $destination, $params, $output, $width, $params['html']['search']);
|
||||
|
||||
GeneratorHelper::copyRecursive(
|
||||
$this->daux->local_base . DIRECTORY_SEPARATOR . 'daux_libraries' . DIRECTORY_SEPARATOR,
|
||||
$destination . DIRECTORY_SEPARATOR . 'daux_libraries'
|
||||
);
|
||||
|
||||
if ($params['html']['search']) {
|
||||
GeneratorHelper::copyRecursive(
|
||||
$this->daux->local_base . DIRECTORY_SEPARATOR . 'tipuesearch' . DIRECTORY_SEPARATOR,
|
||||
$destination . DIRECTORY_SEPARATOR . 'tipuesearch'
|
||||
);
|
||||
file_put_contents(
|
||||
$destination . DIRECTORY_SEPARATOR . 'tipuesearch' . DIRECTORY_SEPARATOR . 'tipuesearch_content.json',
|
||||
$destination . DIRECTORY_SEPARATOR . 'daux_search_index.json',
|
||||
json_encode(['pages' => $this->indexed_pages])
|
||||
);
|
||||
|
||||
|
29
libs/Format/HTML/HTMLUtils.php
Fichier normal
29
libs/Format/HTML/HTMLUtils.php
Fichier normal
@ -0,0 +1,29 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTML;
|
||||
|
||||
use Todaymade\Daux\GeneratorHelper;
|
||||
|
||||
trait HTMLUtils {
|
||||
public function ensureEmptyDestination($destination)
|
||||
{
|
||||
if (is_dir($destination)) {
|
||||
GeneratorHelper::rmdir($destination);
|
||||
} else {
|
||||
mkdir($destination);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy all files from $local to $destination
|
||||
*
|
||||
* @param string $destination
|
||||
* @param string $local_base
|
||||
*/
|
||||
public function copyThemes($destination, $local_base)
|
||||
{
|
||||
mkdir($destination . DIRECTORY_SEPARATOR . 'themes');
|
||||
GeneratorHelper::copyRecursive(
|
||||
$local_base,
|
||||
$destination . DIRECTORY_SEPARATOR . 'themes'
|
||||
);
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTML;
|
||||
<?php
|
||||
|
||||
namespace Todaymade\Daux\Format\HTML;
|
||||
|
||||
use League\Plates\Engine;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
@ -84,8 +86,17 @@ class Template
|
||||
$engine->registerFunction('translate', function ($key) {
|
||||
$language = $this->params['language'];
|
||||
|
||||
if (array_key_exists($key, $this->params['strings'][$language])) {
|
||||
return $this->params['strings'][$language][$key];
|
||||
if (isset($this->engine->getData('page')['page'])) {
|
||||
$page = $this->engine->getData('page');
|
||||
if (!empty($page['page']['language'])) {
|
||||
$language = $page['page']['language'];
|
||||
}
|
||||
}
|
||||
|
||||
if (array_key_exists($language, $this->params['strings'])) {
|
||||
if (array_key_exists($key, $this->params['strings'][$language])) {
|
||||
return $this->params['strings'][$language][$key];
|
||||
}
|
||||
}
|
||||
|
||||
if (array_key_exists($key, $this->params['strings']['en'])) {
|
||||
@ -122,9 +133,9 @@ class Template
|
||||
$icon = '<i class="Nav__arrow"> </i>';
|
||||
|
||||
if (array_key_exists('href', $entry)) {
|
||||
$link = '<a href="' . $entry['href'] . '" class="folder">' . $icon . $entry['title'] . '</a>';
|
||||
$link = '<a href="' . $entry['href'] . '" class="Nav__item__link">' . $icon . $entry['title'] . '</a>';
|
||||
} else {
|
||||
$link = '<a href="#" class="aj-nav folder">' . $icon . $entry['title'] . '</a>';
|
||||
$link = '<a href="#" class="Nav__item__link Nav__item__link--nopage">' . $icon . $entry['title'] . '</a>';
|
||||
}
|
||||
|
||||
$link .= $this->renderNavigation($entry['children']);
|
||||
|
@ -22,15 +22,9 @@ class Book
|
||||
return '<style>' . file_get_contents('themes/daux_singlepage/css/main.min.css') . '</style>';
|
||||
}
|
||||
|
||||
protected function getSectionId(Content $node)
|
||||
protected function getPageUrl($page)
|
||||
{
|
||||
foreach ($this->pages as $id => $page) {
|
||||
if ($page['page'] == $node) {
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException('Could not find the content page');
|
||||
return "file_" . str_replace('/', '_', $page->getUrl());
|
||||
}
|
||||
|
||||
protected function buildNavigation(Directory $tree)
|
||||
@ -44,7 +38,7 @@ class Book
|
||||
|
||||
$nav[] = [
|
||||
'title' => $node->getTitle(),
|
||||
'href' => '#section_' . $this->getSectionId($node),
|
||||
'href' => "#" . $this->getPageUrl($node),
|
||||
];
|
||||
} elseif ($node instanceof Directory) {
|
||||
if (!$node->hasContent()) {
|
||||
@ -55,7 +49,7 @@ class Book
|
||||
|
||||
$nav[] = [
|
||||
'title' => $node->getTitle(),
|
||||
'href' => '#section_' . $this->getSectionId($page_index),
|
||||
'href' => "#" . $this->getPageUrl($page_index),
|
||||
'children' => $this->buildNavigation($node),
|
||||
];
|
||||
}
|
||||
@ -70,9 +64,9 @@ class Book
|
||||
foreach ($entries as $entry) {
|
||||
if (array_key_exists('children', $entry)) {
|
||||
if (array_key_exists('href', $entry)) {
|
||||
$link = '<a href="' . $entry['href'] . '" class="folder">' . $entry['title'] . '</a>';
|
||||
$link = '<a href="' . $entry['href'] . '" class="Nav__item__link--nopage">' . $entry['title'] . '</a>';
|
||||
} else {
|
||||
$link = '<a href="#" class="aj-nav folder">' . $entry['title'] . '</a>';
|
||||
$link = '<a href="#" class="Nav__item__link Nav__item__link--nopage">' . $entry['title'] . '</a>';
|
||||
}
|
||||
|
||||
$link .= $this->renderNavigation($entry['children']);
|
||||
@ -104,8 +98,8 @@ class Book
|
||||
protected function generatePages()
|
||||
{
|
||||
$content = '';
|
||||
foreach ($this->pages as $section => $page) {
|
||||
$content .= '<a id="section_' . $section . '"></a>';
|
||||
foreach ($this->pages as $page) {
|
||||
$content .= '<a id="' . $this->getPageUrl($page['page']) . '"></a>';
|
||||
$content .= '<h1>' . $page['page']->getTitle() . '</h1>';
|
||||
$content .= '<section class="s-content">' . $page['content'] . '</section>';
|
||||
$content .= '<div class="PageBreak"> </div>';
|
||||
|
13
libs/Format/HTMLFile/ContentTypes/Markdown/CommonMarkConverter.php
Fichier normal
13
libs/Format/HTMLFile/ContentTypes/Markdown/CommonMarkConverter.php
Fichier normal
@ -0,0 +1,13 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTMLFile\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\Environment;
|
||||
use Todaymade\Daux\Config;
|
||||
|
||||
class CommonMarkConverter extends \Todaymade\Daux\Format\HTML\ContentTypes\Markdown\CommonMarkConverter
|
||||
{
|
||||
protected function getLinkRenderer(Environment $environment)
|
||||
{
|
||||
var_dump(LinkRenderer::class);
|
||||
return new LinkRenderer($environment->getConfig('daux'));
|
||||
}
|
||||
}
|
12
libs/Format/HTMLFile/ContentTypes/Markdown/ContentType.php
Fichier normal
12
libs/Format/HTMLFile/ContentTypes/Markdown/ContentType.php
Fichier normal
@ -0,0 +1,12 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTMLFile\ContentTypes\Markdown;
|
||||
|
||||
use Todaymade\Daux\Config;
|
||||
|
||||
class ContentType extends \Todaymade\Daux\ContentTypes\Markdown\ContentType
|
||||
{
|
||||
public function __construct(Config $config)
|
||||
{
|
||||
$this->config = $config;
|
||||
$this->converter = new CommonMarkConverter(['daux' => $config]);
|
||||
}
|
||||
}
|
74
libs/Format/HTMLFile/ContentTypes/Markdown/LinkRenderer.php
Fichier normal
74
libs/Format/HTMLFile/ContentTypes/Markdown/LinkRenderer.php
Fichier normal
@ -0,0 +1,74 @@
|
||||
<?php namespace Todaymade\Daux\Format\HTMLFile\ContentTypes\Markdown;
|
||||
|
||||
use League\CommonMark\ElementRendererInterface;
|
||||
use League\CommonMark\HtmlElement;
|
||||
use League\CommonMark\Inline\Element\AbstractInline;
|
||||
use League\CommonMark\Inline\Element\Link;
|
||||
use Todaymade\Daux\Config;
|
||||
use Todaymade\Daux\DauxHelper;
|
||||
use Todaymade\Daux\Exception\LinkNotFoundException;
|
||||
use Todaymade\Daux\Tree\Entry;
|
||||
|
||||
class LinkRenderer extends \Todaymade\Daux\ContentTypes\Markdown\LinkRenderer
|
||||
{
|
||||
/**
|
||||
* @param AbstractInline|Link $inline
|
||||
* @param ElementRendererInterface $htmlRenderer
|
||||
* @return HtmlElement
|
||||
* @throws LinkNotFoundException
|
||||
*/
|
||||
public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer)
|
||||
{
|
||||
// This can't be in the method type as
|
||||
// the method is an abstract and should
|
||||
// have the same interface
|
||||
if (!$inline instanceof Link) {
|
||||
throw new \RuntimeException(
|
||||
'Wrong type passed to ' . __CLASS__ . '::' . __METHOD__ .
|
||||
" the expected type was 'League\\CommonMark\\Inline\\Element\\Link' but '" .
|
||||
get_class($inline) . "' was provided"
|
||||
);
|
||||
}
|
||||
|
||||
$element = parent::render($inline, $htmlRenderer);
|
||||
|
||||
$url = $inline->getUrl();
|
||||
|
||||
// empty urls and anchors should
|
||||
// not go through the url resolver
|
||||
if (!$this->isValidUrl($url)) {
|
||||
return $element;
|
||||
}
|
||||
|
||||
// Absolute urls, shouldn't either
|
||||
if ($this->isExternalUrl($url)) {
|
||||
$element->setAttribute('class', 'Link--external');
|
||||
|
||||
return $element;
|
||||
}
|
||||
|
||||
// if there's a hash component in the url, we can directly use it as all pages are in the same file
|
||||
$urlAndHash = explode('#', $url);
|
||||
if (isset($urlAndHash[1])) {
|
||||
$element->setAttribute('href', '#' . $urlAndHash[1]);
|
||||
|
||||
return $element;
|
||||
}
|
||||
|
||||
try {
|
||||
$file = $this->resolveInternalFile($url);
|
||||
$url = $file->getUrl();
|
||||
} catch (LinkNotFoundException $e) {
|
||||
if ($this->daux->isStatic()) {
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$element->setAttribute('class', 'Link--broken');
|
||||
}
|
||||
|
||||
$url = str_replace('/', '_', $url);
|
||||
$element->setAttribute('href', "#file_$url");
|
||||
|
||||
return $element;
|
||||
}
|
||||
}
|
@ -5,11 +5,12 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Todaymade\Daux\Console\RunAction;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\Format\HTML\Template;
|
||||
use Todaymade\Daux\Format\HTML\ContentTypes\Markdown\ContentType;
|
||||
use Todaymade\Daux\Format\HTML\HTMLUtils;
|
||||
use Todaymade\Daux\Format\HTMLFile\ContentTypes\Markdown\ContentType;
|
||||
|
||||
class Generator implements \Todaymade\Daux\Format\Base\Generator
|
||||
{
|
||||
use RunAction;
|
||||
use RunAction, HTMLUtils;
|
||||
|
||||
/** @var Daux */
|
||||
protected $daux;
|
||||
@ -36,52 +37,31 @@ class Generator implements \Todaymade\Daux\Format\Base\Generator
|
||||
];
|
||||
}
|
||||
|
||||
protected function initPDF()
|
||||
{
|
||||
// create new PDF document
|
||||
$pdf = new Book(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
|
||||
|
||||
$params = $this->daux->getParams();
|
||||
|
||||
// set document information
|
||||
$pdf->SetCreator(PDF_CREATOR);
|
||||
|
||||
|
||||
// set default header data
|
||||
$pdf->SetHeaderData('', 0, $params['title'], $params['tagline']);
|
||||
|
||||
// set header and footer fonts
|
||||
$pdf->setHeaderFont([PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN]);
|
||||
$pdf->setFooterFont([PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA]);
|
||||
|
||||
// set default monospaced font
|
||||
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
|
||||
|
||||
// set margins
|
||||
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
|
||||
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
|
||||
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
|
||||
|
||||
// set auto page breaks
|
||||
$pdf->SetAutoPageBreak(true, PDF_MARGIN_BOTTOM);
|
||||
|
||||
// set image scale factor
|
||||
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
|
||||
|
||||
// set font
|
||||
$pdf->SetFont('helvetica', '', 10);
|
||||
|
||||
return $pdf;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function generateAll(InputInterface $input, OutputInterface $output, $width)
|
||||
{
|
||||
$params = $this->daux->getParams();
|
||||
$destination = $input->getOption('destination');
|
||||
|
||||
$data = ['author' => $params['author'], 'title' => $params['title'], 'subject' => $params['tagline']];
|
||||
$params = $this->daux->getParams();
|
||||
if (is_null($destination)) {
|
||||
$destination = $this->daux->local_base . DIRECTORY_SEPARATOR . 'static';
|
||||
}
|
||||
|
||||
$this->runAction(
|
||||
'Cleaning destination folder ...',
|
||||
$width,
|
||||
function() use ($destination, $params) {
|
||||
$this->ensureEmptyDestination($destination);
|
||||
}
|
||||
);
|
||||
|
||||
$data = [
|
||||
'author' => $params['author'],
|
||||
'title' => $params['title'],
|
||||
'subject' => $params['tagline']
|
||||
];
|
||||
|
||||
$book = new Book($this->daux->tree, $data);
|
||||
|
||||
|
22
libs/FormatDate.php
Fichier normal
22
libs/FormatDate.php
Fichier normal
@ -0,0 +1,22 @@
|
||||
<?php namespace Todaymade\Daux;
|
||||
|
||||
use IntlDateFormatter;
|
||||
|
||||
class FormatDate
|
||||
{
|
||||
public static function format($params, $date) {
|
||||
$locale = $params['language'];
|
||||
$datetype = IntlDateFormatter::LONG;
|
||||
$timetype = IntlDateFormatter::SHORT;
|
||||
$timezone = null;
|
||||
|
||||
if (!extension_loaded("intl")) {
|
||||
$locale = 'en';
|
||||
$timezone = 'GMT';
|
||||
}
|
||||
|
||||
$formatter = new IntlDateFormatter($locale, $datetype, $timetype, $timezone);
|
||||
|
||||
return $formatter->format($date);
|
||||
}
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
<?php namespace Todaymade\Daux\Server;
|
||||
|
||||
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface;
|
||||
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface as FileMimeTypeGuesserInterface;
|
||||
use Symfony\Component\Mime\MimeTypeGuesserInterface;
|
||||
|
||||
/**
|
||||
* Guesses the mime type using the file's extension
|
||||
*/
|
||||
class ExtensionMimeTypeGuesser implements MimeTypeGuesserInterface
|
||||
class ExtensionMimeTypeGuesser implements FileMimeTypeGuesserInterface, MimeTypeGuesserInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
@ -22,4 +23,20 @@ class ExtensionMimeTypeGuesser implements MimeTypeGuesserInterface
|
||||
return "application/javascript";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isGuesserSupported(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function guessMimeType(string $path): ?string
|
||||
{
|
||||
return $this->guess($path);
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ use Symfony\Component\Console\Output\NullOutput;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser;
|
||||
use Symfony\Component\Mime\MimeTypes;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\DauxHelper;
|
||||
use Todaymade\Daux\Exception;
|
||||
@ -97,7 +97,8 @@ class Server
|
||||
*/
|
||||
public function createResponse(Page $page) {
|
||||
|
||||
MimeTypeGuesser::getInstance()->register(new ExtensionMimeTypeGuesser);
|
||||
$mimeTypes = MimeTypes::getDefault();
|
||||
$mimeTypes->registerGuesser(new ExtensionMimeTypeGuesser());
|
||||
|
||||
if ($page instanceof RawPage) {
|
||||
return new BinaryFileResponse($page->getFile());
|
||||
@ -142,7 +143,7 @@ class Server
|
||||
{
|
||||
$this->params = $this->getParams();
|
||||
|
||||
$request = substr($this->request->getRequestUri(), 1);
|
||||
$request = substr($this->request->getRequestUri(), strlen($this->request->getBaseUrl()) + 1);
|
||||
|
||||
if (substr($request, 0, 7) == 'themes/') {
|
||||
return $this->serveTheme(substr($request, 6));
|
||||
|
@ -75,7 +75,7 @@ class Builder
|
||||
}
|
||||
|
||||
if ($file->isDir()) {
|
||||
$title = static::removeSortingInformations($file->getFilename());
|
||||
$title = DauxHelper::slug(static::removeSortingInformations($file->getFilename()));
|
||||
$new = new Directory($node, $title, $file);
|
||||
$new->setName(static::getName($file->getPathName()));
|
||||
$new->setTitle(str_replace('_', ' ', static::removeSortingInformations($new->getName())));
|
||||
@ -115,6 +115,7 @@ class Builder
|
||||
}
|
||||
|
||||
$uri = static::removeSortingInformations($name);
|
||||
$uri = DauxHelper::slug($uri);
|
||||
if ($config->isStatic()) {
|
||||
$uri .= '.html';
|
||||
}
|
||||
|
13
package.json
13
package.json
@ -3,12 +3,17 @@
|
||||
"version": "0.3.0",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"@swissquote/crafty": "^1.0.1",
|
||||
"@swissquote/crafty-preset-postcss": "^1.0.1",
|
||||
"@swissquote/crafty-runner-gulp": "^1.0.1"
|
||||
"@swissquote/crafty": "^1.8.0",
|
||||
"@swissquote/crafty-preset-babel": "^1.8.0",
|
||||
"@swissquote/crafty-preset-postcss": "^1.8.0",
|
||||
"@swissquote/crafty-runner-gulp": "^1.8.0",
|
||||
"@swissquote/crafty-runner-rollup": "^1.8.0",
|
||||
"flexsearch": "^0.6.30",
|
||||
"preact": "^10.0.0-rc.3"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "crafty run",
|
||||
"watch": "crafty watch"
|
||||
"watch": "crafty watch",
|
||||
"lint:css": "crafty cssLint --fix --preset recommended themes/daux_singlepage/scss/*.scss themes/daux/scss/*.scss"
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@
|
||||
convertWarningsToExceptions="true"
|
||||
processIsolation="false"
|
||||
stopOnFailure="false"
|
||||
syntaxCheck="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Daux Test Suite">
|
||||
|
483
src/css/theme_daux/_components.scss
Fichier normal
483
src/css/theme_daux/_components.scss
Fichier normal
@ -0,0 +1,483 @@
|
||||
/* ============================================================================
|
||||
Base tags
|
||||
============================================================================ */
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--link-color);
|
||||
|
||||
&.Link--external:after {
|
||||
content: " "
|
||||
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=);
|
||||
}
|
||||
|
||||
&.Link--broken {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 1em;
|
||||
}
|
||||
|
||||
hr {
|
||||
clear: both;
|
||||
margin: 1em 0;
|
||||
border: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
/* ============================================================================
|
||||
Components
|
||||
============================================================================ */
|
||||
|
||||
.Button {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
touch-action: manipulation;
|
||||
cursor: pointer;
|
||||
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
|
||||
border: 1px solid transparent;
|
||||
white-space: nowrap;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 0;
|
||||
|
||||
&--small {
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
&--default {
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
border-color: #ccc;
|
||||
|
||||
&.Button--active {
|
||||
color: #333;
|
||||
background-color: #e6e6e6;
|
||||
border-color: #adadad;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Brand {
|
||||
display: block;
|
||||
background-color: var(--brand-background);
|
||||
padding: 0.75em 0.6em;
|
||||
font-size: var(--type-size-4);
|
||||
text-shadow: none;
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 700;
|
||||
color: var(--brand-color);
|
||||
}
|
||||
|
||||
.Navbar {
|
||||
height: 50px;
|
||||
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);
|
||||
background-color: var(--homepage-navbar-background);
|
||||
margin-bottom: 0;
|
||||
|
||||
.Brand {
|
||||
float: left;
|
||||
line-height: 20px;
|
||||
height: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.CodeToggler {
|
||||
padding: 0 20px;
|
||||
|
||||
&__text {
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
padding: 6px 10px 6px 0;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
/* stylelint-disable-next-line selector-class-pattern */
|
||||
.no-js .CodeToggler {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Sidebar navigation
|
||||
.Nav {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
&__arrow {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 16px;
|
||||
margin-left: -16px;
|
||||
|
||||
&:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
margin: -0.25em 0 0 -0.4em;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
border-right: 0.15em solid var(--sidebar-link-arrow-color);
|
||||
border-top: 0.15em solid var(--sidebar-link-arrow-color);
|
||||
transform: rotate(45deg);
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
}
|
||||
|
||||
&__item {
|
||||
display: block;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 6px 15px 6px 20px;
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 400;
|
||||
color: var(--sidebar-link-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--sidebar-link-color);
|
||||
text-shadow: none;
|
||||
background-color: var(--sidebar-link-hover-background);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Nav .Nav {
|
||||
margin-left: 15px;
|
||||
|
||||
/* stylelint-disable-next-line selector-class-pattern */
|
||||
html:not(.no-js) & {
|
||||
height: 0;
|
||||
transition: height 400ms ease-in-out;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.Nav__item a {
|
||||
margin: 0;
|
||||
margin-left: -15px;
|
||||
padding: 3px 30px;
|
||||
font-family: var(--font-family-text);
|
||||
color: var(--sidebar-link-secondary-color);
|
||||
opacity: 0.7;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.Nav__item--active a {
|
||||
color: var(--sidebar-link-color);
|
||||
}
|
||||
}
|
||||
|
||||
.Nav__item {
|
||||
&--open,
|
||||
&--active {
|
||||
> a {
|
||||
background-color: var(--sidebar-link-active-background);
|
||||
}
|
||||
}
|
||||
|
||||
&--open {
|
||||
> a > .Nav__arrow:before {
|
||||
margin-left: -0.25em;
|
||||
transform: rotate(135deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Page__header {
|
||||
margin: 0 0 10px;
|
||||
padding: 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
@include clearfix();
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 57px;
|
||||
}
|
||||
|
||||
&--separator {
|
||||
height: 0.6em;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ModifiedDate {
|
||||
float: left;
|
||||
font-size: 10px;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
.EditOn {
|
||||
float: right;
|
||||
font-size: 10px;
|
||||
color: gray;
|
||||
}
|
||||
}
|
||||
|
||||
.Links {
|
||||
padding: 0 20px;
|
||||
|
||||
a {
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 400;
|
||||
color: var(--sidebar-link-color);
|
||||
line-height: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
.Twitter {
|
||||
padding: 0 20px;
|
||||
font: normal normal normal 11px/18px "Helvetica Neue", Arial, sans-serif;
|
||||
|
||||
&__button {
|
||||
text-decoration: none;
|
||||
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
zoom: 1;
|
||||
|
||||
position: relative;
|
||||
height: 20px;
|
||||
box-sizing: border-box;
|
||||
padding: 1px 8px 1px 6px;
|
||||
background-color: #1b95e0;
|
||||
color: #fff;
|
||||
border-radius: 3px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
|
||||
.Twitter__button__label {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
zoom: 1;
|
||||
|
||||
margin-left: 3px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
svg {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
display: inline-block;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.PoweredBy {
|
||||
padding: 0 20px 1rem 20px;
|
||||
font-size: var(--type-size-6);
|
||||
}
|
||||
|
||||
.Search {
|
||||
position: relative;
|
||||
|
||||
&__field {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
padding: 6px 30px 6px 20px;
|
||||
color: var(--search-field-color);
|
||||
border-width: 0 0 1px;
|
||||
border-bottom: 1px solid var(--search-field-border-color);
|
||||
background: var(--search-field-background);
|
||||
transition: border-color ease-in-out 0.15s;
|
||||
|
||||
&:focus {
|
||||
border-color: var(--search-field-hover-border-color);
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&__icon {
|
||||
position: absolute;
|
||||
right: 9px;
|
||||
top: 9px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.Navbar .Search {
|
||||
float: right;
|
||||
margin: 8px 20px;
|
||||
|
||||
&__field {
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
border-width: 0;
|
||||
border-radius: 4px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.TableOfContentsContainer {
|
||||
float: right;
|
||||
min-width: 300px;
|
||||
max-width: 25%;
|
||||
padding-left: 1em;
|
||||
|
||||
&__title {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
&__content {
|
||||
border: 1px solid #efefef;
|
||||
border-width: 4px 2px 2px 6px;
|
||||
}
|
||||
|
||||
&__content > .TableOfContents > li + li {
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
ul.TableOfContents {
|
||||
font-size: 1rem;
|
||||
padding-left: 0;
|
||||
margin: 0;
|
||||
list-style-type: none;
|
||||
|
||||
p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 0.2em 0 0.2em 0.75em;
|
||||
}
|
||||
|
||||
.TableOfContents {
|
||||
padding-left: 0.75em;
|
||||
}
|
||||
}
|
||||
|
||||
.Pager {
|
||||
padding-left: 0;
|
||||
margin: 1em 0;
|
||||
list-style: none;
|
||||
text-align: center;
|
||||
clear: both;
|
||||
|
||||
@include clearfix();
|
||||
|
||||
li {
|
||||
display: inline;
|
||||
|
||||
> a {
|
||||
display: inline-block;
|
||||
padding: 5px 14px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
> a:hover,
|
||||
> a:focus {
|
||||
text-decoration: none;
|
||||
background-color: #eee;
|
||||
}
|
||||
}
|
||||
|
||||
&--next > a {
|
||||
float: right;
|
||||
}
|
||||
|
||||
&--prev > a {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.Checkbox {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding-left: 30px;
|
||||
cursor: pointer;
|
||||
|
||||
input {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.Checkbox__indicator {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -10px;
|
||||
background: var(--checkbox-background);
|
||||
|
||||
/* Check mark */
|
||||
&:after {
|
||||
position: absolute;
|
||||
display: none;
|
||||
content: "";
|
||||
}
|
||||
|
||||
/* Hover and focus states */
|
||||
.Checkbox:hover input ~ &,
|
||||
.Checkbox input:focus ~ & {
|
||||
background: var(--checkbox-hover-background);
|
||||
}
|
||||
|
||||
/* Checked state */
|
||||
.Checkbox input:checked ~ & {
|
||||
background: var(--checkbox-checked-background);
|
||||
|
||||
/* Show check mark */
|
||||
&:after {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hover state whilst checked */
|
||||
.Checkbox:hover input:not([disabled]):checked ~ &,
|
||||
.Checkbox input:checked:focus ~ & {
|
||||
background: var(--checkbox-checked-hover-background);
|
||||
}
|
||||
|
||||
/* Disabled state */
|
||||
.Checkbox input:disabled ~ & {
|
||||
pointer-events: none;
|
||||
opacity: 0.6;
|
||||
background: var(--checkbox-disabled-background);
|
||||
}
|
||||
|
||||
/* Checkbox tick */
|
||||
.Checkbox &:after {
|
||||
top: 4px;
|
||||
left: 8px;
|
||||
width: 5px;
|
||||
height: 10px;
|
||||
transform: rotate(45deg);
|
||||
border: solid var(--checkbox-tick-color);
|
||||
border-width: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
/* Disabled tick colour */
|
||||
.Checkbox input:disabled ~ &:after {
|
||||
border-color: var(--checkbox-disabled-tick-color);
|
||||
}
|
||||
}
|
||||
|
||||
.Hidden {
|
||||
display: none;
|
||||
}
|
56
src/css/theme_daux/_fonts.scss
Fichier normal
56
src/css/theme_daux/_fonts.scss
Fichier normal
@ -0,0 +1,56 @@
|
||||
:root {
|
||||
--font-family-text: -apple-system, ".SFNSText-Regular", "San Francisco",
|
||||
"Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial,
|
||||
sans-serif;
|
||||
--font-family-monospace: Monaco, Menlo, Consolas, "Lucida Console",
|
||||
"Courier New", monospace;
|
||||
--font-family-heading: "Roboto Slab", var(--font-family-text);
|
||||
}
|
||||
|
||||
/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-light.eot");
|
||||
src: url("../fonts/robotoslab-light.eot?#iefix") format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-light.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-light.woff") format("woff"),
|
||||
url("../fonts/robotoslab-light.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-light.svg#roboto_slablight") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-regular.eot");
|
||||
src: url("../fonts/robotoslab-regular.eot?#iefix")
|
||||
format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-regular.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-regular.woff") format("woff"),
|
||||
url("../fonts/robotoslab-regular.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-regular.svg#roboto_slabregular") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-bold.eot");
|
||||
src: url("../fonts/robotoslab-bold.eot?#iefix") format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-bold.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-bold.woff") format("woff"),
|
||||
url("../fonts/robotoslab-bold.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-bold.svg#roboto_slabbold") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
226
src/css/theme_daux/_homepage.scss
Fichier normal
226
src/css/theme_daux/_homepage.scss
Fichier normal
@ -0,0 +1,226 @@
|
||||
/* ============================================================================
|
||||
Homepage
|
||||
============================================================================ */
|
||||
|
||||
.Container {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
|
||||
&--inner {
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.Container {
|
||||
width: 1170px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.Container {
|
||||
width: 970px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.Container {
|
||||
width: 750px;
|
||||
}
|
||||
}
|
||||
|
||||
.Homepage {
|
||||
padding-top: 60px !important;
|
||||
background-color: var(--homepage-hero-background);
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
color: var(--homepage-hero-color);
|
||||
overflow: hidden;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
|
||||
@include kill-box-shadow;
|
||||
}
|
||||
|
||||
.HomepageTitle {
|
||||
h2 {
|
||||
width: 80%;
|
||||
font-size: 30px;
|
||||
margin: 20px auto;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.HomepageImage {
|
||||
img {
|
||||
display: block;
|
||||
max-width: 80%;
|
||||
margin: 0 auto;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.HomepageButtons {
|
||||
padding: 20px 0;
|
||||
background-color: var(--hero-button-block-background);
|
||||
text-align: center;
|
||||
|
||||
@include clearfix;
|
||||
|
||||
.Button--hero {
|
||||
padding: 20px 30px;
|
||||
border-radius: 0;
|
||||
text-shadow: none;
|
||||
opacity: 0.8;
|
||||
margin: 0 10px;
|
||||
text-transform: uppercase;
|
||||
border: 5px solid var(--hero-button-border-color);
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 700;
|
||||
|
||||
@include kill-background-image;
|
||||
@include kill-box-shadow;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
display: block;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.Button--secondary {
|
||||
background-color: var(--hero-button-secondary-background);
|
||||
color: var(--hero-button-secondary-color);
|
||||
}
|
||||
|
||||
&.Button--primary {
|
||||
background-color: var(--hero-buttom-primary-background);
|
||||
color: var(--hero-button-primary-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.HomepageContent {
|
||||
background-color: white;
|
||||
padding: 40px 0;
|
||||
|
||||
ul,
|
||||
ol {
|
||||
li {
|
||||
list-style: none;
|
||||
margin-bottom: 0.5em;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
li:before {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: -1.5em;
|
||||
content: "";
|
||||
width: 0;
|
||||
height: 0;
|
||||
border: 0.5em solid transparent;
|
||||
border-left: 0.5em solid var(--homepage-bullet-color);
|
||||
float: left;
|
||||
display: block;
|
||||
margin-top: -0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.HeroText {
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 300;
|
||||
font-size: 16px;
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
padding: 40px 20px;
|
||||
|
||||
.HeroText {
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
.Row {
|
||||
margin: 0 -15px;
|
||||
}
|
||||
|
||||
.Row__third,
|
||||
.Row__half,
|
||||
.Row__quarter {
|
||||
float: left;
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.Row__third {
|
||||
width: 33.333333%;
|
||||
}
|
||||
|
||||
.Row__half {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.Row__quarter {
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.HomepageFooter {
|
||||
background-color: var(--homepage-footer-background);
|
||||
color: var(--homepage-footer-color);
|
||||
border: none;
|
||||
|
||||
@include kill-box-shadow;
|
||||
@include clearfix;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
padding: 0 20px;
|
||||
text-align: center;
|
||||
|
||||
.HomepageFooter__links {
|
||||
padding-left: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.HomepageFooter__links {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.HomepageFooter__twitter {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
&__links {
|
||||
margin: 40px 0;
|
||||
|
||||
li a {
|
||||
line-height: 32px;
|
||||
font-size: 16px;
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
li a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
&__twitter {
|
||||
margin: 40px 0;
|
||||
}
|
||||
|
||||
.Twitter__button {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
36
src/css/theme_daux/_mixins.scss
Fichier normal
36
src/css/theme_daux/_mixins.scss
Fichier normal
@ -0,0 +1,36 @@
|
||||
/* ============================================================================
|
||||
Mixins
|
||||
============================================================================ */
|
||||
|
||||
@mixin kill-background-image {
|
||||
background-image: none;
|
||||
filter: none;
|
||||
}
|
||||
|
||||
@mixin kill-box-shadow {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
// Clearfix
|
||||
//
|
||||
// For modern browsers
|
||||
// 1. The space content is one way to avoid an Opera bug when the
|
||||
// contenteditable attribute is included anywhere else in the document.
|
||||
// Otherwise it causes space to appear at the top and bottom of elements
|
||||
// that are clearfixed.
|
||||
// 2. The use of `table` rather than `block` is only necessary if using
|
||||
// `:before` to contain the top-margins of child elements.
|
||||
//
|
||||
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
|
||||
|
||||
@mixin clearfix {
|
||||
&:before,
|
||||
&:after {
|
||||
content: " "; // 1
|
||||
display: table; // 2
|
||||
}
|
||||
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
86
src/css/theme_daux/_print.scss
Fichier normal
86
src/css/theme_daux/_print.scss
Fichier normal
@ -0,0 +1,86 @@
|
||||
* {
|
||||
text-shadow: none !important;
|
||||
color: #000 !important; // Black prints faster: h5bp.com/s
|
||||
background: transparent !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
page-break-after: avoid;
|
||||
page-break-before: auto;
|
||||
}
|
||||
|
||||
pre,
|
||||
blockquote {
|
||||
border: 1px solid #999;
|
||||
font-style: italic;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
img {
|
||||
page-break-inside: avoid;
|
||||
border: 0; /* Some browsers like to show a border around images. Switch it off */
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
|
||||
q {
|
||||
quotes: none;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: " (" attr(cite) ")";
|
||||
}
|
||||
}
|
||||
|
||||
.PageBreak {
|
||||
display: block;
|
||||
page-break-before: always;
|
||||
}
|
||||
|
||||
.NoPrint {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hide the navigation */
|
||||
aside {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.Pager {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.Columns__right {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.s-content a:after {
|
||||
content: " (" attr(href) ")";
|
||||
font-size: 80%;
|
||||
word-wrap: break-word; /* break long urls that donìt fit the page width */
|
||||
}
|
||||
|
||||
/* Anchors don't need that */
|
||||
.s-content a[href^="#"]:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
h1 a[href]:after {
|
||||
font-size: 50%;
|
||||
}
|
150
src/css/theme_daux/_structure.scss
Fichier normal
150
src/css/theme_daux/_structure.scss
Fichier normal
@ -0,0 +1,150 @@
|
||||
*,
|
||||
*:after,
|
||||
*:before {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* ============================================================================
|
||||
Docs Body & Page Structure
|
||||
============================================================================ */
|
||||
|
||||
html {
|
||||
font-size: 14px;
|
||||
|
||||
@media (--viewport-large) {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
.Columns {
|
||||
&__left {
|
||||
background-color: var(--sidebar-background);
|
||||
}
|
||||
|
||||
&__right {
|
||||
&__content {
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
// mobile friendly sub-nav
|
||||
/* stylelint-disable-next-line selector-class-pattern */
|
||||
html:not(.no-js) .Collapsible__content {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
transition: height 400ms ease-in-out;
|
||||
}
|
||||
}
|
||||
|
||||
.Collapsible__trigger {
|
||||
margin: 12px;
|
||||
padding: 7px 10px;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
float: right;
|
||||
|
||||
@include kill-background-image;
|
||||
@include kill-box-shadow;
|
||||
|
||||
&__bar {
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 2px;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 3px;
|
||||
background-color: var(--sidebar-collapsible--hamburger-color);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: var(
|
||||
--sidebar-collapsible--hamburger-hover-background
|
||||
);
|
||||
|
||||
@include kill-box-shadow;
|
||||
|
||||
.Collapsible__trigger__bar {
|
||||
background-color: var(--sidebar-collapsible--hamburger-hover-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 769px) {
|
||||
body {
|
||||
//Needed only for floating code blocks
|
||||
background-color: var(--content-floating-blocks-background);
|
||||
}
|
||||
|
||||
.Navbar {
|
||||
position: fixed;
|
||||
z-index: 1030;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.Collapsible {
|
||||
&__trigger {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&__content {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
||||
.Columns {
|
||||
height: 100%;
|
||||
|
||||
&:after,
|
||||
&:before {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
&__left,
|
||||
&__right {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
float: left;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
&__left {
|
||||
width: 25%;
|
||||
border-right: 1px solid var(--sidebar-border);
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
&__right {
|
||||
width: 75%;
|
||||
|
||||
&__content {
|
||||
padding: 0 20px 20px;
|
||||
min-height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.Page {
|
||||
// 860 == screen-width of 1200 - sidebar - margin
|
||||
max-width: 860px;
|
||||
}
|
254
src/css/theme_daux/_typography.scss
Fichier normal
254
src/css/theme_daux/_typography.scss
Fichier normal
@ -0,0 +1,254 @@
|
||||
/* ============================================================================
|
||||
Base CSS
|
||||
============================================================================ */
|
||||
|
||||
body {
|
||||
line-height: 1.5;
|
||||
|
||||
font-family: var(--font-family-text);
|
||||
font-feature-settings: "kern" 1;
|
||||
font-kerning: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.s-content {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
cursor: text;
|
||||
line-height: 1.4em;
|
||||
margin: 2em 0 0.5em;
|
||||
|
||||
tt,
|
||||
code {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
font-size: var(--type-size-3);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: var(--type-size-4);
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: var(--type-size-5);
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: var(--type-size-6);
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: var(--type-size-6);
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: var(--type-size-6);
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: var(--type-size-6);
|
||||
}
|
||||
|
||||
p {
|
||||
margin-bottom: 1.3em;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
ul p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
padding: 0;
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
padding: 0;
|
||||
margin: 15px 0 5px;
|
||||
}
|
||||
|
||||
dt:first-child {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 15px;
|
||||
padding: 0 15px;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0.75em 2em;
|
||||
padding: 0.5em 1em;
|
||||
font-style: italic;
|
||||
border-left: 0.25em solid var(--blockquote-border-color);
|
||||
|
||||
cite {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
cite:before {
|
||||
content: "\2014";
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 1em;
|
||||
border-collapse: collapse;
|
||||
|
||||
font-size: var(--type-size-6);
|
||||
|
||||
+ table {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
tr {
|
||||
border-top: 1px solid #eee;
|
||||
background-color: white;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
tr:nth-child(2n) {
|
||||
background-color: var(--lightest-gray);
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: bold;
|
||||
border: 1px solid var(--light-gray);
|
||||
background: var(--lighter-gray);
|
||||
margin: 0;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
td {
|
||||
border: 1px solid var(--lighter-gray);
|
||||
margin: 0;
|
||||
padding: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
ul,
|
||||
ol,
|
||||
blockquote,
|
||||
dl dt,
|
||||
dl dd,
|
||||
table th,
|
||||
table td {
|
||||
> :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-family-monospace);
|
||||
padding-top: 0.1rem;
|
||||
padding-bottom: 0.1rem;
|
||||
background: var(--code-tag-background-color);
|
||||
border: 1px solid var(--light-gray);
|
||||
border-radius: var(--code-tag-border-radius);
|
||||
box-shadow: var(--code-tag-box-shadow);
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
letter-spacing: -0.2em;
|
||||
content: "\00a0"; /* non-breaking space*/
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #f5f2f0;
|
||||
color: #333;
|
||||
line-height: 1.5em;
|
||||
overflow: auto;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
padding: 0.75em 20px;
|
||||
margin: 0 -20px 20px -20px;
|
||||
|
||||
code {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: pre;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
code:before,
|
||||
code:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
code,
|
||||
tt {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
u,
|
||||
ins {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid var(--text);
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
del a {
|
||||
color: inherit;
|
||||
}
|
||||
}
|
89
src/css/theme_daux/_variables.scss
Fichier normal
89
src/css/theme_daux/_variables.scss
Fichier normal
@ -0,0 +1,89 @@
|
||||
:root {
|
||||
// Gray Scale
|
||||
--gray: #7a8288;
|
||||
--dark-gray: color(var(--gray) blend(#000 40%));
|
||||
//--darker-gray: color(var(--gray) blend(#000 60%));
|
||||
--light-gray: color(var(--gray) blend(#fff 50%));
|
||||
--lighter-gray: color(var(--gray) blend(#fff 70%));
|
||||
--lightest-gray: color(var(--gray) blend(#fff 90%));
|
||||
|
||||
// Type Scale
|
||||
--type-size-1: 2.441rem; // ~39.056px
|
||||
--type-size-2: 1.953rem; // ~31.248px
|
||||
--type-size-3: 1.563rem; // ~25.008px
|
||||
--type-size-4: 1.25rem; // ~20px
|
||||
--type-size-5: 1rem; // ~16px
|
||||
--type-size-6: 0.75rem; // ~12px
|
||||
|
||||
--dark: #3f4657;
|
||||
--light: #82becd;
|
||||
--text: #222;
|
||||
|
||||
--link-color: var(--light);
|
||||
--brand-color: var(--light);
|
||||
--brand-background: var(--dark);
|
||||
|
||||
// Sidebar
|
||||
--sidebar-border: #e7e7e9;
|
||||
--sidebar-background: #f7f7f7;
|
||||
|
||||
// Sidebar links
|
||||
--sidebar-link-color: var(--dark);
|
||||
--sidebar-link-active-background: #c5c5cb;
|
||||
--sidebar-link-hover-background: var(--sidebar-link-active-background);
|
||||
--sidebar-link-arrow-color: var(--dark);
|
||||
--sidebar-link-secondary-color: var(--text);
|
||||
|
||||
// Sidebar Checkbox
|
||||
--checkbox-background: #e6e6e6;
|
||||
--checkbox-hover-background: #ccc;
|
||||
--checkbox-checked-background: var(--dark);
|
||||
--checkbox-checked-hover-background: var(--light);
|
||||
--checkbox-tick-color: #fff;
|
||||
--checkbox-disabled-background: #e6e6e6;
|
||||
--checkbox-disabled-tick-color: #7b7b7b;
|
||||
|
||||
// Sidebar search field
|
||||
--search-field-color: #555;
|
||||
--search-field-border-color: #ccc;
|
||||
--search-field-background: #fff;
|
||||
--search-field-hover-border-color: var(--light);
|
||||
|
||||
// Sidebar hamburger
|
||||
--sidebar-collapsible--hamburger-color: var(--light);
|
||||
--sidebar-collapsible--hamburger-hover-color: var(--dark);
|
||||
--sidebar-collapsible--hamburger-hover-background: var(--light);
|
||||
|
||||
// Homepage
|
||||
--homepage-navbar-background: var(--dark);
|
||||
|
||||
--homepage-hero-background: var(--light);
|
||||
--homepage-hero-color: var(--dark);
|
||||
--homepage-bullet-color: var(--light);
|
||||
|
||||
--homepage-footer-color: var(--light);
|
||||
--homepage-footer-background: var(--dark);
|
||||
|
||||
// Homepage Hero Buttons
|
||||
--hero-button-block-background: var(--sidebar-link-active-background);
|
||||
--hero-button-border-color: var(--dark);
|
||||
--hero-button-primary-color: var(--sidebar-background);
|
||||
--hero-buttom-primary-background: var(--dark);
|
||||
--hero-button-secondary-color: var(--dark);
|
||||
--hero-button-secondary-background: var(--sidebar-link-active-background);
|
||||
|
||||
--content-floating-blocks-background: var(--light);
|
||||
--code-tag-color: var(--dark);
|
||||
|
||||
--code-tag-background-color: #fafafa;
|
||||
--code-tag-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.125);
|
||||
--code-tag-border-radius: 4px;
|
||||
|
||||
--blockquote-border-color: var(--dark);
|
||||
}
|
||||
|
||||
/*
|
||||
* Breakpoints
|
||||
* ===================================================================== */
|
||||
@custom-media --viewport-small (width < 850px);
|
||||
@custom-media --viewport-large (width >= 850px);
|
9
src/css/theme_daux/theme-blue.scss
Fichier normal
9
src/css/theme_daux/theme-blue.scss
Fichier normal
@ -0,0 +1,9 @@
|
||||
@import "theme.scss";
|
||||
|
||||
//Daux.io Blue
|
||||
:root {
|
||||
--sidebar-background: #f7f7f7;
|
||||
--sidebar-link-active-background: #c5c5cb;
|
||||
--dark: #3f4657;
|
||||
--light: #82becd;
|
||||
}
|
9
src/css/theme_daux/theme-green.scss
Fichier normal
9
src/css/theme_daux/theme-green.scss
Fichier normal
@ -0,0 +1,9 @@
|
||||
@import "theme.scss";
|
||||
|
||||
//Daux.io Green
|
||||
:root {
|
||||
--sidebar-background: #f5f5f6;
|
||||
--sidebar-link-active-background: #a0d55d;
|
||||
--dark: #000;
|
||||
--light: #8acc37;
|
||||
}
|
9
src/css/theme_daux/theme-navy.scss
Fichier normal
9
src/css/theme_daux/theme-navy.scss
Fichier normal
@ -0,0 +1,9 @@
|
||||
@import "theme.scss";
|
||||
|
||||
//Daux.io Navy
|
||||
:root {
|
||||
--sidebar-background: #f5f5f6;
|
||||
--sidebar-link-active-background: #c5c5cb;
|
||||
--dark: #13132a;
|
||||
--light: #7795b4;
|
||||
}
|
9
src/css/theme_daux/theme-red.scss
Fichier normal
9
src/css/theme_daux/theme-red.scss
Fichier normal
@ -0,0 +1,9 @@
|
||||
@import "theme.scss";
|
||||
|
||||
// Daux.io Red
|
||||
:root {
|
||||
--sidebar-background: #f7f7f7;
|
||||
--sidebar-link-active-background: #eee;
|
||||
--dark: #c64641;
|
||||
--light: #ecb5a1;
|
||||
}
|
22
src/css/theme_daux/theme.scss
Fichier normal
22
src/css/theme_daux/theme.scss
Fichier normal
@ -0,0 +1,22 @@
|
||||
/*!
|
||||
* DAUX.IO
|
||||
* https://dauxio.github.io/
|
||||
* MIT License
|
||||
*/
|
||||
|
||||
// Daux Style
|
||||
@import "vendor/normalize.scss";
|
||||
@import "_fonts.scss";
|
||||
@import "_variables.scss";
|
||||
@import "_mixins.scss";
|
||||
|
||||
// Layout
|
||||
@import "_structure.scss";
|
||||
|
||||
// Content presentation
|
||||
@import "_typography.scss";
|
||||
@import "_components.scss";
|
||||
@import "_homepage.scss";
|
||||
@import "vendor/highlight.scss";
|
||||
|
||||
@import "_print.scss" print;
|
79
src/css/theme_daux/vendor/highlight.scss
externe
Fichier normal
79
src/css/theme_daux/vendor/highlight.scss
externe
Fichier normal
@ -0,0 +1,79 @@
|
||||
/**
|
||||
* GitHub Gist Theme
|
||||
* Author : Anthony Attard - https://github.com/AnthonyAttard
|
||||
* Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
//background: white;
|
||||
//padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.hljs-number {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.hljs-string {
|
||||
color: #032f62;
|
||||
}
|
419
src/css/theme_daux/vendor/normalize.scss
externe
Fichier normal
419
src/css/theme_daux/vendor/normalize.scss
externe
Fichier normal
@ -0,0 +1,419 @@
|
||||
/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/**
|
||||
* 1. Change the default font family in all browsers (opinionated).
|
||||
* 2. Prevent adjustments of font size after orientation changes in IE and iOS.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the margin in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
* 1. Add the correct display in Edge, IE, and Firefox.
|
||||
* 2. Add the correct display in IE.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details, /* 1 */
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
main, /* 2 */
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary { /* 1 */
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in iOS 4-7.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10-.
|
||||
* 1. Add the correct display in IE.
|
||||
*/
|
||||
|
||||
template, /* 1 */
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove the gray background on active links in IE 10.
|
||||
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent; /* 1 */
|
||||
-webkit-text-decoration-skip: objects; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the outline on focused links when they are also active or hovered
|
||||
* in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Firefox 39-.
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font style in Android 4.3-.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the font size and margin on `h1` elements within `section` and
|
||||
* `article` contexts in Chrome, Firefox, and Safari.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct background and color in IE 9-.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||
* all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the border on images inside links in IE 10-.
|
||||
*/
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the overflow in IE.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct margin in IE 8.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change font properties to `inherit` in all browsers (opinionated).
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font: inherit; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the font weight unset by the previous rule.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
|
||||
* controls in Android 4.
|
||||
* 2. Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
html [type="button"], /* 1 */
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner border and padding in Firefox.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the focus styles unset by the previous rule.
|
||||
*/
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the border, margin, and padding in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the text wrapping in Edge and IE.
|
||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||
* 3. Remove the padding so developers are not caught out when they zero out
|
||||
* `fieldset` elements in all browsers.
|
||||
*/
|
||||
|
||||
legend {
|
||||
box-sizing: border-box; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in IE 10-.
|
||||
* 2. Remove the padding in IE 10-.
|
||||
*/
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||
*/
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the odd appearance in Chrome and Safari.
|
||||
* 2. Correct the outline style in Safari.
|
||||
*/
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
outline-offset: -2px; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner padding and cancel buttons in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the text style of placeholders in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
::-webkit-input-placeholder {
|
||||
color: inherit;
|
||||
opacity: 0.54;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||
* 2. Change font properties to `inherit` in Safari.
|
||||
*/
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
}
|
56
src/css/theme_daux_singlepage/_fonts.scss
Fichier normal
56
src/css/theme_daux_singlepage/_fonts.scss
Fichier normal
@ -0,0 +1,56 @@
|
||||
:root {
|
||||
--font-family-text: -apple-system, ".SFNSText-Regular", "San Francisco",
|
||||
"Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial,
|
||||
sans-serif;
|
||||
--font-family-monospace: Monaco, Menlo, Consolas, "Lucida Console",
|
||||
"Courier New", monospace;
|
||||
--font-family-heading: "Roboto Slab", var(--font-family-text);
|
||||
}
|
||||
|
||||
/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-light.eot");
|
||||
src: url("../fonts/robotoslab-light.eot?#iefix") format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-light.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-light.woff") format("woff"),
|
||||
url("../fonts/robotoslab-light.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-light.svg#roboto_slablight") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-regular.eot");
|
||||
src: url("../fonts/robotoslab-regular.eot?#iefix")
|
||||
format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-regular.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-regular.woff") format("woff"),
|
||||
url("../fonts/robotoslab-regular.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-regular.svg#roboto_slabregular") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Roboto Slab";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url("../fonts/robotoslab-bold.eot");
|
||||
src: url("../fonts/robotoslab-bold.eot?#iefix") format("embedded-opentype"),
|
||||
url("../fonts/robotoslab-bold.woff2") format("woff2"),
|
||||
url("../fonts/robotoslab-bold.woff") format("woff"),
|
||||
url("../fonts/robotoslab-bold.ttf") format("truetype"),
|
||||
url("../fonts/robotoslab-bold.svg#roboto_slabbold") format("svg");
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC,
|
||||
U+2000-206F, U+2074, U+20AC, U+2212, U+2215;
|
||||
}
|
67
src/css/theme_daux_singlepage/_print.scss
Fichier exécutable
67
src/css/theme_daux_singlepage/_print.scss
Fichier exécutable
@ -0,0 +1,67 @@
|
||||
* {
|
||||
text-shadow: none !important;
|
||||
color: #000 !important; // Black prints faster: h5bp.com/s
|
||||
background: transparent !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
page-break-after: avoid;
|
||||
page-break-before: auto;
|
||||
}
|
||||
|
||||
pre,
|
||||
blockquote {
|
||||
border: 1px solid #999;
|
||||
font-style: italic;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
img {
|
||||
page-break-inside: avoid;
|
||||
border: 0; /* Some browsers like to show a border around images. Switch it off */
|
||||
}
|
||||
|
||||
a,
|
||||
a:visited {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
abbr[title]:after {
|
||||
content: " (" attr(title) ")";
|
||||
}
|
||||
|
||||
q {
|
||||
quotes: none;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: " (" attr(cite) ")";
|
||||
}
|
||||
}
|
||||
|
||||
.PageBreak {
|
||||
display: block;
|
||||
page-break-before: always;
|
||||
}
|
||||
|
||||
.NoPrint {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hide the navigation */
|
||||
aside {
|
||||
display: none;
|
||||
}
|
||||
|
||||
a[href]:after {
|
||||
content: " (" attr(href) ")";
|
||||
}
|
221
src/css/theme_daux_singlepage/_typography.scss
Fichier exécutable
221
src/css/theme_daux_singlepage/_typography.scss
Fichier exécutable
@ -0,0 +1,221 @@
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: var(--font-family-heading);
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.s-content {
|
||||
padding: 15px 25px 25px;
|
||||
background-color: white;
|
||||
|
||||
body {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 300;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
cursor: text;
|
||||
line-height: 1.4em;
|
||||
margin-top: 0.3em;
|
||||
margin-bottom: 0.3em;
|
||||
|
||||
tt,
|
||||
code {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
// 40px
|
||||
font-size: 2.6666666667em;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h2 {
|
||||
// 30px
|
||||
font-size: 2em;
|
||||
border-bottom: 1px solid #eee;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h3 {
|
||||
// 26px
|
||||
font-size: 1.7333333333em;
|
||||
}
|
||||
|
||||
h4 {
|
||||
// 22px
|
||||
font-size: 1.4666666667em;
|
||||
}
|
||||
|
||||
h5 {
|
||||
// 18px
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
h6 {
|
||||
// 16px
|
||||
font-size: 1.0666666667em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
p {
|
||||
// 15px
|
||||
line-height: 1.8em;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 30px;
|
||||
}
|
||||
|
||||
ul p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
dl {
|
||||
padding: 0;
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
padding: 0;
|
||||
margin: 15px 0 5px;
|
||||
}
|
||||
|
||||
dt:first-child {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin: 0 0 15px;
|
||||
padding: 0 15px;
|
||||
}
|
||||
}
|
||||
|
||||
blockquote {
|
||||
font-size: 1.2em;
|
||||
border-left: 4px solid #ddd;
|
||||
padding: 7px 15px;
|
||||
color: #666;
|
||||
|
||||
p {
|
||||
font-size: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
border-collapse: collapse;
|
||||
|
||||
tr {
|
||||
border-top: 1px solid #eee;
|
||||
background-color: white;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
tr:nth-child(2n) {
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
th {
|
||||
font-weight: bold;
|
||||
border: 1px solid #eee;
|
||||
background: #eee;
|
||||
margin: 0;
|
||||
padding: 6px 13px;
|
||||
}
|
||||
|
||||
td {
|
||||
border: 1px solid #eee;
|
||||
margin: 0;
|
||||
padding: 6px 13px;
|
||||
}
|
||||
}
|
||||
|
||||
ul,
|
||||
ol,
|
||||
blockquote,
|
||||
dl dt,
|
||||
dl dd,
|
||||
table th,
|
||||
table td {
|
||||
> :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-family-monospace);
|
||||
}
|
||||
|
||||
code,
|
||||
tt {
|
||||
margin: 0 2px;
|
||||
padding: 0 5px;
|
||||
white-space: nowrap;
|
||||
border: 1px solid #eaeaea;
|
||||
background-color: #f8f8f8;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #f5f2f0;
|
||||
color: #333;
|
||||
line-height: 1.5em;
|
||||
overflow: auto;
|
||||
padding: 20px;
|
||||
margin: 0 -20px 20px -20px;
|
||||
|
||||
code {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
code,
|
||||
tt {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
62
src/css/theme_daux_singlepage/main.scss
Fichier exécutable
62
src/css/theme_daux_singlepage/main.scss
Fichier exécutable
@ -0,0 +1,62 @@
|
||||
// Core variables and mixins
|
||||
@import "vendor/highlight.scss";
|
||||
@import "_fonts.scss";
|
||||
@import "_typography.scss";
|
||||
|
||||
* {
|
||||
-webkit-overflow-scrolling: touch;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
font-family: var(--font-family-text);
|
||||
}
|
||||
|
||||
a {
|
||||
color: #337ab7;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:focus,
|
||||
a:hover {
|
||||
color: #23527c;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0 0 1em;
|
||||
}
|
||||
|
||||
hr {
|
||||
clear: both;
|
||||
margin: 1em 0;
|
||||
border: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100% !important;
|
||||
}
|
||||
|
||||
.PageBreak {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media screen {
|
||||
body {
|
||||
margin: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
@import "_print.scss";
|
||||
}
|
79
src/css/theme_daux_singlepage/vendor/highlight.scss
externe
Fichier normal
79
src/css/theme_daux_singlepage/vendor/highlight.scss
externe
Fichier normal
@ -0,0 +1,79 @@
|
||||
/**
|
||||
* GitHub Gist Theme
|
||||
* Author : Anthony Attard - https://github.com/AnthonyAttard
|
||||
* Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
//background: white;
|
||||
//padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.hljs-number {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.hljs-string {
|
||||
color: #032f62;
|
||||
}
|
64
src/js/search/Pagination.js
Fichier normal
64
src/js/search/Pagination.js
Fichier normal
@ -0,0 +1,64 @@
|
||||
import * as preact from "preact";
|
||||
import { textLinkPrevious, textLinkNext } from "./translation";
|
||||
/** @jsx preact.h */
|
||||
|
||||
export default function Pagination({ counter, start, settings, onPageSelect }) {
|
||||
const pages = Math.ceil(counter / settings.show);
|
||||
const page = start / settings.show;
|
||||
|
||||
let displayedPages;
|
||||
if (page <= 2) {
|
||||
// Display max three pages
|
||||
displayedPages = Math.min(pages, 3);
|
||||
} else {
|
||||
// Display two more pages, but don't overflow
|
||||
displayedPages = Math.min(pages, page + 2);
|
||||
}
|
||||
|
||||
const items = [];
|
||||
|
||||
for (let f = 0; f < displayedPages; f++) {
|
||||
if (f === page) {
|
||||
items.push(<li className="current">{f + 1}</li>);
|
||||
} else {
|
||||
items.push(
|
||||
<li>
|
||||
<a
|
||||
className="SearchResults__footer__link"
|
||||
onClick={() => onPageSelect(f * settings.show)}
|
||||
>
|
||||
{f + 1}
|
||||
</a>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="SearchResults__footer">
|
||||
<ul className="SearchResults__footer__links Pager">
|
||||
{start > 0 && (
|
||||
<li className="Pager--prev">
|
||||
<a
|
||||
className="SearchResults__footer__link"
|
||||
onClick={() => onPageSelect(start - settings.show)}
|
||||
>
|
||||
{textLinkPrevious}
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
{items}
|
||||
{page + 1 !== pages && (
|
||||
<li className="Pager--next">
|
||||
<a
|
||||
className="SearchResults__footer__link"
|
||||
onClick={() => onPageSelect(start + settings.show)}
|
||||
>
|
||||
{textLinkNext}
|
||||
</a>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
50
src/js/search/Result.js
Fichier normal
50
src/js/search/Result.js
Fichier normal
@ -0,0 +1,50 @@
|
||||
import * as preact from "preact";
|
||||
/** @jsx preact.h */
|
||||
|
||||
// TODO :: restore highlight
|
||||
/*function highlightText(search, text) {
|
||||
if (settings.highlightTerms) {
|
||||
var pattern = new RegExp(
|
||||
`(${search})`,
|
||||
settings.highlightEveryTerm ? "gi" : "i"
|
||||
);
|
||||
text = text.replace(
|
||||
pattern,
|
||||
'<span class="SearchResults__highlight">$1</span>'
|
||||
);
|
||||
}
|
||||
|
||||
return text;
|
||||
}*/
|
||||
|
||||
export default function Result({ settings, item }) {
|
||||
let text;
|
||||
if (item.text) {
|
||||
text = item.text
|
||||
.split(" ")
|
||||
.slice(0, settings.descriptiveWords)
|
||||
.join(" ");
|
||||
if (
|
||||
item.text.length < text.length &&
|
||||
text.charAt(text.length - 1) !== "."
|
||||
) {
|
||||
text += " ...";
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="SearchResult">
|
||||
<div className="SearchResults__title">
|
||||
<a href={settings.base_url + item.url}>{item.title}</a>
|
||||
</div>
|
||||
{settings.showURL && (
|
||||
<div className="SearchResults__url">
|
||||
<a href={settings.base_url + item.url}>
|
||||
{item.url.toLowerCase().replace(/https?:\/\//g, "")}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
{text && <div className="SearchResults__text">{text}</div>}
|
||||
</div>
|
||||
);
|
||||
}
|
145
src/js/search/Search.js
Fichier normal
145
src/js/search/Search.js
Fichier normal
@ -0,0 +1,145 @@
|
||||
import * as preact from "preact";
|
||||
|
||||
import Pagination from "./Pagination";
|
||||
import Result from "./Result";
|
||||
import {
|
||||
textSearchNoResults,
|
||||
textSearchOneCharacterOrMore,
|
||||
textSearchOneResult,
|
||||
textSearchResults,
|
||||
textSearchShouldBeXOrMore,
|
||||
textSearchTooShort
|
||||
} from "./translation";
|
||||
|
||||
/** @jsx preact.h */
|
||||
|
||||
export default class Search extends preact.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
search: this.props.settings.field.value || "",
|
||||
start: 0
|
||||
};
|
||||
}
|
||||
|
||||
// "click", ".SearchResults__close"
|
||||
handleClose = () => {
|
||||
this.props.onClose();
|
||||
};
|
||||
|
||||
scrollTop = () => {
|
||||
if (this.resultRef) {
|
||||
this.resultRef.scrollTop = 0;
|
||||
}
|
||||
};
|
||||
|
||||
handlePaginate = start => {
|
||||
this.setState({ start }, this.scrollTop);
|
||||
};
|
||||
|
||||
handleChange = event => {
|
||||
this.setState({ search: event.target.value, start: 0 }, this.scrollTop);
|
||||
|
||||
this.props.settings.field.value = event.target.value;
|
||||
};
|
||||
|
||||
getResults() {
|
||||
const { settings } = this.props;
|
||||
const { start } = this.state;
|
||||
|
||||
const warnings = [];
|
||||
let counter = 0;
|
||||
let results = [];
|
||||
|
||||
if (this.state.search.length < settings.minimumLength) {
|
||||
warnings.push(textSearchTooShort);
|
||||
warnings.push(
|
||||
settings.minimumLength === 1
|
||||
? textSearchOneCharacterOrMore
|
||||
: textSearchShouldBeXOrMore.replace(
|
||||
"!min",
|
||||
settings.minimumLength
|
||||
)
|
||||
);
|
||||
|
||||
return { warnings, counter, results, start };
|
||||
}
|
||||
|
||||
const found = this.props.onSearch(this.state.search);
|
||||
|
||||
counter = found.length;
|
||||
|
||||
if (counter === 0) {
|
||||
warnings.push(textSearchNoResults);
|
||||
return { warnings, counter, results, start };
|
||||
}
|
||||
|
||||
if (settings.showTitleCount) {
|
||||
this.props.onTitleChange(`(${counter})`);
|
||||
}
|
||||
|
||||
results = found.filter(
|
||||
(item, itemNumber) =>
|
||||
itemNumber >= start && itemNumber < settings.show + start
|
||||
);
|
||||
|
||||
return { warnings, counter, results, start };
|
||||
}
|
||||
|
||||
render() {
|
||||
const { settings } = this.props;
|
||||
const { warnings, counter, results, start } = this.getResults();
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="SearchResultsBackdrop" />
|
||||
<div
|
||||
className="SearchResults"
|
||||
ref={el => (this.resultRef = el)}
|
||||
>
|
||||
<input
|
||||
className="Search__field"
|
||||
placeholder="Search..."
|
||||
autoComplete="on"
|
||||
autoSave="text_search"
|
||||
type="search"
|
||||
value={this.state.search}
|
||||
onInput={this.handleChange}
|
||||
/>
|
||||
<button
|
||||
className="SearchResults__close"
|
||||
onClick={this.handleClose}
|
||||
>
|
||||
×
|
||||
</button>
|
||||
<div className="SearchResults__count">
|
||||
{counter === 1
|
||||
? textSearchOneResult
|
||||
: textSearchResults.replace("!count", counter)}
|
||||
</div>
|
||||
{warnings.map(warning => (
|
||||
<div key={warning} className="SearchResults__warning">
|
||||
{warning}
|
||||
</div>
|
||||
))}
|
||||
{results.map(result => (
|
||||
<Result
|
||||
key={result.title}
|
||||
item={result}
|
||||
settings={settings}
|
||||
/>
|
||||
))}
|
||||
{counter > settings.show && (
|
||||
<Pagination
|
||||
counter={counter}
|
||||
start={start}
|
||||
settings={settings}
|
||||
onPageSelect={this.handlePaginate}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
144
src/js/search/index.js
Fichier normal
144
src/js/search/index.js
Fichier normal
@ -0,0 +1,144 @@
|
||||
import * as preact from "preact";
|
||||
import FlexSearch from "flexsearch";
|
||||
|
||||
import Search from "./Search";
|
||||
|
||||
/** @jsx preact.h */
|
||||
|
||||
const originalTitle = document.title;
|
||||
|
||||
function getURLP(name) {
|
||||
const elements = new RegExp(`[?|&]${name}=([^&;]+?)(&|#|;|$)`).exec(
|
||||
window.location.search
|
||||
);
|
||||
|
||||
return (
|
||||
decodeURIComponent(
|
||||
((elements && elements[1]) || "").replace(/\+/g, "%20")
|
||||
) || null
|
||||
);
|
||||
}
|
||||
|
||||
class SearchEngine {
|
||||
constructor(options) {
|
||||
this.settings = {
|
||||
field: document.getElementById("search_input"),
|
||||
show: 10,
|
||||
showURL: true,
|
||||
showTitleCount: true,
|
||||
minimumLength: 3,
|
||||
descriptiveWords: 25,
|
||||
highlightTerms: true,
|
||||
highlightEveryTerm: false,
|
||||
contentLocation: "daux_search_index.json",
|
||||
...options
|
||||
};
|
||||
|
||||
this.searchIndex = {
|
||||
pages: []
|
||||
};
|
||||
}
|
||||
|
||||
loadData() {
|
||||
if (!this.loadingPromise) {
|
||||
this.loadingPromise = fetch(
|
||||
this.settings.base_url + this.settings.contentLocation
|
||||
)
|
||||
.then(data => data.json())
|
||||
.then(json => {
|
||||
this.searchIndex = new FlexSearch({
|
||||
doc: {
|
||||
id: "url",
|
||||
field: ["title", "text", "tags"]
|
||||
}
|
||||
});
|
||||
|
||||
let pages = json.pages;
|
||||
|
||||
// Only keep the pages related to the current language
|
||||
if (window.searchLanguage) {
|
||||
const pagePrefix = `${window.searchLanguage}/`;
|
||||
pages = pages.filter(
|
||||
item => item.url.indexOf(pagePrefix) === 0
|
||||
);
|
||||
}
|
||||
|
||||
this.searchIndex.add(pages);
|
||||
});
|
||||
}
|
||||
|
||||
return this.loadingPromise;
|
||||
}
|
||||
|
||||
run() {
|
||||
if (getURLP("q")) {
|
||||
this.settings.field.value = getURLP("q");
|
||||
|
||||
this.loadData().then(() => {
|
||||
this.displaySearch();
|
||||
});
|
||||
}
|
||||
|
||||
this.settings.field.addEventListener("keyup", event => {
|
||||
// Start loading index once the user types text in the field, not before
|
||||
this.loadData();
|
||||
|
||||
if (parseInt(event.keyCode, 10) === 13) {
|
||||
this.loadData().then(() => {
|
||||
this.displaySearch();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
keyUpHandler = e => {
|
||||
if (e.which === 27) {
|
||||
//escape
|
||||
this.handleClose();
|
||||
}
|
||||
};
|
||||
|
||||
handleClose = () => {
|
||||
document.title = originalTitle;
|
||||
|
||||
document.removeEventListener("keyup", this.keyUpHandler);
|
||||
|
||||
document.body.classList.remove("with-search");
|
||||
preact.render(null, this.resultContainer);
|
||||
this.resultContainer = null;
|
||||
};
|
||||
|
||||
displaySearch() {
|
||||
if (!this.resultContainer) {
|
||||
this.resultContainer = document.createElement("div");
|
||||
document.body.appendChild(this.resultContainer);
|
||||
}
|
||||
|
||||
document.addEventListener("keyup", this.keyUpHandler);
|
||||
|
||||
preact.render(
|
||||
<Search
|
||||
onSearch={term => this.searchIndex.search(term)}
|
||||
onClose={this.handleClose}
|
||||
onTitleChange={title => {
|
||||
document.title = `${title} ${originalTitle}`;
|
||||
}}
|
||||
settings={this.settings}
|
||||
/>,
|
||||
this.resultContainer
|
||||
);
|
||||
|
||||
document.body.classList.add("with-search");
|
||||
document.body.scrollTop = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Main containers
|
||||
|
||||
function search(options) {
|
||||
const instance = new SearchEngine(options);
|
||||
instance.run();
|
||||
}
|
||||
|
||||
// Declare globally
|
||||
window.search = search;
|
32
src/js/search/translation.js
Fichier normal
32
src/js/search/translation.js
Fichier normal
@ -0,0 +1,32 @@
|
||||
/* eslint-disable camelcase */
|
||||
const {
|
||||
Link_previous,
|
||||
Link_next,
|
||||
Search_no_results,
|
||||
Search_one_character_or_more,
|
||||
Search_one_result,
|
||||
Search_results,
|
||||
Search_should_be_x_or_more,
|
||||
Search_too_short
|
||||
} = window.searchTranslation;
|
||||
|
||||
const textLinkPrevious = Link_previous;
|
||||
const textLinkNext = Link_next;
|
||||
const textSearchNoResults = Search_no_results;
|
||||
const textSearchOneCharacterOrMore = Search_one_character_or_more;
|
||||
const textSearchOneResult = Search_one_result;
|
||||
const textSearchResults = Search_results;
|
||||
const textSearchShouldBeXOrMore = Search_should_be_x_or_more;
|
||||
const textSearchTooShort = Search_too_short;
|
||||
/* eslint-enable camelcase */
|
||||
|
||||
export {
|
||||
textLinkPrevious,
|
||||
textLinkNext,
|
||||
textSearchNoResults,
|
||||
textSearchOneCharacterOrMore,
|
||||
textSearchOneResult,
|
||||
textSearchResults,
|
||||
textSearchShouldBeXOrMore,
|
||||
textSearchTooShort
|
||||
};
|
55
src/js/theme_daux/code_toggle.js
Fichier normal
55
src/js/theme_daux/code_toggle.js
Fichier normal
@ -0,0 +1,55 @@
|
||||
const codeBlocks = document.querySelectorAll(".s-content pre");
|
||||
const toggleCodeSection = document.querySelector(".CodeToggler");
|
||||
|
||||
const LOCAL_STORAGE_KEY = "daux_code_blocks_hidden";
|
||||
|
||||
function setCodeBlockStyle(hidden) {
|
||||
for (let a = 0; a < codeBlocks.length; a++) {
|
||||
codeBlocks[a].classList.toggle("Hidden", hidden);
|
||||
}
|
||||
try {
|
||||
localStorage.setItem(LOCAL_STORAGE_KEY, hidden);
|
||||
} catch (e) {
|
||||
// local storage operations can fail with the file:// protocol
|
||||
}
|
||||
}
|
||||
|
||||
function enableToggler() {
|
||||
const toggleCodeBlockBtnSet = toggleCodeSection.querySelector(
|
||||
".CodeToggler__button--main"
|
||||
); // available when floating is disabled
|
||||
|
||||
toggleCodeBlockBtnSet.addEventListener(
|
||||
"change",
|
||||
ev => {
|
||||
setCodeBlockStyle(!ev.target.checked);
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
let hidden = false;
|
||||
try {
|
||||
hidden = localStorage.getItem(LOCAL_STORAGE_KEY);
|
||||
|
||||
if (hidden === "false") {
|
||||
hidden = false;
|
||||
} else if (hidden === "true") {
|
||||
hidden = true;
|
||||
}
|
||||
|
||||
if (hidden) {
|
||||
setCodeBlockStyle(!!hidden);
|
||||
toggleCodeBlockBtnSet.checked = !hidden;
|
||||
}
|
||||
} catch (e) {
|
||||
// local storage operations can fail with the file:// protocol
|
||||
}
|
||||
}
|
||||
|
||||
if (toggleCodeSection) {
|
||||
if (codeBlocks.length) {
|
||||
enableToggler();
|
||||
} else {
|
||||
toggleCodeSection.classList.add("Hidden");
|
||||
}
|
||||
}
|
18
src/js/theme_daux/hamburger.js
Fichier normal
18
src/js/theme_daux/hamburger.js
Fichier normal
@ -0,0 +1,18 @@
|
||||
const trigger = document.querySelector(".Collapsible__trigger");
|
||||
|
||||
if (trigger) {
|
||||
const content = document.querySelector(".Collapsible__content");
|
||||
|
||||
trigger.addEventListener("click", ev => {
|
||||
if (content.classList.contains("Collapsible__content--open")) {
|
||||
content.style.height = 0;
|
||||
content.classList.remove("Collapsible__content--open");
|
||||
trigger.setAttribute("aria-expanded", "false");
|
||||
} else {
|
||||
trigger.setAttribute("aria-expanded", "true");
|
||||
content.style.transitionDuration = "150ms";
|
||||
content.style.height = `${content.scrollHeight}px`;
|
||||
content.classList.add("Collapsible__content--open");
|
||||
}
|
||||
});
|
||||
}
|
12
src/js/theme_daux/highlight.js
Fichier normal
12
src/js/theme_daux/highlight.js
Fichier normal
@ -0,0 +1,12 @@
|
||||
const codeBlocks = document.querySelectorAll("pre > code:not(.hljs)");
|
||||
if (codeBlocks.length) {
|
||||
const head = document.getElementsByTagName("head")[0],
|
||||
script = document.createElement("script");
|
||||
script.type = "text/javascript";
|
||||
script.async = true;
|
||||
script.src = `${window.base_url}daux_libraries/highlight.pack.js`;
|
||||
script.onload = function(src) {
|
||||
[].forEach.call(codeBlocks, window.hljs.highlightBlock);
|
||||
};
|
||||
head.appendChild(script);
|
||||
}
|
6
src/js/theme_daux/index.js
Fichier normal
6
src/js/theme_daux/index.js
Fichier normal
@ -0,0 +1,6 @@
|
||||
/** global localStorage, hljs */
|
||||
|
||||
import "./code_toggle.js";
|
||||
import "./hamburger.js";
|
||||
import "./highlight.js";
|
||||
import "./menu.js";
|
79
src/js/theme_daux/menu.js
Fichier normal
79
src/js/theme_daux/menu.js
Fichier normal
@ -0,0 +1,79 @@
|
||||
/**
|
||||
* After the transition finishes set the height to auto so child
|
||||
* menus can expand properly.
|
||||
* @param {Element} item
|
||||
*/
|
||||
function resetHeightAfterAnimation(item) {
|
||||
const setHeightToAuto = ev => {
|
||||
if (ev.target.style.height !== "0px") {
|
||||
ev.target.style.height = "auto";
|
||||
}
|
||||
|
||||
ev.target.removeEventListener("transitionend", setHeightToAuto);
|
||||
};
|
||||
|
||||
item.addEventListener("transitionend", setHeightToAuto);
|
||||
}
|
||||
|
||||
function findNavItem(start) {
|
||||
let elem = start;
|
||||
while ((elem = elem.parentNode) && elem.nodeType !== 9) {
|
||||
if (elem.nodeType === 1 && elem.classList.contains("Nav__item")) {
|
||||
return elem;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error("Could not find a NavItem...");
|
||||
}
|
||||
|
||||
function toggleSubMenu(ev) {
|
||||
const isEvent = ev.preventDefault !== undefined;
|
||||
|
||||
if (isEvent) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
const parent = findNavItem(ev.target);
|
||||
const subNav = parent.querySelector("ul.Nav");
|
||||
|
||||
if (isEvent && parent.classList.contains("Nav__item--open")) {
|
||||
// Temporarily set the height so the transition can work.
|
||||
subNav.style.height = `${subNav.scrollHeight}px`;
|
||||
subNav.style.transitionDuration = "150ms";
|
||||
subNav.style.height = "0px";
|
||||
parent.classList.remove("Nav__item--open");
|
||||
} else {
|
||||
if (isEvent) {
|
||||
subNav.style.transitionDuration = "150ms";
|
||||
resetHeightAfterAnimation(subNav);
|
||||
subNav.style.height = `${subNav.scrollHeight}px`;
|
||||
parent.classList.add("Nav__item--open");
|
||||
} else {
|
||||
// When running at page load the transitions don't need to fire and
|
||||
// the classList doesn't need to be altered.
|
||||
subNav.style.height = "auto";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const navItems = document.querySelectorAll(
|
||||
".Nav__item.has-children i.Nav__arrow"
|
||||
);
|
||||
|
||||
// Go in reverse here because on page load the child nav items need to be
|
||||
// opened first before their parents so the height on the parents can be
|
||||
// calculated properly.
|
||||
for (let i = navItems.length - 1, target; i >= 0; i--) {
|
||||
target = navItems[i];
|
||||
target.addEventListener("click", toggleSubMenu);
|
||||
|
||||
if (target.parentNode.parentNode.classList.contains("Nav__item--open")) {
|
||||
toggleSubMenu({ target });
|
||||
}
|
||||
}
|
||||
|
||||
// Some navigations just have sub-pages without having a page by themselves
|
||||
const ajNav = document.querySelectorAll(".Nav__item__link--nopage");
|
||||
for (const navItem of ajNav) {
|
||||
navItem.addEventListener("click", toggleSubMenu);
|
||||
}
|
@ -5,8 +5,7 @@
|
||||
<h1><?= $page['breadcrumbs'] ? $this->get_breadcrumb_title($page, $base_page) : $page['title'] ?></h1>
|
||||
<?php if ($params['html']['date_modified']) { ?>
|
||||
<span class="ModifiedDate">
|
||||
<?php $date_format = isset($params['html']['date_modified_format']) ? $params['html']['date_modified_format'] : 'l, F j, Y g:i A'; ?>
|
||||
<?= date($date_format, $page['modified_time']); ?>
|
||||
<?= Todaymade\Daux\FormatDate::format($params, $page['modified_time']) ?>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php
|
||||
|
@ -60,11 +60,9 @@
|
||||
|
||||
<?php if (!empty($params['html']['twitter'])) { ?>
|
||||
<div class="HomepageFooter__twitter">
|
||||
<?php foreach ($params['html']['twitter'] as $handle) { ?>
|
||||
<div class="Twitter">
|
||||
<iframe allowtransparency="true" frameborder="0" scrolling="no" style="width:162px; height:20px;" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=<?= $handle; ?>&show_count=false"></iframe>
|
||||
<?php $this->insert('theme::partials/twitter_buttons', ['params' => $params]); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
@ -26,6 +26,12 @@
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<!-- JS -->
|
||||
<script>
|
||||
window.base_url = "<?php echo $base_url?>";
|
||||
document.documentElement.classList.remove('no-js');
|
||||
</script>
|
||||
|
||||
<!-- Font -->
|
||||
<?php foreach ($params['theme']['fonts'] as $font) {
|
||||
echo "<link href='$font' rel='stylesheet' type='text/css'>";
|
||||
@ -37,15 +43,11 @@
|
||||
} ?>
|
||||
|
||||
<?php if ($params['html']['search']) { ?>
|
||||
<!-- Tipue Search -->
|
||||
<link href="<?= $base_url; ?>tipuesearch/tipuesearch.css" rel="stylesheet">
|
||||
<!-- Search -->
|
||||
<link href="<?= $base_url; ?>daux_libraries/search.css" rel="stylesheet">
|
||||
<?php } ?>
|
||||
|
||||
<!--[if lt IE 9]>
|
||||
<script src="<?= $base_url; ?>themes/daux/js/html5shiv-3.7.3.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="<?= $params['html']['float'] ? 'with-float' : ''; ?> <?= $this->section('classes'); ?>">
|
||||
<body class="<?= $this->section('classes'); ?>">
|
||||
<?= $this->section('content'); ?>
|
||||
|
||||
<?php
|
||||
@ -62,19 +64,7 @@
|
||||
echo '<script src="' . $js . '"></script>';
|
||||
} ?>
|
||||
|
||||
<?php if ($params['html']['search']) { ?>
|
||||
<!-- Tipue Search -->
|
||||
<script type="text/javascript" src="<?php echo $base_url; ?>tipuesearch/tipuesearch.js"></script>
|
||||
|
||||
<script>
|
||||
window.onunload = function(){}; // force $(document).ready to be called on back/forward navigation in firefox
|
||||
$(function() {
|
||||
tipuesearch({
|
||||
'base_url': '<?php echo $base_url?>'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<?php $this->insert('theme::partials/search_script', ['page' => $page, 'base_url' => $base_url]); ?>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php $this->layout('theme::layout/00_layout') ?>
|
||||
<div class="Columns content">
|
||||
<aside class="Columns__left Collapsible">
|
||||
<button type="button" class="Button Collapsible__trigger">
|
||||
<button type="button" class="Button Collapsible__trigger" aria-controls="sidebar_content" aria-expanded="false" aria-label="<?= $this->translate("Toggle_navigation") ?>">
|
||||
<span class="Collapsible__trigger__bar"></span>
|
||||
<span class="Collapsible__trigger__bar"></span>
|
||||
<span class="Collapsible__trigger__bar"></span>
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<?php $this->insert('theme::partials/navbar_content', ['params' => $params]); ?>
|
||||
|
||||
<div class="Collapsible__content">
|
||||
<div class="Collapsible__content" id="sidebar_content">
|
||||
<!-- Navigation -->
|
||||
<?php
|
||||
$rendertree = $tree;
|
||||
@ -35,32 +35,19 @@
|
||||
</div>
|
||||
|
||||
<?php if ($params['html']['toggle_code']) { ?>
|
||||
<div class="CodeToggler">
|
||||
<hr/>
|
||||
<?php if ($params['html']['float']) { ?>
|
||||
<span class="CodeToggler__text"><?=$this->translate("CodeBlocks_title") ?></span>
|
||||
<div class="ButtonGroup" role="group">
|
||||
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--hide"><?=$this->translate("CodeBlocks_hide") ?></button>
|
||||
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--below"><?=$this->translate("CodeBlocks_below") ?></button>
|
||||
<button class="Button Button--default Button--small CodeToggler__button CodeToggler__button--float"><?=$this->translate("CodeBlocks_inline") ?></button>
|
||||
</div>
|
||||
<?php } else { ?>
|
||||
<label class="Checkbox"><?=$this->translate("CodeBlocks_show") ?>
|
||||
<input type="checkbox" class="CodeToggler__button--main" checked="checked"/>
|
||||
<div class="Checkbox__indicator"></div>
|
||||
</label>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="CodeToggler">
|
||||
<hr/>
|
||||
<label class="Checkbox"><?=$this->translate("CodeBlocks_show") ?>
|
||||
<input type="checkbox" class="CodeToggler__button--main" checked="checked"/>
|
||||
<div class="Checkbox__indicator"></div>
|
||||
</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php if (!empty($params['html']['twitter'])) { ?>
|
||||
<div class="Twitter">
|
||||
<hr/>
|
||||
<?php foreach ($params['html']['twitter'] as $handle) { ?>
|
||||
<iframe allowtransparency="true" frameborder="0" scrolling="no" style="width:162px; height:20px;" src="https://platform.twitter.com/widgets/follow_button.html?screen_name=<?= $handle; ?>&show_count=false"></iframe>
|
||||
<br />
|
||||
<br />
|
||||
<?php } ?>
|
||||
<?php $this->insert('theme::partials/twitter_buttons', ['params' => $params]); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
@ -72,7 +59,7 @@
|
||||
<?php } ?>
|
||||
</div>
|
||||
</aside>
|
||||
<div class="Columns__right <?= $params['html']['float'] ? 'Columns__right--float' : 'Columns__right--full'; ?>">
|
||||
<div class="Columns__right">
|
||||
<div class="Columns__right__content">
|
||||
<div class="doc_content">
|
||||
<?= $this->section('content'); ?>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<svg class="Search__icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 451 451">
|
||||
<path d="M447.05 428l-109.6-109.6c29.4-33.8 47.2-77.9 47.2-126.1C384.65 86.2 298.35 0 192.35 0 86.25 0 .05 86.3.05 192.3s86.3 192.3 192.3 192.3c48.2 0 92.3-17.8 126.1-47.2L428.05 447c2.6 2.6 6.1 4 9.5 4s6.9-1.3 9.5-4c5.2-5.2 5.2-13.8 0-19zM26.95 192.3c0-91.2 74.2-165.3 165.3-165.3 91.2 0 165.3 74.2 165.3 165.3s-74.1 165.4-165.3 165.4c-91.1 0-165.3-74.2-165.3-165.4z"/>
|
||||
</svg>
|
||||
<input type="search" id="tipue_search_input" class="Search__field" placeholder="<?=$this->translate("Search_placeholder") ?>" autocomplete="on"
|
||||
<input type="search" id="search_input" class="Search__field" placeholder="<?=$this->translate("Search_placeholder") ?>" autocomplete="on"
|
||||
results=25 autosave=text_search>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
31
templates/partials/search_script.php
Fichier normal
31
templates/partials/search_script.php
Fichier normal
@ -0,0 +1,31 @@
|
||||
<?php if ($params['html']['search']) { ?>
|
||||
<script>
|
||||
<?php
|
||||
$search_strings = [
|
||||
"Search_one_result",
|
||||
"Search_results",
|
||||
"Search_no_results",
|
||||
"Search_common_words_ignored",
|
||||
"Search_too_short",
|
||||
"Search_one_character_or_more",
|
||||
"Search_should_be_x_or_more",
|
||||
"Link_previous",
|
||||
"Link_next",
|
||||
];
|
||||
$search_translations = [];
|
||||
foreach($search_strings as $key) {
|
||||
$search_translations[$key] = $this->translate($key);
|
||||
}
|
||||
?>
|
||||
|
||||
window.searchLanguage = <?= json_encode($page['language']) ?>;
|
||||
window.searchTranslation = <?= json_encode($search_translations) ?>;
|
||||
</script>
|
||||
|
||||
<!-- Search -->
|
||||
<script type="text/javascript" src="<?php echo $base_url; ?>daux_libraries/search.min.js"></script>
|
||||
|
||||
<script>
|
||||
window.search({'base_url': '<?php echo $base_url?>'})
|
||||
</script>
|
||||
<?php } ?>
|
7
templates/partials/twitter_buttons.php
Fichier normal
7
templates/partials/twitter_buttons.php
Fichier normal
@ -0,0 +1,7 @@
|
||||
<?php foreach ($params['html']['twitter'] as $handle) { ?>
|
||||
<a class="Twitter__button" target="_blank" title="Follow @<?= $handle; ?> on Twitter" href="https://twitter.com/intent/follow?screen_name=<?= $handle; ?>">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"><path fill="none" d="M0 0h72v72H0z"/><path class="icon" fill="#fff" d="M68.812 15.14c-2.348 1.04-4.87 1.744-7.52 2.06 2.704-1.62 4.78-4.186 5.757-7.243-2.53 1.5-5.33 2.592-8.314 3.176C56.35 10.59 52.948 9 49.182 9c-7.23 0-13.092 5.86-13.092 13.093 0 1.026.118 2.02.338 2.98C25.543 24.527 15.9 19.318 9.44 11.396c-1.125 1.936-1.77 4.184-1.77 6.58 0 4.543 2.312 8.552 5.824 10.9-2.146-.07-4.165-.658-5.93-1.64-.002.056-.002.11-.002.163 0 6.345 4.513 11.638 10.504 12.84-1.1.298-2.256.457-3.45.457-.845 0-1.666-.078-2.464-.23 1.667 5.2 6.5 8.985 12.23 9.09-4.482 3.51-10.13 5.605-16.26 5.605-1.055 0-2.096-.06-3.122-.184 5.794 3.717 12.676 5.882 20.067 5.882 24.083 0 37.25-19.95 37.25-37.25 0-.565-.013-1.133-.038-1.693 2.558-1.847 4.778-4.15 6.532-6.774z"/></svg>
|
||||
<span class="Twitter__button__label">Follow @<?= $handle; ?></span>
|
||||
</a>
|
||||
<br />
|
||||
<?php } ?>
|
@ -20,6 +20,7 @@ class LinkRendererTest extends TestCase
|
||||
'Widgets' => [
|
||||
'Page.md' => 'another page',
|
||||
'Button.md' => 'another page',
|
||||
'Page_with_#_hash.md' => 'page with hash',
|
||||
],
|
||||
];
|
||||
$root = vfsStream::setup('root', null, $structure);
|
||||
@ -38,6 +39,11 @@ class LinkRendererTest extends TestCase
|
||||
public function providerRenderLink()
|
||||
{
|
||||
return [
|
||||
// /Widgets/Page_with_#_hash
|
||||
['<a href="../Widgets/Page_with_hash.html">Link</a>', '[Link](../Widgets/Page_with_#_hash.md)', 'Content/Page.html'],
|
||||
['<a href="../Widgets/Page_with_hash.html">Link</a>', '[Link](!Widgets/Page_with_#_hash)', 'Content/Page.html'],
|
||||
['<a href="Page_with_hash.html">Link</a>', '[Link](Page_with_#_hash.md)', 'Widgets/Page.html'],
|
||||
|
||||
// /Widgets/Page
|
||||
['<a href="http://google.ch" class="Link--external">Link</a>', '[Link](http://google.ch)', 'Widgets/Page.html'],
|
||||
['<a href="#features">Link</a>', '[Link](#features)', 'Widgets/Page.html'],
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
namespace Todaymade\Daux\Format\HTML;
|
||||
|
||||
namespace Todaymade\Daux\Format\HTML\Test;
|
||||
|
||||
use Todaymade\Daux\Config as MainConfig;
|
||||
use \Todaymade\Daux\Format\HTML\ContentTypes\Markdown\CommonMarkConverter;
|
||||
|
99
tests/Format/Template/TranslateTest.php
Fichier normal
99
tests/Format/Template/TranslateTest.php
Fichier normal
@ -0,0 +1,99 @@
|
||||
<?php
|
||||
namespace Todaymade\Daux\Format\Template;
|
||||
|
||||
use org\bovigo\vfs\vfsStream;
|
||||
use Todaymade\Daux\Config;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\DauxHelper;
|
||||
use Todaymade\Daux\Format\HTML\Template;
|
||||
use Todaymade\Daux\Tree\Builder;
|
||||
use Todaymade\Daux\Tree\Entry;
|
||||
use Todaymade\Daux\Tree\Root;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Class TranslateTest
|
||||
*
|
||||
* @package Todaymade\Daux\Format\Template
|
||||
*/
|
||||
class TranslateTest extends TestCase
|
||||
{
|
||||
protected function getTree(Config $config)
|
||||
{
|
||||
$structure = [
|
||||
'en' => [
|
||||
'Page.md' => 'some text content',
|
||||
],
|
||||
'it' => [
|
||||
'Page.md' => 'another page',
|
||||
],
|
||||
];
|
||||
$root = vfsStream::setup('root', null, $structure);
|
||||
|
||||
$config->setDocumentationDirectory($root->url());
|
||||
$config['valid_content_extensions'] = ['md'];
|
||||
$config['mode'] = Daux::STATIC_MODE;
|
||||
$config['index_key'] = 'index.html';
|
||||
|
||||
$tree = new Root($config);
|
||||
Builder::build($tree, []);
|
||||
|
||||
return $tree;
|
||||
}
|
||||
|
||||
public function translateDataProvider()
|
||||
{
|
||||
return [
|
||||
['Previous', 'en'],
|
||||
['Pagina precedente', 'it'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider translateDataProvider
|
||||
*
|
||||
* @param $expectedTranslation
|
||||
* @param $language
|
||||
*/
|
||||
public function testTranslate($expectedTranslation, $language)
|
||||
{
|
||||
$current = $language . '/Page.html';
|
||||
$entry = $this->prophesize(Entry::class);
|
||||
|
||||
$config = new Config();
|
||||
$config['tree'] = $this->getTree($config);
|
||||
$config['title'] = '';
|
||||
$config['index'] = $entry->reveal();
|
||||
$config['language'] = $language;
|
||||
$config['base_url'] = '';
|
||||
$config['base_page'] = '';
|
||||
$config['templates'] = '';
|
||||
$config['page']['language'] = $language;
|
||||
|
||||
$config['html'] = [
|
||||
'search' => '',
|
||||
'toggle_code' => false,
|
||||
'piwik_analytics' => '',
|
||||
'google_analytics' => '',
|
||||
];
|
||||
$config['theme'] = [
|
||||
'js' => [''],
|
||||
'css' => [''],
|
||||
'fonts' => [''],
|
||||
'favicon' => '',
|
||||
'templates' => 'name',
|
||||
];
|
||||
$config['strings'] = [
|
||||
'en' => ['Link_previous' => 'Previous',],
|
||||
'it' => ['Link_previous' => 'Pagina precedente',],
|
||||
];
|
||||
|
||||
|
||||
$config->setCurrentPage(DauxHelper::getFile($config['tree'], $current));
|
||||
|
||||
$template = new Template($config);
|
||||
$value = $template->getEngine($config)->getFunction('translate')->call(null, ['Link_previous']);
|
||||
|
||||
$this->assertEquals($expectedTranslation, $value);
|
||||
}
|
||||
}
|
39
tests/Server/ServerTest.php
Fichier normal
39
tests/Server/ServerTest.php
Fichier normal
@ -0,0 +1,39 @@
|
||||
<?php namespace Todaymade\Daux\Server;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Console\Output\NullOutput;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Todaymade\Daux\Format\HTML\RawPage;
|
||||
use Todaymade\Daux\Config;
|
||||
use Todaymade\Daux\Daux;
|
||||
use Todaymade\Daux\Server\Server;
|
||||
use org\bovigo\vfs\vfsStream;
|
||||
|
||||
class ServerTest extends TestCase
|
||||
{
|
||||
function testCreateResponse() {
|
||||
|
||||
$structure = [
|
||||
'index.md' => 'first page',
|
||||
'Page.md' => 'another page',
|
||||
'somefile.css' => 'body {}',
|
||||
'22.png' => ''
|
||||
];
|
||||
$root = vfsStream::setup('root', null, $structure);
|
||||
|
||||
$daux = new Daux(Daux::LIVE_MODE, new NullOutput());
|
||||
$daux->getParams()->setDocumentationDirectory($root->url());
|
||||
|
||||
$daux->initializeConfiguration();
|
||||
$daux->getParams()['index_key'] = 'index';
|
||||
$daux->generateTree();
|
||||
|
||||
$page = new RawPage($daux->tree['somefile.css']->getPath());
|
||||
|
||||
$server = new Server($daux);
|
||||
$response = $server->createResponse($page)->prepare(Request::createFromGlobals());
|
||||
|
||||
$this->assertEquals("text/css", $response->headers->get('Content-Type'));
|
||||
}
|
||||
}
|
||||
|
@ -82,16 +82,27 @@ class BuilderTest extends TestCase
|
||||
return new Root($config);
|
||||
}
|
||||
|
||||
public function testGetOrCreatePage()
|
||||
public function providerCreatePage()
|
||||
{
|
||||
return [
|
||||
['A Page.md', 'dir/A_Page.html', 'A_Page.html', 'A Page'],
|
||||
['Page#1.md', 'dir/Page1.html', 'Page1.html', 'Page#1']
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providerCreatePage
|
||||
*/
|
||||
public function testGetOrCreatePage($file, $url, $uri, $title)
|
||||
{
|
||||
$directory = new Directory($this->getStaticRoot(), 'dir');
|
||||
|
||||
$entry = Builder::getOrCreatePage($directory, 'A Page.md');
|
||||
$entry = Builder::getOrCreatePage($directory, $file);
|
||||
|
||||
$this->assertSame($directory, $entry->getParent());
|
||||
$this->assertEquals('dir/A_Page.html', $entry->getUrl());
|
||||
$this->assertEquals('A_Page.html', $entry->getUri());
|
||||
$this->assertEquals('A Page', $entry->getTitle());
|
||||
$this->assertEquals($url, $entry->getUrl());
|
||||
$this->assertEquals($uri, $entry->getUri());
|
||||
$this->assertEquals($title, $entry->getTitle());
|
||||
$this->assertInstanceOf('Todaymade\Daux\Tree\Content', $entry);
|
||||
}
|
||||
|
||||
|
2
themes/d3/js/daux.min.js
externe
Fichier normal
2
themes/d3/js/daux.min.js
externe
Fichier normal
@ -0,0 +1,2 @@
|
||||
var e=document.querySelectorAll(".s-content pre"),t=document.querySelector(".CodeToggler"),n="daux_code_blocks_hidden";function a(t){for(var a=0;a<e.length;a++)e[a].classList.toggle("Hidden",t);try{localStorage.setItem(n,t)}catch(e){}}t&&(e.length?function(){var e=t.querySelector(".CodeToggler__button--main");e.addEventListener("change",(function(e){a(!e.target.checked)}),!1);var r=!1;try{"false"===(r=localStorage.getItem(n))?r=!1:"true"===r&&(r=!0),r&&(a(!!r),e.checked=!r)}catch(e){}}():t.classList.add("Hidden"));var r=document.querySelector(".Collapsible__trigger");if(r){var o=document.querySelector(".Collapsible__content");r.addEventListener("click",(function(e){o.classList.contains("Collapsible__content--open")?(o.style.height=0,o.classList.remove("Collapsible__content--open"),r.setAttribute("aria-expanded","false")):(r.setAttribute("aria-expanded","true"),o.style.transitionDuration="150ms",o.style.height="".concat(o.scrollHeight,"px"),o.classList.add("Collapsible__content--open"))}))}var l=document.querySelectorAll("pre > code:not(.hljs)");if(l.length){var i=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.async=!0,c.src="".concat(window.base_url,"daux_libraries/highlight.pack.js"),c.onload=function(e){[].forEach.call(l,window.hljs.highlightBlock)},i.appendChild(c)}function s(e){var t=void 0!==e.preventDefault;t&&e.preventDefault();var n=function(e){for(var t=e;(t=t.parentNode)&&9!==t.nodeType;)if(1===t.nodeType&&t.classList.contains("Nav__item"))return t;throw new Error("Could not find a NavItem...")}(e.target),a=n.querySelector("ul.Nav");t&&n.classList.contains("Nav__item--open")?(a.style.height="".concat(a.scrollHeight,"px"),a.style.transitionDuration="150ms",a.style.height="0px",n.classList.remove("Nav__item--open")):t?(a.style.transitionDuration="150ms",a.addEventListener("transitionend",(function e(t){"0px"!==t.target.style.height&&(t.target.style.height="auto"),t.target.removeEventListener("transitionend",e)})),a.style.height="".concat(a.scrollHeight,"px"),n.classList.add("Nav__item--open")):a.style.height="auto"}for(var d,u=document.querySelectorAll(".Nav__item.has-children i.Nav__arrow"),h=u.length-1;h>=0;h--)(d=u[h]).addEventListener("click",s),d.parentNode.parentNode.classList.contains("Nav__item--open")&&s({target:d});var g=document.querySelectorAll(".Nav__item__link--nopage"),v=!0,p=!1,_=void 0;try{for(var y,m=g[Symbol.iterator]();!(v=(y=m.next()).done);v=!0){y.value.addEventListener("click",s)}}catch(e){p=!0,_=e}finally{try{v||null==m.return||m.return()}finally{if(p)throw _}}
|
||||
//# sourceMappingURL=daux.min.js.map
|
1
themes/d3/js/daux.min.js.map
Fichier normal
1
themes/d3/js/daux.min.js.map
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
24
themes/daux/config.json
Fichier normal
24
themes/daux/config.json
Fichier normal
@ -0,0 +1,24 @@
|
||||
{
|
||||
"favicon": "<theme_url>img/favicon.png",
|
||||
"js": [
|
||||
"<theme_url>js/daux.min.js"
|
||||
],
|
||||
"variants": {
|
||||
"blue": {
|
||||
"favicon": "<theme_url>img/favicon-blue.png",
|
||||
"css": ["<theme_url>css/theme-blue.min.css"]
|
||||
},
|
||||
"green": {
|
||||
"favicon": "<theme_url>img/favicon-green.png",
|
||||
"css": ["<theme_url>css/theme-green.min.css"]
|
||||
},
|
||||
"navy": {
|
||||
"favicon": "<theme_url>img/favicon-navy.png",
|
||||
"css": ["<theme_url>css/theme-navy.min.css"]
|
||||
},
|
||||
"red": {
|
||||
"favicon": "<theme_url>img/favicon-red.png",
|
||||
"css": ["<theme_url>css/theme-red.min.css"]
|
||||
}
|
||||
}
|
||||
}
|
10
themes/daux/css/theme-blue.min.css
externe
Fichier normal
10
themes/daux/css/theme-blue.min.css
externe
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
1
themes/daux/css/theme-blue.min.css.map
Fichier normal
1
themes/daux/css/theme-blue.min.css.map
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
10
themes/daux/css/theme-green.min.css
externe
Fichier normal
10
themes/daux/css/theme-green.min.css
externe
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
1
themes/daux/css/theme-green.min.css.map
Fichier normal
1
themes/daux/css/theme-green.min.css.map
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
10
themes/daux/css/theme-navy.min.css
externe
Fichier normal
10
themes/daux/css/theme-navy.min.css
externe
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
1
themes/daux/css/theme-navy.min.css.map
Fichier normal
1
themes/daux/css/theme-navy.min.css.map
Fichier normal
Diff de fichier supprimé car une ou plusieurs lignes sont trop longues
Certains fichiers ne sont pas affichés car ce diff contient trop de modifications Voir plus
Chargement…
Référencer dans un nouveau ticket
Block a user