Compare commits
22 commits
feature/ha
...
develop
Author | SHA1 | Date | |
---|---|---|---|
Simon Vieille | 4fd78d1303 | ||
Simon Vieille | 7e6d230e17 | ||
Simon Vieille | b86f3096e1 | ||
Simon Vieille | ecb4ca177e | ||
Simon Vieille | c8d99da2c2 | ||
Simon Vieille | 22ec3d036e | ||
Simon Vieille | 676e9dfe67 | ||
Simon Vieille | 508a816642 | ||
Simon Vieille | 476dece659 | ||
Simon Vieille | 1a7ea2e5a2 | ||
Simon Vieille | 6fa3aafed0 | ||
Simon Vieille | 1041eba4cb | ||
Simon Vieille | 698c356c0e | ||
Simon Vieille | 86558dc76d | ||
Simon Vieille | 2ee645bdab | ||
Simon Vieille | 83f7946d02 | ||
Simon Vieille | 0e0f2688c7 | ||
Simon Vieille | 60c60016a1 | ||
Simon Vieille | 8eb6ba303c | ||
Simon Vieille | d83adf0473 | ||
b9f5785fa6 | |||
0d1f1e29b5 |
|
@ -18,6 +18,7 @@ magephp:
|
|||
- "/var/cache/*"
|
||||
- "/var/log/*"
|
||||
- "/public/media"
|
||||
- "/.secrets"
|
||||
hosts:
|
||||
- ssh_host
|
||||
on-deploy:
|
||||
|
|
39
.novops.yml
Normal file
39
.novops.yml
Normal file
|
@ -0,0 +1,39 @@
|
|||
environments:
|
||||
build:
|
||||
variables:
|
||||
- name: MYSQLDUMP
|
||||
value:
|
||||
hvault_kv2:
|
||||
mount: kv
|
||||
path: deblan/deblan.io-murph
|
||||
key: mysqldump
|
||||
|
||||
deploy:
|
||||
variables:
|
||||
- name: SSH_USER
|
||||
value:
|
||||
hvault_kv2:
|
||||
mount: kv
|
||||
path: deblan/deblan.io-murph
|
||||
key: ssh_user
|
||||
|
||||
- name: SSH_HOST
|
||||
value:
|
||||
hvault_kv2:
|
||||
mount: kv
|
||||
path: deblan/deblan.io-murph
|
||||
key: ssh_host
|
||||
|
||||
- name: SSH_PRIV_KEY
|
||||
value:
|
||||
hvault_kv2:
|
||||
mount: kv
|
||||
path: deblan/deblan.io-murph
|
||||
key: ssh_priv_key
|
||||
|
||||
- name: APP_DIRECTORY
|
||||
value:
|
||||
hvault_kv2:
|
||||
mount: kv
|
||||
path: deblan/deblan.io-murph
|
||||
key: app_directory
|
|
@ -1,51 +1,51 @@
|
|||
variables:
|
||||
- &volumes
|
||||
- node16_cache:/root/.npm
|
||||
- /data/deblan/deblan.io-murph:/builds
|
||||
volumes: &volumes
|
||||
- node_cache:/root/.npm
|
||||
- /data/${CI_REPO}:/builds
|
||||
|
||||
when:
|
||||
event: [push, pull_request, tag, manual]
|
||||
branch: [master, master-*, develop, develop-*, feature/*]
|
||||
|
||||
steps:
|
||||
db-wait:
|
||||
"Wait the database":
|
||||
image: gitnet.fr/deblan/timeout:latest
|
||||
commands:
|
||||
- /bin/timeout -t 30 -v -c 'while true; do nc -z -v db 3306 2>&1 | grep succeeded && exit 0; sleep 0.5; done'
|
||||
|
||||
db-create:
|
||||
"Create database":
|
||||
image: mariadb:10.3
|
||||
secrets: [mysqldump]
|
||||
commands:
|
||||
- mysql -hdb -uroot -proot -e "CREATE DATABASE app"
|
||||
- eval "$MYSQLDUMP" | mysql -hdb -uroot -proot app
|
||||
|
||||
app-config:
|
||||
"Configure app":
|
||||
image: deblan/php:8.1
|
||||
commands:
|
||||
- echo APP_ENV=prod >> .env.local
|
||||
- echo APP_SECRET=$(openssl rand -hex 32) >> .env.local
|
||||
- echo DATABASE_URL=mysql://root:root@db/app >> .env.local
|
||||
|
||||
php-composer:
|
||||
"Installs PHP dependencies":
|
||||
image: deblan/php:8.1
|
||||
commands:
|
||||
- apt-get update && apt-get -y install git
|
||||
- composer install --no-scripts
|
||||
|
||||
db-migrate:
|
||||
"Migrates database":
|
||||
image: deblan/php:8.1
|
||||
environment:
|
||||
- PHP=php
|
||||
commands:
|
||||
- ./bin/doctrine-migrate
|
||||
|
||||
app-jsroutes:
|
||||
"Generates JS routes":
|
||||
image: deblan/php:8.1
|
||||
commands:
|
||||
- php bin/console fos:js-routing:dump --format=json --target=public/js/fos_js_routes.json
|
||||
|
||||
node-build:
|
||||
"Build assets":
|
||||
image: node:16-alpine
|
||||
environment:
|
||||
- CPU_COUNT=3
|
||||
|
@ -60,13 +60,13 @@ steps:
|
|||
- test -f public/js/fos_js_routes.json || echo "{}" > public/js/fos_js_routes.json
|
||||
- npm run build
|
||||
|
||||
security-check:
|
||||
"Check dependencies":
|
||||
image: gitnet.fr/deblan/osv-detector:v0.9
|
||||
commands:
|
||||
- osv-detector composer.lock yarn.lock
|
||||
failure: ignore
|
||||
|
||||
cache-build:
|
||||
"Build the cache":
|
||||
image: deblan/mage
|
||||
volumes: *volumes
|
||||
commands:
|
||||
|
@ -80,4 +80,4 @@ services:
|
|||
- MARIADB_ROOT_PASSWORD=root
|
||||
|
||||
volumes:
|
||||
node16_cache:
|
||||
node_cache:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
variables:
|
||||
- &volumes
|
||||
- /data/deblan/deblan.io-murph:/builds
|
||||
volumes: &volumes
|
||||
- /data/${CI_REPO}:/builds
|
||||
|
||||
when:
|
||||
event: [deployment]
|
||||
|
@ -8,9 +8,9 @@ when:
|
|||
skip_clone: true
|
||||
|
||||
steps:
|
||||
app-deploy:
|
||||
"Deploy":
|
||||
image: deblan/mage
|
||||
secrets: [ssh_user, ssh_host, ssh_priv_key, app_directory]
|
||||
secrets: [ssh_priv_key, ssh_user, ssh_host, app_directory]
|
||||
volumes: *volumes
|
||||
commands:
|
||||
- cd "/builds/$CI_COMMIT_SHA"
|
||||
|
|
|
@ -1,57 +1,63 @@
|
|||
@import "../../vendor/murph/murph-core/src/core/Resources/assets/css/admin.scss";
|
||||
@import "~simplemde/dist/simplemde.min.css";
|
||||
|
||||
.CodeMirror-fullscreen, .editor-toolbar.fullscreen {
|
||||
z-index: 2000;
|
||||
}
|
||||
@import '../../vendor/murph/murph-core/src/core/Resources/assets/css/admin.scss';
|
||||
@import '@kangc/v-md-editor/lib/style/base-editor.css';
|
||||
@import '@kangc/v-md-editor/lib/theme/style/vuepress.css';
|
||||
|
||||
.ejs-link {
|
||||
margin: 10px auto;
|
||||
max-width: 80%;
|
||||
border: 2px solid #333;
|
||||
border-radius: 5px;
|
||||
margin: 10px auto;
|
||||
max-width: 80%;
|
||||
border: 2px solid #333;
|
||||
border-radius: 5px;
|
||||
|
||||
&--anchor {
|
||||
display: block;
|
||||
padding: 30px;
|
||||
&--anchor {
|
||||
display: block;
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
&-content {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
|
||||
&--title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&-content {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
|
||||
&--title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
&--description {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
&--link {
|
||||
padding-top: 10px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
&--description {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
$image-size: 85px;
|
||||
|
||||
&--anchor--with-image &-content {
|
||||
width: calc(100% - $image-size - 5px);
|
||||
padding-right: 25px;
|
||||
&--link {
|
||||
padding-top: 10px;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
&--image {
|
||||
display: inline-block;
|
||||
width: $image-size;
|
||||
height: $image-size;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
$image-size: 85px;
|
||||
|
||||
&--anchor--with-image &-content {
|
||||
width: calc(100% - $image-size - 5px);
|
||||
padding-right: 25px;
|
||||
}
|
||||
|
||||
&--image {
|
||||
display: inline-block;
|
||||
width: $image-size;
|
||||
height: $image-size;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
}
|
||||
|
||||
.choices__list--dropdown {
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.v-md-editor {
|
||||
border: 1px solid $input-border-color;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.v-md-editor--fullscreen {
|
||||
z-index: 3000;
|
||||
}
|
||||
|
|
|
@ -411,6 +411,9 @@ pre[class*="language-"] {
|
|||
.h1 {
|
||||
font-weight: normal;
|
||||
font-size: 40px;
|
||||
font-family: MainFont;
|
||||
text-shadow: none;
|
||||
color: hsla(0, 0%, 100%, 0.7);
|
||||
}
|
||||
|
||||
.h3 {
|
||||
|
@ -962,32 +965,10 @@ $links: (
|
|||
}
|
||||
|
||||
.card {
|
||||
transition: transform .2s, background .2s, border .2s;
|
||||
|
||||
&:nth-child(2n+1) {
|
||||
background-image: url(../images/halloween/spider.svg) !important;
|
||||
background-repeat: no-repeat !important;
|
||||
background-position: calc(100% - 10px) 100px !important;
|
||||
}
|
||||
|
||||
&:nth-child(2n+2) {
|
||||
background-image: url(../images/halloween/spider.svg) !important;
|
||||
background-repeat: no-repeat !important;
|
||||
background-position: calc(100% - 10px) 100px !important;
|
||||
}
|
||||
transition: transform .2s;
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.02);
|
||||
background: $color-blue2;
|
||||
background-position: calc(100% - 10px) 150px !important;
|
||||
|
||||
img {
|
||||
border-bottom: 2px solid #333;
|
||||
}
|
||||
|
||||
.card-title, .card-title a, p {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
figure {
|
||||
|
|
|
@ -12,8 +12,7 @@ $color-red: #b02e2a;
|
|||
|
||||
$code-color: $color-blue;
|
||||
|
||||
//$color-navigation-item-background: darken($color-dark-grey, 8%);
|
||||
$color-navigation-item-background: darken($color-blue2, 8%);
|
||||
$color-navigation-item-background: darken($color-dark-grey, 8%);
|
||||
$color-navigation-item-background-active: lighten($color-dark-grey, 10%);
|
||||
|
||||
$color-small-menu-background: $color-dark-grey;
|
||||
|
|
|
@ -1,390 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="36.965439"
|
||||
height="100"
|
||||
viewBox="0 0 9.7804388 26.458333"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
||||
sodipodi:docname="spider.svg">
|
||||
<metadata
|
||||
id="metadata6">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#ffffff"
|
||||
inkscape:document-units="px"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.2382156"
|
||||
inkscape:cx="51.916187"
|
||||
inkscape:cy="65.68455"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1038"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<defs
|
||||
id="defs1">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient1586">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop1582" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop1584" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1586"
|
||||
id="linearGradient1588"
|
||||
x1="-10.670271"
|
||||
y1="396.36423"
|
||||
x2="0.2785832"
|
||||
y2="352.64908"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-215.04257,53.193899)" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(220.6747,19.379824)">
|
||||
<g
|
||||
id="g1510"
|
||||
transform="matrix(0.05431415,0,0,0.05431415,-208.68894,-18.327225)">
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="339.20847"
|
||||
y="228.86655"
|
||||
ry="5.2802243"
|
||||
transform="rotate(80.141439)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="58.227398"
|
||||
y="423.90332"
|
||||
ry="5.2802243"
|
||||
transform="rotate(36.060271)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-179.66049"
|
||||
y="415.8244"
|
||||
ry="5.2802243"
|
||||
transform="rotate(5.4519952)"
|
||||
inkscape:transform-center-x="1.6060938"
|
||||
inkscape:transform-center-y="3.0115919" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="180.74762"
|
||||
y="380.55725"
|
||||
ry="5.2802243"
|
||||
transform="rotate(49.4151)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-2"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-154.35168"
|
||||
y="428.24945"
|
||||
ry="5.2802243"
|
||||
transform="rotate(6.200258)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-9"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-399.80807"
|
||||
y="265.58777"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-31.328887)"
|
||||
inkscape:transform-center-x="-0.51683556"
|
||||
inkscape:transform-center-y="3.3737526" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-1"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-264.7019"
|
||||
y="319.94562"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-22.023483)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-2-2"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="44.973415"
|
||||
y="434.28424"
|
||||
ry="5.2802243"
|
||||
transform="rotate(20.824725)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-9-7"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="188.48347"
|
||||
y="415.05444"
|
||||
ry="5.2802243"
|
||||
transform="rotate(39.35706)"
|
||||
inkscape:transform-center-x="3.0129304"
|
||||
inkscape:transform-center-y="1.60359" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-0"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-396.88443"
|
||||
y="110.33471"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-57.767469)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-2-2-9"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-224.31264"
|
||||
y="354.09039"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-19.751182)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-9-7-3"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="31.731018"
|
||||
y="431.6391"
|
||||
ry="5.2802243"
|
||||
transform="rotate(14.874494)"
|
||||
inkscape:transform-center-x="2.0774712"
|
||||
inkscape:transform-center-y="2.7080125" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-0-6"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-385.12241"
|
||||
y="-105.38716"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-89.372472)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-2-2-9-0"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-321.51315"
|
||||
y="-228.36681"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-113.96375)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-9-7-3-6"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="175.24963"
|
||||
y="305.39377"
|
||||
ry="5.2802243"
|
||||
transform="rotate(37.497696)"
|
||||
inkscape:transform-center-x="2.9593085"
|
||||
inkscape:transform-center-y="1.7004981" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-0-6-2"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-256.46777"
|
||||
y="-292.27197"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-123.81743)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-2-2-9-0-6"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-173.66693"
|
||||
y="-323.36835"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-139.81004)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-9-7-3-6-1"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-87.327805"
|
||||
y="303.24057"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-3.3798593)"
|
||||
inkscape:transform-center-x="1.1246826"
|
||||
inkscape:transform-center-y="3.2224766" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-0-6-8"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-366.74966"
|
||||
y="149.27838"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-38.689657)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-7"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-285.86499"
|
||||
y="250.49252"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-17.285608)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-92"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-124.5529"
|
||||
y="331.38336"
|
||||
ry="5.2802243"
|
||||
transform="rotate(12.113797)"
|
||||
inkscape:transform-center-x="1.9446173"
|
||||
inkscape:transform-center-y="2.8049425" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-6-0-6-8-2"
|
||||
width="10.560449"
|
||||
height="37.23737"
|
||||
x="-194.70097"
|
||||
y="308.48895"
|
||||
ry="5.2802243"
|
||||
transform="rotate(-4.3172138)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-7-3"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="-48.101986"
|
||||
y="336.93149"
|
||||
ry="5.2802243"
|
||||
transform="rotate(20.615546)" />
|
||||
<rect
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.25744;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect962-3-5-92-7"
|
||||
width="10.560452"
|
||||
height="29.427628"
|
||||
x="101.25393"
|
||||
y="302.17734"
|
||||
ry="5.2802243"
|
||||
transform="rotate(45.966429)"
|
||||
inkscape:transform-center-x="3.1774758"
|
||||
inkscape:transform-center-y="1.2461632" />
|
||||
</g>
|
||||
<ellipse
|
||||
style="color:#000000;overflow:visible;fill:#333333;fill-opacity:1;stroke-width:0.0128871;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path863-2"
|
||||
cx="-203.556"
|
||||
cy="70.642334"
|
||||
rx="2.2505465"
|
||||
ry="3.0628297"
|
||||
transform="rotate(18.912919)" />
|
||||
<path
|
||||
style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:0.0143706px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m -218.22055,4.4175518 c 0.85731,0.9766939 -0.0464,1.1790983 -0.22936,0.1685086 z"
|
||||
id="path933"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:0.0143706px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m -216.36678,4.3267315 c 0.22439,1.2863975 -0.95801,1.0630903 -0.18007,0.080446 z"
|
||||
id="path933-5"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<circle
|
||||
style="color:#000000;overflow:visible;fill:#4d4d4d;stroke-width:0.0115444;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path865-3"
|
||||
cx="-217.48129"
|
||||
cy="3.7207096"
|
||||
r="1.3328036" />
|
||||
<ellipse
|
||||
style="color:#000000;overflow:visible;fill:url(#linearGradient1588);fill-opacity:1;stroke-width:0.0128871;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path863-2-8"
|
||||
cx="-203.556"
|
||||
cy="70.642334"
|
||||
rx="2.2505465"
|
||||
ry="3.0628297"
|
||||
transform="rotate(18.912919)" />
|
||||
<circle
|
||||
style="color:#000000;overflow:visible;fill:#1a1a1a;stroke-width:0.0139826;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path865"
|
||||
cx="-217.16289"
|
||||
cy="3.0791352"
|
||||
r="1.6143011" />
|
||||
<circle
|
||||
style="color:#000000;overflow:visible;fill:#f9f9f9;stroke-width:0.0110463;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path887"
|
||||
cx="-217.91484"
|
||||
cy="3.2273026"
|
||||
r="0.51482779" />
|
||||
<circle
|
||||
style="color:#000000;overflow:visible;fill:#ececec;stroke-width:0.0110463;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path887-6"
|
||||
cx="-217.07199"
|
||||
cy="3.2430224"
|
||||
r="0.51482779" />
|
||||
<ellipse
|
||||
style="color:#000000;overflow:visible;fill:#000000;stroke-width:0.0139826;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path909"
|
||||
cx="-217.92955"
|
||||
cy="3.3541305"
|
||||
rx="0.12689655"
|
||||
ry="0.23106584" />
|
||||
<ellipse
|
||||
style="color:#000000;overflow:visible;fill:#000000;stroke-width:0.0139826;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="path909-7"
|
||||
cx="-217.0741"
|
||||
cy="3.3541305"
|
||||
rx="0.12689655"
|
||||
ry="0.23106584" />
|
||||
<path
|
||||
style="fill:none;fill-rule:evenodd;stroke:#333333;stroke-width:0.379384;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M -214.45616,-1.7927667 V -19.379824"
|
||||
id="path1590" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 16 KiB |
|
@ -1,6 +1,6 @@
|
|||
import '../../vendor/murph/murph-core/src/core/Resources/assets/js/admin.js'
|
||||
|
||||
require('./admin_modules/simplemde')()
|
||||
require('./admin_modules/md-editor')()
|
||||
|
||||
const $ = require('jquery')
|
||||
const Sortable = require('sortablejs').Sortable
|
||||
|
|
34
assets/js/admin_modules/md-editor.js
Normal file
34
assets/js/admin_modules/md-editor.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
const Vue = require('vue').default
|
||||
const VueMarkdownEditor = require('@kangc/v-md-editor')
|
||||
const githubTheme = require('@kangc/v-md-editor/lib/theme/github.js')
|
||||
const fr = require('@kangc/v-md-editor/lib/lang/fr-FR').default
|
||||
const hljs = require('highlight.js')
|
||||
|
||||
VueMarkdownEditor.use(githubTheme, {Hljs: hljs})
|
||||
VueMarkdownEditor.lang.use('fr-FR', fr)
|
||||
Vue.use(VueMarkdownEditor)
|
||||
|
||||
module.exports = () => {
|
||||
const components = document.querySelectorAll('.markdown-editor')
|
||||
|
||||
components.forEach((component) => {
|
||||
return new Vue({
|
||||
el: component,
|
||||
template: `
|
||||
<div>
|
||||
<textarea :name="name" v-model="value" class="d-none"></textarea>
|
||||
<v-md-editor v-model="value" mode="edit"></v-md-editor>
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
name: component.getAttribute('data-name'),
|
||||
value: JSON.parse(component.getAttribute('data-value')),
|
||||
}
|
||||
},
|
||||
components: {
|
||||
VueMarkdownEditor
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
|
@ -39,7 +39,7 @@ start_messenger() {
|
|||
}
|
||||
|
||||
stop_messenger() {
|
||||
php8.1 bin/console messenger:stop-workers
|
||||
php8.1 bin/console messenger:stop-workers 2>/dev/null >/dev/null
|
||||
log -t -l notice "Stopped"
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
twig:
|
||||
default_path: '%kernel.project_dir%/templates'
|
||||
form_themes: ['@Core/form/bootstrap_4_form_theme.html.twig']
|
||||
form_themes: ['form/bootstrap_4_form_theme.html.twig']
|
||||
auto_reload: true
|
||||
paths:
|
||||
'%kernel.project_dir%/templates/core/': Core
|
||||
|
|
29948
package-lock.json
generated
29948
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -8,13 +8,15 @@
|
|||
"build": "./node_modules/.bin/encore production"
|
||||
},
|
||||
"dependencies": {
|
||||
"@kangc/v-md-editor": "^1.7.12",
|
||||
"daisyui": "^2.31.0",
|
||||
"editorjs-hyperlink": "^1.0.6",
|
||||
"editorjs-inline-tool": "^0.4.0",
|
||||
"encore": "^0.0.30-beta",
|
||||
"lozad": "^1.16.0",
|
||||
"murph-project": "^1",
|
||||
"murph-project": "^1.9.4",
|
||||
"particles.js": "^2.0.0",
|
||||
"prismjs": "^1.23.0",
|
||||
"simplemde": "^1.11.2",
|
||||
"tingle.js": "^0.16.0",
|
||||
"vanillajs-datepicker": "^1.1.4",
|
||||
"vue": "^2.6.14"
|
||||
|
|
|
@ -2,31 +2,30 @@
|
|||
|
||||
namespace App\Controller\Blog;
|
||||
|
||||
use App\Analytic\DateRangeAnalytic;
|
||||
use App\Core\Controller\Admin\Crud\CrudController;
|
||||
use App\Core\Crud\CrudConfiguration;
|
||||
use App\Core\Crud\Field\DatetimeField;
|
||||
use App\Core\Crud\Field\TextField;
|
||||
use App\Core\Entity\EntityInterface;
|
||||
use App\Core\Form\FileUploadHandler;
|
||||
use App\Core\Manager\EntityManager;
|
||||
use App\Core\Repository\Site\NodeRepository;
|
||||
use App\Entity\Blog\Post;
|
||||
use App\Entity\Blog\Post as Entity;
|
||||
use App\Factory\Blog\PostFactory as EntityFactory;
|
||||
use App\Form\Blog\Filter\PostFilterType;
|
||||
use App\Form\Blog\PostType;
|
||||
use App\Form\Blog\PostType as EntityType;
|
||||
use App\Repository\Blog\PostRepositoryQuery as RepositoryQuery;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
|
||||
use Symfony\Component\Form\Form;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpFoundation\Session\Session;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
use Symfony\Component\Form\Form;
|
||||
use App\Core\Entity\EntityInterface;
|
||||
use App\Entity\Blog\Post;
|
||||
use App\Analytic\DateRangeAnalytic;
|
||||
use App\Core\Repository\Site\NodeRepository;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
|
||||
use Symfony\Component\Validator\Constraints\NotBlank;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
|
||||
#[Route(path: '/admin/blog/post')]
|
||||
class PostAdminController extends CrudController
|
||||
|
@ -68,7 +67,7 @@ class PostAdminController extends CrudController
|
|||
'attr' => ['class' => 'miw-400'],
|
||||
])
|
||||
->setField('index', 'ID', TextField::class, [
|
||||
'property_builder' => function(EntityInterface $entity) {
|
||||
'property_builder' => function (EntityInterface $entity) {
|
||||
return sprintf('#%d', $entity->getId());
|
||||
},
|
||||
'sort' => ['id', '.id'],
|
||||
|
@ -85,7 +84,7 @@ class PostAdminController extends CrudController
|
|||
'format' => 'd/m/Y H:i',
|
||||
'sort' => ['publishedAt', '.publishedAt'],
|
||||
'attr' => ['class' => 'miw-200'],
|
||||
'inline_form' => function(FormBuilderInterface $builder) {
|
||||
'inline_form' => function (FormBuilderInterface $builder) {
|
||||
$builder->add(
|
||||
'publishedAt',
|
||||
DateTimeType::class,
|
||||
|
@ -107,7 +106,7 @@ class PostAdminController extends CrudController
|
|||
'view' => 'blog/post_admin/field/status.html.twig',
|
||||
'sort' => ['status', '.status'],
|
||||
'attr' => ['class' => 'miw-100'],
|
||||
'inline_form' => function(FormBuilderInterface $builder) {
|
||||
'inline_form' => function (FormBuilderInterface $builder) {
|
||||
$builder->add(
|
||||
'status',
|
||||
ChoiceType::class,
|
||||
|
@ -125,15 +124,15 @@ class PostAdminController extends CrudController
|
|||
],
|
||||
]
|
||||
);
|
||||
}
|
||||
},
|
||||
])
|
||||
->setBatchAction('index', 'delete', 'Delete', function(EntityInterface $entity, EntityManager $manager) {
|
||||
->setBatchAction('index', 'delete', 'Delete', function (EntityInterface $entity, EntityManager $manager) {
|
||||
$manager->delete($entity);
|
||||
})
|
||||
->setBatchAction('index', 'draft', 'Statut : publier', function(EntityInterface $entity, EntityManager $manager) {
|
||||
->setBatchAction('index', 'draft', 'Statut : publier', function (EntityInterface $entity, EntityManager $manager) {
|
||||
$manager->update($entity->setStatus(Post::PUBLISHED));
|
||||
})
|
||||
->setBatchAction('index', 'publish', 'Statut : brouillon', function(EntityInterface $entity, EntityManager $manager) {
|
||||
->setBatchAction('index', 'publish', 'Statut : brouillon', function (EntityInterface $entity, EntityManager $manager) {
|
||||
$manager->update($entity->setStatus(Post::DRAFT));
|
||||
})
|
||||
;
|
||||
|
@ -152,7 +151,7 @@ class PostAdminController extends CrudController
|
|||
$factory->create($this->getUser()),
|
||||
$entityManager,
|
||||
$request,
|
||||
function(Entity $entity, Form $form, Request $request) use ($fileUpload) {
|
||||
function (Entity $entity, Form $form, Request $request) use ($fileUpload) {
|
||||
$directory = 'uploads/post/'.date('Y');
|
||||
|
||||
$fileUpload->handleForm(
|
||||
|
@ -173,7 +172,7 @@ class PostAdminController extends CrudController
|
|||
$entity,
|
||||
$entityManager,
|
||||
$request,
|
||||
function(Entity $entity, Form $form, Request $request) use ($fileUpload) {
|
||||
function (Entity $entity, Form $form, Request $request) use ($fileUpload) {
|
||||
$directory = 'uploads/post/'.date('Y');
|
||||
|
||||
$fileUpload->handleForm(
|
||||
|
@ -187,7 +186,7 @@ class PostAdminController extends CrudController
|
|||
);
|
||||
}
|
||||
|
||||
#[Route(path: "/inline_edit/{entity}/{context}/{label}", name: 'admin_blog_post_inline_edit', methods: ['GET', 'POST'])]
|
||||
#[Route(path: '/inline_edit/{entity}/{context}/{label}', name: 'admin_blog_post_inline_edit', methods: ['GET', 'POST'])]
|
||||
public function inlineEdit(string $context, string $label, Entity $entity, EntityManager $entityManager, Request $request): Response
|
||||
{
|
||||
return $this->doInlineEdit($context, $label, $entity, $entityManager, $request);
|
||||
|
@ -268,8 +267,7 @@ class PostAdminController extends CrudController
|
|||
DateRangeAnalytic $analytic,
|
||||
NodeRepository $nodeRepository,
|
||||
string $range = '7days'
|
||||
): Response
|
||||
{
|
||||
): Response {
|
||||
if (!in_array($range, ['7days', '30days', '90days', '1year'])) {
|
||||
throw $this->createNotFoundException();
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|||
use App\Factory\Blog\PostFollowFactory;
|
||||
use App\Manager\PostFollowManager;
|
||||
use App\Core\Twig\Extension\EditorJsExtension;
|
||||
use App\Core\Twig\Extension\BuilderExtension;
|
||||
|
||||
class PostController extends PageController
|
||||
{
|
||||
|
@ -165,7 +166,11 @@ class PostController extends PageController
|
|||
return $query;
|
||||
}
|
||||
|
||||
public function rss(PostParser $parser, EditorJsExtension $editorJsExtension): Response
|
||||
public function rss(
|
||||
PostParser $parser,
|
||||
EditorJsExtension $editorJsExtension,
|
||||
BuilderExtension $builderExtension
|
||||
): Response
|
||||
{
|
||||
$entities = $this->createQuery()->paginate(1, 20);
|
||||
$items = [];
|
||||
|
@ -173,6 +178,8 @@ class PostController extends PageController
|
|||
foreach ($entities as $entity) {
|
||||
if ($entity->getContentFormat() === 'editorjs') {
|
||||
$description = $editorJsExtension->buildHtml($entity->getContent());
|
||||
} elseif ($entity->getContentFormat() === 'builder') {
|
||||
$description = $builderExtension->buildHtml($entity->getContent());
|
||||
} else {
|
||||
$description = $parser->transformMarkdown($entity->getContent());
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ use App\Core\Entity\Site\Page\FileBlock;
|
|||
use App\Form\Type\SimpleMdTextareaBlockType;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use App\Form\MarkdownBlockType;
|
||||
|
||||
#[ORM\Entity]
|
||||
class SimplePage extends TitledPage
|
||||
|
@ -17,7 +18,7 @@ class SimplePage extends TitledPage
|
|||
|
||||
$builder->add(
|
||||
'content',
|
||||
SimpleMdTextareaBlockType::class,
|
||||
MarkdownBlockType::class,
|
||||
[
|
||||
'label' => 'Contenu',
|
||||
'options' => [
|
||||
|
|
|
@ -25,6 +25,8 @@ use App\Form\Type\SimpleMdTextareaType;
|
|||
use App\Core\Form\Type\EditorJsTextareaType;
|
||||
use App\Core\Form\FileManager\FilePickerType;
|
||||
use App\Core\Form\Type\CollectionType as MurphCollectionType;
|
||||
use App\Form\MarkdownType;
|
||||
use App\Core\Form\Type\BuilderType;
|
||||
|
||||
class PostType extends AbstractType
|
||||
{
|
||||
|
@ -51,6 +53,7 @@ class PostType extends AbstractType
|
|||
'required' => true,
|
||||
'choices' => [
|
||||
'Markdown' => 'markdown',
|
||||
'Builder' => 'builder',
|
||||
'HTML' => 'html',
|
||||
'Editor JS' => 'editorjs',
|
||||
],
|
||||
|
@ -61,8 +64,9 @@ class PostType extends AbstractType
|
|||
);
|
||||
|
||||
$types = [
|
||||
'markdown' => SimpleMdTextareaType::class,
|
||||
'html' => SimpleMdTextareaType::class,
|
||||
'markdown' => MarkdownType::class,
|
||||
'builder' => BuilderType::class,
|
||||
'html' => MarkdownType::class,
|
||||
'editorjs' => EditorJsTextareaType::class,
|
||||
];
|
||||
|
||||
|
|
21
src/Form/MarkdownBlockType.php
Normal file
21
src/Form/MarkdownBlockType.php
Normal file
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use App\Core\Form\Site\Page\TextareaBlockType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
|
||||
class MarkdownBlockType extends TextareaBlockType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder->add(
|
||||
'value',
|
||||
MarkdownType::class,
|
||||
array_merge([
|
||||
'required' => false,
|
||||
'label' => false,
|
||||
], $options['options']),
|
||||
);
|
||||
}
|
||||
}
|
13
src/Form/MarkdownType.php
Normal file
13
src/Form/MarkdownType.php
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
|
||||
class MarkdownType extends TextareaType
|
||||
{
|
||||
public function getBlockPrefix()
|
||||
{
|
||||
return 'markdown';
|
||||
}
|
||||
}
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace App;
|
||||
|
||||
use App\Core\DependencyInjection\Compiler\BuilderBlockPass;
|
||||
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
|
||||
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
|
||||
|
@ -35,4 +37,9 @@ class Kernel extends BaseKernel
|
|||
(require $path)($routes->withPath($path), $this);
|
||||
}
|
||||
}
|
||||
|
||||
protected function build(ContainerBuilder $container): void
|
||||
{
|
||||
$container->addCompilerPass(new BuilderBlockPass());
|
||||
}
|
||||
}
|
||||
|
|
8
templates/form/bootstrap_4_form_theme.html.twig
Normal file
8
templates/form/bootstrap_4_form_theme.html.twig
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% extends '@Core/form/bootstrap_4_form_theme.html.twig' %}
|
||||
|
||||
{% block markdown_widget %}
|
||||
<div {% for attr, value in row_attr %}{{ attr }}="{{ value }}" {% endfor %}>
|
||||
<div class="markdown-editor" data-value="{{ value|json_encode }}" data-name="{{ full_name }}" data-id="{{ id }}">
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -55,6 +55,8 @@
|
|||
{{- post.content|murph_url|file_attributes|post -}}
|
||||
{% elseif post.contentFormat == 'markdown' %}
|
||||
{{- post.content|murph_url|file_attributes|markdown('post')|lazy_load -}}
|
||||
{% elseif post.contentFormat == 'builder' %}
|
||||
{{- post.content|block_to_html|lazy_load -}}
|
||||
{% elseif post.contentFormat == 'editorjs' %}
|
||||
{{- post.content|murph_url|file_attributes|editorjs_to_html|raw -}}
|
||||
{% endif %}
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-flow-row-dens grid-cols-12 md:p-8 gap-5">
|
||||
{% for project in projects %}
|
||||
<div class="card shadow-md col-span-12 md:col-span-6 lg:col-span-4 m-3 bg-box">
|
||||
<div class="grid grid-flow-row-dens grid-cols-12 md:p-8 gap-5">
|
||||
{% for project in projects %}
|
||||
<div class="card shadow-md col-span-12 md:col-span-6 lg:col-span-4 m-3 bg-box">
|
||||
{% if project.image %}
|
||||
<figure>
|
||||
<img src="{{ asset(project.image)|imagine_filter('project_preview_filter') }}" alt="{{ project.label }}">
|
||||
|
@ -32,8 +32,8 @@
|
|||
{{- link.label -}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue