Compare commits

..

No commits in common. "3dd3438f44f983316c56e07a7008ad6022b61a0b" and "1d0aa5ac9e2195cd69c87165c93e6c577aa2e65f" have entirely different histories.

32 changed files with 608 additions and 788 deletions

View File

@ -1,26 +0,0 @@
SeaCMS Default Theme
==================
- [English](README.md)
Ce paquet est le thème principal de SeaCMS.
**Attention : le nom SeaCMS va changer car il semble déjà utilisé dans d'autres pays**
## Auteurs
- Jérémy Dufraisse (2022-2023)
- Thatoo (2022-2023)
- Marion Bouder (2022-2023)
- Association Defis (2022-2023)
## Documentation
Quelques brides de documentation sont disponibles dans le fichier [doc/en/dev.md](doc/en/dev.md)
## Licence et garanties
Voir le fichier [LICENCE](./LICENCE) (et sa traduction française [LICENCE_FR](./LICENCE_FR))
**IMPORTANT**: Le fichier LICENCE file ne couvre pas le contenu des dossiers `vendor`. Voir le fichier LICENCE fournis dans chaque sous-dossier concerné par la bibliothèque importée.

View File

@ -1,24 +1,42 @@
SeaCMS Default Theme
==================
- [Français](LISEZMOI.md)
- [Français](#Fran%C3%A7ais)
- [English](#English)
This package is the main theme of SeaCMS.
## Français
**Warning : the name SeaCMS will change because it seems already uses in other countries**
Ce paquet est le thème principal de SeaCMS.
## Authors
**Attention : le nom SeaCMS va changer car il semble déjà utilisé dans d'autres pays**
### Auteurs
- Jérémy Dufraisse (2022-2023)
- Thatoo (2022-2023)
- Marion Bouder (2022-2023)
- Association Defis (2022-2023)
## Documentation
### Licence et garanties
Some documentation is available into [doc/en/dev.md](doc/en/dev.md)
Voir le fichier [LICENCE](./LICENCE) (et sa traduction française [LICENCE_FR](./LICENCE_FR))
## Licence and warranty
**IMPORTANT**: Le fichier LICENCE file ne couvre pas le contenu des dossiers `vendor`. Voir le fichier LICENCE fournis dans chaque sous-dossier concerné par la bibliothèque importée.
## English
This package is the main theme of SeaCMS.
**Warning : the name SeaCMS will change because it seems already uses in other countries**
### Authors
- Jérémy Dufraisse (2022-2023)
- Thatoo (2022-2023)
- Marion Bouder (2022-2023)
- Association Defis (2022-2023)
### Licence and warranty
See [LICENCE](./LICENCE) file (and french translation [LICENCE_FR](./LICENCE_FR))

View File

@ -1,8 +0,0 @@
{# seacms-theme
# SPDX-License-Identifier: EUPL-1.2 #}
{% extends "index.twig" %}
{% block content %}
{% include "includes/_contact_content.twig" %}
{% endblock content %}

View File

@ -437,7 +437,7 @@ header nav .burger-button {
#admin-bar #list-content i,
#admin-bar #tutoriel i {
cursor: pointer;
color: var(--main-color);
color: color: var(--main-color);
}
#admin-bar #list-content i:hover,
@ -2486,12 +2486,3 @@ text-transform: uppercase;
#bottombar a:hover {
text-decoration: 2px wavy underline var(--color-1);
}
// less tests
.first-editable-button {
.btn();
.hero-btn();
.bg-glaz();
.border-rounded();
.no-decoration();
}

View File

@ -1,25 +0,0 @@
# Documentation on development
## Using `yarn`
[`yarn`](https://yarnpkg.com) is a package manager running on [`nodejs`](https://nodejs.org). It is veru useful to manage `javascript` or `css` projects.
### Adding a new package
1. find the name of the wanted package on the website <https://www.npmjs.com>
2. on command line interface, on the root folder of this project, type `yarn add --dev name-of-the-package`
3. Identify the needed files into folder `node_modules/name-of-the-package` ; most of time, files are into folder `node_modules/name-of-the-package/dist`
4. modifify the file `js/extract-files-from-node-modules` to a new line for each file to import in the theme :
- `copySync('node_modules/name-of-the-package/dist/js/file.min.js','js/vendor/name-of-the-package/file.min.js',{ overwrite: true })` for `javascript` file
- `copySync('node_modules/name-of-the-package/dist/css/file.min.css','css/vendor/name-of-the-package/file.min.css',{ overwrite: true })` for `css` file
- do not forget `LICENCE` file of the package, `copySync('node_modules/name-of-the-package/dist/LICENCE','css/vendor/name-of-the-package/LICENCE',{ overwrite: true })` for `css` (and for `javascript`)
5. type `yarn install` in commpand line interface to start this script
6. add a new line in concerned `twig` file (example : `includes/_head.twig`) to use the new file (example : `<link href="{{ theme_url }}/css/vendor/name-of-the-package/file.min.css" rel="stylesheet" type="text/css" />`)
### Removing a new package
1. find the name of the wanted package into file `package.json`
2. on command line interface, on the root folder of this project, type `yarn remove name-of-the-package`
3. Identify the associated files into folders `js/vendor` and `css/vendor` and delete them
4. modifify the file `js/extract-files-from-node-modules` to remove lines related to this package
5. remove line in concerned `twig` file (example : `includes/_head.twig`) that uses the new file (example : `<link href="{{ theme_url }}/css/vendor/name-of-the-package/file.min.css" rel="stylesheet" type="text/css" />`)

View File

@ -1,8 +0,0 @@
{# seacms-theme
# SPDX-License-Identifier: EUPL-1.2 #}
{% extends "index.twig" %}
{% block content %}
{% include "includes/_home_content.twig" %}
{% endblock content %}

View File

@ -1,192 +0,0 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
<section id="contact">
<div class="layout-contact layout-maxed">
<div class="md:flex p-36">
<article class="contact-card border-rounded flex flex-col justify-between flex-grow bg-blue bg-section bg-overlay bg-glazient color-white sm:p-24 md:m-24">
<div class="card-content-top">
<h3 id="title-card" class="color-white mt-8">{{ meta.titlecard }}</h3>
<?php h3('title-card', 'color-white mt-8')?>
<?php txt('intro-card', 'text-bold md:mt-24')?>
</div>
<div class="card-content-bottom">
<ul class="card-info is-unstyled text-smaller text-bold mt-24 md:mb-24">
<li><?php txt('item-1', 'ml-8')?></li>
<li><?php txt('item-2', 'ml-8')?></li>
<li><?php txt('item-3', 'ml-8')?></li>
</ul>
</div>
</article>
<article class="contact-form sm:p-24 md:m-24">
<form id="form-contact">
<?php h2('title-form', 'color-blue')?>
<?php txt('intro-form', 'mb-16')?>
<div class="editable-hidden">
<label for="email-to"><?php _e("Email to")?> (your@domain.com)<span class="color-red">*</span></label><br>
<?input("email-to", array('name' => 'email-to', 'placeholder' => __("Email to"), 'class' => 'w100'));?>
<?input("email-hash", array('name' => 'email-hash', 'type' => 'hidden', 'class' => 'hidden'));?>
</div>
<div class="grid grid-cols-2 gap-36 mt-24">
<div>
<input type="text" name="name" id="name" placeholder="<?php _e("Name / Forname")?> *" class="w100" required>
</div>
<div>
<input type="email" name="email-from" id="email-from" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,3}$" autocomplete="email" placeholder="<?php _e("Email")?> *" class="w100" required>
</div>
<div class="col-span-full">
<input type="text" name="subject" id="subject" placeholder="<?php _e("Subject")?> *" class="w100" required>
</div>
<div class="col-span-full">
<textarea name="message" id="message" placeholder="<?php _e("Message")?> *" rows="5" cols="150" class="mb-8" required></textarea>
</div>
</div>
<div class="">
<!-- Captcha -->
<?
$chiffre = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten');
$operators = array("+", "-");
$operator = $operators[array_rand($operators)];
$nb1 = rand(1, 5);//10
$nb2 = ($operator === '-') ? mt_rand(1, $nb1) : mt_rand(1, 5);// on évite les résultats négatifs en cas de soustraction
eval('$captcha = strval('.$nb1.$operator.$nb2.');');
$captcha_hash = hash('sha256', $captcha.$GLOBALS['pub_hash']);
// On change le signe "-" moins de calcul en "" lisible en accessibilité
?>
<div>
<label for="captcha">
<?php _e("For security reasons please solve the following calculation")?><span class="color-red">*</span> :
<?=(__($chiffre[$nb1])." ".($operator=='-'?'':$operator)." ".__($chiffre[$nb2]));?> =
</label>
<input type="text" name="captcha" id="captcha" placeholder="?" class="text-center" autocomplete="off" required>
<input type="hidden" name="captcha_hash" value="<?=$captcha_hash;?>">
</div>
<!-- RGPD -->
<div class="mt-24">
<label for="rgpdcheckbox" class="inline"><?php _e("Please verify your entry and check the box to accept the storage and processing of this information.")?><span class="color-red">*</span></label>
<input type="checkbox" name="rgpdcheckbox" id="rgpdcheckbox" required>
</div>
</div>
<!-- Bouton envoyer -->
<div class="foat-right mt-36">
<button type="submit" id="send" class="btn btn--line border-rounded text-bold">
<?php _e("Send")?>
<i class="icon moon-arrow-right ml-24" aria-hidden="true"></i>
</button>
</div>
<?php txt('texte-rgpd', 'mt-36')?>
<input type="hidden" name="rgpd_text" value="<?=htmlspecialchars(@$GLOBALS['content']['rgpd']);?>">
<input type="hidden" name="nonce_contact" value="<?=nonce("nonce_contact");?>">
<input type="hidden" name="referer" value="<?=htmlspecialchars((isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:""));?>">
</form>
</article>
</div>
</div>
</section>
<script>
// Titre de la page en cours
// title = document.title;
// Pour rétablir le fonctionnement du formulaire
function activation_form(){
desactive = false;
$("#form-contact #send .moon-settings").removeClass("icon-spin moon-settings").addClass("moon-arrow-right");
// Activation des champs du formulaire
$("#form-contact input, #form-contact textarea, #form-contact button").attr("readonly", false).removeClass("disabled");
// On peut soumettre le formulaire avec la touche entrée
//$("#form-contact").on("submit", function(event) { send_mail(event) });
$("#form-contact button").attr("disabled", false);
}
desactive = false;
function send_mail(event)
{
event.preventDefault();
if($("#captcha").val()=="" || $("#name").val()=="" || $("#subject").val()=="" || $("#message").val()=="" || $("#email-from").val()=="" || $("#rgpdcheckbox").prop("checked") == false)
error(__("Thank you for completing all the required fields!"));
else if(!desactive)
{
desactive = true;
// Icone envoi en cours
$("#form-contact #send .moon-settings").removeClass("moon-settings").addClass("icon-spin moon-settings");
// Désactive le formulaire
$("#form-contact input, #form-contact textarea, #form-contact button").attr("readonly", true).addClass("disabled");
// Désactive le bouton submit (pour les soumissions avec la touche entrée)
//$("#form-contact").off("submit");
//$("#form-contact button").attr("disabled", true);// => ne permet pas le focus sur le btn une fois envoyer
$.ajax(
{
type: "POST",
url: path+"theme/"+theme+(theme?"/":"")+"tpl/contact.php?mode=send-mail",
data: $("#form-contact").serializeArray(),
success: function(html){ $("body").append(html); }
});
}
}
$(function()
{
// Message d'erreur en cas de mauvaise saisie du mail. Pour l'accessibilité
var email_from = document.getElementById("email-from");
email_from.addEventListener("invalid", function() {
email_from.setCustomValidity("<?_e("Invalid email")?>. <?_e("Expected format")?> : name@example.com")
}, false);
email_from.addEventListener("input", function() {
email_from.setCustomValidity("");
}, false);
// Soumettre le formulaire
$("#form-contact").submit(function(event)
{
send_mail(event)
});
// Avant la sauvegarde
before_save.push(function() {
// Encode
if(data["content"]["email-to"] != undefined)
data["content"]["email-to"] = btoa(data["content"]["email-to"]);
});
// Edit
edit.push(function()
{
// Décode
$("#email-to").val(function(index, value) {
if(value) return atob(value);
});
});
});
</script>

23
includes/about.twig Normal file
View File

@ -0,0 +1,23 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% from "includes/markdown_by_paragraph.twig" import markdown_by_paragraph %}
{% from "includes/actions.twig" import actions %}
<!-- About Section-->
<section class="page-section bg-primary text-white mb-0" id="about">
<div class="container">
<!-- About Section Heading-->
<h2 class="page-section-heading text-center text-uppercase text-white">{{ index.about.title ? index.about.title : "About" }}</h2>
<!-- Icon Divider-->
<div class="divider-custom divider-light">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-{{ index.about.divider ? index.about.divider : 'star' }}"></i></div>
<div class="divider-custom-line"></div>
</div>
<!-- About Section Content-->
<div class="row">
{{ markdown_by_paragraph(index.about.content ? index.about.content : config.theme_config.demo.about.content, "about") }}
</div>
<!-- About Section Buttons-->
{{ actions(index.about.actions ? index.about.actions : not index.about.content ? config.theme_config.demo.about.actions, "about") }}
</div>
</section>

53
includes/actions.twig Normal file
View File

@ -0,0 +1,53 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% macro actions(actions, mode, include_close_button = true) %}
{% set has_actions = actions ? true : false %}
{{ has_actions ? '<div class="text-center mt-4">' }}
{% if mode == "portfolio" and include_close_button %}
{% set close_button = {"icon": "times", "content": "Close Window", "color": "primary", "outline": false, "close_button": true} %}
{% set actions = actions ? actions|merge([close_button]) : [close_button] %}
{% endif %}
{% for action in actions %}
{% set classes = ["btn"] %}
{% if mode == "social" %}
{% set classes = classes|merge(["btn-social","mx-1"]) %}
{% else %}
{% set classes = classes|merge(["mx-1", "my-1"]) %}
{% endif %}
{% set size = "btn-xl" %}
{% set color = mode in ["about", "social"] ? "light" : "primary" %}
{% set outline = mode in ["about", "social"] ? true : false %}
{% if action.size in ["small", "large", "xlarge"] %}
{% set size = action.size|replace({"small": "btn-sm", "large": "btn-lg", "xlarge": "btn-xl"}) %}
{% endif %}
{% if action.color in ["primary", "secondary", "success", "danger", "warning", "info", "light", "dark"] %}
{% set color = action.color %}
{% endif %}
{% if action.outline is defined and action.outline in [true, false] %}
{% set outline = action.outline %}
{% endif %}
{% if mode != "social" and not action.close_button and action.size != "medium" %}{% set classes = classes|merge([size]) %}{% endif %}
{% set classes = classes|merge([["btn-", (outline ? "outline-"), color ]|join]) %}
{% if action.disabled %}{% set classes = classes|merge(["disabled"]) %}{% endif %}
{% if action.close_button %}
{% set classes = classes|merge(["d-block", "mx-auto", "mt-4"]) %}
{% endif %}
{{ action.close_button ? '<button data-bs-dismiss="modal"' : "<a" }} class="{{ classes|join(" ") }}" {% if action.link and not action.disabled %} href="{{ action.link|url }}" {% endif %}>
{% if action.icon %}
<i class="{{ [(action.brands ? 'fab' : 'fas'), 'fa-fw', ('fa-' ~ action.icon), (mode != 'social' ? 'me-2')]|join(' ')}}"></i>
{% endif %}
{{ mode != "social" ? action.content }}
{{ action.close_button ? "</button>" : "</a>" }}
{% endfor %}
{{ has_actions ? "</div>" }}
{% endmacro %}

View File

@ -1,67 +0,0 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% if mode == "portfolio" and (not (include_close_button is defined) or (include_close_button is same as(true))) %}
{% set actions = (actions ? actions : [])|merge([{
"icon": "times",
"content": "Close Window",
"color": "primary",
"outline": false,
"close_button": true}]) %}
{% endif %}
{% if actions %}
<div class="text-center mt-4">
{% block actionscontent %}
{% for action in actions %}
{% if action.close_button %}
<button data-bs-dismiss="modal"
{% block attributes %}
class="btn {{
(mode == "social")
? 'btn-social mx-1'
: 'mx-1 my-1'
}}
{%- if mode != "social" and not action.close_button and action.size != "medium"
%} {% if action.size in ["small", "large", "xlarge"] -%}
{{- action.size|replace({"small": "btn-sm", "large": "btn-lg", "xlarge": "btn-xl"}) -}}
{% else %}btn-xl
{%- endif -%}
{%- endif %} btn-{{
(
action.outline is same as(true) or
mode in ["about", "social"]
) ? 'outline-' }}{{
(action.color in ["primary", "secondary", "success", "danger", "warning", "info", "light", "dark"])
? action.color
: (
(mode in ["about", "social"])
? 'light'
: 'primary'
)
}}{% if action.disabled %} disabled{% endif %}
{%- if action.close_button %} d-block mx-auto mt-4{% endif %}"
{% if action.link and not action.disabled %} href="{{ action.link|url }}" {% endif %}
{% endblock attributes %}
>
{% block contentlink %}
{% if action.icon %}
<i class="{{ [(action.brands ? 'fab' : 'fas'), 'fa-fw', ('fa-' ~ action.icon), (mode != 'social' ? 'me-2')]|join(' ')}}"></i>
{% endif %}
{{ mode != "social" ? action.content }}
{% endblock contentlink %}
</button>
{% else %}
<a {{ block('attributes') }}>
{{ block('contentlink') }}
</a>
{% endif %}
{% endfor %}
{% endblock actionscontent %}
</div>
{% else %}
{{ block('actionscontent') }}
{% endif %}

View File

@ -1,19 +0,0 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% for paragraph in content|split("\n")|filter(e=>e is not empty) %} {# small mb-0 #}
{% if mode == "about" %}
<div class="col-lg-4{{ loop.first : " ms-auto" : "" }}{{ loop.last : " me-auto" : "" }}">
{% block paragapheblock %}
<p class="{{ (mode == "about") ? "lead" : (
(mode == "footer") ? "lead mb-0" : (
(mode == "copyright") ? "small mb-0" : ""
)
) }}">
{{ paragraph|markdown(singleLine=true) }}
</p>
{% endblock paragapheblock %}
</div>
{% else %}
{{ block('paragapheblock') }}
{% endif %}
{% endfor %}

View File

@ -1,26 +0,0 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% set known_video_types = {
"3gp":"video/3gpp",
"3g2":"video/3gpp2",
"avi":"video/x-msvideo",
"mpg":"video/mpeg",
"mpeg":"video/mpeg",
"mp4":"video/mp4",
"mov":"video/quicktime",
"ogv":"video/ogg",
"ts":"video/mp2t",
"qt":"video/quicktime",
"webm":"video/webm",
"wmv":"video/x-ms-wmv",
} %}
<video
class="img-fluid rounded d-block mx-auto{% if mode == "content" %} mb-5{% endif %}"
{% if image %} poster="{{ image|url }}" {% endif %}
{% if mode == "portfolio" %} autoplay muted loop {% else %} controls {% endif %}>
{% for source in (video is iterable and (not (video[1] starts with "video/") or ("." in video[1])) ? video : [video]) %}
{% set mime = (source is iterable) ? source[1] : known_video_types[source|split(".")|last] %}
<source src="{{ source is iterable ? source[0]|url : source|url }}" {% if mime %} type="{{ mime }}" {% endif %}>
{% endfor %}
Your browser does not support this video!
</video>

107
includes/contact.twig Normal file
View File

@ -0,0 +1,107 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
<!-- Contact Section-->
<section class="page-section" id="contact">
<div class="container">
<!-- Contact Section Heading-->
<h2 class="page-section-heading text-center text-uppercase text-secondary mb-0">{{ index.contact.title ? index.contact.title : "Contact Me" }}</h2>
<!-- Icon Divider-->
<div class="divider-custom">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-{{ index.contact.divider ? index.contact.divider : 'star' }}"></i></div>
<div class="divider-custom-line"></div>
</div>
{% if index.contact.form.enabled %}
<!-- Contact Section Form-->
<div class="row justify-content-center">
<div class="col-lg-8 col-xl-7">
<form id="contactForm" class="needs-validation" {% if index.contact.form.action %} action="{{ index.contact.form.action|url }}" {% endif %} {% if index.contact.form.method %} method="{{ index.contact.form.method }}" {% endif %} novalidate>
<!-- Name input-->
<div class="form-floating mb-3">
<input class="form-control" id="name" name="name" type="text" placeholder="Enter your name..." required />
<label for="name">Full name</label>
<div class="invalid-feedback">A name is required.</div>
</div>
<!-- Email address input-->
<div class="form-floating mb-3">
<input class="form-control" id="email" name="email" type="email" placeholder="name@example.com" required />
<label for="email">Email address</label>
<div class="invalid-feedback">An email is required.</div>
<div class="invalid-feedback">Email is not valid.</div>
</div>
<!-- Phone number input-->
<div class="form-floating mb-3">
<input class="form-control" id="phone" name="phone" type="tel" placeholder="(123) 456-7890" required />
<label for="phone">Phone number</label>
<div class="invalid-feedback">A phone number is required.</div>
</div>
<!-- Message input-->
<div class="form-floating mb-3">
<textarea class="form-control" id="message" name="message" placeholder="Enter your message here..." style="height: 10rem" required></textarea>
<label for="message">Message</label>
<div class="invalid-feedback">A message is required.</div>
</div>
<!-- Submit success message-->
<!---->
<!-- This is what your users will see when the form-->
<!-- has successfully submitted-->
<div class="d-none" id="submitSuccessMessage">
<div class="text-center mb-3">
<div class="fw-bolder">Form submission successful!</div>
</div>
</div>
<!-- Submit error message-->
<!---->
<!-- This is what your users will see when there is-->
<!-- an error submitting the form-->
<div class="d-none" id="submitErrorMessage"><div class="text-center text-danger mb-3">Error sending message!</div></div>
<!-- Submit Button-->
<button class="btn btn-primary btn-xl" id="submitButton" type="submit">Send</button>
</form>
</div>
</div>
{% endif %}
{% if index.contact.items or not index.contact.form.enabled %}
{% if index.contact.form.enabled %}
<!-- Contact Subsection Heading-->
<h3 class="page-section-heading text-center text-uppercase text-secondary mb-0 mt-5 fs-2">{{ index.contact.subtitle ? index.contact.title : "Or reach me by" }}</h3>
<!-- Icon Divider-->
<div class="divider-custom">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-{{ index.contact.subdivider ? index.contact.subdivider : 'star' }}"></i></div>
<div class="divider-custom-line"></div>
</div>
{% endif %}
<!-- Contact Section Content-->
<div class="row justify-content-center">
{% for item in index.contact.items ? index.contact.items : config.theme_config.demo.contact.items %}
{% set classes = ["col-md-6", "col-lg-4"] %}
{% if not loop.last %}
{% set classes = classes|merge(["mb-5"]) %}
{% if loop.revindex <= (loop.length - 1) % 3 + 1 %}
{% if loop.revindex == 3 %}
{% set classes = classes|merge(["mb-lg-0"]) %}
{% elseif loop.revindex == 2 %}
{% if loop.index == 2 %}
{% set classes = classes|merge(["mb-lg-0"]) %}
{% else %}
{% set classes = classes|merge(["mb-md-0"]) %}
{% endif %}
{% endif %}
{% elseif loop.revindex == 2 and loop.index == 3 %}
{% set classes = classes|merge(["mb-md-0","mb-lg-5"]) %}
{% endif %}
{% endif %}
<div class="{{ classes|join(" ") }}">
<div class="d-flex flex-column align-items-center">
<div class="icon-contact mb-3"><i class="{{ item.brands ? "fab" : "fas" }} fa-{{ item.icon }}"></i></div>
<div class="text-muted">{{ item.title }}</div>
{% if item.link %}<a href="{{ item.link|url }}"{% else %}<div{% endif %} class="lead font-weight-bold">{{ item.content }}{{ item.link ? "</a>" : "</div>" }}
</div>
</div>
{% endfor %}
</div>
{% endif %}
</div>
</section>

View File

@ -1,5 +1,8 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% from "includes/markdown_by_paragraph.twig" import markdown_by_paragraph %}
{% from "includes/actions.twig" import actions %}
{% from "includes/video.twig" import video %}
<!-- Content Section-->
<section class="page-section content" id="content">
<div class="container">
@ -13,12 +16,12 @@
<div class="divider-custom-line"></div>
</div>
{% if meta.video %}
{{ include("includes/blocks/_video.twig",{video:meta.video,image:meta.image,mode:"content"}) }}
{{ video(meta.video, meta.image, "content") }}
{% elseif meta.image %}
<img class="img-fluid rounded mb-5 d-block mx-auto" src="{{ meta.image|url }}" alt="{{ meta.image_alt }}" />
{% endif %}
{{ content }}
{{ include('includes/blocks/_actions.twig',{actions:meta.actions, mode:"single_page"}) }}
{{ actions(meta.actions, "single_page") }}
</div>
</div>
</section>

View File

@ -1,5 +1,7 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% from "includes/markdown_by_paragraph.twig" import markdown_by_paragraph %}
{% from "includes/actions.twig" import actions %}
{% if not (index.location.disabled and index.social.disabled and index.footer.disabled) %}
<!-- Footer-->
<footer role="contentinfo">

View File

@ -21,8 +21,7 @@
<!-- Core theme CSS -->
<link href="{{ theme_url }}/css/vendor/knacss/knacss.min.css" rel="stylesheet" type="text/css" />
{# <link href="{{ theme_url }}/css/style.css" rel="stylesheet" type="text/css" /> #}
<link href="{{ theme_url }}/css/style.less" rel="stylesheet/less" type="text/css" />
<link href="{{ theme_url }}/css/style.css" rel="stylesheet" type="text/css" />
{{ include('@PicoContentEditor/head-styles.twig') }}
@ -30,7 +29,6 @@
<script src="{{ theme_url }}/js/vendor/modernizr/modernizr.min.js" type="text/javascript"></script>
<script src="{{ theme_url }}/js/utils.js" type="text/javascript"></script>
<script src="{{ theme_url }}/js/pico.js" type="text/javascript"></script>
<script src="{{ theme_url }}/js/vendor/less/less.min.js" type="text/javascript"></script>
{{ include('@PicoContentEditor/head-scripts.twig') }}

View File

@ -7,11 +7,13 @@
<div class="navbar sticky shadow inside flex lg:pl-36">
<!-- Masthead Logo-->
{% if pages["_meta"].meta.logo %}
<div class="site-logo flex align-items-center py-24 mx-36">
<a href="{{ "index"|link }}">
<img height="50" width="200" src="{{ pages["header"].meta.logo|url }}" alt="" />
<img height="50" width="200" src="{{ pages["_meta"].meta.logo|url }}" alt="" />
</a>
</div>
{% endif %}
<!-- Nav bar-->
<nav role="navigation" class="menu flex" aria-label="{{ index.header.Browsing_menu }}">
@ -31,7 +33,9 @@
<!-- Github Repo-->
<div class="holder-panel tablet-hidden">
<div class="holder-contact bg-glaz text-bold"><a class="btn" href="">{{ pages["header"].meta.iconGit_txt }}</a><i class="icon icon-{{ pages["header"].meta.iconGit }} color-white"></i></div>
{% if pages["_meta"].meta.icon0 %}
<div class="holder-contact bg-glaz text-bold"><a class="btn" href="">{{ pages["_meta"].meta.icon0_txt }}</a><i class="icon icon-{{ pages["_meta"].meta.icon0 }} color-white"></i></div>
{% endif %}
</div>
</nav>
</div>

View File

@ -1,5 +1,8 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% from "includes/markdown_by_paragraph.twig" import markdown_by_paragraph %}
{% from "includes/actions.twig" import actions %}
{% from "includes/video.twig" import video %}
<section id="hero" class="layout-maxed bg-blue">
<div class="layout-hero bg-section bg-overlay bg-gradient sm:py-36 py-8" <?php bg('bg-hero')?>>
<div class="hero-content grid md:grid-cols-2 flex flex-wrap sm:my-36 my-8 sm:py-36 py-8">
@ -8,12 +11,12 @@
<h1 id="hero-title" class="hero-title color-light">{{ site_title }}</h1>
<div id="hero-desc" class="editable hero-desc color-light py-20 mb-16">
<hr>
<em class="color-2">Editable text with icon <i class="icon icon-{{ meta.icon1 }}" aria-hidden="true"></i></em>
<em class="color-2">Editable text with icon <i class="icon icon-{{ pages["_meta"].meta.icon2 }}" aria-hidden="true"></i></em>
</div>
<div class="hero-action grid lg:grid-cols-2">
{% for button in meta.button %}
<a class="first-editable-button" href="{{ "index"|link }}">Editable button with icon<i class="icon icon-{{ button.icon }} ml-8"></i></a>
{% for button in pages["_meta"].meta.button %}
<a class="btn hero-btn bg-glaz border-rounded no-decoration" href="{{ "index"|link }}">Editable button with icon<i class="icon icon-{{ button.icon }} ml-8"></i></a>
{% endfor %}
</div>
</div>
@ -21,10 +24,10 @@
<div class="flex flex-col flex-grow justify-center mx-24 py-12">
<div class="hero-card bg-white border-rounded shadow text-center animation slide-right fire">
<span id="hero-card-icon" class="editable-media" data-width="80" data-height="80" style="max-width:80px; max-height:80px">
<img class="" src="{{ meta.image1.url|url }}" style="max-width: 80px; max-height: 80px;" alt="{{ meta.image1.alt }}">
<img class="" src="{{ pages["_meta"].meta.image1.url|url }}" style="max-width: 80px; max-height: 80px;" alt="{{ pages["_meta"].meta.image1.alt }}">
</span>
<h3 id="hero-card-title" class="editable hero-card-title color-blue my-16">{{ meta.image1.title }}</h3>
<div id="hero-card-desc" class="editable hero-card-desc mb-0">{{ meta.image1.txt }}</div>
<h3 id="hero-card-title" class="editable hero-card-title color-blue my-16">{{ pages["_meta"].meta.image1.title }}</h3>
<div id="hero-card-desc" class="editable hero-card-desc mb-0">{{ pages["_meta"].meta.image1.txt }}</div>
</div>
</div>
</div>
@ -44,7 +47,7 @@
<!-- module pour bien identifier que ce sont les elements à dupliquer et a sauvegardé-->
<div id="features-card" class="module sm:grid md:grid-cols-2 lg:grid-cols-4 gap-36 sm:mx-20 mx-8 py-36 animation delay-1 fade-in">
{% for module in meta.module %}
{% for module in pages["_meta"].meta.module %}
<div class="features-card bg-white shadow border-rounded flex flex-col my-16 md:my-24">
<div class="features-card-icon">
<span id="features-card-icon-{{ module.id }}" data-class="ml-0" data-width="70" data-height="70" style="max-width: 70px; max-height: 70px;">
@ -75,15 +78,17 @@
<h2 class="page-section-heading text-center text-uppercase color-blue mb-0">{{ current_page.title }}</h2>
<h2 class="page-section-heading text-center text-uppercase text-secondary mb-0">{{ meta.title ? meta.title : current_page.id }}</h2>
<!-- Icon Divider-->
<a class="btn hero-btn bg-glaz border-rounded no-decoration" href="{{ "index"|link }}">Editable button with icon<i class="icon icon-{{ meta.icon1 }} ml-8"></i></a>
{% if pages["_meta"].meta.icon1 %}
<a class="btn hero-btn bg-glaz border-rounded no-decoration" href="{{ "index"|link }}">Editable button with icon<i class="icon icon-{{ pages["_meta"].meta.icon1 }} ml-8"></i></a>
{% endif %}
</div>
<div class="layout-maxed py-36">
{# {% if meta.video %}
{{ include("includes/blocks/_video.twig",{video:meta.video,image:meta.image,mode:"content"}) }}
{{ video(meta.video, meta.image, "content") }}
{% elseif meta.image %}
<img class="img-fluid rounded mb-5 d-block mx-auto" src="{{ meta.image|url }}" alt="{{ meta.image_alt }}" />
{% endif %} #}
{{ content }}
{# {{ include('includes/blocks/_actions.twig',{actions:meta.actions, mode:"single_page"}) }} #}
{# {{ actions(meta.actions, "single_page") }} #}
</div>
</section>

View File

@ -0,0 +1,30 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% macro markdown_by_paragraph(content, mode) %}
{% set content_array = [] %}
{% for paragraph in content|split("\n") %}
{% if paragraph %}
{% set content_array = content_array|merge([paragraph]) %}
{% endif %}
{% endfor %}
{% for paragraph in content_array %} {# small mb-0 #}
{% set p_class = [] %}
{% if mode == "footer" or mode == "about" %}{% set p_class = p_class|merge(["lead"]) %}{% endif %}
{% if mode == "copyright" %}{% set p_class = p_class|merge(["small"]) %}{% endif %}
{% if mode == "footer" or mode == "copyright" %}{% set p_class = p_class|merge(["mb-0"]) %}{% endif %}
{% if mode == "about" %}
{% set div_class = ["col-lg-4"] %}
{% if loop.first %}
{% set div_class = div_class|merge(["ms-auto"]) %}
{% endif %}
{% if loop.last %}
{% set div_class = div_class|merge(["me-auto"]) %}
{% endif %}
<div class="{{ div_class|join(" ") }}">
{% endif %}
<p class="{{ p_class|join(" ") }}">{{ paragraph|markdown(singleLine=true) }}</p>
{{ mode == "about" ? "</div>" }}
{% endfor %}
{% endmacro %}

53
includes/portfolio.twig Normal file
View File

@ -0,0 +1,53 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% from "includes/video.twig" import video %}
<!-- Portfolio Section-->
<section class="page-section portfolio" id="portfolio">
<div class="container">
<!-- Portfolio Section Heading-->
<h2 class="page-section-heading text-center text-uppercase text-secondary mb-0">{{ index.portfolio.title ? index.portfolio.title : "Portfolio" }}</h2>
<!-- Icon Divider-->
<div class="divider-custom">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-{{ index.portfolio.divider ? index.portfolio.divider : 'star' }}"></i></div>
<div class="divider-custom-line"></div>
</div>
<!-- Portfolio Grid Items-->
<div class="row justify-content-center">
{% for portfolio_item in portfolio_items %}
{% set classes = ["col-md-6", "col-lg-4"] %}
{% if not loop.last %}
{% set classes = classes|merge(["mb-5"]) %}
{% if loop.revindex <= (loop.length - 1) % 3 + 1 %}
{% if loop.revindex == 3 %}
{% set classes = classes|merge(["mb-lg-0"]) %}
{% elseif loop.revindex == 2 %}
{% if loop.index == 2 %}
{% set classes = classes|merge(["mb-lg-0"]) %}
{% else %}
{% set classes = classes|merge(["mb-md-0"]) %}
{% endif %}
{% endif %}
{% elseif loop.revindex == 2 and loop.index == 3 %}
{% set classes = classes|merge(["mb-md-0","mb-lg-5"]) %}
{% endif %}
{% endif %}
<!-- {{ " Portfolio Item " ~ loop.index ~ " " }} -->
<div class="{{ classes|join(" ") }}">
<div class="portfolio-item mx-auto" data-bs-toggle="modal" data-bs-target="#portfolioModal{{ loop.index }}">
<div class="portfolio-item-caption d-flex align-items-center justify-content-center h-100 w-100">
<div class="portfolio-item-caption-content text-center text-white"><i class="fas fa-plus fa-3x"></i></div>
</div>
{% if portfolio_item.meta.thumbnail_video %}
{{ video(portfolio_item.meta.video, portfolio_item.meta.thumbnail|url ?: portfolio_item.meta.image|url, "portfolio") }}
{% else %}
<img class="img-fluid d-block mx-auto" src="{{ portfolio_item.meta.thumbnail ? portfolio_item.meta.thumbnail|url : portfolio_item.meta.image ? portfolio_item.meta.image|url : random(config.theme_config.demo.portfolio_items).meta.image|url }}" alt="{{ portfolio_item.meta.thumbnail_alt ? portfolio_item.meta.thumbnail_alt : portfolio_item.meta.title }}" />
{% endif %}
</div>
</div>
{% endfor %}
</div>
</div>
</section>

View File

@ -0,0 +1,41 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
<!-- Portfolio Modals-->
{% from "includes/actions.twig" import actions %}
{% from "includes/video.twig" import video %}
{% for portfolio_item in portfolio_items %}
<!--{{ " Portfolio Modal " ~ loop.index ~ " " }}-->
<div class="portfolio-modal modal fade" id="portfolioModal{{ loop.index }}" tabindex="-1" aria-labelledby="portfolioModal{{ loop.index }}" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header border-0"><button class="btn-close" type="button" data-bs-dismiss="modal" aria-label="Close"></button></div>
<div class="modal-body text-center pb-5">
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-8">
<!-- Portfolio Modal - Title-->
<h2 class="portfolio-modal-title text-secondary text-uppercase mb-0">{{ portfolio_item.meta.title ? portfolio_item.meta.title : portfolio_item.id }}</h2>
<!-- Icon Divider-->
<div class="divider-custom">
<div class="divider-custom-line"></div>
<div class="divider-custom-icon"><i class="fas fa-{{portfolio_item.meta.divider ? portfolio_item.meta.divider : 'star' }}"></i></div>
<div class="divider-custom-line"></div>
</div>
{% if portfolio_item.meta.video %}
<!-- Portfolio Modal - Video-->
{{ video(portfolio_item.meta.video, portfolio_item.meta.image, "portfolio_modal", loop.index) }}
{% elseif portfolio_item.meta.image %}
<!-- Portfolio Modal - Image-->
<img class="img-fluid rounded mb-5 d-block mx-auto" src="{{ portfolio_item.meta.image|url }}" alt="{{ portfolio_item.meta.image_alt }}" />
{% endif %}
<!-- Portfolio Modal - Text-->
{{ portfolio_item.meta.demo_content ? portfolio_item.meta.demo_content|markdown : portfolio_item.id|content }}
{{ actions(portfolio_item.meta.actions, "portfolio", index.portfolio.disable_close_buttons ? false : true) }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}

37
includes/video.twig Normal file
View File

@ -0,0 +1,37 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% macro video(video, image, mode, loop_index=0) %}
{% set known_video_types = {
"3gp":"video/3gpp",
"3g2":"video/3gpp2",
"avi":"video/x-msvideo",
"mpg":"video/mpeg",
"mpeg":"video/mpeg",
"mp4":"video/mp4",
"mov":"video/quicktime",
"ogv":"video/ogg",
"ts":"video/mp2t",
"qt":"video/quicktime",
"webm":"video/webm",
"wmv":"video/x-ms-wmv",
} %}
<video class="img-fluid rounded d-block mx-auto{% if mode == "content" %} mb-5{% endif %}" {% if image %} poster="{{ image|url }}" {% endif %} {% if mode == "portfolio" %} autoplay muted loop {% else %} controls {% endif %}>
{% set sources = video is iterable and (not (video[1] starts with "video/") or ("." in video[1])) ? video : [video] %}
{% for source in sources %}
{% if source is iterable %}
{% set mime = source[1] %}
{% else %}
{% set mime = known_video_types[source|split(".")|last] %}
{% endif %}
<source src="{{ source is iterable ? source[0]|url : source|url }}" {% if mime %} type="{{ mime }}" {% endif %}>
{% endfor %}
Your browser does not support this video!
</video>
{% if mode == "portfolio_modal" %}
<script>
jQuery('#portfolioModal{{ loop_index }}').on('hidden.bs.modal', function (e) {
jQuery('#portfolioModal{{ loop_index }} video').trigger('pause');
});
</script>
{% endif %}
{% endmacro %}

23
includes/yaml_error.twig Normal file
View File

@ -0,0 +1,23 @@
{# SPDX-License-Identifier: EUPL-1.2 #}
{% set pages_with_error = [] %}
{% for page in pages(depthOffset=-1,depth=null) %}
{% if page.meta.YAML_ParseError %}
{% set pages_with_error = pages_with_error|merge([{"id": page.id, "error": page.meta.YAML_ParseError}]) %}
{% endif %}
{% endfor %}
{% for page in pages_with_error %}
{% if loop.first %}
<div class="fixed-top mt-5">
<div class="container mt-5 pt-3">
{% endif %}
<div class="alert alert-danger">
<h1 class="h6"><i class="fas fa-exclamation-triangle me-2"></i><strong>YAML Header Error</strong> in <a href="{{ page.id }}">{{ page.id }}</a>:</h1>
<p class="mb-0">{{ page.error }}</p>
</div>
{% if loop.last %}
</div>
</div>
{% endif %}
{% endfor %}

View File

@ -1,32 +1,68 @@
{# seacms-theme
# SPDX-License-Identifier: EUPL-1.2 #}
{#!
# SeaCMS 1.0.0-alpha.2 (https://git.defis.info/SeaCMS/seacms)
# Licensed under EUPL (https://git.defis.info/SeaCMS/seacms/src/branch/master/LICENCE)
#}
{% set index = pages["index"].meta %}
{% if current_page.id != "index" %}
{% set single_page_mode = true %}
{% endif %}
{% if not index.portfolio.disabled %}
{% set portfolio_items = [] %}
{% for page in pages() %}
{% if not page.hidden %}
{% set portfolio_items = portfolio_items|merge([page]) %}
{% endif %}
{% endfor %}
{% if not portfolio_items or "Pico is a stupidly simple" in index.description %}
{% set portfolio_items = config.theme_config.demo.portfolio_items %}
{% endif %}
{% endif %}
<!DOCTYPE html>
{# TODO manage lang #}
<html lang="fr">
{% block head %}
{% include "includes/_head.twig" %}
{% endblock head %}
{% block body %}
<html lang="en">
{% include "includes/head.twig" %}
<body id="page-top">
{% block header %}
{% include "includes/_header.twig" %}
{% endblock header %}
{% include "includes/yaml_error.twig" %}
{% block content %}
{% include "includes/_content.twig" %}
{% endblock content %}
{% include "includes/header.twig" %}
{% block footer %}
{% include "includes/_footer.twig" %}
{% endblock footer %}
{# {% if current_page.title == "Welcome" %} #}
{% include "includes/home.twig" %}
{# {% endif %} #}
{% block picocontenteditor %}
{{ include('@PicoContentEditor/content.twig', ignore_missing = true) }}
{% endblock picocontenteditor %}
{#!
{% if single_page_mode %}
{% include "includes/content.twig" %}
{% endif %}
{% if not index.portfolio.disabled and not single_page_mode %}
{% include "includes/portfolio.twig" %}
{% endif %}
{% if not index.about.disabled and not single_page_mode %}
{% include "includes/about.twig" %}
{% endif %}
{% if not index.contact.disabled and not single_page_mode %}
{% include "includes/contact.twig" %}
{% endif %}
{% if not index.portfolio.disabled and not single_page_mode %}
{% include "includes/portfolio_modals.twig" %}
{% endif %}
#}
{% include "includes/footer.twig" %}
{{ include('@PicoContentEditor/content.twig') }}
</body>
{% endblock body %}
</html>
</html>

84
index_default.twig Normal file
View File

@ -0,0 +1,84 @@
<!DOCTYPE html>
<html class="no-js">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<title>{% if meta.title %}{{ meta.title }} | {% endif %}{{ site_title }}</title>
{% if meta.description %}
<meta name="description" content="{{ meta.description|striptags }}" />
{% endif %}
{% if meta.robots %}
<meta name="robots" content="{{ meta.robots }}" />
{% endif %}
{% if current_page %}
<link rel="canonical" href="{{ current_page.url }}" />
{% endif %}
<link rel="stylesheet" href="{{ theme_url }}/css/knaccs.css" type="text/css" />
<link rel="stylesheet" href="{{ theme_url }}/css/style.css" type="text/css" />
</head>
<body{% if config.theme_config.widescreen %} class="widescreen"{% endif %}>
<div id="header" role="banner">
<div class="container">
<a id="nav-toggle" title="Toggle Menu" role="button" aria-controls="nav" aria-expanded="false" tabindex="1">
<span class="icon-menu" aria-hidden="true"></span>
<span class="sr-only">Toggle Menu</span>
</a>
{% if pages["_meta"].meta.logo %}
<div id="logo" aria-hidden="true">
<a href="{{ "index"|link }}">
<img src="{{ pages["_meta"].meta.logo|url }}" alt="" />
</a>
</div>
{% endif %}
<div id="title"{{ pages["_meta"].meta.tagline ? ' class="tagline"' }}>
<a href="{{ "index"|link }}">
<h1>{{ site_title }}</h1>
{{ pages["_meta"].meta.tagline|markdown }}
</a>
</div>
<div id="nav" role="navigation" tabindex="-1">
<ul>
{% for page in pages(depthOffset=-1) if page.title and not page.hidden %}
<li{% if page.id == current_page.id %} class="active"{% endif %}>
<a href="{{ page.url }}">{{ page.title }}</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
<div id="main" role="main">
<div class="container">
{{ content }}
</div>
</div>
<div id="footer">
<div class="container">
<div class="social">
{% for social in pages["_meta"].meta.social %}
<a href="{{ social.url }}" title="{{ social.title }}" role="button">
<span class="icon-{{ social.icon }}" aria-hidden="true"></span>
<span class="sr-only">{{ social.title }}</span>
</a>
{% endfor %}
</div>
<p>
<a href="http://picocms.org/">Pico</a> was made by <a href="http://gilbert.pellegrom.me">Gilbert Pellegrom</a>
and is maintained by <a href="https://github.com/picocms/Pico/graphs/contributors">The Pico Community</a>.
Released under the <a href="https://github.com/picocms/Pico/blob/master/LICENSE.md">MIT license</a>.
</p>
</div>
</div>
<script src="{{ theme_url }}/js/vendor/modernizr/modernizr.min.js" type="text/javascript"></script>
<script src="{{ theme_url }}/js/utils.js" type="text/javascript"></script>
<script src="{{ theme_url }}/js/pico.js" type="text/javascript"></script>
</body>
</html>

View File

@ -115,9 +115,10 @@ fetch('https://www.luciole-vision.com/Fichiers/Luciole_webfonts.zip')
const http = require('http');
const importLucioleFont = (srcPath) => {
let src = 'node_modules/Luciole/'
const importLucioleFont = () => {
copySync(
`${srcPath}/Luciole_webfonts/Read Me.txt`,
'node_modules/Luciole/Luciole_webfonts/Read Me.txt',
'fonts/vendor/Luciole/Read Me.txt',
{ overwrite: true }
)
@ -147,7 +148,7 @@ const importLucioleFont = (srcPath) => {
arr.forEach((data)=>{
let name = data.name
copySync(
`${srcPath}/Luciole_webfonts/${name}/${name}.woff`,
`node_modules/Luciole/Luciole_webfonts/${name}/${name}.woff`,
`fonts/vendor/Luciole/${name}/${name}.woff`,
{ overwrite: true }
)
@ -171,53 +172,24 @@ const importLucioleFont = (srcPath) => {
)
}
const downloadLuciole = (destPath,src) => {
const zipPath = path.join(destPath,'Luciole_webfonts.zip')
const file = fs.createWriteStream(zipPath)
const request = http.get("http://www.luciole-vision.com/Fichiers/Luciole_webfonts.zip", function(response) {
response.pipe(file)
response.on('end', () => {
setTimeout(()=>{
var AdmZip = require("adm-zip")
var zip = new AdmZip(zipPath)
zip.extractAllTo(/*target path*/ destPath, /*overwrite*/ true)
importLucioleFont(src)
},500)
})
});
}
const checkLucioleFile = (destPath) => {
return fs.existsSync(path.join(destPath,'Luciole_webfonts.zip')) &&
fs.existsSync(path.join(destPath,'Luciole_webfonts/Read Me.txt')) &&
fs.existsSync(path.join(destPath,'Luciole_webfonts/Luciole-Regular/Luciole-Regular.woff')) &&
fs.existsSync(path.join(destPath,'Luciole_webfonts/Luciole-Italic/Luciole-Italic.woff')) &&
fs.existsSync(path.join(destPath,'Luciole_webfonts/Luciole-Bold/Luciole-Bold.woff')) &&
fs.existsSync(path.join(destPath,'Luciole_webfonts/Luciole-BoldItalic/Luciole-BoldItalic.woff'))
}
let src = 'node_modules/Luciole/'
let currentPath = path.join(basePath, src)
if (!fs.existsSync(currentPath)) {
fs.mkdirSync(currentPath,{recursive :true})
downloadLuciole(currentPath,src)
} else if (!checkLucioleFile(currentPath)) {
downloadLuciole(currentPath,src)
} else {
importLucioleFont(src)
}
const zipPath = path.join(currentPath,'Luciole_webfonts.zip')
const file = fs.createWriteStream(zipPath)
const request = http.get("http://www.luciole-vision.com/Fichiers/Luciole_webfonts.zip", function(response) {
response.pipe(file)
response.on('end', () => {
setTimeout(()=>{
var AdmZip = require("adm-zip")
var zip = new AdmZip(zipPath)
zip.extractAllTo(/*target path*/ currentPath, /*overwrite*/ true)
importLucioleFont()
},500)
})
});
// less
copySync(
'node_modules/less/dist/less.min.js',
'js/vendor/less/less.min.js',
{ overwrite: true }
)
copySync(
'node_modules/less/package.json',
'js/vendor/less/package.json',
{ overwrite: true }
)
// example
// mergeFilesSync(

File diff suppressed because one or more lines are too long

View File

@ -1,137 +0,0 @@
{
"name": "less",
"version": "4.1.3",
"description": "Leaner CSS",
"homepage": "http://lesscss.org",
"author": {
"name": "Alexis Sellier",
"email": "self@cloudhead.net"
},
"contributors": [
"The Core Less Team"
],
"bugs": {
"url": "https://github.com/less/less.js/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/less/less.js.git"
},
"master": {
"url": "https://github.com/less/less.js/blob/master/",
"raw": "https://raw.githubusercontent.com/less/less.js/master/"
},
"license": "Apache-2.0",
"bin": {
"lessc": "./bin/lessc"
},
"main": "index",
"module": "./lib/less-node/index",
"directories": {
"test": "./test"
},
"browser": "./dist/less.js",
"engines": {
"node": ">=6"
},
"scripts": {
"test": "grunt test",
"grunt": "grunt",
"build": "npm-run-all clean compile",
"clean": "shx rm -rf ./lib tsconfig.tsbuildinfo",
"compile": "tsc -p tsconfig.json",
"copy:root": "shx cp -rf ./dist ../../",
"dev": "tsc -p tsconfig.json -w",
"prepublishOnly": "grunt dist"
},
"optionalDependencies": {
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"make-dir": "^2.1.0",
"mime": "^1.4.1",
"needle": "^3.1.0",
"source-map": "~0.6.0"
},
"devDependencies": {
"@less/test-data": "^4.1.0",
"@less/test-import-module": "^4.0.0",
"@rollup/plugin-commonjs": "^17.0.0",
"@rollup/plugin-json": "^4.1.0",
"@rollup/plugin-node-resolve": "^11.0.0",
"@typescript-eslint/eslint-plugin": "^4.28.0",
"@typescript-eslint/parser": "^4.28.0",
"benny": "^3.6.12",
"bootstrap-less-port": "0.3.0",
"chai": "^4.2.0",
"cross-env": "^7.0.3",
"diff": "^3.2.0",
"eslint": "^7.29.0",
"fs-extra": "^8.1.0",
"git-rev": "^0.2.1",
"globby": "^10.0.1",
"grunt": "^1.0.4",
"grunt-cli": "^1.3.2",
"grunt-contrib-clean": "^1.0.0",
"grunt-contrib-connect": "^1.0.2",
"grunt-eslint": "^23.0.0",
"grunt-saucelabs": "^9.0.1",
"grunt-shell": "^1.3.0",
"html-template-tag": "^3.2.0",
"jit-grunt": "^0.10.0",
"less-plugin-autoprefix": "^1.5.1",
"less-plugin-clean-css": "^1.5.1",
"minimist": "^1.2.0",
"mocha": "^6.2.1",
"mocha-headless-chrome": "^2.0.3",
"mocha-teamcity-reporter": "^3.0.0",
"nock": "^11.8.2",
"npm-run-all": "^4.1.5",
"performance-now": "^0.2.0",
"phin": "^2.2.3",
"promise": "^7.1.1",
"read-glob": "^3.0.0",
"resolve": "^1.17.0",
"rollup": "^2.52.2",
"rollup-plugin-terser": "^5.1.1",
"rollup-plugin-typescript2": "^0.29.0",
"semver": "^6.3.0",
"shx": "^0.3.2",
"time-grunt": "^1.3.0",
"ts-node": "^9.1.1",
"typescript": "^4.3.4",
"uikit": "2.27.4"
},
"keywords": [
"compile less",
"css nesting",
"css variable",
"css",
"gradients css",
"gradients css3",
"less compiler",
"less css",
"less mixins",
"less",
"less.js",
"lesscss",
"mixins",
"nested css",
"parser",
"preprocessor",
"bootstrap css",
"bootstrap less",
"style",
"styles",
"stylesheet",
"variables in css",
"css less"
],
"rawcurrent": "https://raw.github.com/less/less.js/v",
"sourcearchive": "https://github.com/less/less.js/archive/v",
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
"tslib": "^2.3.0"
}
}

View File

@ -1,8 +1,6 @@
{
"license": "EUPL-1.2",
"scripts": {
"postinstall": "node ./js/extract-files-from-node-modules.js",
"run-lessc": "node node_modules/less/bin/lessc css/style.less css/main-style.css"
"postinstall": "node ./js/extract-files-from-node-modules.js"
},
"dependencies": {},
"devDependencies": {
@ -10,7 +8,6 @@
"fs-extra": "^11.1.0",
"icomoon-free-npm": "^0.0.0",
"knacss": "https://github.com/alsacreations/KNACSS",
"less": "^4.1.3",
"modernizr": "^3.12.0",
"ttf2woff": "^3.0.0"
}

View File

@ -1,8 +0,0 @@
{# seacms-theme
# SPDX-License-Identifier: EUPL-1.2 #}
{% extends "index.twig" %}
{% block content %}
{{ content }}
{% endblock content %}

View File

@ -1,4 +1,4 @@
api_version: 4 # Use Pico's latest API version for themes
api_version: 3 # Use Pico's latest API version for themes
meta: # Register meta headers used by this theme
Logo: logo # The URL to your website's logo (value is passed to Pico's "url" Twig filter)

178
yarn.lock
View File

@ -48,14 +48,6 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
array-buffer-byte-length@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
dependencies:
call-bind "^1.0.2"
is-array-buffer "^3.0.1"
array.prototype.reduce@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac"
@ -143,9 +135,9 @@ caniuse-api@^3.0.0:
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001449:
version "1.0.30001466"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz#c1e6197c540392e09709ecaa9e3e403428c53375"
integrity sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==
version "1.0.30001454"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001454.tgz#033f6df4452643a64173d02543902caa158dfd9a"
integrity sha512-4E63M5TBbgDoA9dQoFRdjL6iAmzTrz3rwYWoKDlvnvyvBxjCZ0rrUoX3THhEMie0/RYuTCeMbeTYLGAWgnLwEg==
chalk@^2.4.1:
version "2.4.2"
@ -214,13 +206,6 @@ color@^3.0.0:
color-convert "^1.9.3"
color-string "^1.6.0"
copy-anything@^2.0.1:
version "2.0.6"
resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
dependencies:
is-what "^3.14.1"
cosmiconfig@^5.0.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
@ -360,13 +345,6 @@ csso@^4.0.2:
dependencies:
css-tree "^1.1.2"
debug@^3.2.6:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@ -421,9 +399,9 @@ dot-prop@^5.2.0:
is-obj "^2.0.0"
electron-to-chromium@^1.4.284:
version "1.4.328"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz#b4565ffa502542b561cea16086d6d9b916c7095a"
integrity sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==
version "1.4.301"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.301.tgz#175d9fa1509a5b062752c6db321051e610fe2eae"
integrity sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==
emoji-regex@^8.0.0:
version "8.0.0"
@ -440,13 +418,6 @@ entities@~2.1.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
errno@^0.1.1:
version "0.1.8"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
dependencies:
prr "~1.0.1"
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@ -455,17 +426,17 @@ error-ex@^1.3.1:
is-arrayish "^0.2.1"
es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4:
version "1.21.2"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff"
integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==
version "1.21.1"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6"
integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==
dependencies:
array-buffer-byte-length "^1.0.0"
available-typed-arrays "^1.0.5"
call-bind "^1.0.2"
es-set-tostringtag "^2.0.1"
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
function.prototype.name "^1.1.5"
get-intrinsic "^1.2.0"
get-intrinsic "^1.1.3"
get-symbol-description "^1.0.0"
globalthis "^1.0.3"
gopd "^1.0.1"
@ -473,8 +444,8 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4:
has-property-descriptors "^1.0.0"
has-proto "^1.0.1"
has-symbols "^1.0.3"
internal-slot "^1.0.5"
is-array-buffer "^3.0.2"
internal-slot "^1.0.4"
is-array-buffer "^3.0.1"
is-callable "^1.2.7"
is-negative-zero "^2.0.2"
is-regex "^1.1.4"
@ -482,12 +453,11 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4:
is-string "^1.0.7"
is-typed-array "^1.1.10"
is-weakref "^1.0.2"
object-inspect "^1.12.3"
object-inspect "^1.12.2"
object-keys "^1.1.1"
object.assign "^4.1.4"
regexp.prototype.flags "^1.4.3"
safe-regex-test "^1.0.0"
string.prototype.trim "^1.2.7"
string.prototype.trimend "^1.0.6"
string.prototype.trimstart "^1.0.6"
typed-array-length "^1.0.4"
@ -622,7 +592,7 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
@ -688,18 +658,6 @@ icomoon-free-npm@^0.0.0:
resolved "https://registry.yarnpkg.com/icomoon-free-npm/-/icomoon-free-npm-0.0.0.tgz#991417a58727e4053d89edd6717370cbe4e19206"
integrity sha512-pfrVhde2E2tt6+oJ7WdvdOz7x9GbMpBzlaScAYFVkD2RTehZE9Xqdn5QaBbtTJrl8fG4ZgKqHxc9sAtKLNgFoA==
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
import-fresh@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
@ -713,7 +671,7 @@ indexes-of@^1.0.1:
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==
internal-slot@^1.0.5:
internal-slot@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
@ -727,13 +685,13 @@ is-absolute-url@^2.0.0:
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==
is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
is-array-buffer@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a"
integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==
dependencies:
call-bind "^1.0.2"
get-intrinsic "^1.2.0"
get-intrinsic "^1.1.3"
is-typed-array "^1.1.10"
is-arrayish@^0.2.1:
@ -864,11 +822,6 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
is-what@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
js-yaml@^3.13.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
@ -899,23 +852,6 @@ jsonfile@^6.0.1:
cssnano "^4.1.10"
postcss-combine-media-query "^1.0.1"
less@^4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246"
integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==
dependencies:
copy-anything "^2.0.1"
parse-node-version "^1.0.1"
tslib "^2.3.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
needle "^3.1.0"
source-map "~0.6.0"
linkify-it@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
@ -945,14 +881,6 @@ lodash@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
dependencies:
pify "^4.0.1"
semver "^5.6.0"
markdown-it@^12.3.2:
version "12.3.2"
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
@ -979,11 +907,6 @@ mdurl@^1.0.1:
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
mime@^1.4.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
minimist@^1.2.5, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
@ -1016,20 +939,6 @@ modernizr@^3.12.0:
requirejs "^2.3.6"
yargs "^15.4.1"
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
needle@^3.1.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44"
integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==
dependencies:
debug "^3.2.6"
iconv-lite "^0.6.3"
sax "^1.2.4"
node-releases@^2.0.8:
version "2.0.10"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f"
@ -1057,7 +966,7 @@ num2fraction@^1.2.2:
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==
object-inspect@^1.12.3, object-inspect@^1.9.0:
object-inspect@^1.12.2, object-inspect@^1.9.0:
version "1.12.3"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
@ -1128,11 +1037,6 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@ -1148,11 +1052,6 @@ picocolors@^1.0.0:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
postcss-calc@^7.0.1:
version "7.0.5"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e"
@ -1441,11 +1340,6 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.21, postcss@^7.0.27, postcss@^7.0.3
picocolors "^0.2.1"
source-map "^0.6.1"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@ -1499,21 +1393,11 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@^1.2.4, sax@~1.2.4:
sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^5.6.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@ -1535,7 +1419,7 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
source-map@^0.6.1, source-map@~0.6.0:
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@ -1559,15 +1443,6 @@ string-width@^4.1.0, string-width@^4.2.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
string.prototype.trim@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.4"
es-abstract "^1.20.4"
string.prototype.trimend@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
@ -1633,11 +1508,6 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
tslib@^2.3.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
ttf2woff@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ttf2woff/-/ttf2woff-3.0.0.tgz#bd0fc0157e428b7a9a30340f78adf72fb741962a"