Initial commit
65
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
# System files
|
||||
# ------------
|
||||
|
||||
Icon
|
||||
.DS_Store
|
||||
|
||||
# Temporary files
|
||||
# ---------------
|
||||
|
||||
/media/*
|
||||
!/media/index.html
|
||||
|
||||
# Lock files
|
||||
# ---------------
|
||||
|
||||
.lock
|
||||
|
||||
# Editors
|
||||
# (sensitive workspace files)
|
||||
# ---------------------------
|
||||
*.sublime-workspace
|
||||
/.vscode
|
||||
/.idea
|
||||
|
||||
# -------------SECURITY-------------
|
||||
# NEVER publish these files via Git!
|
||||
# -------------SECURITY-------------
|
||||
|
||||
# Cache Files
|
||||
# ---------------
|
||||
|
||||
/site/cache/*
|
||||
!/site/cache/index.html
|
||||
|
||||
# Accounts
|
||||
# ---------------
|
||||
|
||||
/site/accounts/*
|
||||
!/site/accounts/index.html
|
||||
|
||||
# Sessions
|
||||
# ---------------
|
||||
|
||||
/site/sessions/*
|
||||
!/site/sessions/index.html
|
||||
|
||||
# License
|
||||
# ---------------
|
||||
|
||||
/site/config/.license
|
||||
|
||||
|
||||
# Content
|
||||
# ---------------
|
||||
|
||||
/content/*
|
||||
|
||||
# Vendor
|
||||
# ---------------
|
||||
/vendor/*
|
||||
|
||||
# Local
|
||||
local/
|
||||
.claude
|
||||
.claude/*
|
||||
50
.htaccess
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# Kirby .htaccess
|
||||
|
||||
# rewrite rules
|
||||
<IfModule mod_rewrite.c>
|
||||
|
||||
# enable awesome urls. i.e.:
|
||||
# http://yourdomain.com/about-us/team
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP_HOST} !=localhost
|
||||
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
|
||||
RewriteCond %{HTTPS} off
|
||||
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
|
||||
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]
|
||||
|
||||
# make sure to set the RewriteBase correctly
|
||||
# if you are running the site in a subfolder.
|
||||
# Otherwise links or the entire site will break.
|
||||
#
|
||||
# If your homepage is http://yourdomain.com/mysite
|
||||
# Set the RewriteBase to:
|
||||
#
|
||||
# RewriteBase /KirbyStarterKit
|
||||
|
||||
# block text files in the content folder from being accessed directly
|
||||
RewriteRule ^content/(.*)\.(txt|md|mdown)$ index.php [L]
|
||||
|
||||
# block all files in the site folder from being accessed directly
|
||||
RewriteRule ^site/(.*) index.php [L]
|
||||
|
||||
# block all files in the kirby folder from being accessed directly
|
||||
RewriteRule ^kirby/(.*) index.php [L]
|
||||
|
||||
# make panel links work
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^adminpanel/(.*) adminpanel/index.php [L]
|
||||
|
||||
# make site links work
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteRule ^(.*) index.php [L]
|
||||
|
||||
</IfModule>
|
||||
|
||||
# Additional recommended values
|
||||
# Remove comments for those you want to use.
|
||||
#
|
||||
# AddDefaultCharset UTF-8
|
||||
#
|
||||
# php_flag short_open_tag on
|
||||
1
assets/css/app.min.css
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-weight:inherit;font-style:inherit;font-family:inherit;font-size:100%;vertical-align:baseline}body{line-height:1;color:#000;background:#fff}ol,ul{list-style:none}table{border-collapse:separate;border-spacing:0;vertical-align:middle}caption,th,td{text-align:left;font-weight:normal;vertical-align:middle}a img{border:none}.dev{outline:1px solid #912eff}.dev > *{outline:1px solid #5497ff}.dev > * > *{outline:1px solid #51feff}.dev > * > * > *{outline:1px solid #f00}.dev > * > * > * *{outline:1px solid #0f0}@-moz-keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}30%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}30%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-o-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}30%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}30%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}body,html{width:100%;-webkit-text-size-adjust:100%;background:#fff}html{font-size:10px}body{font-family:Helvetica Neue,Arial,sans-serif;font-size:1rem;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p{margin-bottom:1em;line-height:1}p:last-child{margin-bottom:0}::selection{background:#000}::-moz-selection{background:#000}*{-webkit-backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-transform-style:flat;-webkit-transform-style:flat;-moz-transform-style:flat;-ms-transform-style:flat;-o-transform-style:flat;transform-style:flat;-webkit-tap-highlight-color:transparent;-webkit-user-drag:none;outline:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-o-box-sizing:border-box;box-sizing:border-box}video::-webkit-media-controls{display:none}a,a:hover,a:visited,a:focus{color:inherit;text-decoration:none;cursor:pointer}.lazy,.plyr{-webkit-transition:opacity 300ms ease;-moz-transition:opacity 300ms ease;-ms-transition:opacity 300ms ease;-o-transition:opacity 300ms ease;transition:opacity 300ms ease;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0)}.lazy.lazyloaded,.lazy.flickity-lazyloaded,.plyr.plyr--ready{opacity:1;-ms-filter:none;filter:none}#main{float:left;clear:none;text-align:inherit;width:100%;margin-left:0%;margin-right:0%;}#main::after{content:'';display:table;clear:both}#container{float:left;clear:none;text-align:inherit;width:100%;margin-left:0%;margin-right:0%;}#container::after{content:'';display:table;clear:both}body.is-loading #page-content{opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transition:opacity 100ms ease;-moz-transition:opacity 100ms ease;-ms-transition:opacity 100ms ease;-o-transition:opacity 100ms ease;transition:opacity 100ms ease}#outdated{display:none;text-align:center;position:fixed;width:100%;height:100%;top:0;left:0;background:#fff;z-index:900;}#outdated a{border-bottom:1px solid}#outdated .inner{padding:8rem 20%}.no-js #outdated,.no-svg #outdated,.no-flexbox #outdated{display:block}#loader{position:fixed;width:100%;height:100%;top:0;left:0;background:#fff;z-index:10000}
|
||||
4013
assets/css/build/build.min.css
vendored
Normal file
0
assets/fonts/.gitkeep
Normal file
6
assets/fonts/.htaccess
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
RewriteEngine On
|
||||
RewriteCond %{HTTP:Origin} !^$|http(s)?://(www\.)?popnoire\.com$ [NC]
|
||||
RewriteRule \.(woff|eot|svg|otf|ttf|woff2)$ - [NC,L]
|
||||
RewriteCond %{HTTP_REFERER} !.
|
||||
RewriteRule \.(woff|eot|svg|otf|ttf|woff2)$ - [F,NC,L]
|
||||
Options -Indexes
|
||||
BIN
assets/fonts/ExcellentRegular.eot
Normal file
915
assets/fonts/ExcellentRegular.svg
Normal file
|
|
@ -0,0 +1,915 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<metadata>
|
||||
Created by FontForge 20161003 at Tue Sep 18 15:43:02 2018
|
||||
By www-data
|
||||
Copyright (c) 2005 by Stephan Mueller, Jonas Mahrer, www.lineto.com. All rights reserved.
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="ExcellentRegular" horiz-adv-x="598" >
|
||||
<font-face
|
||||
font-family="ExcellentRegular"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="1000"
|
||||
panose-1="0 0 0 0 0 0 0 0 0 0"
|
||||
ascent="800"
|
||||
descent="-200"
|
||||
x-height="498"
|
||||
cap-height="708"
|
||||
bbox="-5 -231 676.9 893"
|
||||
underline-thickness="30"
|
||||
underline-position="-95"
|
||||
unicode-range="U+0020-00FF"
|
||||
/>
|
||||
<missing-glyph
|
||||
d="M509 712v-712h-420v712h420zM157 59h284v594h-284v-594z" />
|
||||
<glyph glyph-name=".notdef"
|
||||
d="M509 712v-712h-420v712h420zM157 59h284v594h-284v-594z" />
|
||||
<glyph glyph-name=".null" horiz-adv-x="0"
|
||||
/>
|
||||
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="333"
|
||||
/>
|
||||
<glyph glyph-name="space" unicode=" "
|
||||
/>
|
||||
<glyph glyph-name="exclam" unicode="!"
|
||||
d="M339 698v-200l-11 -274q0 -10 -10 -10h-37q-10 0 -10 10l-11 274v200q0 10 10 10h59q10 0 10 -10zM354 105v-95q0 -10 -10 -10h-90q-10 0 -10 10v95q0 10 10 10h90q10 0 10 -10z" />
|
||||
<glyph glyph-name="quotedbl" unicode="""
|
||||
d="M429 708v-292q0 -10 -10 -10h-45q-10 0 -10 10v292q0 10 10 10h45q10 0 10 -10zM234 708v-292q0 -10 -10 -10h-45q-10 0 -10 10v292q0 10 10 10h45q10 0 10 -10z" />
|
||||
<glyph glyph-name="numbersign" unicode="#"
|
||||
d="M585 472l-8 -45q-2 -8 -9 -8h-124l-22 -130h120q4 0 7.5 -3.5t2.5 -8.5l-8 -45q-2 -8 -9 -8h-124l-38 -216q-2 -8 -9 -8h-47q-5 0 -8 4t-2 8l37 212h-134l-38 -216q-2 -8 -9 -8h-47q-5 0 -8 4t-2 8l37 212h-120q-5 0 -8 4t-2 8l8 45q2 8 10 8h124l22 130h-120
|
||||
q-5 0 -8 3.5t-2 8.5l8 45q2 8 10 8h124l38 216q2 8 9 8h46q4 0 7.5 -4t2.5 -8l-37 -212h134l38 216q2 8 9 8h46q4 0 7.5 -4t2.5 -8l-37 -212h120q5 0 8 -4t2 -8zM221 289h134l23 130h-134z" />
|
||||
<glyph glyph-name="dollar" unicode="$"
|
||||
d="M518 192q0 -189 -192 -202v-58q0 -10 -10 -10h-37q-10 0 -10 10v58q-185 12 -189 191q0 10 10 10h51q10 0 10 -10q2 -63 32 -92t86 -34v278q-36 8 -77 21q-49 16 -76.5 63t-27.5 102q0 91 47 141t134 57v42q0 10 10 10h37q10 0 10 -10v-42q179 -13 184 -179
|
||||
q0 -10 -10 -10h-51q-10 0 -10 10q-2 61 -29 86t-84 28v-261l17 -3q54 -11 83.5 -24.5t56.5 -44.5q35 -41 35 -127zM447 192q0 37 -6 58t-27 40q-19 17 -88 31v-266q66 5 93.5 38t27.5 99zM269 403v249q-110 -12 -110 -124q0 -71 39 -97q28 -18 71 -28z" />
|
||||
<glyph glyph-name="percent" unicode="%"
|
||||
d="M271 550q0 -30 -1.5 -49t-8.5 -44.5t-20 -40t-38.5 -25t-61.5 -10.5q-30 0 -52.5 6.5t-36.5 20t-22.5 27.5t-12 36t-4.5 38t-1 41q0 30 1.5 49t8 44t19.5 39.5t38.5 25t61.5 10.5t61.5 -10.5t38.5 -25t20 -39.5t8.5 -44t1.5 -49zM551 683l-463 -686q-3 -5 -7 -5
|
||||
q-2 0 -6 2l-25 17q-4 3 -4 7q0 3 2 7l463 686q3 4 8 4q2 0 6 -2l23 -16q5 -3 5 -8q0 -2 -2 -6zM586 158q0 -25 -1 -41t-4.5 -38t-12 -36t-22.5 -27.5t-36.5 -20t-52.5 -6.5t-52.5 6.5t-36.5 20t-22.5 27.5t-12 36t-4.5 38t-1 41t1 41t4.5 38t12 36t22.5 27.5t36.5 20
|
||||
t52.5 6.5t52.5 -6.5t36.5 -20t22.5 -27.5t12 -36t4.5 -38t1 -41zM214 550q0 25 -1 40t-5 32t-11.5 25.5t-21.5 14.5t-34 6q-47 0 -59.5 -27.5t-12.5 -90.5q0 -26 1 -40.5t4.5 -31.5t11 -26t21.5 -15t34 -6q47 0 60 28t13 91zM530 158q0 25 -1 40t-5 32t-11.5 25.5
|
||||
t-21.5 14.5t-34 6q-47 0 -60 -27.5t-13 -90.5q0 -25 1 -40t5 -32t11.5 -25.5t21.5 -14.5t34 -6q47 0 60 27.5t13 90.5z" />
|
||||
<glyph glyph-name="ampersand" unicode="&"
|
||||
d="M495 110l70 -94q2 -4 2 -6q0 -10 -10 -10h-54q-5 0 -8 5l-34 44q-52 -60 -166 -60q-115 0 -168.5 54.5t-53.5 147.5q0 80 21.5 120t100.5 93l-16 22q-36 50 -48 79t-12 72q0 63 40 102t114 39q79 0 116.5 -41.5t37.5 -103.5q0 -88 -70 -138q-51 -37 -69 -48l156 -209
|
||||
q2 18 2 28v119q0 10 10 10h51q10 0 10 -10q0 -87 -5 -134q-4 -42 -17 -81zM358 581q0 76 -85 76q-44 0 -63.5 -25t-19.5 -61q0 -34 11.5 -59.5t46.5 -71.5q22 11 78 53q20 15 26 34.5t6 53.5zM418 106q-15 20 -85 113t-100 133q-34 -22 -44 -30q-26 -20 -35.5 -49.5
|
||||
t-9.5 -81.5q0 -69 35 -105t116 -36q84 0 123 56z" />
|
||||
<glyph glyph-name="quotesingle" unicode="'"
|
||||
d="M332 708v-292q0 -10 -10 -10h-45q-10 0 -10 10v292q0 10 10 10h45q10 0 10 -10z" />
|
||||
<glyph glyph-name="parenleft" unicode="("
|
||||
d="M440 -139q0 -1 -3 -7l-26 -33q-3 -3 -7 -3q-2 0 -6 2q-16 12 -33.5 28.5t-47 56.5t-51 86.5t-38 120t-16.5 155.5t16.5 155.5t38 120t51 86.5t47 56.5t33.5 28.5q4 2 6 2q4 0 7 -3l26 -33q3 -6 3 -7q0 -5 -3 -8q-19 -15 -39 -38t-49 -70t-47.5 -123t-18.5 -167t18.5 -167
|
||||
t47.5 -123t49 -70t39 -38q3 -3 3 -8z" />
|
||||
<glyph glyph-name="parenright" unicode=")"
|
||||
d="M158 -139q0 5 3 8q19 15 39 38t49 70t47.5 123t18.5 167t-18.5 167t-47.5 123t-49 70t-39 38q-3 3 -3 8q0 1 3 7l26 33q3 3 7 3q2 0 6 -2q16 -12 33.5 -28.5t47 -56.5t51 -86.5t38 -120t16.5 -155.5t-16.5 -155.5t-38 -120t-51 -86.5t-47 -56.5t-33.5 -28.5q-4 -2 -6 -2
|
||||
q-4 0 -7 3l-26 33q-3 6 -3 7z" />
|
||||
<glyph glyph-name="asterisk" unicode="*"
|
||||
d="M485 585l11 -32q4 -9 -7 -13l-146 -48l90 -125q2 -4 2 -6q0 -4 -4 -8l-28 -20q-4 -2 -6 -2q-4 0 -8 4l-90 125l-90 -125q-4 -4 -8 -4q-2 0 -6 2l-28 20q-4 4 -4 8q0 2 2 6l90 125l-146 48q-11 4 -7 13l11 32q4 9 12 6l147 -47v154q0 10 10 10h34q10 0 10 -10v-154l147 47
|
||||
q8 3 12 -6z" />
|
||||
<glyph glyph-name="plus" unicode="+"
|
||||
d="M526 300v-45q0 -10 -10 -10h-185v-185q0 -10 -10 -10h-45q-10 0 -10 10v185h-185q-10 0 -10 10v45q0 10 10 10h185v185q0 10 10 10h45q10 0 10 -10v-185h185q10 0 10 -10z" />
|
||||
<glyph glyph-name="comma" unicode=","
|
||||
d="M361 121v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="hyphen" unicode="-"
|
||||
d="M496 300v-45q0 -10 -10 -10h-375q-10 0 -10 10v45q0 10 10 10h375q10 0 10 -10z" />
|
||||
<glyph glyph-name="period" unicode="."
|
||||
d="M361 121v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="slash" unicode="/"
|
||||
d="M486 695l-308 -854q-2 -7 -9 -7h-48q-5 0 -8 4t-1 9l309 854q2 7 9 7h47q5 0 8 -4t1 -9z" />
|
||||
<glyph glyph-name="zero" unicode="0"
|
||||
d="M525 466v-224q0 -253 -226 -253t-226 253v224q0 252 226 252t226 -252zM454 272v164q0 125 -40.5 171t-114.5 46q-34 0 -59.5 -8.5t-48.5 -30.5t-35 -67t-12 -111v-164q0 -125 40 -171.5t115 -46.5q76 0 115.5 48t39.5 170z" />
|
||||
<glyph glyph-name="one" unicode="1"
|
||||
d="M526 55v-45q0 -10 -10 -10h-397q-10 0 -10 10v45q0 10 10 10h173v557l-159 -159q-3 -3 -7 -3t-7 3l-31 32q-3 3 -3 7t3 7l201 196q3 3 7 3h56q10 0 10 -10v-633h154q10 0 10 -10z" />
|
||||
<glyph glyph-name="two" unicode="2"
|
||||
d="M504 55v-45q0 -10 -10 -10h-402q-10 0 -10 10q1 80 13 127t35 75.5t74 67.5q22 17 59.5 40t63 40.5t52 41.5t40.5 54t14 67q0 130 -133 130q-73 0 -109 -33t-38 -112q0 -10 -10 -10h-51q-10 0 -10 10q3 106 60 158t158 52q93 0 148.5 -49t55.5 -146q0 -105 -81 -173
|
||||
q-34 -28 -79.5 -57.5t-75 -49t-58 -44.5t-42.5 -57.5t-14 -76.5h340q10 0 10 -10z" />
|
||||
<glyph glyph-name="three" unicode="3"
|
||||
d="M507 195q0 -108 -60 -157t-157 -49q-92 0 -151.5 44.5t-65.5 141.5q0 10 11 10h49q8 0 10 -10q6 -62 47.5 -91.5t99.5 -29.5q62 0 104.5 35t42.5 106q0 76 -38.5 108t-108.5 32h-18q-10 0 -10 10v45q0 10 10 10h18q138 0 138 125q0 73 -34 100.5t-104 27.5
|
||||
q-68 0 -102.5 -25.5t-36.5 -92.5q0 -10 -9 -10h-52q-10 0 -10 10q6 183 210 183q209 0 209 -193q0 -111 -92 -156q100 -41 100 -174z" />
|
||||
<glyph glyph-name="four" unicode="4"
|
||||
d="M532 224v-45q0 -10 -10 -10h-75v-159q0 -10 -10 -10h-50q-10 0 -10 10v159h-306q-10 0 -10 10v52q0 3 1 5l286 467q3 5 9 5h80q10 0 10 -10v-464h75q10 0 10 -10zM377 633l-240 -399h240v399z" />
|
||||
<glyph glyph-name="five" unicode="5"
|
||||
d="M508 230q0 -241 -215 -241q-96 0 -154 45t-61 133q0 10 10 10h52q9 0 9 -10q6 -113 144 -113q71 0 107.5 40.5t36.5 135.5q0 97 -34.5 136.5t-109.5 39.5q-93 0 -135 -64q-3 -5 -8 -5h-48q-10 0 -10 10v351q0 10 10 10h361q10 0 10 -10v-45q0 -10 -10 -10h-301v-216
|
||||
q46 44 131 44q109 0 162 -54t53 -187z" />
|
||||
<glyph glyph-name="six" unicode="6"
|
||||
d="M524 207q0 -97 -57.5 -157.5t-165.5 -60.5q-57 0 -97.5 16.5t-64.5 44.5t-38 74.5t-18.5 95.5t-4.5 119q0 89 11.5 156.5t31 109.5t48.5 67.5t60.5 35.5t71.5 10q96 0 151.5 -43.5t58.5 -128.5q0 -10 -10 -10h-48q-10 0 -10 10q-3 48 -37.5 77.5t-104.5 29.5
|
||||
q-80 0 -116 -66.5t-36 -227.5q61 66 163 66q106 0 159 -59.5t53 -158.5zM454 207q0 84 -38 118.5t-115 34.5q-72 0 -108 -37t-36 -116q0 -73 36 -113t108 -40q153 0 153 153z" />
|
||||
<glyph glyph-name="seven" unicode="7"
|
||||
d="M517 698v-54q0 -3 -1 -4l-299 -634q-3 -6 -9 -6h-51q-5 0 -8 4.5t-1 9.5l297 629h-345q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10z" />
|
||||
<glyph glyph-name="eight" unicode="8"
|
||||
d="M516 195q0 -108 -60 -157t-157 -49t-157.5 49.5t-60.5 156.5q0 132 101 174q-43 21 -68 56.5t-25 99.5q0 98 55 145.5t155 47.5q209 0 209 -193q0 -111 -92 -156q100 -41 100 -174zM437 525q0 73 -34 100.5t-104 27.5t-104.5 -27.5t-34.5 -100.5q0 -125 139 -125
|
||||
q138 0 138 125zM446 195q0 76 -38.5 108t-108.5 32t-108.5 -32t-38.5 -108q0 -72 42 -106.5t105 -34.5t105 34.5t42 106.5z" />
|
||||
<glyph glyph-name="nine" unicode="9"
|
||||
d="M517 368q0 -203 -51.5 -291t-171.5 -88q-102 0 -154 45t-55 127q0 10 10 10h49q9 0 9 -10q3 -50 38.5 -78.5t102.5 -28.5q80 0 116.5 66.5t36.5 227.5q-60 -65 -164 -65q-58 0 -101 19t-66 51t-34 69t-11 79q0 99 57.5 158t165.5 59q70 0 114.5 -21.5t68 -69t32 -107
|
||||
t8.5 -152.5zM438 501q0 79 -39 115.5t-105 36.5q-152 0 -152 -152q0 -84 38 -118.5t114 -34.5q72 0 108 37t36 116z" />
|
||||
<glyph glyph-name="colon" unicode=":"
|
||||
d="M361 488v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM361 121v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="semicolon" unicode=";"
|
||||
d="M361 488v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM361 121v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="less" unicode="<"
|
||||
d="M485 72v-55q0 -9 -10 -9q-4 0 -5 1l-353 204q-5 3 -5 9v53q0 6 5 9l353 205q1 1 5 1q10 0 10 -9v-55q0 -6 -5 -9l-303 -168l303 -168q5 -3 5 -9z" />
|
||||
<glyph glyph-name="equal" unicode="="
|
||||
d="M526 365v-45q0 -10 -10 -10h-435q-10 0 -10 10v45q0 10 10 10h435q10 0 10 -10zM526 235v-45q0 -10 -10 -10h-435q-10 0 -10 10v45q0 10 10 10h435q10 0 10 -10z" />
|
||||
<glyph glyph-name="greater" unicode=">"
|
||||
d="M485 275v-53q0 -6 -5 -9l-353 -204q-1 -1 -5 -1q-10 0 -10 9v55q0 6 5 9l303 168l-303 168q-5 3 -5 9v55q0 9 10 9q4 0 5 -1l353 -205q5 -3 5 -9z" />
|
||||
<glyph glyph-name="question" unicode="?"
|
||||
d="M504 531q0 -76 -26 -114t-106 -90q-41 -27 -51 -43.5t-10 -59.5q0 -10 -10 -10h-51q-10 0 -10 10q1 62 17 90.5t74 64.5q66 42 84 68t18 84q0 63 -33 92.5t-102 29.5q-80 0 -106.5 -39t-27.5 -114q0 -10 -10 -10h-50q-11 0 -11 10q1 46 9.5 81t29.5 68t63 51t103 18
|
||||
q39 0 73 -8.5t65.5 -28t49.5 -58t18 -92.5zM330 105v-95q0 -10 -10 -10h-90q-10 0 -10 10v95q0 10 10 10h90q10 0 10 -10z" />
|
||||
<glyph glyph-name="at" unicode="@"
|
||||
d="M538 429v-245q0 -10 -10 -10h-51q-10 0 -10 10v21q-11 -14 -39 -28t-66 -14q-18 0 -36 2t-47.5 11.5t-51 25t-38 47.5t-16.5 75q0 86 53.5 124t135.5 38q61 0 104 -19q0 187 -148 187q-188 0 -188 -302q0 -299 187 -299q57 0 98 29q3 3 7 3q7 0 9 -5l16 -42q2 -4 2 -5
|
||||
q0 -5 -3 -8q-55 -36 -129 -36q-257 0 -257 363q0 366 258 366q120 0 180 -87q40 -58 40 -202zM467 269v135q-6 6 -35.5 12.5t-69.5 6.5q-50 0 -84 -24t-34 -75q0 -98 118 -98q36 0 64.5 13.5t40.5 29.5z" />
|
||||
<glyph glyph-name="A" unicode="A"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15z" />
|
||||
<glyph glyph-name="B" unicode="B"
|
||||
d="M525 191q0 -191 -225 -191h-198q-10 0 -10 10v688q0 10 10 10h175q115 0 174.5 -40.5t59.5 -148.5q0 -59 -22 -94.5t-67 -60.5q48 -15 75.5 -53.5t27.5 -119.5zM440 519q0 66 -33.5 95t-102.5 29h-141v-249h141q71 0 103.5 28.5t32.5 96.5zM454 195q0 44 -11 72t-33.5 41
|
||||
t-46 17t-59.5 4h-141v-264h141q78 0 114 31t36 99z" />
|
||||
<glyph glyph-name="C" unicode="C"
|
||||
d="M513 509h-51q-10 0 -10 10q-1 80 -34 107t-114 27q-78 0 -113 -51.5t-35 -165.5v-164q0 -121 36 -169.5t118 -48.5q73 0 106.5 32.5t35.5 102.5q0 10 10 10h51q10 0 10 -10q-4 -200 -213 -200q-106 0 -165.5 61t-59.5 192v224q0 252 219 252q105 0 161 -43t58 -156
|
||||
q0 -10 -10 -10z" />
|
||||
<glyph glyph-name="D" unicode="D"
|
||||
d="M528 412v-116q0 -73 -13.5 -126.5t-36.5 -85.5t-57.5 -51.5t-71 -26t-83.5 -6.5h-161q-10 0 -10 10v688q0 10 10 10h161q47 0 83.5 -6.5t71 -26t57.5 -51.5t36.5 -85.5t13.5 -126.5zM457 354q0 99 -12 155.5t-40 88.5q-39 45 -164 45h-75v-578h75q67 0 105 9.5t59 34.5
|
||||
q52 59 52 245z" />
|
||||
<glyph glyph-name="E" unicode="E"
|
||||
d="M509 55v-45q0 -10 -10 -10h-388q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-327v-246h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-267h327q10 0 10 -10z" />
|
||||
<glyph glyph-name="F" unicode="F"
|
||||
d="M523 698v-45q0 -10 -10 -10h-327v-265h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-303q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10z" />
|
||||
<glyph glyph-name="G" unicode="G"
|
||||
d="M514 322v-123q0 -115 -59.5 -162.5t-165.5 -47.5q-219 0 -219 253v224q0 252 219 252q37 0 66 -4t59.5 -16.5t51 -33.5t34 -58t14.5 -87q0 -10 -10 -10h-51q-10 0 -10 10q-2 80 -37.5 107t-116.5 27q-72 0 -110 -46t-38 -171v-164q0 -122 37.5 -170t110.5 -48
|
||||
q80 0 117 33t37 112v68h-156q-10 0 -10 10v45q0 10 10 10h217q10 0 10 -10z" />
|
||||
<glyph glyph-name="H" unicode="H"
|
||||
d="M511 698v-688q0 -10 -10 -10h-51q-10 0 -10 10v322h-283v-322q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-301h283v301q0 10 10 10h51q10 0 10 -10z" />
|
||||
<glyph glyph-name="I" unicode="I"
|
||||
d="M512 55v-45q0 -10 -10 -10h-407q-10 0 -10 10v45q0 10 10 10h168v578h-168q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10v-45q0 -10 -10 -10h-168v-578h168q10 0 10 -10z" />
|
||||
<glyph glyph-name="J" unicode="J"
|
||||
d="M450 698v-488q0 -116 -48.5 -168.5t-149.5 -52.5q-114 0 -166 54.5t-52 166.5v36q0 10 10 10h51q10 0 10 -10v-36q0 -88 32.5 -122t114.5 -34q68 0 98 35t30 121v488q0 10 10 10h50q10 0 10 -10z" />
|
||||
<glyph glyph-name="K" unicode="K"
|
||||
d="M531 691l-278 -324l306 -350q2 -4 2 -6q0 -11 -10 -11h-67q-4 0 -7 3l-296 334v-327q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-314l272 320q4 4 8 4h62q10 0 10 -11q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="L" unicode="L"
|
||||
d="M518 55v-45q0 -10 -10 -10h-380q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-633h319q10 0 10 -10z" />
|
||||
<glyph glyph-name="M" unicode="M"
|
||||
d="M526 698v-688q0 -10 -10 -10h-50q-10 0 -10 10v582l-122 -351q-2 -7 -9 -7h-51q-7 0 -9 7l-122 351v-582q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h79q7 0 9 -7l129 -379l129 379q2 7 9 7h79q10 0 10 -10z" />
|
||||
<glyph glyph-name="N" unicode="N"
|
||||
d="M510 698v-688q0 -10 -10 -10h-69q-6 0 -9 6l-265 579v-575q0 -10 -10 -10h-49q-10 0 -10 10v688q0 10 10 10h71q6 0 9 -6l263 -577v573q0 10 10 10h49q10 0 10 -10z" />
|
||||
<glyph glyph-name="O" unicode="O"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5z" />
|
||||
<glyph glyph-name="P" unicode="P"
|
||||
d="M526 498q0 -110 -52.5 -162t-160.5 -52h-143v-274q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h204q108 0 160.5 -51.5t52.5 -158.5zM455 498q0 81 -34.5 113t-107.5 32h-143v-294h143q75 0 108.5 32.5t33.5 116.5z" />
|
||||
<glyph glyph-name="Q" unicode="Q"
|
||||
d="M464 48l69 -83q2 -4 2 -5q0 -5 -4 -9l-34 -29q-4 -2 -5 -2q-5 0 -9 4l-73 86q-46 -21 -111 -21q-98 0 -158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168v-288q0 -107 -52 -162zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288
|
||||
q0 -85 36 -120.5t111 -35.5q35 0 67 10l-86 103q-2 2 -2 5q0 5 4 9l35 29q4 2 6 2q4 0 8 -4l89 -107q26 37 26 109z" />
|
||||
<glyph glyph-name="R" unicode="R"
|
||||
d="M521 506q0 -121 -90 -165q47 -27 63 -72t16 -125v-134q0 -10 -10 -10h-50q-10 0 -10 10v134q0 92 -27 129t-107 37h-141v-300q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h230q187 0 187 -202zM450 506q0 77 -32.5 107t-111.5 30h-141v-268h141q74 0 109 32.5
|
||||
t35 98.5z" />
|
||||
<glyph glyph-name="S" unicode="S"
|
||||
d="M518 192q0 -203 -220 -203q-214 0 -218 192q0 10 10 10h51q10 0 10 -10q2 -71 39 -99t108 -28q82 0 115.5 33t33.5 105q0 37 -6 58t-27 40q-15 13 -44.5 21t-81.5 18t-96 25q-49 16 -76.5 63t-27.5 102q0 99 55 149t155 50q207 0 212 -180q0 -10 -10 -10h-51
|
||||
q-10 0 -10 10q-2 68 -35 91.5t-106 23.5q-72 0 -105.5 -30.5t-33.5 -94.5q0 -71 39 -97q11 -8 25 -14t31.5 -10.5t29 -7t32 -6.5t27.5 -5q54 -11 83.5 -24.5t56.5 -44.5q35 -41 35 -127z" />
|
||||
<glyph glyph-name="T" unicode="T"
|
||||
d="M544 698v-45q0 -10 -10 -10h-200v-633q0 -10 -10 -10h-51q-10 0 -10 10v633h-199q-10 0 -10 10v45q0 10 10 10h470q10 0 10 -10z" />
|
||||
<glyph glyph-name="U" unicode="U"
|
||||
d="M516 698v-488q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v488q0 10 10 10h51q10 0 10 -10v-488q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5v488q0 10 10 10h50q10 0 10 -10z" />
|
||||
<glyph glyph-name="V" unicode="V"
|
||||
d="M536 696l-177 -688q-2 -8 -10 -8h-99q-8 0 -10 7l-185 688q-1 4 2 8.5t8 4.5h55q8 0 10 -8l166 -646h9l160 646q2 8 10 8h51q5 0 8 -4t2 -8z" />
|
||||
<glyph glyph-name="W" unicode="W"
|
||||
d="M554 697l-58 -688q0 -9 -10 -9h-81q-8 0 -10 8l-96 395l-96 -395q-2 -8 -10 -8h-81q-10 0 -10 9l-58 688q-1 4 2 7.5t8 3.5h48q9 0 9 -12l48 -625l105 406q2 7 10 7h49q8 0 10 -7l106 -406l47 628q0 9 10 9h48q5 0 8 -3.5t2 -7.5z" />
|
||||
<glyph glyph-name="X" unicode="X"
|
||||
d="M514 693l-178 -329l189 -349q2 -5 -1 -10t-8 -5h-51q-6 0 -9 5l-157 290l-157 -290q-3 -5 -9 -5h-51q-5 0 -8 5t-1 10l189 349l-178 329q-2 5 1 10t8 5h51q6 0 9 -5l146 -278l146 278q3 5 9 5h51q5 0 8 -5t1 -10z" />
|
||||
<glyph glyph-name="Y" unicode="Y"
|
||||
d="M534 694l-199 -406v-278q0 -10 -10 -10h-51q-10 0 -10 10v278l-200 406q-2 5 1 9.5t8 4.5h51q6 0 9 -6l166 -343l167 343q3 6 9 6h50q5 0 8 -4.5t1 -9.5z" />
|
||||
<glyph glyph-name="Z" unicode="Z"
|
||||
d="M514 55v-45q0 -10 -10 -10h-410q-10 0 -10 10v52q0 3 1 5l353 576h-333q-10 0 -10 10v45q0 10 10 10h399q10 0 10 -10v-53q0 -3 -1 -5l-352 -575h343q10 0 10 -10z" />
|
||||
<glyph glyph-name="bracketleft" unicode="["
|
||||
d="M429 -115v-41q0 -10 -10 -10h-184q-10 0 -10 10v854q0 10 10 10h184q10 0 10 -10v-41q0 -10 -10 -10h-129v-752h129q10 0 10 -10z" />
|
||||
<glyph glyph-name="backslash" unicode="\"
|
||||
d="M177 701l308 -854q2 -5 -1 -9t-8 -4h-46q-7 0 -9 7l-309 854q-2 5 1 9t8 4h47q7 0 9 -7z" />
|
||||
<glyph glyph-name="bracketright" unicode="]"
|
||||
d="M373 698v-854q0 -10 -10 -10h-184q-10 0 -10 10v41q0 10 10 10h129v752h-129q-10 0 -10 10v41q0 10 10 10h184q10 0 10 -10z" />
|
||||
<glyph glyph-name="asciicircum" unicode="^"
|
||||
d="M273 708h53q6 0 9 -5l204 -353q1 -2 1 -5q0 -10 -9 -10h-55q-6 0 -9 5l-168 303l-168 -303q-3 -5 -9 -5h-55q-10 0 -10 10q0 1 2 5l205 353q3 5 9 5z" />
|
||||
<glyph glyph-name="underscore" unicode="_"
|
||||
d="M574 -75v-40q0 -10 -10 -10h-530q-10 0 -10 10v40q0 10 10 10h530q10 0 10 -10z" />
|
||||
<glyph glyph-name="grave" unicode="`"
|
||||
d="M284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="a" unicode="a"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30z" />
|
||||
<glyph glyph-name="b" unicode="b"
|
||||
d="M521 249q0 -142 -41.5 -201t-166.5 -59q-87 0 -137 50v-29q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-243q54 54 143 54q63 0 103.5 -15.5t62 -50.5t29 -80t7.5 -114zM450 249q0 119 -25 158t-112 39q-69 0 -103.5 -33.5t-34.5 -87.5v-153
|
||||
q0 -120 138 -120q37 0 62.5 8.5t40 22t22.5 40t10 54t2 72.5z" />
|
||||
<glyph glyph-name="c" unicode="c"
|
||||
d="M513 148q-2 -78 -51.5 -118.5t-159.5 -40.5q-59 0 -100.5 13.5t-64 34.5t-35 57.5t-15.5 69.5t-3 85q0 53 4 89.5t17.5 71.5t37 55t63 32t96.5 12q105 0 156 -37.5t53 -113.5q0 -10 -10 -10h-51q-10 0 -10 10q-6 88 -138 88q-41 0 -68 -8t-43 -21t-24 -40t-10 -54t-2 -74
|
||||
t2.5 -74.5t10.5 -54t24 -39.5t42.5 -21t67.5 -8q79 0 108.5 24t31.5 72q0 10 10 10h51q10 0 10 -10z" />
|
||||
<glyph glyph-name="d" unicode="d"
|
||||
d="M493 698v-688q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v243q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120z" />
|
||||
<glyph glyph-name="e" unicode="e"
|
||||
d="M517 249v-5q0 -10 -10 -10h-355q0 -38 2 -60.5t10 -48.5t24 -40t45 -23.5t71 -9.5q133 0 138 88q0 10 10 10h50q10 0 10 -10q-6 -151 -208 -151q-72 0 -118 17.5t-68 55t-29.5 79.5t-7.5 108q0 71 8.5 116t32 79.5t66.5 49.5t111 15q56 0 95.5 -11.5t63.5 -31.5t37 -54.5
|
||||
t17.5 -71.5t4.5 -91zM152 294h294q-2 83 -31 117.5t-116 34.5q-85 0 -115 -34.5t-32 -117.5z" />
|
||||
<glyph glyph-name="f" unicode="f"
|
||||
d="M585 680l-16 -42q-3 -6 -11 -4q-73 21 -148 21q-116 0 -116 -111v-46h214q10 0 10 -10v-40q0 -10 -10 -10h-214v-378h165q10 0 10 -10v-40q0 -10 -10 -10h-350q-10 0 -10 10v40q0 10 10 10h114v378h-114q-10 0 -10 10v40q0 10 10 10h114v57q0 77 46.5 120t139.5 43
|
||||
q90 0 170 -28q8 -2 6 -10z" />
|
||||
<glyph glyph-name="g" unicode="g"
|
||||
d="M493 488v-564q0 -77 -56 -116t-146 -39q-89 0 -144 36.5t-59 108.5q0 10 11 10h50q10 0 10 -10q6 -82 132 -82q64 0 98 25.5t34 66.5v120q-21 -22 -58.5 -38.5t-78.5 -16.5q-118 0 -163.5 57.5t-45.5 204.5q0 140 44 199t165 59q88 0 137 -49v28q0 10 10 10h50
|
||||
q10 0 10 -10zM424 174v152q0 120 -138 120q-81 0 -109.5 -39t-28.5 -156q0 -116 26 -157.5t112 -41.5q65 0 101.5 32t36.5 90z" />
|
||||
<glyph glyph-name="h" unicode="h"
|
||||
d="M507 348v-338q0 -10 -10 -10h-50q-10 0 -10 10v333q0 61 -32.5 82t-101.5 21q-56 0 -98.5 -32.5t-42.5 -79.5v-324q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-252q49 63 137 63h11q26 0 43 -1t43 -5.5t43 -15t34 -27.5t25.5 -45.5t8.5 -66.5z" />
|
||||
<glyph glyph-name="i" unicode="i"
|
||||
d="M352 698v-73q0 -10 -10 -10h-67q-10 0 -10 10v73q0 10 10 10h67q10 0 10 -10zM537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10z" />
|
||||
<glyph glyph-name="j" unicode="j"
|
||||
d="M368 698v-73q0 -10 -10 -10h-67q-10 0 -10 10v73q0 10 10 10h67q10 0 10 -10zM368 488v-564q0 -74 -51.5 -114.5t-135.5 -40.5q-87 0 -135 38t-51 107q0 10 11 10h45q9 0 9 -10q5 -82 121 -82t116 92v514h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10z" />
|
||||
<glyph glyph-name="k" unicode="k"
|
||||
d="M518 481l-238 -216l264 -248q3 -3 3 -6q0 -11 -10 -11h-66q-4 0 -7 3l-250 232v-225q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-408l225 205q3 3 7 3h65q10 0 10 -11q0 -3 -3 -6z" />
|
||||
<glyph glyph-name="l" unicode="l"
|
||||
d="M531 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v588h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-638h175q10 0 10 -10z" />
|
||||
<glyph glyph-name="m" unicode="m"
|
||||
d="M540 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v352q0 47 -15 65.5t-52 18.5q-68 0 -68 -84v-352q0 -10 -10 -10h-51q-10 0 -10 10v352q0 47 -15 65.5t-52 18.5q-67 0 -67 -84v-352q0 -10 -10 -10h-51q-10 0 -10 10v478q0 10 10 10h51q10 0 10 -10v-17q30 38 87 38
|
||||
q78 0 98 -60q32 60 107 60q66 0 92.5 -38.5t26.5 -108.5z" />
|
||||
<glyph glyph-name="n" unicode="n"
|
||||
d="M507 348v-338q0 -10 -10 -10h-50q-10 0 -10 10v333q0 61 -32.5 82t-101.5 21q-56 0 -98.5 -32.5t-42.5 -79.5v-324q0 -10 -10 -10h-51q-10 0 -10 10v478q0 10 10 10h51q10 0 10 -10v-42q49 63 137 63h11q26 0 43 -1t43 -5.5t43 -15t34 -27.5t25.5 -45.5t8.5 -66.5z" />
|
||||
<glyph glyph-name="o" unicode="o"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62z" />
|
||||
<glyph glyph-name="p" unicode="p"
|
||||
d="M521 249q0 -69 -7.5 -114t-29 -80t-62 -50.5t-103.5 -15.5q-88 0 -143 55v-254q0 -10 -10 -10h-51q-10 0 -10 10v698q0 10 10 10h51q10 0 10 -10v-28q49 49 137 49q125 0 166.5 -59t41.5 -201zM450 249q0 45 -2 72.5t-10 54t-22.5 40t-40 22t-62.5 8.5q-138 0 -138 -120
|
||||
v-153q0 -54 34.5 -87.5t103.5 -33.5q87 0 112 39t25 158z" />
|
||||
<glyph glyph-name="q" unicode="q"
|
||||
d="M493 488v-698q0 -10 -10 -10h-50q-10 0 -10 10v254q-55 -55 -143 -55q-63 0 -103.5 15.5t-62 50.5t-29.5 80t-8 114q0 142 42 201t167 59q88 0 137 -49v28q0 10 10 10h50q10 0 10 -10zM424 173v153q0 120 -138 120q-47 0 -75 -11t-41.5 -38.5t-17.5 -59t-4 -88.5
|
||||
q0 -118 25.5 -157.5t112.5 -39.5q69 0 103.5 33.5t34.5 87.5z" />
|
||||
<glyph glyph-name="r" unicode="r"
|
||||
d="M566 342q0 -10 -10 -10h-51q-10 0 -10 10q-1 58 -19 81t-68 23q-68 0 -101 -29.5t-33 -76.5v-280h137q10 0 10 -10v-40q0 -10 -10 -10h-328q-10 0 -10 10v40q0 10 10 10h121v378h-121q-10 0 -10 10v40q0 10 10 10h181q10 0 10 -10v-42q20 27 57 45t75 18q91 0 125.5 -38
|
||||
t34.5 -129z" />
|
||||
<glyph glyph-name="s" unicode="s"
|
||||
d="M510 138q0 -76 -47 -112.5t-164 -36.5q-104 0 -156.5 36t-54.5 126q0 10 10 10h51q10 0 10 -10q2 -54 32 -76.5t108 -22.5q82 0 111 20.5t29 65.5q0 38 -29.5 55.5t-110.5 29.5q-114 17 -157 44.5t-43 99.5q0 67 52.5 104.5t147.5 37.5q98 0 147.5 -34.5t52.5 -110.5
|
||||
q0 -10 -10 -10h-51q-10 0 -10 10q-2 45 -32 63.5t-97 18.5q-68 0 -98.5 -18.5t-30.5 -60.5q0 -34 27.5 -51.5t101.5 -28.5q3 -1 32 -4.5t44 -6.5t38.5 -9.5t39.5 -15.5q57 -31 57 -113z" />
|
||||
<glyph glyph-name="t" unicode="t"
|
||||
d="M544 170q0 -42 -7.5 -71.5t-26 -56t-55.5 -40t-93 -13.5q-51 0 -87 12.5t-54.5 29.5t-28.5 46t-11.5 49.5t-1.5 53.5v258h-115q-10 0 -10 10v40q0 10 10 10h115v153q0 10 10 10h51q10 0 10 -10v-153h238q10 0 10 -10v-40q0 -10 -10 -10h-238v-258q0 -34 2 -51t12 -38
|
||||
t34 -30t64 -9q69 0 90 28t22 90q0 10 10 10h50q10 0 10 -10z" />
|
||||
<glyph glyph-name="u" unicode="u"
|
||||
d="M502 488v-303q0 -64 -16.5 -105.5t-48.5 -60t-63 -24.5t-76 -6t-76 6t-63 24.5t-48.5 60t-16.5 105.5v303q0 10 10 10h51q10 0 10 -10v-303q0 -73 27.5 -103t105.5 -30t105.5 30t27.5 103v303q0 10 10 10h51q10 0 10 -10z" />
|
||||
<glyph glyph-name="v" unicode="v"
|
||||
d="M508 485l-162 -478q-2 -7 -9 -7h-78q-7 0 -9 7l-162 478q-2 5 1.5 9t8.5 4h52q7 0 9 -7l138 -426l142 426q2 7 9 7h50q5 0 8.5 -4t1.5 -9z" />
|
||||
<glyph glyph-name="w" unicode="w"
|
||||
d="M555 486l-91 -478q-2 -8 -10 -8h-63q-8 0 -10 7l-82 287l-83 -287q-2 -7 -10 -7h-63q-8 0 -10 8l-91 478q-1 4 2.5 8t7.5 4h48q8 0 10 -8l69 -423l88 291q2 7 9 7h45q7 0 9 -7l88 -291l69 423q2 8 10 8h48q5 0 8 -4t2 -8z" />
|
||||
<glyph glyph-name="x" unicode="x"
|
||||
d="M504 482l-166 -232l171 -234q4 -4 1 -10t-9 -6h-54q-5 0 -8 4l-140 195l-141 -195q-3 -4 -8 -4h-53q-6 0 -9 6t1 10l171 234l-167 232q-3 4 -0.5 10t8.5 6h61q5 0 8 -4l129 -186l129 186q3 4 8 4h60q6 0 8.5 -6t-0.5 -10z" />
|
||||
<glyph glyph-name="y" unicode="y"
|
||||
d="M514 484l-233 -622q-34 -93 -121 -93q-33 0 -63 5q-12 2 -10 10l6 41q2 10 10 10q30 -3 40 -3q34 0 52.5 14t37.5 65l32 89l-182 484q-2 5 1 9.5t8 4.5h52q7 0 9 -7l147 -393l143 393q2 7 9 7h53q5 0 8 -4.5t1 -9.5z" />
|
||||
<glyph glyph-name="z" unicode="z"
|
||||
d="M505 50v-40q0 -10 -10 -10h-385q-10 0 -10 10v45q0 5 2 7l320 376h-304q-10 0 -10 10v40q0 10 10 10h377q10 0 10 -10v-45q0 -5 -2 -7l-320 -376h312q10 0 10 -10z" />
|
||||
<glyph glyph-name="braceleft" unicode="{"
|
||||
d="M460 -115v-41q0 -10 -10 -10q-42 0 -70.5 3.5t-49.5 12t-33 20t-19 33t-9 45t-2 60.5v96q0 72 -25 100.5t-83 30.5q-10 0 -10 10v52q0 10 10 10q58 2 83 30.5t25 100.5v96q0 37 2 60.5t9 45t19 33t33 20t49.5 12t70.5 3.5q10 0 10 -10v-41q0 -10 -10 -10
|
||||
q-78 -1 -98.5 -22.5t-20.5 -90.5v-104q0 -74 -19 -108.5t-79 -50.5q60 -16 79 -50.5t19 -108.5v-104q0 -69 20.5 -90.5t98.5 -22.5q10 0 10 -10z" />
|
||||
<glyph glyph-name="bar" unicode="|"
|
||||
d="M331 698v-854q0 -10 -10 -10h-45q-10 0 -10 10v854q0 10 10 10h45q10 0 10 -10z" />
|
||||
<glyph glyph-name="braceright" unicode="}"
|
||||
d="M138 -156v41q0 10 10 10q78 1 98.5 22.5t20.5 90.5v104q0 74 19 108.5t79 50.5q-60 16 -79 50.5t-19 108.5v104q0 69 -20.5 90.5t-98.5 22.5q-10 0 -10 10v41q0 10 10 10q42 0 70.5 -3.5t49.5 -12t33 -20t19 -33t9 -45t2 -60.5v-96q0 -72 25 -100.5t83 -30.5q10 0 10 -10
|
||||
v-52q0 -10 -10 -10q-58 -2 -83 -30.5t-25 -100.5v-96q0 -37 -2 -60.5t-9 -45t-19 -33t-33 -20t-49.5 -12t-70.5 -3.5q-10 0 -10 10z" />
|
||||
<glyph glyph-name="asciitilde" unicode="~"
|
||||
d="M475 488q0 -1 -1 -3v-2q-13 -44 -36.5 -66.5t-67.5 -22.5q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 35q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="quotesinglbase"
|
||||
d="M359 120l-30 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h100q5 0 8 -3.5t2 -7.5z" />
|
||||
<glyph glyph-name="florin"
|
||||
d="M183 -88l77 445h-128q-10 0 -10 10v42q0 10 10 10h138l29 167q13 75 43.5 103.5t93.5 28.5q39 0 73 -9q12 -2 10 -10l-6 -40q-1 -10 -10 -10q-4 0 -14 1.5t-19 2t-15 0.5q-43 0 -63 -13.5t-29 -64.5l-27 -156h152q10 0 10 -10v-42q0 -10 -10 -10h-163l-78 -456
|
||||
q-13 -76 -43 -104t-94 -28q-39 0 -73 9q-12 2 -10 10l6 40q2 10 10 10q4 0 14 -1.5t19 -2t15 -0.5q43 0 63 13.5t29 64.5z" />
|
||||
<glyph glyph-name="quotedblbase"
|
||||
d="M462 120l-30 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h100q5 0 8 -3.5t2 -7.5zM256 120l-30 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h100q5 0 8 -3.5t2 -7.5z" />
|
||||
<glyph glyph-name="ellipsis" unicode="…"
|
||||
d="M551 121v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM361 121v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM171 121v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="dagger"
|
||||
d="M531 450v-45q0 -10 -10 -10h-187v-551q0 -10 -10 -10h-51q-10 0 -10 10v551h-187q-10 0 -10 10v45q0 10 10 10h187v238q0 10 10 10h51q10 0 10 -10v-238h187q10 0 10 -10z" />
|
||||
<glyph glyph-name="daggerdbl"
|
||||
d="M531 107v-45q0 -10 -10 -10h-187v-208q0 -10 -10 -10h-51q-10 0 -10 10v208h-187q-10 0 -10 10v45q0 10 10 10h187v308h-187q-10 0 -10 10v45q0 10 10 10h187v208q0 10 10 10h51q10 0 10 -10v-208h187q10 0 10 -10v-45q0 -10 -10 -10h-187v-308h187q10 0 10 -10z" />
|
||||
<glyph glyph-name="circumflex"
|
||||
d="M359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="perthousand"
|
||||
d="M542 576l14 -24q1 -2 1 -5q0 -6 -5 -9l-504 -286q-2 -1 -5 -1q-6 0 -9 5l-14 24q-1 2 -1 5q0 6 5 9l504 286q2 1 5 1q6 0 9 -5zM212 576q0 -72 -20.5 -107.5t-77.5 -35.5t-78 36t-21 107t20.5 106.5t78.5 35.5q57 0 77.5 -35t20.5 -107zM583 132q0 -71 -21 -107t-78 -36
|
||||
t-77.5 35.5t-20.5 107.5t20.5 107.5t77.5 35.5t78 -36t21 -107zM327 132q0 -72 -20.5 -107.5t-77.5 -35.5t-78 36t-21 107t21 107t78 36t77.5 -35.5t20.5 -107.5zM163 576q0 22 -1 33.5t-5 28.5t-15 25t-28 8t-28 -8t-15 -25t-5 -28.5t-1 -33.5t1 -33.5t5 -28.5t15 -25
|
||||
t28 -8t28 8t15 25t5 28.5t1 33.5zM533 132q0 22 -1 33.5t-5 28.5t-15 25t-28 8t-28 -8t-15 -25t-5 -28.5t-1 -33.5t1 -33.5t5 -28.5t15 -25t28 -8t28 8t15 25t5 28.5t1 33.5zM278 132q0 22 -1 33.5t-5 28.5t-15 25t-28 8t-28 -8t-15 -25t-5 -28.5t-1 -33.5t1 -33.5t5 -28.5
|
||||
t15 -25t28 -8t28 8t15 25t5 28.5t1 33.5z" />
|
||||
<glyph glyph-name="Scaron"
|
||||
d="M518 192q0 -203 -220 -203q-214 0 -218 192q0 10 10 10h51q10 0 10 -10q2 -71 39 -99t108 -28q82 0 115.5 33t33.5 105q0 37 -6 58t-27 40q-15 13 -44.5 21t-81.5 18t-96 25q-49 16 -76.5 63t-27.5 102q0 99 55 149t155 50q207 0 212 -180q0 -10 -10 -10h-51
|
||||
q-10 0 -10 10q-2 68 -35 91.5t-106 23.5q-72 0 -105.5 -30.5t-33.5 -94.5q0 -71 39 -97q11 -8 25 -14t31.5 -10.5t29 -7t32 -6.5t27.5 -5q54 -11 83.5 -24.5t56.5 -44.5q35 -41 35 -127zM466 873l-107 -127q-4 -4 -8 -4h-103q-4 0 -8 4l-107 127q-2 4 -2 6q0 10 10 10h50
|
||||
q2 0 6 -2l102 -69l102 69q4 2 6 2h51q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="guilsinglleft"
|
||||
d="M401 428l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="OE"
|
||||
d="M541 55v-45q0 -10 -10 -10h-238q-29 -11 -67 -11q-85 0 -130 50t-45 171v288q0 121 45 170.5t130 49.5q41 0 67 -10h238q10 0 10 -10v-45q0 -10 -10 -10h-167v-246h137q10 0 10 -10v-45q0 -10 -10 -10h-137v-267h167q10 0 10 -10zM293 69v570q-25 14 -67 14
|
||||
q-58 0 -81 -34t-23 -121v-288q0 -87 23 -121.5t81 -34.5q40 0 67 15z" />
|
||||
<glyph glyph-name="quoteleft"
|
||||
d="M329 699l30 -292q1 -4 -2 -7.5t-8 -3.5h-100q-5 0 -8 3.5t-2 7.5l31 292q2 9 10 9h39q8 0 10 -9z" />
|
||||
<glyph glyph-name="quoteright"
|
||||
d="M359 697l-30 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h100q5 0 8 -3.5t2 -7.5z" />
|
||||
<glyph glyph-name="quotedblleft"
|
||||
d="M432 699l31 -292q1 -4 -2 -7.5t-8 -3.5h-101q-5 0 -8 3.5t-2 7.5l31 292q2 9 10 9h39q8 0 10 -9zM226 699l30 -292q1 -4 -2 -7.5t-8 -3.5h-100q-5 0 -8 3.5t-2 7.5l31 292q2 9 10 9h39q8 0 10 -9z" />
|
||||
<glyph glyph-name="bullet"
|
||||
d="M424 488v-242q0 -10 -10 -10h-230q-10 0 -10 10v242q0 10 10 10h230q10 0 10 -10z" />
|
||||
<glyph glyph-name="endash"
|
||||
d="M507 300v-45q0 -10 -10 -10h-396q-10 0 -10 10v45q0 10 10 10h396q10 0 10 -10z" />
|
||||
<glyph glyph-name="emdash"
|
||||
d="M580 300v-45q0 -10 -10 -10h-542q-10 0 -10 10v45q0 10 10 10h542q10 0 10 -10z" />
|
||||
<glyph glyph-name="tilde"
|
||||
d="M475 698q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="trademark"
|
||||
d="M557 698v-356q0 -10 -10 -10h-37q-10 0 -10 10v262l-41 -148q-2 -7 -10 -7h-32q-8 0 -10 7l-41 148v-262q0 -10 -10 -10h-38q-10 0 -10 10v356q0 10 10 10h50q7 0 9 -7l56 -163l55 163q2 7 9 7h50q10 0 10 -10zM268 698v-34q0 -10 -10 -10h-75v-312q0 -10 -10 -10h-37
|
||||
q-10 0 -10 10v312h-75q-10 0 -10 10v34q0 10 10 10h207q10 0 10 -10z" />
|
||||
<glyph glyph-name="scaron"
|
||||
d="M510 138q0 -76 -47 -112.5t-164 -36.5q-104 0 -156.5 36t-54.5 126q0 10 10 10h51q10 0 10 -10q2 -54 32 -76.5t108 -22.5q82 0 111 20.5t29 65.5q0 38 -29.5 55.5t-110.5 29.5q-114 17 -157 44.5t-43 99.5q0 67 52.5 104.5t147.5 37.5q98 0 147.5 -34.5t52.5 -110.5
|
||||
q0 -10 -10 -10h-51q-10 0 -10 10q-2 45 -32 63.5t-97 18.5q-68 0 -98.5 -18.5t-30.5 -60.5q0 -34 27.5 -51.5t101.5 -28.5q3 -1 32 -4.5t44 -6.5t38.5 -9.5t39.5 -15.5q57 -31 57 -113zM466 692l-107 -127q-4 -4 -8 -4h-103q-4 0 -8 4l-107 127q-2 4 -2 6q0 10 10 10h50
|
||||
q2 0 6 -2l102 -69l102 69q4 2 6 2h51q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="guilsinglright"
|
||||
d="M407 248l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6l133 173l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -2 2 -6t-2 -6z" />
|
||||
<glyph glyph-name="oe"
|
||||
d="M544 140q-3 -78 -43.5 -114.5t-96.5 -36.5q-80 0 -105 49q-35 -49 -99 -49q-24 0 -46.5 7t-46.5 23t-38.5 48.5t-14.5 78.5v216q0 72 37.5 109.5t102.5 37.5q80 0 105 -46q37 46 105 46q78 0 109 -44.5t31 -153.5v-67q0 -10 -10 -10h-200v-86q0 -44 17.5 -70t52.5 -26
|
||||
q33 0 50 24.5t19 63.5q0 10 10 10h51q10 0 10 -10zM334 362v-68h139v68q0 84 -70 84q-69 0 -69 -84zM264 148v214q0 84 -70 84q-69 0 -69 -84v-214q0 -51 18.5 -73.5t56.5 -22.5q33 0 48.5 22.5t15.5 73.5z" />
|
||||
<glyph glyph-name="Ydieresis"
|
||||
d="M534 694l-199 -406v-278q0 -10 -10 -10h-51q-10 0 -10 10v278l-200 406q-2 5 1 9.5t8 4.5h51q6 0 9 -6l166 -343l167 343q3 6 9 6h50q5 0 8 -4.5t1 -9.5zM447 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 879v-81q0 -10 -10 -10h-78
|
||||
q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="exclamdown" unicode="¡"
|
||||
d="M354 532v-95q0 -10 -10 -10h-90q-10 0 -10 10v95q0 10 10 10h90q10 0 10 -10zM327 318l11 -274v-200q0 -10 -10 -10h-59q-10 0 -10 10v200l11 274q0 10 10 10h37q10 0 10 -10z" />
|
||||
<glyph glyph-name="cent" unicode="¢"
|
||||
d="M513 148q-2 -73 -45.5 -113t-139.5 -45v-58q0 -10 -10 -10h-37q-10 0 -10 10v58q-50 3 -85.5 18.5t-55 36.5t-30.5 56.5t-13.5 67t-2.5 80.5q0 50 3.5 85t15 68.5t32 54t54.5 34.5t82 17v43q0 10 10 10h37q10 0 10 -10v-43q178 -9 183 -150q0 -10 -10 -10h-51
|
||||
q-10 0 -10 10q-5 80 -112 87v-393q63 4 87.5 28t26.5 68q0 10 10 10h51q10 0 10 -10zM271 53v392q-75 -6 -95.5 -48t-20.5 -148q0 -105 21 -147.5t95 -48.5z" />
|
||||
<glyph glyph-name="sterling" unicode="£"
|
||||
d="M545 519q0 -10 -10 -10h-50q-10 0 -10 10q-1 80 -32 107t-98 27q-130 0 -130 -114q0 -50 16 -148h191q10 0 10 -10v-45q0 -10 -10 -10h-179q13 -80 13 -139q0 -67 -41 -122h311q10 0 10 -10v-45q0 -10 -10 -10h-401q-10 0 -10 10v38q0 6 5 9q28 16 46.5 55t18.5 97
|
||||
q0 53 -11 117h-69q-10 0 -10 10v45q0 10 10 10h56q-17 89 -17 154q0 80 56 126.5t145 46.5q196 0 200 -199z" />
|
||||
<glyph glyph-name="currency" unicode="¤"
|
||||
d="M529 137q0 -5 -3 -8l-38 -37q-3 -3 -8 -3q-6 0 -9 3l-64 65q-47 -31 -107 -31t-107 31l-65 -65q-3 -3 -8 -3t-8 3l-38 37q-4 4 -4 8q0 5 4 9l65 65q-32 48 -32 106q0 60 32 107l-65 66q-4 4 -4 8q0 5 4 9l38 36q4 4 8 4t8 -4l66 -65q46 31 106 31q59 0 106 -31l65 65
|
||||
q4 4 9 4q4 0 8 -4l38 -36q3 -3 3 -9q0 -5 -3 -8l-66 -66q33 -49 33 -107t-32 -106l65 -65q3 -3 3 -9zM422 317q0 50 -36 85.5t-86 35.5t-86 -35.5t-36 -85.5t36 -85t86 -35t86 35t36 85z" />
|
||||
<glyph glyph-name="yen" unicode="¥"
|
||||
d="M500 235v-37q0 -10 -10 -10h-155v-178q0 -10 -10 -10h-51q-10 0 -10 10v178h-156q-10 0 -10 10v37q0 10 10 10h156v52h-156q-10 0 -10 10v37q0 10 10 10h123l-167 340q-2 5 1 9.5t8 4.5h51q6 0 9 -6l166 -343l167 343q3 6 9 6h50q5 0 8 -4.5t1 -9.5l-167 -340h123
|
||||
q10 0 10 -10v-37q0 -10 -10 -10h-155v-52h155q10 0 10 -10z" />
|
||||
<glyph glyph-name="brokenbar" unicode="¦"
|
||||
d="M331 545v-225q0 -10 -10 -10h-45q-10 0 -10 10v225q0 10 10 10h45q10 0 10 -10zM331 235v-225q0 -10 -10 -10h-45q-10 0 -10 10v225q0 10 10 10h45q10 0 10 -10z" />
|
||||
<glyph glyph-name="section" unicode="§"
|
||||
d="M538 231q0 -98 -92 -152q37 -37 37 -108q0 -75 -51.5 -112t-132.5 -37q-179 0 -184 172q0 10 10 10h51q10 0 10 -10q1 -61 27.5 -84t85.5 -23q61 0 87.5 21.5t26.5 66.5q0 36 -20 55.5t-77 46.5l-155 75q-100 49 -100 156q0 98 92 152q-38 38 -38 110q0 75 51.5 111.5
|
||||
t132.5 36.5q179 0 184 -172q0 -10 -10 -10h-51q-10 0 -10 10q-1 61 -27.5 84t-85.5 23q-61 0 -87 -21.5t-26 -66.5q0 -37 20.5 -56.5t76.5 -46.5l155 -75q100 -49 100 -156zM467 231q0 63 -58 91q-209 104 -210 105q-38 -27 -52.5 -54.5t-14.5 -64.5q0 -63 58 -91
|
||||
q209 -104 210 -105q38 27 52.5 54.5t14.5 64.5z" />
|
||||
<glyph glyph-name="dieresis" unicode="¨"
|
||||
d="M447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="copyright" unicode="©"
|
||||
d="M598 379v-50q0 -124 -87.5 -211.5t-211.5 -87.5t-211.5 87.5t-87.5 211.5v50q0 124 87.5 211.5t211.5 87.5t211.5 -87.5t87.5 -211.5zM541 329v50q0 101 -70.5 171.5t-171.5 70.5t-171.5 -70.5t-70.5 -171.5v-50q0 -101 70.5 -171.5t171.5 -70.5t171.5 70.5t70.5 171.5z
|
||||
M420 277q-4 -117 -118 -117q-57 0 -90 34t-33 104v112q0 137 120 137q56 0 87.5 -25.5t33.5 -91.5q0 -10 -10 -10h-38q-10 0 -10 10q-1 39 -14.5 50.5t-48.5 11.5q-33 0 -48 -21.5t-15 -75.5v-82q0 -57 15.5 -77.5t50.5 -20.5q31 0 45 13.5t15 48.5q0 10 10 10h38
|
||||
q10 0 10 -10z" />
|
||||
<glyph glyph-name="ordfeminine" unicode="ª"
|
||||
d="M469 595v-290q0 -10 -10 -10h-44q-10 0 -10 10v12q-44 -31 -101 -31q-176 0 -176 135q0 136 176 136q56 0 101 -15v53q0 35 -22.5 50.5t-78.5 15.5q-49 0 -73.5 -13t-27.5 -45q0 -11 -11 -11h-45q-10 0 -10 11q9 115 167 115q90 0 127.5 -31.5t37.5 -91.5zM469 221v-44
|
||||
q0 -10 -10 -10h-321q-10 0 -10 10v44q0 10 10 10h321q10 0 10 -10zM405 377v108q-22 14 -101 14q-111 0 -111 -78q0 -42 26.5 -59.5t84.5 -17.5q70 0 101 33z" />
|
||||
<glyph glyph-name="guillemotleft" unicode="«"
|
||||
d="M489 428l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10q0 -2 -2 -6zM311 428l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10
|
||||
q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="logicalnot" unicode="¬"
|
||||
d="M526 365v-245q0 -10 -10 -10h-45q-10 0 -10 10v190h-380q-10 0 -10 10v45q0 10 10 10h435q10 0 10 -10z" />
|
||||
<glyph glyph-name="registered" unicode="®"
|
||||
d="M598 379v-50q0 -124 -87.5 -211.5t-211.5 -87.5t-211.5 87.5t-87.5 211.5v50q0 124 87.5 211.5t211.5 87.5t211.5 -87.5t87.5 -211.5zM541 329v50q0 101 -70.5 171.5t-171.5 70.5t-171.5 -70.5t-70.5 -171.5v-50q0 -101 70.5 -171.5t171.5 -70.5t171.5 70.5t70.5 171.5z
|
||||
M417 430q0 -56 -36 -83q30 -27 30 -98v-73q0 -10 -10 -10h-37q-10 0 -10 10v73q0 43 -11 57.5t-45 14.5h-59v-145q0 -10 -10 -10h-38q-10 0 -10 10v356q0 10 10 10h121q105 0 105 -112zM359 430q0 34 -13 46t-48 12h-59v-112h59q33 0 47 13t14 41z" />
|
||||
<glyph glyph-name="macron" unicode="¯"
|
||||
d="M467 619v-48q0 -10 -10 -10h-317q-10 0 -10 10v48q0 10 10 10h317q10 0 10 -10z" />
|
||||
<glyph glyph-name="degree" unicode="°"
|
||||
d="M461 556q0 -67 -47.5 -114.5t-115.5 -47.5t-115.5 47.5t-47.5 114.5t47.5 114.5t115.5 47.5t115.5 -47.5t47.5 -114.5zM401 556q0 43 -30 72.5t-73 29.5t-73 -29.5t-30 -72.5q0 -42 30.5 -72t72.5 -30t72.5 30t30.5 72z" />
|
||||
<glyph glyph-name="plusminus" unicode="±"
|
||||
d="M526 300v-45q0 -10 -10 -10h-185v-140q0 -10 -10 -10h-45q-10 0 -10 10v140h-185q-10 0 -10 10v45q0 10 10 10h185v185q0 10 10 10h45q10 0 10 -10v-185h185q10 0 10 -10zM526 50v-40q0 -10 -10 -10h-435q-10 0 -10 10v40q0 10 10 10h435q10 0 10 -10z" />
|
||||
<glyph glyph-name="twosuperior" unicode="²"
|
||||
d="M434 303v-42q0 -6 -7 -6h-263q-6 0 -6 6q1 80 16 112t62 68q13 10 43 29t47.5 31.5t33 35.5t15.5 49q0 74 -75 74q-42 0 -62 -18.5t-22 -61.5q0 -6 -6 -6h-45q-7 0 -7 6q7 135 142 135q61 0 97.5 -32.5t36.5 -96.5q0 -67 -53 -112q-24 -20 -72 -49.5t-68.5 -53
|
||||
t-23.5 -61.5h210q7 0 7 -7z" />
|
||||
<glyph glyph-name="threesuperior" unicode="³"
|
||||
d="M435 383q0 -70 -39 -102.5t-102 -32.5q-60 0 -98.5 28.5t-43.5 90.5q0 6 7 6h45q6 0 7 -5q10 -65 83 -65q36 0 60 20.5t24 59.5q0 80 -84 80h-12q-6 0 -6 6v42q0 6 6 6h12q78 0 78 71q0 41 -19 56.5t-59 15.5q-38 0 -57.5 -13.5t-21.5 -49.5q0 -6 -6 -6h-46q-6 0 -6 6
|
||||
q6 118 137 118q136 0 136 -127q0 -74 -55 -97q60 -23 60 -108z" />
|
||||
<glyph glyph-name="acute" unicode="´"
|
||||
d="M419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="mu" unicode="µ"
|
||||
d="M506 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v42q-47 -63 -140 -63q-86 0 -135 63v-262q0 -10 -10 -10h-51q-10 0 -10 10v698q0 10 10 10h51q10 0 10 -8v-326q0 -47 40 -79.5t95 -32.5q56 0 98 32.5t42 79.5v324q0 10 10 10h50q10 0 10 -10z" />
|
||||
<glyph glyph-name="paragraph" unicode="¶"
|
||||
d="M512 698v-854q0 -10 -10 -10h-51q-10 0 -10 10v799h-71v-799q0 -10 -10 -10h-51q-10 0 -10 10v440q-109 0 -161.5 52t-52.5 162q0 107 52.5 158.5t160.5 51.5h204q10 0 10 -10z" />
|
||||
<glyph glyph-name="periodcentered" unicode="·"
|
||||
d="M415 367q0 -47 -33.5 -79t-82.5 -32q-48 0 -81.5 32.5t-33.5 78.5t33.5 78.5t81.5 32.5q49 0 82.5 -32t33.5 -79z" />
|
||||
<glyph glyph-name="cedilla" unicode="¸"
|
||||
d="M411 -115q0 -37 -30 -61t-75 -24q-50 0 -99 21q-6 3 -6 9q0 2 2 6l10 20q4 6 9 5q37 -13 74 -13q53 0 53 37t-53 37q-8 0 -19 -1.5t-16 -1.5q-4 0 -7 3t-2 7l33 81h35l-21 -51q15 4 33 4q33 0 56 -22.5t23 -55.5z" />
|
||||
<glyph glyph-name="onesuperior" unicode="¹"
|
||||
d="M445 303v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7z" />
|
||||
<glyph glyph-name="ordmasculine" unicode="º"
|
||||
d="M481 502q0 -41 -2 -66t-12 -57.5t-28.5 -50t-53.5 -30t-86 -12.5t-86 12.5t-53.5 30t-28.5 50t-12 57.5t-2 66t2 66t12 57.5t28.5 50t53.5 30t86 12.5t86 -12.5t53.5 -30t28.5 -50t12 -57.5t2 -66zM481 221v-44q0 -10 -10 -10h-344q-10 0 -10 10v44q0 10 10 10h344
|
||||
q10 0 10 -10zM417 493v18q0 28 -0.5 41.5t-3.5 35t-10.5 31.5t-20.5 21t-33.5 15.5t-49.5 4.5t-49.5 -4.5t-33.5 -15.5t-20.5 -21t-10.5 -31.5t-3.5 -35t-0.5 -41.5v-18q0 -24 0.5 -36t2.5 -31.5t6.5 -28.5t12.5 -21.5t20.5 -18.5t31.5 -10t44 -4t44 4t31.5 10t20.5 18.5
|
||||
t12.5 21.5t6.5 28.5t2.5 31.5t0.5 36z" />
|
||||
<glyph glyph-name="guillemotright" unicode="»"
|
||||
d="M241 254l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -4 2 -6t-2 -6l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6zM420 254l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -4 2 -6t-2 -6l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6z" />
|
||||
<glyph glyph-name="onequarter" unicode="¼"
|
||||
d="M572 -28v-42q0 -7 -6 -7h-46v-95q0 -6 -6 -6h-45q-7 0 -7 6v95h-189q-6 0 -6 7v39q0 3 1 5l173 298q2 3 6 3h67q6 0 6 -6v-291h46q6 0 6 -6zM462 201l-129 -223h129v223zM320 429v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2
|
||||
l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7zM557 441l14 -31q1 -2 1 -4q0 -6 -6 -9l-485 -225q-1 -1 -4 -1q-7 0 -9 5l-14 31q-1 2 -1 4q0 7 5 9l486 225q2 1 5 1q6 0 8 -5z" />
|
||||
<glyph glyph-name="onehalf" unicode="½"
|
||||
d="M572 -131v-41q0 -6 -6 -6h-264q-7 0 -7 6q1 79 15.5 110.5t62.5 67.5q14 11 45 29.5t48.5 30.5t33 35t15.5 50q0 72 -77 72q-43 0 -63 -18t-22 -61q0 -6 -7 -6h-44q-6 0 -6 6q6 134 142 134q61 0 97.5 -32.5t36.5 -94.5q0 -70 -53 -112q-24 -19 -73 -49t-69.5 -53.5
|
||||
t-22.5 -61.5h212q6 0 6 -6zM320 429v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7zM557 441l14 -31q1 -2 1 -4q0 -6 -6 -9l-485 -225q-1 -1 -4 -1q-7 0 -9 5
|
||||
l-14 31q-1 2 -1 4q0 7 5 9l486 225q2 1 5 1q6 0 8 -5z" />
|
||||
<glyph glyph-name="threequarters" unicode="¾"
|
||||
d="M572 -30v-41q0 -6 -6 -6h-47v-95q0 -6 -6 -6h-44q-7 0 -7 6v95h-191q-7 0 -7 6v39q0 2 1 3l177 297q2 3 6 3h65q6 0 6 -6v-289h47q6 0 6 -6zM462 198l-133 -222h133v222zM336 506q0 -70 -39 -102.5t-102 -32.5q-60 0 -98.5 28.5t-43.5 90.5q0 6 7 6h45q6 0 7 -5
|
||||
q10 -65 83 -65q36 0 60 20.5t24 59.5q0 80 -84 80h-12q-6 0 -6 6v42q0 6 6 6h12q78 0 78 71q0 41 -19 56.5t-59 15.5q-38 0 -57.5 -13.5t-21.5 -49.5q0 -6 -6 -6h-46q-6 0 -6 6q6 118 137 118q136 0 136 -127q0 -74 -55 -97q60 -22 60 -108zM557 441l14 -31q1 -2 1 -4
|
||||
q0 -6 -6 -9l-485 -225q-1 -1 -4 -1q-7 0 -9 5l-14 31q-1 2 -1 4q0 7 5 9l486 225q2 1 5 1q6 0 8 -5z" />
|
||||
<glyph glyph-name="questiondown" unicode="¿"
|
||||
d="M377 532v-95q0 -10 -10 -10h-90q-10 0 -10 10v95q0 10 10 10h90q10 0 10 -10zM504 42q-1 -46 -9.5 -81t-29.5 -68t-63 -51t-103 -18q-39 0 -73 8.5t-65.5 28t-49.5 58t-18 92.5q0 76 26 114t106 90q41 27 51 43.5t10 59.5q0 10 10 10h51q10 0 10 -10q-1 -62 -17 -90.5
|
||||
t-74 -64.5q-66 -42 -84 -68t-18 -84q0 -63 33 -92.5t102 -29.5q80 0 106.5 39t27.5 114q0 10 10 10h50q11 0 11 -10z" />
|
||||
<glyph glyph-name="Agrave" unicode="À"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15zM284 886l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46
|
||||
q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="Aacute" unicode="Á"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15zM419 879v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127
|
||||
q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="Acircumflex" unicode="Â"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15zM359 885l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69
|
||||
q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="Atilde" unicode="Ã"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15zM475 879q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5
|
||||
q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="Adieresis" unicode="Ä"
|
||||
d="M361 700l176 -688q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-47q-5 0 -8 4t-2 8l175 688q2 8 10 8h105q8 0 10 -8zM291 653l-97 -380h208l-96 380h-15zM447 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 879
|
||||
v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="Aring" unicode="Å"
|
||||
d="M368 675l169 -663q1 -4 -2 -8t-8 -4h-48q-8 0 -10 8l-50 200h-241l-50 -200q-2 -8 -10 -8h-48q-5 0 -8 4t-2 8l169 662q-46 33 -46 90q0 46 33.5 78.5t81.5 32.5q49 0 82.5 -32t33.5 -79q0 -56 -46 -89zM365 764q0 27 -19.5 45.5t-47.5 18.5t-47.5 -18.5t-19.5 -45.5
|
||||
t19.5 -45t47.5 -18t47.5 18t19.5 45zM291 653l-97 -380h208l-96 380h-15z" />
|
||||
<glyph glyph-name="AE" unicode="Æ"
|
||||
d="M523 55v-45q0 -10 -10 -10h-228q-10 0 -10 10v201h-121l-52 -203q-2 -8 -10 -8h-46q-5 0 -8 4t-2 8l175 688q2 8 10 8h292q10 0 10 -10v-45q0 -10 -10 -10h-167v-246h137q10 0 10 -10v-45q0 -10 -10 -10h-137v-267h167q10 0 10 -10zM266 653l-96 -377h105v377h-9z" />
|
||||
<glyph glyph-name="Ccedilla" unicode="Ç"
|
||||
d="M409 -115q0 -37 -30 -61t-75 -24q-50 0 -99 21q-6 3 -6 9q0 2 2 6l10 20q4 6 9 5q37 -13 74 -13q53 0 53 37t-53 37q-8 0 -19 -1.5t-16 -1.5q-4 0 -7 3t-2 7l25 62q-190 18 -190 251v224q0 252 219 252q105 0 161 -43t58 -156q0 -10 -10 -10h-51q-10 0 -10 10
|
||||
q-1 80 -34 107t-114 27q-78 0 -113 -51.5t-35 -165.5v-164q0 -121 36 -169.5t118 -48.5q73 0 106.5 32.5t35.5 102.5q0 10 10 10h51q10 0 10 -10q-4 -200 -213 -200h-1l-12 -30q15 4 33 4q33 0 56 -22.5t23 -55.5z" />
|
||||
<glyph glyph-name="Egrave" unicode="È"
|
||||
d="M509 55v-45q0 -10 -10 -10h-388q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-327v-246h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-267h327q10 0 10 -10zM284 886l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10
|
||||
h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="Eacute" unicode="É"
|
||||
d="M509 55v-45q0 -10 -10 -10h-388q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-327v-246h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-267h327q10 0 10 -10zM419 879v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88
|
||||
q10 0 10 -10z" />
|
||||
<glyph glyph-name="Ecircumflex" unicode="Ê"
|
||||
d="M509 55v-45q0 -10 -10 -10h-388q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-327v-246h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-267h327q10 0 10 -10zM359 885l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50
|
||||
q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="Edieresis" unicode="Ë"
|
||||
d="M509 55v-45q0 -10 -10 -10h-388q-10 0 -10 10v688q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-327v-246h301q10 0 10 -10v-45q0 -10 -10 -10h-301v-267h327q10 0 10 -10zM447 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 879v-81
|
||||
q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="Igrave" unicode="Ì"
|
||||
d="M512 55v-45q0 -10 -10 -10h-407q-10 0 -10 10v45q0 10 10 10h168v578h-168q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10v-45q0 -10 -10 -10h-168v-578h168q10 0 10 -10zM284 886l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88
|
||||
q4 0 7 -3z" />
|
||||
<glyph glyph-name="Iacute" unicode="Í"
|
||||
d="M512 55v-45q0 -10 -10 -10h-407q-10 0 -10 10v45q0 10 10 10h168v578h-168q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10v-45q0 -10 -10 -10h-168v-578h168q10 0 10 -10zM419 879v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88
|
||||
q10 0 10 -10z" />
|
||||
<glyph glyph-name="Icircumflex" unicode="Î"
|
||||
d="M512 55v-45q0 -10 -10 -10h-407q-10 0 -10 10v45q0 10 10 10h168v578h-168q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10v-45q0 -10 -10 -10h-168v-578h168q10 0 10 -10zM359 885l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50
|
||||
q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="Idieresis" unicode="Ï"
|
||||
d="M512 55v-45q0 -10 -10 -10h-407q-10 0 -10 10v45q0 10 10 10h168v578h-168q-10 0 -10 10v45q0 10 10 10h407q10 0 10 -10v-45q0 -10 -10 -10h-168v-578h168q10 0 10 -10zM447 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 879v-81
|
||||
q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="Eth" unicode="Ð"
|
||||
d="M530 412v-116q0 -73 -13.5 -126.5t-36.5 -85.5t-57.5 -51.5t-71 -26t-83.5 -6.5h-125q-10 0 -10 10v300h-99q-10 0 -10 10v45q0 10 10 10h99v323q0 10 10 10h125q47 0 83.5 -6.5t71 -26t57.5 -51.5t36.5 -85.5t13.5 -126.5zM459 354q0 99 -12 155.5t-40 88.5
|
||||
q-39 45 -164 45h-39v-268h135q10 0 10 -10v-45q0 -10 -10 -10h-135v-245h39q67 0 105 9.5t59 34.5q52 59 52 245z" />
|
||||
<glyph glyph-name="Ntilde" unicode="Ñ"
|
||||
d="M510 698v-688q0 -10 -10 -10h-69q-6 0 -9 6l-265 579v-575q0 -10 -10 -10h-49q-10 0 -10 10v688q0 10 10 10h71q6 0 9 -6l263 -577v573q0 10 10 10h49q10 0 10 -10zM475 879q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35
|
||||
q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="Ograve" unicode="Ò"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5zM284 886l120 -127q3 -3 3 -6
|
||||
q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="Oacute" unicode="Ó"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5zM419 879v-46q0 -6 -5 -9
|
||||
l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="Ocircumflex" unicode="Ô"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5zM359 885l107 -127q2 -4 2 -6
|
||||
q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="Otilde" unicode="Õ"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5zM475 879q0 -1 -1 -3v-2
|
||||
q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="Odieresis" unicode="Ö"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v288q0 116 60 168t158 52t157.5 -52t59.5 -168zM446 210v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5zM447 879v-81q0 -10 -10 -10h-78
|
||||
q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="multiply" unicode="×"
|
||||
d="M490 118l-32 -31q-3 -3 -7 -3t-7 3l-145 145l-145 -145q-3 -3 -7 -3t-7 3l-32 31q-3 3 -3 7t3 7l145 145l-146 146q-3 3 -3 7t3 7l33 31q3 3 7 3t7 -3l145 -145l145 145q3 3 7 3t7 -3l32 -31q3 -3 3 -7t-3 -7l-145 -146l145 -145q3 -3 3 -7t-3 -7z" />
|
||||
<glyph glyph-name="Oslash" unicode="Ø"
|
||||
d="M516 498v-288q0 -116 -59.5 -168.5t-157.5 -52.5q-69 0 -122 27l-34 -74q-4 -9 -13 -5l-32 15q-9 4 -5 13l40 84q-52 57 -52 161v288q0 116 60 168t158 52q79 0 131 -31l28 60q4 9 13 5l31 -15q9 -4 5 -13l-35 -74q44 -55 44 -152zM167 122l234 504q-32 27 -102 27
|
||||
q-75 0 -111 -35.5t-36 -119.5v-288q0 -55 15 -88zM446 210v288q0 41 -10 74l-231 -496q35 -22 94 -22q75 0 111 35.5t36 120.5z" />
|
||||
<glyph glyph-name="Ugrave" unicode="Ù"
|
||||
d="M516 698v-488q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v488q0 10 10 10h51q10 0 10 -10v-488q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5v488q0 10 10 10h50q10 0 10 -10zM284 886l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9
|
||||
v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="Uacute" unicode="Ú"
|
||||
d="M516 698v-488q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v488q0 10 10 10h51q10 0 10 -10v-488q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5v488q0 10 10 10h50q10 0 10 -10zM419 879v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6
|
||||
l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="Ucircumflex" unicode="Û"
|
||||
d="M516 698v-488q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v488q0 10 10 10h51q10 0 10 -10v-488q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5v488q0 10 10 10h50q10 0 10 -10zM359 885l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69
|
||||
q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="Udieresis" unicode="Ü"
|
||||
d="M516 698v-488q0 -116 -59.5 -168.5t-157.5 -52.5t-158 52.5t-60 168.5v488q0 10 10 10h51q10 0 10 -10v-488q0 -85 36 -120.5t111 -35.5t111 35.5t36 120.5v488q0 10 10 10h50q10 0 10 -10zM447 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z
|
||||
M248 879v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="Yacute" unicode="Ý"
|
||||
d="M534 694l-199 -406v-278q0 -10 -10 -10h-51q-10 0 -10 10v278l-200 406q-2 5 1 9.5t8 4.5h51q6 0 9 -6l166 -343l167 343q3 6 9 6h50q5 0 8 -4.5t1 -9.5zM419 879v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="Thorn" unicode="Þ"
|
||||
d="M526 356q0 -110 -52.5 -162t-160.5 -52h-143v-132q0 -10 -10 -10h-51q-10 0 -10 10v688q0 10 10 10h51q10 0 10 -10v-132h143q108 0 160.5 -51.5t52.5 -158.5zM455 356q0 81 -34.5 113t-107.5 32h-143v-294h143q75 0 108.5 32.5t33.5 116.5z" />
|
||||
<glyph glyph-name="germandbls" unicode="ß"
|
||||
d="M526 211q0 -118 -51 -170t-135 -52q-43 0 -79 15q-6 3 -6 9v40q0 5 3 8t7 2q49 -11 83 -11q61 0 84 41t23 118q0 90 -33.5 122.5t-139.5 33.5q-10 0 -10 10v46q0 10 10 10q59 1 88.5 22.5t29.5 87.5q0 110 -115 110t-115 -110v-533q0 -10 -10 -10h-51q-10 0 -10 10v533
|
||||
q0 80 46 127.5t140 47.5q87 0 136 -46.5t49 -128.5q0 -59 -23 -91.5t-47 -39.5q16 -1 35 -10t40.5 -29.5t36 -62.5t14.5 -99z" />
|
||||
<glyph glyph-name="agrave" unicode="à"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="aacute" unicode="á"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="acircumflex" unicode="â"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="atilde" unicode="ã"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM475 698q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5
|
||||
q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="adieresis" unicode="ä"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="aring" unicode="å"
|
||||
d="M513 362v-352q0 -10 -10 -10h-51q-10 0 -10 10v21q-55 -42 -127 -42q-210 0 -210 161q0 162 210 162q32 0 64 -5t46 -8.5t17 -5.5v69q0 44 -28.5 64t-98.5 20q-62 0 -93.5 -16.5t-34.5 -57.5q0 -10 -10 -10h-50q-11 0 -11 10q5 137 199 137q108 0 153 -37.5t45 -109.5z
|
||||
M442 95v135q-7 6 -43 12.5t-84 6.5q-139 0 -139 -99q0 -53 34 -75.5t105 -22.5q43 0 77.5 13t49.5 30zM414 672q0 -47 -33.5 -79t-82.5 -32q-48 0 -81.5 32.5t-33.5 78.5t33.5 78.5t81.5 32.5q49 0 82.5 -32t33.5 -79zM365 672q0 27 -19.5 45.5t-47.5 18.5t-47.5 -18.5
|
||||
t-19.5 -45.5t19.5 -45t47.5 -18t47.5 18t19.5 45z" />
|
||||
<glyph glyph-name="ae" unicode="æ"
|
||||
d="M544 140q-3 -78 -43.5 -114.5t-96.5 -36.5q-80 0 -105 49q-35 -49 -99 -49q-24 0 -47 6.5t-46.5 22t-38 48.5t-14.5 80q0 38 11.5 67t28 44t38.5 24t37.5 11t30.5 2h64v68q0 84 -64 84q-61 0 -64 -74q0 -10 -10 -10h-51q-10 0 -10 10q2 67 37.5 102t97.5 35q74 0 99 -46
|
||||
q36 46 105 46q81 0 110.5 -47.5t29.5 -150.5v-67q0 -10 -10 -10h-200v-86q0 -44 17.5 -70t52.5 -26q33 0 50 24.5t19 63.5q0 10 10 10h51q10 0 10 -10zM334 362v-68h139v68q0 84 -69 84q-36 0 -53 -23.5t-17 -60.5zM264 148v86h-64q-33 0 -54 -25.5t-21 -60.5
|
||||
q0 -52 16.5 -74t58.5 -22q38 0 51 21.5t13 74.5z" />
|
||||
<glyph glyph-name="ccedilla" unicode="ç"
|
||||
d="M407 -115q0 -37 -30 -61t-75 -24q-50 0 -99 21q-6 3 -6 9q0 2 2 6l10 20q4 6 9 5q37 -13 74 -13q53 0 53 37t-53 37q-8 0 -19 -1.5t-16 -1.5q-4 0 -7 3t-2 7l25 61q-51 3 -87 18t-55.5 36t-30.5 56.5t-13.5 67.5t-2.5 81q0 53 4 89.5t17.5 71.5t37 55t63 32t96.5 12
|
||||
q105 0 156 -37.5t53 -113.5q0 -10 -10 -10h-51q-10 0 -10 10q-6 88 -138 88q-41 0 -68 -8t-43 -21t-24 -40t-10 -54t-2 -74t2.5 -74.5t10.5 -54t24 -39.5t42.5 -21t67.5 -8q79 0 108.5 24t31.5 72q0 10 10 10h51q10 0 10 -10q-2 -77 -50.5 -117.5t-155.5 -41.5l-12 -30
|
||||
q15 4 33 4q33 0 56 -22.5t23 -55.5z" />
|
||||
<glyph glyph-name="egrave" unicode="è"
|
||||
d="M517 249v-5q0 -10 -10 -10h-355q0 -38 2 -60.5t10 -48.5t24 -40t45 -23.5t71 -9.5q133 0 138 88q0 10 10 10h50q10 0 10 -10q-6 -151 -208 -151q-72 0 -118 17.5t-68 55t-29.5 79.5t-7.5 108q0 71 8.5 116t32 79.5t66.5 49.5t111 15q56 0 95.5 -11.5t63.5 -31.5t37 -54.5
|
||||
t17.5 -71.5t4.5 -91zM152 294h294q-2 83 -31 117.5t-116 34.5q-85 0 -115 -34.5t-32 -117.5zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="eacute" unicode="é"
|
||||
d="M517 249v-5q0 -10 -10 -10h-355q0 -38 2 -60.5t10 -48.5t24 -40t45 -23.5t71 -9.5q133 0 138 88q0 10 10 10h50q10 0 10 -10q-6 -151 -208 -151q-72 0 -118 17.5t-68 55t-29.5 79.5t-7.5 108q0 71 8.5 116t32 79.5t66.5 49.5t111 15q56 0 95.5 -11.5t63.5 -31.5t37 -54.5
|
||||
t17.5 -71.5t4.5 -91zM152 294h294q-2 83 -31 117.5t-116 34.5q-85 0 -115 -34.5t-32 -117.5zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="ecircumflex" unicode="ê"
|
||||
d="M517 249v-5q0 -10 -10 -10h-355q0 -38 2 -60.5t10 -48.5t24 -40t45 -23.5t71 -9.5q133 0 138 88q0 10 10 10h50q10 0 10 -10q-6 -151 -208 -151q-72 0 -118 17.5t-68 55t-29.5 79.5t-7.5 108q0 71 8.5 116t32 79.5t66.5 49.5t111 15q56 0 95.5 -11.5t63.5 -31.5t37 -54.5
|
||||
t17.5 -71.5t4.5 -91zM152 294h294q-2 83 -31 117.5t-116 34.5q-85 0 -115 -34.5t-32 -117.5zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="edieresis" unicode="ë"
|
||||
d="M517 249v-5q0 -10 -10 -10h-355q0 -38 2 -60.5t10 -48.5t24 -40t45 -23.5t71 -9.5q133 0 138 88q0 10 10 10h50q10 0 10 -10q-6 -151 -208 -151q-72 0 -118 17.5t-68 55t-29.5 79.5t-7.5 108q0 71 8.5 116t32 79.5t66.5 49.5t111 15q56 0 95.5 -11.5t63.5 -31.5t37 -54.5
|
||||
t17.5 -71.5t4.5 -91zM152 294h294q-2 83 -31 117.5t-116 34.5q-85 0 -115 -34.5t-32 -117.5zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="igrave" unicode="ì"
|
||||
d="M537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="iacute" unicode="í"
|
||||
d="M537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="icircumflex" unicode="î"
|
||||
d="M537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6
|
||||
l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="idieresis" unicode="ï"
|
||||
d="M537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10
|
||||
v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="eth" unicode="ð"
|
||||
d="M570 651l8 -33q2 -11 -7 -13l-82 -22q28 -73 28 -244v-90q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15q91 0 141 -31q0 49 -15 87l-102 -27q-11 -2 -13 7l-8 33
|
||||
q-2 11 7 13l82 22q-47 40 -158 40q-10 0 -10 10v45q0 10 10 10q166 -1 229 -86l95 26q11 2 13 -7zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10
|
||||
t43.5 23t22.5 42t8.5 49t1 62z" />
|
||||
<glyph glyph-name="ntilde" unicode="ñ"
|
||||
d="M507 348v-338q0 -10 -10 -10h-50q-10 0 -10 10v333q0 61 -32.5 82t-101.5 21q-56 0 -98.5 -32.5t-42.5 -79.5v-324q0 -10 -10 -10h-51q-10 0 -10 10v478q0 10 10 10h51q10 0 10 -10v-42q49 63 137 63h11q26 0 43 -1t43 -5.5t43 -15t34 -27.5t25.5 -45.5t8.5 -66.5z
|
||||
M475 698q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="ograve" unicode="ò"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="oacute" unicode="ó"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="ocircumflex" unicode="ô"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127
|
||||
q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="otilde" unicode="õ"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62zM475 698q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30
|
||||
q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="odieresis" unicode="ö"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15t-103 15t-64.5 36t-34 59.5t-14 68.5t-2.5 81t2.5 81t14 68.5t34 59.5t64.5 36t103 15t103 -15t64.5 -36t34 -59.5t14 -68.5t2.5 -81zM446 238v22q0 42 -1 62t-8.5 49t-22.5 42t-43.5 23t-71.5 10
|
||||
t-71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22q0 -42 1 -62t8.5 -49t22.5 -42t43.5 -23t71.5 -10t71.5 10t43.5 23t22.5 42t8.5 49t1 62zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81
|
||||
q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="divide" unicode="÷"
|
||||
d="M361 516v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM526 300v-45q0 -10 -10 -10h-435q-10 0 -10 10v45q0 10 10 10h435q10 0 10 -10zM361 149v-111q0 -10 -10 -10h-105q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="oslash" unicode="ø"
|
||||
d="M517 249q0 -51 -2.5 -81t-14 -68.5t-34 -59.5t-64.5 -36t-103 -15q-71 0 -115 18l-40 -65q-3 -5 -9 -5q-3 0 -5 1l-29 18q-5 3 -5 9q0 3 1 5l40 66q-36 32 -46 82.5t-10 130.5q0 51 2.5 81t14 68.5t34 59.5t64.5 36t103 15q67 0 112 -17l39 65q3 5 9 5q3 0 5 -1l29 -18
|
||||
q5 -3 5 -7q0 -2 -2 -6l-38 -65q38 -32 48.5 -83t10.5 -133zM446 238v22q0 39 -1 58.5t-6.5 44.5t-17.5 41l-203 -340q30 -12 81 -12q43 0 71.5 10t43.5 23t22.5 42t8.5 49t1 62zM174 98l202 337q-31 11 -77 11q-43 0 -71.5 -10t-43.5 -23t-22.5 -42t-8.5 -49t-1 -62v-22
|
||||
q0 -38 1 -57t6 -43t15 -40z" />
|
||||
<glyph glyph-name="ugrave" unicode="ù"
|
||||
d="M502 488v-303q0 -64 -16.5 -105.5t-48.5 -60t-63 -24.5t-76 -6t-76 6t-63 24.5t-48.5 60t-16.5 105.5v303q0 10 10 10h51q10 0 10 -10v-303q0 -73 27.5 -103t105.5 -30t105.5 30t27.5 103v303q0 10 10 10h51q10 0 10 -10zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53
|
||||
q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="uacute" unicode="ú"
|
||||
d="M502 488v-303q0 -64 -16.5 -105.5t-48.5 -60t-63 -24.5t-76 -6t-76 6t-63 24.5t-48.5 60t-16.5 105.5v303q0 10 10 10h51q10 0 10 -10v-303q0 -73 27.5 -103t105.5 -30t105.5 30t27.5 103v303q0 10 10 10h51q10 0 10 -10zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1
|
||||
h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="ucircumflex" unicode="û"
|
||||
d="M502 488v-303q0 -64 -16.5 -105.5t-48.5 -60t-63 -24.5t-76 -6t-76 6t-63 24.5t-48.5 60t-16.5 105.5v303q0 10 10 10h51q10 0 10 -10v-303q0 -73 27.5 -103t105.5 -30t105.5 30t27.5 103v303q0 10 10 10h51q10 0 10 -10zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51
|
||||
q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="udieresis" unicode="ü"
|
||||
d="M502 488v-303q0 -64 -16.5 -105.5t-48.5 -60t-63 -24.5t-76 -6t-76 6t-63 24.5t-48.5 60t-16.5 105.5v303q0 10 10 10h51q10 0 10 -10v-303q0 -73 27.5 -103t105.5 -30t105.5 30t27.5 103v303q0 10 10 10h51q10 0 10 -10zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81
|
||||
q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="yacute" unicode="ý"
|
||||
d="M514 484l-233 -622q-34 -93 -121 -93q-33 0 -63 5q-12 2 -10 10l6 41q2 10 10 10q30 -3 40 -3q34 0 52.5 14t37.5 65l32 89l-182 484q-2 5 1 9.5t8 4.5h52q7 0 9 -7l147 -393l143 393q2 7 9 7h53q5 0 8 -4.5t1 -9.5zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53
|
||||
q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="thorn" unicode="þ"
|
||||
d="M521 249q0 -69 -7.5 -114t-29 -80t-62 -50.5t-103.5 -15.5q-88 0 -143 55v-254q0 -10 -10 -10h-51q-10 0 -10 10v908q0 10 10 10h51q10 0 10 -10v-238q49 49 137 49q125 0 166.5 -59t41.5 -201zM450 249q0 45 -2 72.5t-10 54t-22.5 40t-40 22t-62.5 8.5q-138 0 -138 -120
|
||||
v-153q0 -54 34.5 -87.5t103.5 -33.5q87 0 112 39t25 158z" />
|
||||
<glyph glyph-name="ydieresis" unicode="ÿ"
|
||||
d="M514 484l-233 -622q-34 -93 -121 -93q-33 0 -63 5q-12 2 -10 10l6 41q2 10 10 10q30 -3 40 -3q34 0 52.5 14t37.5 65l32 89l-182 484q-2 5 1 9.5t8 4.5h52q7 0 9 -7l147 -393l143 393q2 7 9 7h53q5 0 8 -4.5t1 -9.5zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81
|
||||
q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="CR" horiz-adv-x="0"
|
||||
/>
|
||||
<glyph glyph-name="uni00A0"
|
||||
/>
|
||||
<glyph glyph-name="fraction"
|
||||
d="M455 695l-247 -688q-2 -7 -9 -7h-48q-5 0 -8 4t-1 9l249 688q2 7 9 7h46q5 0 8 -4t1 -9z" />
|
||||
<glyph glyph-name="breve"
|
||||
d="M468 698q-6 -137 -169 -137t-169 137q0 10 10 10h41q9 0 9 -10q7 -76 109 -76t109 76q0 10 9 10h41q10 0 10 -10z" />
|
||||
<glyph glyph-name="dotaccent"
|
||||
d="M342 698v-73q0 -10 -10 -10h-67q-10 0 -10 10v73q0 10 10 10h67q10 0 10 -10z" />
|
||||
<glyph glyph-name="ring"
|
||||
d="M414 672q0 -47 -33.5 -79t-82.5 -32q-48 0 -81.5 32.5t-33.5 78.5t33.5 78.5t81.5 32.5q49 0 82.5 -32t33.5 -79zM365 672q0 27 -19.5 45.5t-47.5 18.5t-47.5 -18.5t-19.5 -45.5t19.5 -45t47.5 -18t47.5 18t19.5 45z" />
|
||||
<glyph glyph-name="hungarumlaut"
|
||||
d="M550 698v-46q0 -6 -5 -9l-125 -80q-4 -2 -5 -2h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h58q10 0 10 -10zM372 698v-46q0 -6 -5 -9l-125 -80q-4 -2 -5 -2h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h58q10 0 10 -10z" />
|
||||
<glyph glyph-name="ogonek"
|
||||
d="M357 -140v-50q0 -10 -10 -10h-32q-110 0 -110 82q0 34 19.5 61.5t65.5 66.5h39q-60 -53 -60 -102q0 -21 10.5 -29.5t36.5 -8.5h31q10 0 10 -10z" />
|
||||
<glyph glyph-name="caron"
|
||||
d="M466 692l-107 -127q-4 -4 -8 -4h-103q-4 0 -8 4l-107 127q-2 4 -2 6q0 10 10 10h50q2 0 6 -2l102 -69l102 69q4 2 6 2h51q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="dotlessi"
|
||||
d="M537 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v378h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-428h175q10 0 10 -10z" />
|
||||
<glyph glyph-name="dotlessj"
|
||||
d="M368 488v-564q0 -74 -51.5 -114.5t-135.5 -40.5q-87 0 -135 38t-51 107q0 10 11 10h45q9 0 9 -10q5 -82 121 -82t116 92v514h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10z" />
|
||||
<glyph glyph-name="Lslash"
|
||||
d="M511 55v-45q0 -10 -10 -10h-309q-10 0 -10 10v288l-155 -41q-4 -1 -8.5 2t-4.5 8v47q0 8 7 10l161 44v330q0 10 10 10h51q10 0 10 -10v-312l156 43q4 1 8.5 -2t4.5 -8v-47q0 -8 -7 -10l-162 -44v-253h248q10 0 10 -10z" />
|
||||
<glyph glyph-name="lslash"
|
||||
d="M531 50v-40q0 -10 -10 -10h-426q-10 0 -10 10v40q0 10 10 10h180v240l-158 -42q-4 -1 -8.5 2t-4.5 8v46q0 8 7 10l164 44v280h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-311l153 42q4 1 8.5 -2t4.5 -8v-47q0 -8 -7 -10l-159 -43v-259h175q10 0 10 -10z" />
|
||||
<glyph glyph-name="Zcaron"
|
||||
d="M514 55v-45q0 -10 -10 -10h-410q-10 0 -10 10v52q0 3 1 5l353 576h-333q-10 0 -10 10v45q0 10 10 10h399q10 0 10 -10v-53q0 -3 -1 -5l-352 -575h343q10 0 10 -10zM466 873l-107 -127q-4 -4 -8 -4h-103q-4 0 -8 4l-107 127q-2 4 -2 6q0 10 10 10h50q2 0 6 -2l102 -69
|
||||
l102 69q4 2 6 2h51q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="zcaron"
|
||||
d="M505 50v-40q0 -10 -10 -10h-385q-10 0 -10 10v45q0 5 2 7l320 376h-304q-10 0 -10 10v40q0 10 10 10h377q10 0 10 -10v-45q0 -5 -2 -7l-320 -376h312q10 0 10 -10zM466 692l-107 -127q-4 -4 -8 -4h-103q-4 0 -8 4l-107 127q-2 4 -2 6q0 10 10 10h50q2 0 6 -2l102 -69
|
||||
l102 69q4 2 6 2h51q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="quotedblright"
|
||||
d="M463 697l-31 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h101q5 0 8 -3.5t2 -7.5zM256 697l-30 -292q-2 -9 -10 -9h-39q-8 0 -10 9l-31 292q-1 4 2 7.5t8 3.5h100q5 0 8 -3.5t2 -7.5z" />
|
||||
<glyph glyph-name="uni2117"
|
||||
d="M598 379v-50q0 -124 -87.5 -211.5t-211.5 -87.5t-211.5 87.5t-87.5 211.5v50q0 124 87.5 211.5t211.5 87.5t211.5 -87.5t87.5 -211.5zM541 329v50q0 101 -70.5 171.5t-171.5 70.5t-171.5 -70.5t-70.5 -171.5v-50q0 -101 70.5 -171.5t171.5 -70.5t171.5 70.5t70.5 171.5z
|
||||
M324 317h-65v-141q0 -10 -10 -10h-38q-10 0 -10 10v356q0 10 10 10h113q113 0 113 -112q0 -58 -28 -85.5t-85 -27.5zM259 371h65q59 0 59 59q0 58 -59 58h-65v-117z" />
|
||||
<glyph glyph-name="Euro"
|
||||
d="M139 299v51h-83q-5 0 -8.5 4t-1.5 9l12 37q2 7 9 7h72v59q0 252 219 252q146 0 192 -80q2 -4 2 -6q0 -5 -4 -8l-43 -28q-4 -2 -6 -2q-6 0 -8 5q-14 31 -45.5 42.5t-87.5 11.5q-78 0 -113 -51.5t-35 -165.5v-29h235q5 0 8.5 -4t1.5 -9l-12 -37q-2 -7 -9 -7h-224v-51h199
|
||||
q5 0 8.5 -4t1.5 -9l-11 -37q-2 -7 -9 -7h-188q4 -104 40.5 -146t112.5 -42q93 0 125 58q4 6 9 6q1 0 5 -2l43 -27q5 -3 5 -9q0 -3 -2 -7q-51 -84 -185 -84q-106 0 -165.5 61t-59.5 192h-83q-5 0 -8.5 4t-1.5 9l12 37q2 7 9 7h72z" />
|
||||
<glyph glyph-name="minus"
|
||||
d="M496 300v-45q0 -10 -10 -10h-375q-10 0 -10 10v45q0 10 10 10h375q10 0 10 -10z" />
|
||||
<glyph glyph-name="notequal"
|
||||
d="M526 235v-45q0 -10 -10 -10h-216l-63 -173q-2 -7 -9 -7h-48q-5 0 -8 4t-1 9l61 167h-151q-10 0 -10 10v45q0 10 10 10h175l23 65h-198q-10 0 -10 10v45q0 10 10 10h222l62 173q2 7 9 7h47q5 0 8 -4t1 -9l-59 -167h145q10 0 10 -10v-45q0 -10 -10 -10h-169l-23 -65h192
|
||||
q10 0 10 -10z" />
|
||||
<glyph glyph-name="lessequal"
|
||||
d="M485 165v-55q0 -9 -10 -9q-4 0 -5 1l-353 204q-5 3 -5 9v53q0 6 5 9l353 205q1 1 5 1q10 0 10 -9v-55q0 -6 -5 -9l-303 -168l303 -168q5 -3 5 -9zM485 50v-40q0 -10 -10 -10h-353q-10 0 -10 10v40q0 10 10 10h353q10 0 10 -10z" />
|
||||
<glyph glyph-name="greaterequal"
|
||||
d="M485 368v-53q0 -6 -5 -9l-353 -204q-1 -1 -5 -1q-10 0 -10 9v55q0 6 5 9l303 168l-303 168q-5 3 -5 9v55q0 9 10 9q4 0 5 -1l353 -205q5 -3 5 -9zM485 50v-40q0 -10 -10 -10h-353q-10 0 -10 10v40q0 10 10 10h353q10 0 10 -10z" />
|
||||
<glyph glyph-name="approxequal"
|
||||
d="M475 256q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10zM475 380q0 -1 -1 -3v-2
|
||||
q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="infinity"
|
||||
d="M417 424q-57 0 -77 -51l-12 -31l12 -31q20 -51 77 -51q34 0 58 24t24 58t-23.5 58t-58.5 24zM180 424q-34 0 -58 -24t-24 -58t24 -58t58 -24q57 0 77 51l12 31l-12 31q-20 51 -77 51zM417 196q-41 0 -69.5 17.5t-49.5 61.5q-21 -44 -49.5 -61.5t-68.5 -17.5
|
||||
q-60 0 -103 42.5t-43 103.5q0 62 42 104t104 42q41 0 69.5 -17.5t49.5 -61.5q21 44 49.5 61.5t68.5 17.5q61 0 103.5 -42t42.5 -104q0 -61 -43 -103.5t-103 -42.5z" />
|
||||
<glyph glyph-name="partialdiff"
|
||||
d="M420 258q0 18 -7 38t-22 40.5t-46 33.5t-73 13q-34 0 -57 -8.5t-36 -22t-20 -36.5t-9 -43.5t-2 -52.5q0 -33 1.5 -54t8.5 -45t19.5 -37.5t36 -22.5t57.5 -9q45 0 75.5 15.5t46 45.5t21.5 64.5t6 80.5zM261 717q84 -4 137.5 -47t74.5 -107t21 -151q0 -78 -1 -116t-7 -98
|
||||
t-20 -89t-38 -61.5t-63.5 -45.5t-93.5 -13q-50 0 -86.5 13t-57 33t-32 52t-15 62t-3.5 71q0 40 3.5 69.5t16 60.5t33 51t56.5 32.5t86 12.5q100 0 151 -56q0 4 0.5 11t0.5 11q0 116 -40.5 176.5t-130.5 64.5q-11 0 -9 11l6 44q2 9 11 9z" />
|
||||
<glyph glyph-name="product"
|
||||
d="M372 643h-146v-853q0 -10 -10 -10h-51q-10 0 -10 10v853h-91q-10 0 -10 10v45q0 10 10 10h470q10 0 10 -10v-45q0 -10 -10 -10h-91v-853q0 -10 -10 -10h-51q-10 0 -10 10v853z" />
|
||||
<glyph glyph-name="pi"
|
||||
d="M384 94l-33 344h-105v-428q0 -10 -10 -10h-51q-10 0 -10 10v428h-111q-10 0 -10 10v40q0 10 10 10h470q10 0 10 -10v-40q0 -10 -10 -10h-111l26 -295q5 -53 22 -65.5t63 -12.5q10 0 10 -9v-44q0 -9 -9 -11q-8 -1 -20 -1q-60 0 -93.5 26t-37.5 68z" />
|
||||
<glyph glyph-name="integral"
|
||||
d="M263 -57v612q0 77 46.5 120t139.5 43q46 0 83 -7q8 -2 6 -10l-15 -45q-1 -5 -11 -4q-29 3 -62 3q-116 0 -116 -111v-612q0 -77 -46.5 -120t-139.5 -43q-45 0 -83 7q-8 2 -6 10l15 45q1 5 11 4q30 -3 62 -3q116 0 116 111z" />
|
||||
<glyph glyph-name="radical"
|
||||
d="M266 8l-104 310h-112q-10 0 -10 10v40q0 10 10 10h159q8 0 9 -4l79 -256l165 583q2 7 9 7h54q5 0 8 -4t1 -9l-202 -687q-2 -8 -9 -8h-48q-7 0 -9 8z" />
|
||||
<glyph glyph-name="summation"
|
||||
d="M344 239l-166 -394h321q10 0 10 -10v-45q0 -10 -10 -10h-388q-10 0 -10 10v50q0 3 1 5l167 399l-167 399q-1 2 -1 5v50q0 10 10 10h388q10 0 10 -10v-45q0 -10 -10 -10h-321l166 -394q1 -1 1 -5q0 -3 -1 -5z" />
|
||||
<glyph glyph-name="lozenge"
|
||||
d="M464 354l-165 289l-165 -289l165 -289zM540 354q0 -4 -1 -5l-204 -344q-3 -5 -9 -5h-53q-6 0 -9 5l-205 344q-1 1 -1 5t1 5l204 344q3 5 9 5h53q6 0 9 -5l205 -344q1 -1 1 -5z" />
|
||||
<glyph glyph-name="Omega"
|
||||
d="M81 210v288q0 116 60 168t158 52t158 -52t60 -168v-288q0 -107 -68 -145h94q10 0 10 -10v-45q0 -10 -10 -10h-170q-10 0 -10 10v45q0 7 6 9q77 27 77 146v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -119 77 -146q6 -2 6 -9v-45q0 -10 -10 -10h-170
|
||||
q-10 0 -10 10v45q0 10 10 10h94q-68 38 -68 145z" />
|
||||
<glyph glyph-name="Delta"
|
||||
d="M447 60l-153 594l-147 -594h300zM525 0h-452q-5 0 -8 4t-2 8l177 688q2 8 10 8h90q8 0 10 -7l185 -688q1 -4 -2 -8.5t-8 -4.5z" />
|
||||
<glyph glyph-name="uni00B5"
|
||||
d="M506 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v42q-47 -63 -140 -63q-86 0 -135 63v-262q0 -10 -10 -10h-51q-10 0 -10 10v698q0 10 10 10h51q10 0 10 -8v-326q0 -47 40 -79.5t95 -32.5q56 0 98 32.5t42 79.5v324q0 10 10 10h50q10 0 10 -10z" />
|
||||
<glyph glyph-name="uni2126"
|
||||
d="M81 210v288q0 116 60 168t158 52t158 -52t60 -168v-288q0 -107 -68 -145h94q10 0 10 -10v-45q0 -10 -10 -10h-170q-10 0 -10 10v45q0 7 6 9q77 27 77 146v288q0 84 -36 119.5t-111 35.5t-111 -35.5t-36 -119.5v-288q0 -119 77 -146q6 -2 6 -9v-45q0 -10 -10 -10h-170
|
||||
q-10 0 -10 10v45q0 10 10 10h94q-68 38 -68 145z" />
|
||||
<glyph glyph-name="uni2206"
|
||||
d="M447 60l-153 594l-147 -594h300zM525 0h-452q-5 0 -8 4t-2 8l177 688q2 8 10 8h90q8 0 10 -7l185 -688q1 -4 -2 -8.5t-8 -4.5z" />
|
||||
<glyph glyph-name="fi"
|
||||
d="M509 488v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-240v-428q0 -10 -10 -10h-50q-10 0 -10 10v428h-83q-10 0 -10 10v40q0 10 10 10h83v57q0 88 31 125.5t112 37.5q54 0 90 -18q7 -5 4 -14l-14 -36q-3 -8 -14 -5q-34 9 -57 9q-50 0 -66 -25t-16 -85v-46h301q10 0 10 -10
|
||||
zM509 698v-73q0 -10 -10 -10h-67q-10 0 -10 10v73q0 10 10 10h67q10 0 10 -10z" />
|
||||
<glyph glyph-name="fl"
|
||||
d="M509 696v-686q0 -10 -10 -10h-50q-10 0 -10 10v636q-40 8 -124 8q-65 0 -91 -29t-26 -81v-46h110q10 0 10 -10v-40q0 -10 -10 -10h-110v-428q0 -10 -10 -10h-50q-10 0 -10 10v428h-83q-10 0 -10 10v40q0 10 10 10h83v57q0 77 47.5 120t138.5 43q110 0 185 -12
|
||||
q10 -2 10 -10z" />
|
||||
<glyph glyph-name="uniFB00"
|
||||
d="M619 438h-110v-428q0 -10 -10 -10h-50q-10 0 -10 10v428h-241v-428q0 -10 -10 -10h-50q-10 0 -10 10v428h-83q-10 0 -10 10v40q0 10 10 10h83v57q0 88 31 125.5t112 37.5q54 0 90 -18q7 -5 4 -14l-14 -36q-3 -8 -14 -5q-34 9 -57 9q-50 0 -66 -25t-16 -85v-46h241v57
|
||||
q0 88 31 125.5t112 37.5q54 0 90 -18q7 -5 4 -14l-14 -36q-3 -8 -14 -5q-34 9 -57 9q-50 0 -66 -25t-16 -85v-46h110q10 0 10 -10v-40q0 -10 -10 -10z" />
|
||||
<glyph glyph-name="uni00AD"
|
||||
d="M496 300v-45q0 -10 -10 -10h-375q-10 0 -10 10v45q0 10 10 10h375q10 0 10 -10z" />
|
||||
<glyph glyph-name="zero.zero"
|
||||
d="M525 466v-224q0 -253 -226 -253t-226 253v224q0 252 226 252t226 -252zM144 436v-164q0 -92 24 -145l231 494q-36 32 -100 32q-34 0 -59.5 -8.5t-48.5 -30.5t-35 -67t-12 -111zM454 272v164q0 83 -20 132l-228 -490q35 -24 93 -24q76 0 115.5 48t39.5 170z" />
|
||||
<glyph glyph-name="zero.dnom"
|
||||
d="M447 296v-139q0 -164 -148 -164q-147 0 -147 164v139q0 164 147 164q148 0 148 -164zM388 176v102q0 74 -23.5 100.5t-65.5 26.5q-41 0 -64.5 -26.5t-23.5 -100.5v-102q0 -74 22.5 -101t65.5 -27q44 0 66.5 27.5t22.5 100.5z" />
|
||||
<glyph glyph-name="one.dnom"
|
||||
d="M445 48v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7z" />
|
||||
<glyph glyph-name="two.dnom"
|
||||
d="M434 48v-42q0 -6 -7 -6h-263q-6 0 -6 6q1 80 16 112t62 68q13 10 43 29t47.5 31.5t33 35.5t15.5 49q0 74 -75 74q-42 0 -62 -18.5t-22 -61.5q0 -6 -6 -6h-45q-7 0 -7 6q7 135 142 135q61 0 97.5 -32.5t36.5 -96.5q0 -67 -53 -112q-24 -20 -72 -49.5t-68.5 -53
|
||||
t-23.5 -61.5h210q7 0 7 -7z" />
|
||||
<glyph glyph-name="three.dnom"
|
||||
d="M435 128q0 -70 -39 -102.5t-102 -32.5q-60 0 -98.5 28.5t-43.5 90.5q0 6 7 6h45q6 0 7 -5q10 -65 83 -65q36 0 60 20.5t24 59.5q0 80 -84 80h-12q-6 0 -6 6v42q0 6 6 6h12q78 0 78 71q0 41 -19 56.5t-59 15.5q-38 0 -57.5 -13.5t-21.5 -49.5q0 -6 -6 -6h-46q-6 0 -6 6
|
||||
q6 118 137 118q136 0 136 -127q0 -74 -55 -97q60 -23 60 -108z" />
|
||||
<glyph glyph-name="four.dnom"
|
||||
d="M452 150v-42q0 -7 -6 -7h-46v-95q0 -6 -6 -6h-45q-7 0 -7 6v95h-189q-6 0 -6 7v39q0 3 1 5l173 298q2 3 6 3h67q6 0 6 -6v-291h46q6 0 6 -6zM342 379l-129 -223h129v223z" />
|
||||
<glyph glyph-name="five.dnom"
|
||||
d="M436 149q0 -156 -141 -156q-59 0 -97.5 28.5t-42.5 89.5q0 6 7 6h46q6 0 6 -7q7 -62 81 -62q41 0 61.5 23.5t20.5 77.5q0 56 -20 77t-62 21q-56 0 -80 -33q-3 -3 -5 -3h-40q-6 0 -6 7v229q0 6 6 6h237q7 0 7 -6v-42q0 -6 -7 -6h-186v-119q28 21 74 21q66 0 103.5 -34
|
||||
t37.5 -118z" />
|
||||
<glyph glyph-name="six.dnom"
|
||||
d="M446 135q0 -64 -38.5 -103t-106.5 -39q-37 0 -63.5 10.5t-42.5 28.5t-25 48t-12 61.5t-3 75.5q0 137 38.5 190t107.5 53q127 0 136 -110q0 -7 -7 -7h-44q-6 0 -6 6q-6 56 -79 56q-45 0 -65.5 -37.5t-21.5 -128.5q31 35 93 35q67 0 103 -37.5t36 -101.5zM388 135
|
||||
q0 46 -22 65.5t-65 19.5q-82 0 -82 -85q0 -87 82 -87q87 0 87 87z" />
|
||||
<glyph glyph-name="seven.dnom"
|
||||
d="M442 447v-40q0 -3 -1 -5l-188 -398q-1 -4 -6 -4h-46q-3 0 -5 3t-1 6l183 390h-209q-6 0 -6 6v42q0 6 6 6h266q7 0 7 -6z" />
|
||||
<glyph glyph-name="eight.dnom"
|
||||
d="M441 128q0 -70 -39.5 -102.5t-102.5 -32.5t-102 32.5t-39 102.5q0 85 60 108q-56 23 -56 97q0 127 137 127t137 -127q0 -73 -55 -97q60 -23 60 -108zM378 333q0 41 -19.5 56.5t-59.5 15.5q-39 0 -59 -15.5t-20 -56.5q0 -71 79 -71t79 71zM383 128q0 80 -84 80t-84 -80
|
||||
q0 -41 24 -60.5t60 -19.5q37 0 60.5 19.5t23.5 60.5z" />
|
||||
<glyph glyph-name="nine.dnom"
|
||||
d="M152 318q0 64 38.5 103t106.5 39q37 0 63.5 -10.5t42.5 -28.5t25 -48t12 -61.5t3 -75.5q0 -137 -38.5 -190t-107.5 -53q-127 0 -136 110q0 7 7 7h44q6 0 6 -6q6 -56 79 -56q45 0 65.5 37.5t21.5 128.5q-31 -35 -93 -35q-67 0 -103 37.5t-36 101.5zM210 318
|
||||
q0 -46 22 -65.5t65 -19.5q82 0 82 85q0 87 -82 87q-87 0 -87 -87z" />
|
||||
<glyph glyph-name="zero.numr"
|
||||
d="M447 551v-139q0 -164 -148 -164q-147 0 -147 164v139q0 164 147 164q148 0 148 -164zM388 431v102q0 74 -23.5 100.5t-65.5 26.5q-41 0 -64.5 -26.5t-23.5 -100.5v-102q0 -74 22.5 -101t65.5 -27q44 0 66.5 27.5t22.5 100.5z" />
|
||||
<glyph glyph-name="one.numr"
|
||||
d="M445 303v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7z" />
|
||||
<glyph glyph-name="two.numr"
|
||||
d="M434 303v-42q0 -6 -7 -6h-263q-6 0 -6 6q1 80 16 112t62 68q13 10 43 29t47.5 31.5t33 35.5t15.5 49q0 74 -75 74q-42 0 -62 -18.5t-22 -61.5q0 -6 -6 -6h-45q-7 0 -7 6q7 135 142 135q61 0 97.5 -32.5t36.5 -96.5q0 -67 -53 -112q-24 -20 -72 -49.5t-68.5 -53
|
||||
t-23.5 -61.5h210q7 0 7 -7z" />
|
||||
<glyph glyph-name="three.numr"
|
||||
d="M435 383q0 -70 -39 -102.5t-102 -32.5q-60 0 -98.5 28.5t-43.5 90.5q0 6 7 6h45q6 0 7 -5q10 -65 83 -65q36 0 60 20.5t24 59.5q0 80 -84 80h-12q-6 0 -6 6v42q0 6 6 6h12q78 0 78 71q0 41 -19 56.5t-59 15.5q-38 0 -57.5 -13.5t-21.5 -49.5q0 -6 -6 -6h-46q-6 0 -6 6
|
||||
q6 118 137 118q136 0 136 -127q0 -74 -55 -97q60 -23 60 -108z" />
|
||||
<glyph glyph-name="four.numr"
|
||||
d="M452 405v-42q0 -7 -6 -7h-46v-95q0 -6 -6 -6h-45q-7 0 -7 6v95h-189q-6 0 -6 7v39q0 3 1 5l173 298q2 3 6 3h67q6 0 6 -6v-291h46q6 0 6 -6zM342 634l-129 -223h129v223z" />
|
||||
<glyph glyph-name="five.numr"
|
||||
d="M436 404q0 -156 -141 -156q-59 0 -97.5 28.5t-42.5 89.5q0 6 7 6h46q6 0 6 -7q7 -62 81 -62q41 0 61.5 23.5t20.5 77.5q0 56 -20 77t-62 21q-56 0 -80 -33q-3 -3 -5 -3h-40q-6 0 -6 7v229q0 6 6 6h237q7 0 7 -6v-42q0 -6 -7 -6h-186v-119q28 21 74 21q66 0 103.5 -34
|
||||
t37.5 -118z" />
|
||||
<glyph glyph-name="six.numr"
|
||||
d="M446 390q0 -64 -38.5 -103t-106.5 -39q-37 0 -63.5 10.5t-42.5 28.5t-25 48t-12 61.5t-3 75.5q0 137 38.5 190t107.5 53q127 0 136 -110q0 -7 -7 -7h-44q-6 0 -6 6q-6 56 -79 56q-45 0 -65.5 -37.5t-21.5 -128.5q31 35 93 35q67 0 103 -37.5t36 -101.5zM388 390
|
||||
q0 46 -22 65.5t-65 19.5q-82 0 -82 -85q0 -87 82 -87q87 0 87 87z" />
|
||||
<glyph glyph-name="seven.numr"
|
||||
d="M442 702v-40q0 -3 -1 -5l-188 -398q-1 -4 -6 -4h-46q-3 0 -5 3t-1 6l183 390h-209q-6 0 -6 6v42q0 6 6 6h266q7 0 7 -6z" />
|
||||
<glyph glyph-name="eight.numr"
|
||||
d="M441 383q0 -70 -39.5 -102.5t-102.5 -32.5t-102 32.5t-39 102.5q0 85 60 108q-56 23 -56 97q0 127 137 127t137 -127q0 -73 -55 -97q60 -23 60 -108zM378 588q0 41 -19.5 56.5t-59.5 15.5q-39 0 -59 -15.5t-20 -56.5q0 -71 79 -71t79 71zM383 383q0 80 -84 80t-84 -80
|
||||
q0 -41 24 -60.5t60 -19.5q37 0 60.5 19.5t23.5 60.5z" />
|
||||
<glyph glyph-name="nine.numr"
|
||||
d="M152 573q0 64 38.5 103t106.5 39q37 0 63.5 -10.5t42.5 -28.5t25 -48t12 -61.5t3 -75.5q0 -137 -38.5 -190t-107.5 -53q-127 0 -136 110q0 7 7 7h44q6 0 6 -6q6 -56 79 -56q45 0 65.5 37.5t21.5 128.5q-31 -35 -93 -35q-67 0 -103 37.5t-36 101.5zM210 573
|
||||
q0 -46 22 -65.5t65 -19.5q82 0 82 85q0 87 -82 87q-87 0 -87 -87z" />
|
||||
<glyph glyph-name="uni2070"
|
||||
d="M447 551v-139q0 -164 -148 -164q-147 0 -147 164v139q0 164 147 164q148 0 148 -164zM388 431v102q0 74 -23.5 100.5t-65.5 26.5q-41 0 -64.5 -26.5t-23.5 -100.5v-102q0 -74 22.5 -101t65.5 -27q44 0 66.5 27.5t22.5 100.5z" />
|
||||
<glyph glyph-name="uni2074"
|
||||
d="M452 405v-42q0 -7 -6 -7h-46v-95q0 -6 -6 -6h-45q-7 0 -7 6v95h-189q-6 0 -6 7v39q0 3 1 5l173 298q2 3 6 3h67q6 0 6 -6v-291h46q6 0 6 -6zM342 634l-129 -223h129v223z" />
|
||||
<glyph glyph-name="uni2075"
|
||||
d="M436 404q0 -156 -141 -156q-59 0 -97.5 28.5t-42.5 89.5q0 6 7 6h46q6 0 6 -7q7 -62 81 -62q41 0 61.5 23.5t20.5 77.5q0 56 -20 77t-62 21q-56 0 -80 -33q-3 -3 -5 -3h-40q-6 0 -6 7v229q0 6 6 6h237q7 0 7 -6v-42q0 -6 -7 -6h-186v-119q28 21 74 21q66 0 103.5 -34
|
||||
t37.5 -118z" />
|
||||
<glyph glyph-name="uni2076"
|
||||
d="M446 390q0 -64 -38.5 -103t-106.5 -39q-37 0 -63.5 10.5t-42.5 28.5t-25 48t-12 61.5t-3 75.5q0 137 38.5 190t107.5 53q127 0 136 -110q0 -7 -7 -7h-44q-6 0 -6 6q-6 56 -79 56q-45 0 -65.5 -37.5t-21.5 -128.5q31 35 93 35q67 0 103 -37.5t36 -101.5zM388 390
|
||||
q0 46 -22 65.5t-65 19.5q-82 0 -82 -85q0 -87 82 -87q87 0 87 87z" />
|
||||
<glyph glyph-name="uni2077"
|
||||
d="M442 702v-40q0 -3 -1 -5l-188 -398q-1 -4 -6 -4h-46q-3 0 -5 3t-1 6l183 390h-209q-6 0 -6 6v42q0 6 6 6h266q7 0 7 -6z" />
|
||||
<glyph glyph-name="uni2078"
|
||||
d="M441 383q0 -70 -39.5 -102.5t-102.5 -32.5t-102 32.5t-39 102.5q0 85 60 108q-56 23 -56 97q0 127 137 127t137 -127q0 -73 -55 -97q60 -23 60 -108zM378 588q0 41 -19.5 56.5t-59.5 15.5q-39 0 -59 -15.5t-20 -56.5q0 -71 79 -71t79 71zM383 383q0 80 -84 80t-84 -80
|
||||
q0 -41 24 -60.5t60 -19.5q37 0 60.5 19.5t23.5 60.5z" />
|
||||
<glyph glyph-name="uni2079"
|
||||
d="M152 573q0 64 38.5 103t106.5 39q37 0 63.5 -10.5t42.5 -28.5t25 -48t12 -61.5t3 -75.5q0 -137 -38.5 -190t-107.5 -53q-127 0 -136 110q0 7 7 7h44q6 0 6 -6q6 -56 79 -56q45 0 65.5 37.5t21.5 128.5q-31 -35 -93 -35q-67 0 -103 37.5t-36 101.5zM210 573
|
||||
q0 -46 22 -65.5t65 -19.5q82 0 82 85q0 87 -82 87q-87 0 -87 -87z" />
|
||||
<glyph glyph-name="uni2080"
|
||||
d="M447 118v-139q0 -164 -148 -164q-147 0 -147 164v139q0 164 147 164q148 0 148 -164zM388 -2v102q0 74 -23.5 100.5t-65.5 26.5q-41 0 -64.5 -26.5t-23.5 -100.5v-102q0 -74 22.5 -101t65.5 -27q44 0 66.5 27.5t22.5 100.5z" />
|
||||
<glyph glyph-name="uni2081"
|
||||
d="M445 -130v-42q0 -6 -7 -6h-254q-6 0 -6 6v42q0 7 6 7h104v320l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6v-392h92q7 0 7 -7z" />
|
||||
<glyph glyph-name="uni2082"
|
||||
d="M434 -130v-42q0 -6 -7 -6h-263q-6 0 -6 6q1 80 16 112t62 68q13 10 43 29t47.5 31.5t33 35.5t15.5 49q0 74 -75 74q-42 0 -62 -18.5t-22 -61.5q0 -6 -6 -6h-45q-7 0 -7 6q7 135 142 135q61 0 97.5 -32.5t36.5 -96.5q0 -67 -53 -112q-24 -20 -72 -49.5t-68.5 -53
|
||||
t-23.5 -61.5h210q7 0 7 -7z" />
|
||||
<glyph glyph-name="uni2083"
|
||||
d="M435 -50q0 -70 -39 -102.5t-102 -32.5q-60 0 -98.5 28.5t-43.5 90.5q0 6 7 6h45q6 0 7 -5q10 -65 83 -65q36 0 60 20.5t24 59.5q0 80 -84 80h-12q-6 0 -6 6v42q0 6 6 6h12q78 0 78 71q0 41 -19 56.5t-59 15.5q-38 0 -57.5 -13.5t-21.5 -49.5q0 -6 -6 -6h-46q-6 0 -6 6
|
||||
q6 118 137 118q136 0 136 -127q0 -74 -55 -97q60 -23 60 -108z" />
|
||||
<glyph glyph-name="uni2084"
|
||||
d="M452 -28v-42q0 -7 -6 -7h-46v-95q0 -6 -6 -6h-45q-7 0 -7 6v95h-189q-6 0 -6 7v39q0 3 1 5l173 298q2 3 6 3h67q6 0 6 -6v-291h46q6 0 6 -6zM342 201l-129 -223h129v223z" />
|
||||
<glyph glyph-name="uni2085"
|
||||
d="M436 -29q0 -156 -141 -156q-59 0 -97.5 28.5t-42.5 89.5q0 6 7 6h46q6 0 6 -7q7 -62 81 -62q41 0 61.5 23.5t20.5 77.5q0 56 -20 77t-62 21q-56 0 -80 -33q-3 -3 -5 -3h-40q-6 0 -6 7v229q0 6 6 6h237q7 0 7 -6v-42q0 -6 -7 -6h-186v-119q28 21 74 21q66 0 103.5 -34
|
||||
t37.5 -118z" />
|
||||
<glyph glyph-name="uni2086"
|
||||
d="M446 -43q0 -64 -38.5 -103t-106.5 -39q-37 0 -63.5 10.5t-42.5 28.5t-25 48t-12 61.5t-3 75.5q0 137 38.5 190t107.5 53q127 0 136 -110q0 -7 -7 -7h-44q-6 0 -6 6q-6 56 -79 56q-45 0 -65.5 -37.5t-21.5 -128.5q31 35 93 35q67 0 103 -37.5t36 -101.5zM388 -43
|
||||
q0 46 -22 65.5t-65 19.5q-82 0 -82 -85q0 -87 82 -87q87 0 87 87z" />
|
||||
<glyph glyph-name="uni2087"
|
||||
d="M442 269v-40q0 -3 -1 -5l-188 -398q-1 -4 -6 -4h-46q-3 0 -5 3t-1 6l183 390h-209q-6 0 -6 6v42q0 6 6 6h266q7 0 7 -6z" />
|
||||
<glyph glyph-name="uni2088"
|
||||
d="M441 -50q0 -70 -39.5 -102.5t-102.5 -32.5t-102 32.5t-39 102.5q0 85 60 108q-56 23 -56 97q0 127 137 127t137 -127q0 -73 -55 -97q60 -23 60 -108zM378 155q0 41 -19.5 56.5t-59.5 15.5q-39 0 -59 -15.5t-20 -56.5q0 -71 79 -71t79 71zM383 -50q0 80 -84 80t-84 -80
|
||||
q0 -41 24 -60.5t60 -19.5q37 0 60.5 19.5t23.5 60.5z" />
|
||||
<glyph glyph-name="uni2089"
|
||||
d="M152 140q0 64 38.5 103t106.5 39q37 0 63.5 -10.5t42.5 -28.5t25 -48t12 -61.5t3 -75.5q0 -137 -38.5 -190t-107.5 -53q-127 0 -136 110q0 7 7 7h44q6 0 6 -6q6 -56 79 -56q45 0 65.5 37.5t21.5 128.5q-31 -35 -93 -35q-67 0 -103 37.5t-36 101.5zM210 140
|
||||
q0 -46 22 -65.5t65 -19.5q82 0 82 85q0 87 -82 87q-87 0 -87 -87z" />
|
||||
<glyph glyph-name="parenleft.case"
|
||||
d="M440 -44q0 -1 -3 -7l-26 -33q-3 -3 -7 -3q-2 0 -6 2q-16 12 -33.5 28.5t-47 56.5t-51 86.5t-38 120t-16.5 155.5t16.5 155.5t38 120t51 86.5t47 56.5t33.5 28.5q4 2 6 2q4 0 7 -3l26 -33q3 -6 3 -7q0 -5 -3 -8q-19 -15 -39 -38t-49 -70t-47.5 -123t-18.5 -167t18.5 -167
|
||||
t47.5 -123t49 -70t39 -38q3 -3 3 -8z" />
|
||||
<glyph glyph-name="parenright.case"
|
||||
d="M158 -44q0 5 3 8q19 15 39 38t49 70t47.5 123t18.5 167t-18.5 167t-47.5 123t-49 70t-39 38q-3 3 -3 8q0 1 3 7l26 33q3 3 7 3q2 0 6 -2q16 -12 33.5 -28.5t47 -56.5t51 -86.5t38 -120t16.5 -155.5t-16.5 -155.5t-38 -120t-51 -86.5t-47 -56.5t-33.5 -28.5q-4 -2 -6 -2
|
||||
q-4 0 -7 3l-26 33q-3 6 -3 7z" />
|
||||
<glyph glyph-name="bracketleft.case"
|
||||
d="M429 -10v-41q0 -10 -10 -10h-184q-10 0 -10 10v810q0 10 10 10h184q10 0 10 -10v-41q0 -10 -10 -10h-129v-708h129q10 0 10 -10z" />
|
||||
<glyph glyph-name="bracketright.case"
|
||||
d="M373 759v-810q0 -10 -10 -10h-184q-10 0 -10 10v41q0 10 10 10h129v708h-129q-10 0 -10 10v41q0 10 10 10h184q10 0 10 -10z" />
|
||||
<glyph glyph-name="braceleft.case"
|
||||
d="M460 -10v-41q0 -10 -10 -10q-42 0 -70.5 3.5t-49.5 12t-33 20t-19 33t-9 45t-2 60.5v74q0 72 -25 100.5t-83 30.5q-10 0 -10 10v52q0 10 10 10q58 2 83 30.5t25 100.5v74q0 37 2 60.5t9 45t19 33t33 20t49.5 12t70.5 3.5q10 0 10 -10v-41q0 -10 -10 -10
|
||||
q-78 -1 -98.5 -22.5t-20.5 -90.5v-82q0 -74 -19 -108.5t-79 -50.5q60 -16 79 -50.5t19 -108.5v-82q0 -69 20.5 -90.5t98.5 -22.5q10 0 10 -10z" />
|
||||
<glyph glyph-name="braceright.case"
|
||||
d="M138 -51v41q0 10 10 10q78 1 98.5 22.5t20.5 90.5v82q0 74 19 108.5t79 50.5q-60 16 -79 50.5t-19 108.5v82q0 69 -20.5 90.5t-98.5 22.5q-10 0 -10 10v41q0 10 10 10q42 0 70.5 -3.5t49.5 -12t33 -20t19 -33t9 -45t2 -60.5v-74q0 -72 25 -100.5t83 -30.5q10 0 10 -10
|
||||
v-52q0 -10 -10 -10q-58 -2 -83 -30.5t-25 -100.5v-74q0 -37 -2 -60.5t-9 -45t-19 -33t-33 -20t-49.5 -12t-70.5 -3.5q-10 0 -10 10z" />
|
||||
<glyph glyph-name="guilsinglleft.case"
|
||||
d="M401 518l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="guillemotleft.case"
|
||||
d="M489 518l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10q0 -2 -2 -6zM311 518l-133 -174l133 -173q2 -4 2 -6q0 -10 -10 -10h-57q-5 0 -8 4l-137 179q-2 4 -2 6t2 6l136 180q3 4 8 4h58q10 0 10 -10
|
||||
q0 -2 -2 -6z" />
|
||||
<glyph glyph-name="guilsinglright.case"
|
||||
d="M407 338l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6l133 173l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -2 2 -6t-2 -6z" />
|
||||
<glyph glyph-name="guillemotright.case"
|
||||
d="M241 344l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -4 2 -6t-2 -6l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6zM420 344l-133 174q-2 4 -2 6q0 10 10 10h58q5 0 8 -4l136 -180q2 -4 2 -6t-2 -6l-137 -179q-3 -4 -8 -4h-57q-10 0 -10 10q0 2 2 6z" />
|
||||
<glyph glyph-name="endash.case"
|
||||
d="M507 390v-45q0 -10 -10 -10h-396q-10 0 -10 10v45q0 10 10 10h396q10 0 10 -10z" />
|
||||
<glyph glyph-name="emdash.case"
|
||||
d="M580 390v-45q0 -10 -10 -10h-542q-10 0 -10 10v45q0 10 10 10h542q10 0 10 -10z" />
|
||||
<glyph glyph-name="hyphen.case"
|
||||
d="M496 390v-45q0 -10 -10 -10h-375q-10 0 -10 10v45q0 10 10 10h375q10 0 10 -10z" />
|
||||
<glyph glyph-name="arrowleft"
|
||||
d="M305 446l-165 -165h430q10 0 10 -10v-44q0 -10 -10 -10h-430l165 -165q3 -3 3 -7t-3 -7l-31 -31q-3 -3 -7 -3t-7 3l-235 235q-3 3 -3 7t3 7l235 235q3 3 7 3t7 -3l31 -31q3 -3 3 -7t-3 -7z" />
|
||||
<glyph glyph-name="arrowup"
|
||||
d="M267 429l-165 -165q-3 -3 -7 -3t-7 3l-31 31q-3 3 -3 7t3 7l235 235q3 3 7 3t7 -3l235 -235q3 -3 3 -7t-3 -7l-31 -31q-3 -3 -7 -3t-7 3l-165 165v-430q0 -10 -10 -10h-44q-10 0 -10 10v430z" />
|
||||
<glyph glyph-name="arrowright"
|
||||
d="M458 281l-165 165q-3 3 -3 7t3 7l31 31q3 3 7 3t7 -3l235 -235q3 -3 3 -7t-3 -7l-235 -235q-3 -3 -7 -3t-7 3l-31 31q-3 3 -3 7t3 7l165 165h-430q-10 0 -10 10v44q0 10 10 10h430z" />
|
||||
<glyph glyph-name="arrowdown"
|
||||
d="M102 276l165 -165v430q0 10 10 10h44q10 0 10 -10v-430l165 165q3 3 7 3t7 -3l31 -31q3 -3 3 -7t-3 -7l-235 -235q-3 -3 -7 -3t-7 3l-235 235q-3 3 -3 7t3 7l31 31q3 3 7 3t7 -3z" />
|
||||
<glyph glyph-name="uni2196"
|
||||
d="M142 339v-233q0 -10 -10 -10h-44q-10 0 -10 10v332q0 10 10 10h332q10 0 10 -10v-44q0 -10 -10 -10h-233l303 -304q3 -4 3 -8t-3 -7l-30 -30q-3 -3 -7 -3t-7 3z" />
|
||||
<glyph glyph-name="uni2197"
|
||||
d="M434 106v233l-304 -304q-3 -3 -7 -3t-7 3l-30 30q-3 3 -3 7t3 8l303 304h-233q-10 0 -10 10v44q0 10 10 10h332q10 0 10 -10v-332q0 -10 -10 -10h-44q-10 0 -10 10z" />
|
||||
<glyph glyph-name="uni2198"
|
||||
d="M434 137v233q0 10 10 10h44q10 0 10 -10v-332q0 -10 -10 -10h-332q-10 0 -10 10v44q0 10 10 10h233l-303 304q-3 3 -3 7q0 3 3 8l30 30q3 3 7 3t7 -3z" />
|
||||
<glyph glyph-name="uni2199"
|
||||
d="M142 370v-233l304 304q3 3 7 3t7 -3l30 -30q3 -5 3 -8q0 -4 -3 -7l-303 -304h233q10 0 10 -10v-44q0 -10 -10 -10h-332q-10 0 -10 10v332q0 10 10 10h44q10 0 10 -10z" />
|
||||
<glyph glyph-name="commaaccent"
|
||||
d="M247 -220v24q0 7 6 9q20 8 33.5 27.5t13.5 42.5h-43q-10 0 -10 10v51q0 10 10 10h84q10 0 10 -10v-61q0 -46 -28.5 -76t-65.5 -37q-4 -1 -7 2.5t-3 7.5z" />
|
||||
<glyph glyph-name="undercommaaccent"
|
||||
d="M247 -220v24q0 7 6 9q20 8 33.5 27.5t13.5 42.5h-43q-10 0 -10 10v51q0 10 10 10h84q10 0 10 -10v-61q0 -46 -28.5 -76t-65.5 -37q-4 -1 -7 2.5t-3 7.5z" />
|
||||
<glyph glyph-name="commaturn"
|
||||
d="M351 735v-24q0 -7 -6 -9q-20 -8 -33.5 -27.5t-13.5 -42.5h43q10 0 10 -10v-51q0 -10 -10 -10h-84q-10 0 -10 10v61q0 46 28.5 76t65.5 37q4 1 7 -2t3 -8z" />
|
||||
<glyph glyph-name="a.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120z" />
|
||||
<glyph glyph-name="aacute.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="acircumflex.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="adieresis.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="agrave.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="aring.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM414 672q0 -47 -33.5 -79t-82.5 -32q-48 0 -81.5 32.5t-33.5 78.5t33.5 78.5t81.5 32.5q49 0 82.5 -32t33.5 -79zM365 672q0 27 -19.5 45.5t-47.5 18.5t-47.5 -18.5t-19.5 -45.5t19.5 -45t47.5 -18t47.5 18
|
||||
t19.5 45z" />
|
||||
<glyph glyph-name="atilde.ss02"
|
||||
d="M493 488v-478q0 -10 -10 -10h-50q-10 0 -10 10v29q-50 -50 -137 -50q-125 0 -167 59t-42 201q0 69 8 114t29.5 80t62 50.5t103.5 15.5q89 0 143 -54v33q0 10 10 10h50q10 0 10 -10zM424 172v153q0 54 -34.5 87.5t-103.5 33.5q-87 0 -112.5 -39.5t-25.5 -157.5
|
||||
q0 -57 4 -88.5t17.5 -59t41.5 -38.5t75 -11q138 0 138 120zM475 698q0 -1 -1 -3v-2q-13 -44 -36.5 -67t-67.5 -23q-28 0 -81.5 23.5t-70.5 23.5q-29 0 -46 -35q-4 -7 -9 -7h-30q-10 0 -10 10q0 1 1 3v2q13 44 36.5 66.5t67.5 22.5q28 0 81.5 -23.5t70.5 -23.5q29 0 46 36
|
||||
q4 7 9 7h30q10 0 10 -10z" />
|
||||
<glyph glyph-name="dotlessi.ss01"
|
||||
d="M120 498h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-161q-10 0 -10 10v40q0 10 10 10z" />
|
||||
<glyph glyph-name="f.ss01"
|
||||
d="M223 10v428h-114q-10 0 -10 10v40q0 10 10 10h114v57q0 77 46.5 120t139.5 43q90 0 170 -28q8 -2 6 -10l-16 -42q-3 -6 -11 -4q-73 21 -148 21q-116 0 -116 -111v-46h214q10 0 10 -10v-40q0 -10 -10 -10h-214v-428q0 -10 -10 -10h-51q-10 0 -10 10z" />
|
||||
<glyph glyph-name="g.ss03"
|
||||
d="M242 63h76q44 0 76 -3t65 -12t53 -24.5t33 -42.5t13 -65t-13 -65t-33 -42.5t-53 -24.5t-65 -12t-76 -3t-76 3t-65 12t-53 24.5t-33 42.5t-13 65q0 86 67 120q-42 24 -42 76q0 62 57 83q-53 39 -53 140q0 85 40.5 129.5t152.5 44.5q91 0 137 -32h113q10 0 10 -10v-40
|
||||
q0 -10 -10 -10h-69q12 -32 12 -82q0 -85 -40.5 -129.5t-152.5 -44.5h-58q-30 0 -49 -12.5t-19 -36.5t19 -36.5t49 -12.5zM300 224q43 0 68.5 7t36.5 23.5t14 33t3 47.5t-3 47.5t-14 33t-36.5 23.5t-68.5 7t-68.5 -7t-36.5 -23.5t-14 -33t-3 -47.5t3 -47.5t14 -33t36.5 -23.5
|
||||
t68.5 -7zM318 -168q103 0 136 16.5t33 67.5t-33 67.5t-136 16.5t-136 -16.5t-33 -67.5t33 -67.5t136 -16.5z" />
|
||||
<glyph glyph-name="i.ss01"
|
||||
d="M352 698v-73q0 -10 -10 -10h-67q-10 0 -10 10v73q0 10 10 10h67q10 0 10 -10zM281 10v428h-161q-10 0 -10 10v40q0 10 10 10h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10z" />
|
||||
<glyph glyph-name="iacute.ss01"
|
||||
d="M120 498h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-161q-10 0 -10 10v40q0 10 10 10zM419 698v-46q0 -6 -5 -9l-156 -81q-1 -1 -4 -1h-53q-10 0 -10 11q0 3 3 6l120 127q3 3 7 3h88q10 0 10 -10z" />
|
||||
<glyph glyph-name="icircumflex.ss01"
|
||||
d="M120 498h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-161q-10 0 -10 10v40q0 10 10 10zM359 704l107 -127q2 -4 2 -6q0 -10 -10 -10h-51q-2 0 -6 2l-102 69l-102 -69q-4 -2 -6 -2h-50q-10 0 -10 10q0 2 2 6l107 127q4 4 8 4h103q4 0 8 -4z" />
|
||||
<glyph glyph-name="idieresis.ss01"
|
||||
d="M120 498h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-161q-10 0 -10 10v40q0 10 10 10zM447 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10zM248 698v-81q0 -10 -10 -10h-78q-10 0 -10 10v81q0 10 10 10h78q10 0 10 -10z" />
|
||||
<glyph glyph-name="igrave.ss01"
|
||||
d="M120 498h222q10 0 10 -10v-478q0 -10 -10 -10h-51q-10 0 -10 10v428h-161q-10 0 -10 10v40q0 10 10 10zM284 705l120 -127q3 -3 3 -6q0 -11 -10 -11h-53q-3 0 -4 1l-156 81q-5 3 -5 9v46q0 10 10 10h88q4 0 7 -3z" />
|
||||
<glyph glyph-name="l.ss01"
|
||||
d="M114 708h222q10 0 10 -10v-688q0 -10 -10 -10h-51q-10 0 -10 10v638h-161q-10 0 -10 10v40q0 10 10 10z" />
|
||||
<glyph glyph-name="lslash.ss01"
|
||||
d="M114 708h222q10 0 10 -10v-311l153 42q4 1 8.5 -2t4.5 -8v-47q0 -8 -7 -10l-159 -43v-309q0 -10 -10 -10h-51q-10 0 -10 10v290l-158 -42q-4 -1 -8.5 2t-4.5 8v46q0 8 7 10l164 44v280h-161q-10 0 -10 10v40q0 10 10 10z" />
|
||||
<glyph glyph-name="one.ss01"
|
||||
d="M296 708h56q10 0 10 -10v-688q0 -10 -10 -10h-50q-10 0 -10 10v611l-159 -158q-3 -3 -7 -3t-7 3l-31 32q-3 3 -3 7t3 7l201 196q3 3 7 3z" />
|
||||
<glyph glyph-name="quotedblbase.ss04"
|
||||
d="M466 121v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM257 121v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111
|
||||
q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="quotedblleft.ss04"
|
||||
d="M132 407v121q0 72 33.5 118t76.5 59q2 1 5 1q10 0 10 -10v-37q0 -6 -5 -8q-55 -28 -55 -123h50q10 0 10 -10v-111q0 -10 -10 -10h-105q-10 0 -10 10zM341 407v121q0 72 33.5 118t76.5 59q2 1 5 1q10 0 10 -10v-37q0 -6 -5 -8q-55 -28 -55 -123h50q10 0 10 -10v-111
|
||||
q0 -10 -10 -10h-105q-10 0 -10 10z" />
|
||||
<glyph glyph-name="quotedblright.ss04"
|
||||
d="M466 698v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10zM257 698v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111
|
||||
q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="quoteleft.ss04"
|
||||
d="M236 407v121q0 72 33.5 118t76.5 59q2 1 5 1q10 0 10 -10v-37q0 -6 -5 -8q-55 -28 -55 -123h50q10 0 10 -10v-111q0 -10 -10 -10h-105q-10 0 -10 10z" />
|
||||
<glyph glyph-name="quoteright.ss04"
|
||||
d="M361 698v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="quotesinglbase.ss04"
|
||||
d="M361 121v-121q0 -72 -33.5 -118t-76.5 -59q-2 -1 -5 -1q-10 0 -10 10v37q0 6 5 8q55 28 55 123h-50q-10 0 -10 10v111q0 10 10 10h105q10 0 10 -10z" />
|
||||
<glyph glyph-name="r.ss01"
|
||||
d="M274 340v-330q0 -10 -10 -10h-50q-10 0 -10 10v428h-121q-10 0 -10 10v40q0 10 10 10h181q10 0 10 -10v-42q20 27 57 45t75 18q91 0 125.5 -38t34.5 -129q0 -10 -10 -10h-51q-10 0 -10 10q-1 58 -19 81t-68 23q-68 0 -101 -29.5t-33 -76.5z" />
|
||||
<glyph glyph-name="one.dnom.ss01"
|
||||
d="M346 447v-441q0 -6 -7 -6h-45q-6 0 -6 6v369l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6z" />
|
||||
<glyph glyph-name="one.numr.ss01"
|
||||
d="M346 702v-441q0 -6 -7 -6h-45q-6 0 -6 6v369l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6z" />
|
||||
<glyph glyph-name="uni2081.ss01"
|
||||
d="M346 269v-441q0 -6 -7 -6h-45q-6 0 -6 6v369l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6z" />
|
||||
<glyph glyph-name="onesuperior.ss01"
|
||||
d="M346 702v-441q0 -6 -7 -6h-45q-6 0 -6 6v369l-87 -86q-1 -2 -5 -2q-3 0 -4 2l-30 29q-1 2 -1 5t1 4l128 124q2 2 4 2h45q7 0 7 -6z" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
After Width: | Height: | Size: 105 KiB |
BIN
assets/fonts/ExcellentRegular.woff
Normal file
BIN
assets/fonts/ExcellentRegular.woff2
Normal file
0
assets/images/.gitkeep
Normal file
BIN
assets/images/arrow-bottom.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/images/arrow-top.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/images/close-b.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/images/favicon.ico
Normal file
|
After Width: | Height: | Size: 198 B |
BIN
assets/images/play.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
1
assets/images/svg-sprite.svg
Normal file
|
After Width: | Height: | Size: 21 KiB |
1108
assets/js/build/app.js
Normal file
1
assets/js/build/app.min.js
vendored
Normal file
1
assets/js/build/vendor/modernizr-bundle.js
vendored
Normal file
5
index.php
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<?php
|
||||
|
||||
require 'kirby/bootstrap.php';
|
||||
|
||||
echo (new Kirby)->render();
|
||||
24
kirby/.editorconfig
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# This file is for unifying the coding style for different editors and IDEs
|
||||
# editorconfig.org
|
||||
|
||||
# PHP PSR-12 Coding Standards
|
||||
# https://www.php-fig.org/psr/psr-12/
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_style = tab
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.php]
|
||||
indent_size = 4
|
||||
insert_final_newline = true
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
99
kirby/CONTRIBUTING.md
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
# Contributing
|
||||
|
||||
:+1::tada: First off, yes, you can contribute and thanks already for taking the time if you do! :tada::+1:
|
||||
|
||||
## How we organize code
|
||||
|
||||
To keep track of different states of our code (current release, bugfixes, features) we use branches:
|
||||
|
||||
| Branch | Used for | PRs allowed? |
|
||||
| ----------- | ------------------------------------------------------------------------ | --------------------------- |
|
||||
| `main` | Latest released version | - |
|
||||
| `develop` | Working branch for next release, e.g. `3.7.x` | ✅ |
|
||||
| `fix/*` | Temporary branches for single patch | - |
|
||||
| `feature/*` | Temporary branches for single feature | - |
|
||||
| `release/*` | Pre-releases in testing before they are merged into `main` when released | only during release testing |
|
||||
|
||||
We will review all pull requests (PRs) to `develop` and merge them if accepted, once an appropriate version is upcoming. Please understand that this might not be the immediate next release and might take some time.
|
||||
|
||||
## How you can contribute
|
||||
|
||||
### Report a bug
|
||||
|
||||
When you find a bug, the first step to fixing it is to help us understand and reproduce the bug as best as possible. When you create a bug report, please include as many details as possible. Fill out [the template](ISSUE_TEMPLATE/bug_report.md) because the requested information helps us resolve issues so much faster.
|
||||
|
||||
### Bug fixes
|
||||
|
||||
For bug fixes, please create a new branch following the name scheme: `fix/issue_number-bug-x`, e.g. `fix/234-this-nasty-bug`. Limit bug fix PRs to a single bug. **Do not mix multiple bug fixes in a single PR.** This will make it easier for us to review the fix and merge it.
|
||||
|
||||
- Always send bug fix PRs against the `develop` branch––not `main`.
|
||||
- Add a helpful description of what the PR does if it is not 100% self-explanatory.
|
||||
- Every bug fix should include a [unit test](#tests) to avoid future regressions. Let us know if you need help with that.
|
||||
- Make sure your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
|
||||
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
|
||||
|
||||
### Features
|
||||
|
||||
For features create a new branch following the name scheme: `feature/issue_number-feature-x`, e.g. `feature/123-awesome-function`. Our [feedback platform](https://feedback.getkirby.com) can be a good source of highly requested features. Maybe your feature idea already exists and you can get valuable feedback from other Kirby users. Focus on a single feature per PR. Don't mix features!
|
||||
|
||||
- Always send feature PRs against the `develop` branch––not `main`.
|
||||
- Add a helpful description of what the PR does.
|
||||
- New features should include [unit tests](#tests). Let us know if you need help with that.
|
||||
- Make your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
|
||||
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
|
||||
|
||||
We try to bundle features in our major releases, e.g. `3.x`. That is why we might only review and, if accepted, merge your PR once an appropriate release is upcoming. Please understand that we cannot merge all feature ideas or that it might take a while. Check out the [roadmap](https://roadmap.getkirby.com) to see upcoming releases.
|
||||
|
||||
### Translations
|
||||
|
||||
We are really happy about any help with translations. Please do not directly translate JSON files, though. We use a service called Transifex to handle [all translations](https://translation.getkirby.com/). Create an account there and send us a request to join our translator group. Additionally, also send an email to <support@getkirby.com>. Unfortunately, we don't get notified properly about new translator requests.
|
||||
|
||||
## How we write code
|
||||
|
||||
### Style
|
||||
|
||||
#### Backend (PHP)
|
||||
|
||||
We use [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) to ensure a consistent style for our PHP code. It is mainly based on [PSR-12](https://www.php-fig.org/psr/psr-12/). [Install PHP CS Fixer globally](https://github.com/FriendsOfPHP/PHP-CS-Fixer#globally-composer) via Composer and then run `composer fix` in the `kirby` folder to check for inconsistencies and fix them. Our automated PR checks will fail if there are code style issues with your code.
|
||||
|
||||
#### Frontend/Panel (JavaScript, Vue)
|
||||
|
||||
We use [Prettier](https://prettier.io) to ensure a consistent style for our JavaScript and Vue code. After running `npm install` in the `kirby/panel` folder, you can run `npm run format` to check for inconsistencies and fix them. We also use [ESLint](https://eslint.org) which you can use by running `npm run lint` and/or `npm run lint:fix`.
|
||||
|
||||
### Documentation
|
||||
|
||||
In-code documentation and comments help us understand each other's code - or our own code after some months. Especially when matters get more complicated, we try to add a lot of comments to explain what the code does or why we implemented it like this. Even better than good comments is good code that is easy to understand.
|
||||
|
||||
#### Backend (PHP)
|
||||
|
||||
We use PHP [DocBlocks](https://docs.phpdoc.org/guide/references/phpdoc/basic-syntax.html#what-is-a-docblock) for classes and methods.
|
||||
|
||||
#### Frontend/Panel (JavaScript, Vue)
|
||||
|
||||
We use [JSDoc](https://jsdoc.app) for documenting JavaScript code, especially for [Vue components](https://vue-styleguidist.github.io/docs/Documenting.html).
|
||||
|
||||
#### Public documentation
|
||||
|
||||
We also document Kirby on the Kirby website at <https://getkirby.com>. However we recommend to wait with writing public documentation until the feature PR is merged. If you don't know where the documentation for a feature best belongs, don't worry. We can take care of writing the docs.
|
||||
|
||||
### Tests
|
||||
|
||||
Unit and integration tests help us prevent regressions when we make changes to the code. Every bug fix should also add a unit test for the fixed bug to make sure we won't re-introduce the same problem later down the road. Every new feature should be accompanied by unit tests to protect it from breaking through future changes.
|
||||
|
||||
#### Backend (PHP)
|
||||
|
||||
We use [PHPUnit](https://phpunit.de) for unit test for our PHP code. You can find all existing tests in the [`kirby/tests` subfolders](https://github.com/getkirby/kirby/tree/main/tests). Take a look to see how we usually structure our tests.
|
||||
|
||||
#### Frontend/Panel (JavaScript, Vue)
|
||||
|
||||
The Panel doesn't have extensive test coverage yet. That's an area we are still trying to improve.
|
||||
|
||||
We use [vitest](https://vitest.dev) for unit tests for JavaScript and Vue components - `.test.js` files next to the actual JavaScript/Vue file.
|
||||
|
||||
For integration tests, we use [cypress](https://www.cypress.io) - `.e2e.js` files.
|
||||
|
||||
## And last…
|
||||
|
||||
Let us know [in the forum](https://forum.getkirby.com) if you have questions.
|
||||
|
||||
**And once more: thank you!** :+1::tada:
|
||||
3
kirby/SECURITY.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# Security Policy
|
||||
|
||||
Please see the [Security Policy on the Kirby website](https://getkirby.com/security) for a list of the currently supported Kirby versions and of past security incidents as well as for information on how to report security vulnerabilities in the Kirby core or in the Panel.
|
||||
83
kirby/assets/whoops.css
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
body {
|
||||
background: #efefef;
|
||||
font: normal normal 400 12px/1.5 -apple-system, BlinkMacSystemFont, Segoe UI,
|
||||
Roboto, Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #313740;
|
||||
}
|
||||
|
||||
.exc-title-primary {
|
||||
color: hsl(0, 71%, 55%);
|
||||
}
|
||||
|
||||
.frame.active {
|
||||
color: hsl(0, 71%, 55%);
|
||||
box-shadow: inset -5px 0 0 0 #d16464;
|
||||
}
|
||||
|
||||
.frame:not(.active):hover {
|
||||
background: rgba(203, 215, 229, 0.5);
|
||||
}
|
||||
|
||||
.rightButton {
|
||||
color: #999;
|
||||
box-shadow: inset 0 0 0 1px #777;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.rightButton:hover {
|
||||
box-shadow: inset 0 0 0 1px #555;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.details-heading {
|
||||
color: #7e9abf;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.frame-code {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
pre.code-block,
|
||||
code.code-block,
|
||||
.frame-args.code-block,
|
||||
.frame-args.code-block samp {
|
||||
background: #16171a;
|
||||
}
|
||||
|
||||
.linenums li.current {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.linenums li.current.active {
|
||||
background: rgba(209, 100, 100, 0.3);
|
||||
}
|
||||
|
||||
pre .atv,
|
||||
code .atv,
|
||||
pre .str,
|
||||
code .str {
|
||||
color: #a7bd68;
|
||||
}
|
||||
|
||||
pre .tag,
|
||||
code .tag {
|
||||
color: #d16464;
|
||||
}
|
||||
|
||||
pre .kwd,
|
||||
code .kwd {
|
||||
color: #8abeb7;
|
||||
}
|
||||
|
||||
pre .atn,
|
||||
code .atn {
|
||||
color: #de935f;
|
||||
}
|
||||
35
kirby/bootstrap.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Validate the PHP version to already
|
||||
* stop at older or too recent versions
|
||||
*/
|
||||
if (
|
||||
version_compare(PHP_VERSION, '7.4.0', '>=') === false ||
|
||||
version_compare(PHP_VERSION, '8.2.0', '<') === false
|
||||
) {
|
||||
die(include __DIR__ . '/views/php.php');
|
||||
}
|
||||
|
||||
if (is_file($autoloader = dirname(__DIR__) . '/vendor/autoload.php')) {
|
||||
|
||||
/**
|
||||
* Always prefer a site-wide Composer autoloader
|
||||
* if it exists, it means that the user has probably
|
||||
* installed additional packages
|
||||
*/
|
||||
include $autoloader;
|
||||
} elseif (is_file($autoloader = __DIR__ . '/vendor/autoload.php')) {
|
||||
|
||||
/**
|
||||
* Fall back to the local autoloader if that exists
|
||||
*/
|
||||
include $autoloader;
|
||||
} else {
|
||||
|
||||
/**
|
||||
* If neither one exists, don't bother searching;
|
||||
* it's a custom directory setup and the users need to
|
||||
* load the autoloader themselves
|
||||
*/
|
||||
}
|
||||
3347
kirby/cacert.pem
Normal file
110
kirby/composer.json
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
{
|
||||
"name": "getkirby/cms",
|
||||
"description": "The Kirby 3 core",
|
||||
"license": "proprietary",
|
||||
"type": "kirby-cms",
|
||||
"version": "3.7.1",
|
||||
"keywords": [
|
||||
"kirby",
|
||||
"cms",
|
||||
"core"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Kirby Team",
|
||||
"email": "support@getkirby.com",
|
||||
"homepage": "https://getkirby.com"
|
||||
}
|
||||
],
|
||||
"homepage": "https://getkirby.com",
|
||||
"support": {
|
||||
"email": "support@getkirby.com",
|
||||
"issues": "https://github.com/getkirby/kirby/issues",
|
||||
"forum": "https://forum.getkirby.com",
|
||||
"source": "https://github.com/getkirby/kirby"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.4.0 <8.2.0",
|
||||
"ext-SimpleXML": "*",
|
||||
"ext-ctype": "*",
|
||||
"ext-curl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*",
|
||||
"ext-iconv": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-openssl": "*",
|
||||
"claviska/simpleimage": "3.6.5",
|
||||
"filp/whoops": "2.14.5",
|
||||
"getkirby/composer-installer": "^1.2.1",
|
||||
"laminas/laminas-escaper": "2.10.0",
|
||||
"michelf/php-smartypants": "1.8.1",
|
||||
"phpmailer/phpmailer": "6.6.3",
|
||||
"symfony/polyfill-intl-idn": "1.26.0",
|
||||
"symfony/polyfill-mbstring": "1.26.0"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-php72": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-PDO": "Support for using databases",
|
||||
"ext-apcu": "Support for the Apcu cache driver",
|
||||
"ext-exif": "Support for exif information from images",
|
||||
"ext-fileinfo": "Improved mime type detection for files",
|
||||
"ext-intl": "Improved i18n number formatting",
|
||||
"ext-memcached": "Support for the Memcached cache driver",
|
||||
"ext-zip": "Support for ZIP archive file functions",
|
||||
"ext-zlib": "Sanitization and validation for svgz files"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Kirby\\": "src/"
|
||||
},
|
||||
"classmap": [
|
||||
"dependencies/"
|
||||
],
|
||||
"files": [
|
||||
"config/setup.php",
|
||||
"config/helpers.php"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"getkirby/composer-installer": true
|
||||
},
|
||||
"optimize-autoloader": true,
|
||||
"platform": {
|
||||
"php": "7.4.0"
|
||||
},
|
||||
"platform-check": false
|
||||
},
|
||||
"extra": {
|
||||
"unused": [
|
||||
"symfony/polyfill-intl-idn"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"post-update-cmd": "curl -o cacert.pem https://curl.se/ca/cacert.pem",
|
||||
"analyze": [
|
||||
"@analyze:composer",
|
||||
"@analyze:psalm",
|
||||
"@analyze:phpcpd",
|
||||
"@analyze:phpmd"
|
||||
],
|
||||
"analyze:composer": "composer validate --strict --no-check-version --no-check-all",
|
||||
"analyze:phpcpd": "phpcpd --fuzzy --exclude tests --exclude vendor .",
|
||||
"analyze:phpmd": "phpmd . ansi phpmd.xml.dist --exclude 'dependencies/*,tests/*,vendor/*'",
|
||||
"analyze:psalm": "psalm",
|
||||
"build": "./scripts/build",
|
||||
"ci": [
|
||||
"@fix",
|
||||
"@analyze",
|
||||
"@test"
|
||||
],
|
||||
"fix": "php-cs-fixer fix",
|
||||
"test": "phpunit --stderr --coverage-html=tests/coverage",
|
||||
"zip": "composer archive --format=zip --file=dist"
|
||||
}
|
||||
}
|
||||
758
kirby/composer.lock
generated
Normal file
|
|
@ -0,0 +1,758 @@
|
|||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "1d71d8053b544a0d3380bc67234ff81d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "claviska/simpleimage",
|
||||
"version": "3.6.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/claviska/SimpleImage.git",
|
||||
"reference": "00f90662686696b9b7157dbb176183aabe89700f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/claviska/SimpleImage/zipball/00f90662686696b9b7157dbb176183aabe89700f",
|
||||
"reference": "00f90662686696b9b7157dbb176183aabe89700f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"league/color-extractor": "0.3.*",
|
||||
"php": ">=5.6.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"claviska": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Cory LaViska",
|
||||
"homepage": "http://www.abeautifulsite.net/",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "A PHP class that makes working with images as simple as possible.",
|
||||
"support": {
|
||||
"issues": "https://github.com/claviska/SimpleImage/issues",
|
||||
"source": "https://github.com/claviska/SimpleImage/tree/3.6.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/claviska",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-12-01T12:42:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "filp/whoops",
|
||||
"version": "2.14.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/filp/whoops.git",
|
||||
"reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
|
||||
"reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^5.5.9 || ^7.0 || ^8.0",
|
||||
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^0.9 || ^1.0",
|
||||
"phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
|
||||
"symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/var-dumper": "Pretty print complex values better with var-dumper available",
|
||||
"whoops/soap": "Formats errors as SOAP responses"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.7-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Whoops\\": "src/Whoops/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Filipe Dobreira",
|
||||
"homepage": "https://github.com/filp",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "php error handling for cool kids",
|
||||
"homepage": "https://filp.github.io/whoops/",
|
||||
"keywords": [
|
||||
"error",
|
||||
"exception",
|
||||
"handling",
|
||||
"library",
|
||||
"throwable",
|
||||
"whoops"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/filp/whoops/issues",
|
||||
"source": "https://github.com/filp/whoops/tree/2.14.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/denis-sokolov",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-01-07T12:00:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "getkirby/composer-installer",
|
||||
"version": "1.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/getkirby/composer-installer.git",
|
||||
"reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/getkirby/composer-installer/zipball/c98ece30bfba45be7ce457e1102d1b169d922f3d",
|
||||
"reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-plugin-api": "^1.0 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^1.8 || ^2.0"
|
||||
},
|
||||
"type": "composer-plugin",
|
||||
"extra": {
|
||||
"class": "Kirby\\ComposerInstaller\\Plugin"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Kirby\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Kirby's custom Composer installer for the Kirby CMS and for Kirby plugins",
|
||||
"homepage": "https://getkirby.com",
|
||||
"support": {
|
||||
"issues": "https://github.com/getkirby/composer-installer/issues",
|
||||
"source": "https://github.com/getkirby/composer-installer/tree/1.2.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://getkirby.com/buy",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2020-12-28T12:54:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laminas/laminas-escaper",
|
||||
"version": "2.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laminas/laminas-escaper.git",
|
||||
"reference": "58af67282db37d24e584a837a94ee55b9c7552be"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be",
|
||||
"reference": "58af67282db37d24e584a837a94ee55b9c7552be",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-ctype": "*",
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.4 || ~8.0.0 || ~8.1.0"
|
||||
},
|
||||
"conflict": {
|
||||
"zendframework/zend-escaper": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"infection/infection": "^0.26.6",
|
||||
"laminas/laminas-coding-standard": "~2.3.0",
|
||||
"maglnet/composer-require-checker": "^3.8.0",
|
||||
"phpunit/phpunit": "^9.5.18",
|
||||
"psalm/plugin-phpunit": "^0.16.1",
|
||||
"vimeo/psalm": "^4.22.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laminas\\Escaper\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
|
||||
"homepage": "https://laminas.dev",
|
||||
"keywords": [
|
||||
"escaper",
|
||||
"laminas"
|
||||
],
|
||||
"support": {
|
||||
"chat": "https://laminas.dev/chat",
|
||||
"docs": "https://docs.laminas.dev/laminas-escaper/",
|
||||
"forum": "https://discourse.laminas.dev",
|
||||
"issues": "https://github.com/laminas/laminas-escaper/issues",
|
||||
"rss": "https://github.com/laminas/laminas-escaper/releases.atom",
|
||||
"source": "https://github.com/laminas/laminas-escaper"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://funding.communitybridge.org/projects/laminas-project",
|
||||
"type": "community_bridge"
|
||||
}
|
||||
],
|
||||
"time": "2022-03-08T20:15:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/color-extractor",
|
||||
"version": "0.3.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/color-extractor.git",
|
||||
"reference": "837086ec60f50c84c611c613963e4ad2e2aec806"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/837086ec60f50c84c611c613963e4ad2e2aec806",
|
||||
"reference": "837086ec60f50c84c611c613963e4ad2e2aec806",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"php": ">=5.4.0"
|
||||
},
|
||||
"replace": {
|
||||
"matthecat/colorextractor": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2",
|
||||
"phpunit/phpunit": "~5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mathieu Lechat",
|
||||
"email": "math.lechat@gmail.com",
|
||||
"homepage": "http://matthecat.com",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "Extract colors from an image as a human would do.",
|
||||
"homepage": "https://github.com/thephpleague/color-extractor",
|
||||
"keywords": [
|
||||
"color",
|
||||
"extract",
|
||||
"human",
|
||||
"image",
|
||||
"palette"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/color-extractor/issues",
|
||||
"source": "https://github.com/thephpleague/color-extractor/tree/master"
|
||||
},
|
||||
"time": "2016-12-15T09:30:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "michelf/php-smartypants",
|
||||
"version": "1.8.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/michelf/php-smartypants.git",
|
||||
"reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/michelf/php-smartypants/zipball/47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
|
||||
"reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Michelf": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Michel Fortin",
|
||||
"email": "michel.fortin@michelf.ca",
|
||||
"homepage": "https://michelf.ca/",
|
||||
"role": "Developer"
|
||||
},
|
||||
{
|
||||
"name": "John Gruber",
|
||||
"homepage": "https://daringfireball.net/"
|
||||
}
|
||||
],
|
||||
"description": "PHP SmartyPants",
|
||||
"homepage": "https://michelf.ca/projects/php-smartypants/",
|
||||
"keywords": [
|
||||
"dashes",
|
||||
"quotes",
|
||||
"spaces",
|
||||
"typographer",
|
||||
"typography"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/michelf/php-smartypants/issues",
|
||||
"source": "https://github.com/michelf/php-smartypants/tree/1.8.1"
|
||||
},
|
||||
"time": "2016-12-13T01:01:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.6.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-ctype": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*",
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
|
||||
"doctrine/annotations": "^1.2",
|
||||
"php-parallel-lint/php-console-highlighter": "^1.0.0",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.3.2",
|
||||
"phpcompatibility/php-compatibility": "^9.3.5",
|
||||
"roave/security-advisories": "dev-latest",
|
||||
"squizlabs/php_codesniffer": "^3.6.2",
|
||||
"yoast/phpunit-polyfills": "^1.0.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
|
||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||
"psr/log": "For optional PSR-3 debug logging",
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PHPMailer\\PHPMailer\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Marcus Bointon",
|
||||
"email": "phpmailer@synchromedia.co.uk"
|
||||
},
|
||||
{
|
||||
"name": "Jim Jagielski",
|
||||
"email": "jimjag@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Andy Prevost",
|
||||
"email": "codeworxtech@users.sourceforge.net"
|
||||
},
|
||||
{
|
||||
"name": "Brent R. Matzelle"
|
||||
}
|
||||
],
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/Synchro",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-20T09:21:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/log",
|
||||
"version": "1.1.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-fig/log.git",
|
||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
|
||||
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Psr\\Log\\": "Psr/Log/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "PHP-FIG",
|
||||
"homepage": "https://www.php-fig.org/"
|
||||
}
|
||||
],
|
||||
"description": "Common interface for logging libraries",
|
||||
"homepage": "https://github.com/php-fig/log",
|
||||
"keywords": [
|
||||
"log",
|
||||
"psr",
|
||||
"psr-3"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/php-fig/log/tree/1.1.4"
|
||||
},
|
||||
"time": "2021-05-03T11:20:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
|
||||
"reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1",
|
||||
"symfony/polyfill-intl-normalizer": "^1.10",
|
||||
"symfony/polyfill-php72": "^1.10"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Intl\\Idn\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Laurent Bassin",
|
||||
"email": "laurent@bassin.info"
|
||||
},
|
||||
{
|
||||
"name": "Trevor Rowbotham",
|
||||
"email": "trevor.rowbotham@pm.me"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"idn",
|
||||
"intl",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
"reference": "219aa369ceff116e673852dce47c3a41794c14bd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
|
||||
"reference": "219aa369ceff116e673852dce47c3a41794c14bd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-intl": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
|
||||
},
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for intl's Normalizer class and related functions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"intl",
|
||||
"normalizer",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-mbstring",
|
||||
"version": "v1.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"provide": {
|
||||
"ext-mbstring": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "For best performance"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.26-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/polyfill",
|
||||
"url": "https://github.com/symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill for the Mbstring extension",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"mbstring",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-24T11:49:31+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": ">=7.4.0 <8.2.0",
|
||||
"ext-simplexml": "*",
|
||||
"ext-ctype": "*",
|
||||
"ext-curl": "*",
|
||||
"ext-dom": "*",
|
||||
"ext-filter": "*",
|
||||
"ext-hash": "*",
|
||||
"ext-iconv": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-openssl": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"platform-overrides": {
|
||||
"php": "7.4.0"
|
||||
},
|
||||
"plugin-api-version": "2.3.0"
|
||||
}
|
||||
81
kirby/config/aliases.php
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
// cms classes
|
||||
'collection' => 'Kirby\Cms\Collection',
|
||||
'field' => 'Kirby\Cms\Field',
|
||||
'file' => 'Kirby\Cms\File',
|
||||
'files' => 'Kirby\Cms\Files',
|
||||
'find' => 'Kirby\Cms\Find',
|
||||
'helpers' => 'Kirby\Cms\Helpers',
|
||||
'html' => 'Kirby\Cms\Html',
|
||||
'kirby' => 'Kirby\Cms\App',
|
||||
'page' => 'Kirby\Cms\Page',
|
||||
'pages' => 'Kirby\Cms\Pages',
|
||||
'pagination' => 'Kirby\Cms\Pagination',
|
||||
'r' => 'Kirby\Cms\R',
|
||||
'response' => 'Kirby\Cms\Response',
|
||||
's' => 'Kirby\Cms\S',
|
||||
'sane' => 'Kirby\Sane\Sane',
|
||||
'site' => 'Kirby\Cms\Site',
|
||||
'structure' => 'Kirby\Cms\Structure',
|
||||
'url' => 'Kirby\Cms\Url',
|
||||
'user' => 'Kirby\Cms\User',
|
||||
'users' => 'Kirby\Cms\Users',
|
||||
'visitor' => 'Kirby\Cms\Visitor',
|
||||
|
||||
// data handler
|
||||
'data' => 'Kirby\Data\Data',
|
||||
'json' => 'Kirby\Data\Json',
|
||||
'yaml' => 'Kirby\Data\Yaml',
|
||||
|
||||
// file classes
|
||||
'asset' => 'Kirby\Filesystem\Asset',
|
||||
'dir' => 'Kirby\Filesystem\Dir',
|
||||
'f' => 'Kirby\Filesystem\F',
|
||||
'mime' => 'Kirby\Filesystem\Mime',
|
||||
|
||||
// data classes
|
||||
'database' => 'Kirby\Database\Database',
|
||||
'db' => 'Kirby\Database\Db',
|
||||
|
||||
// exceptions
|
||||
'errorpageexception' => 'Kirby\Exception\ErrorPageException',
|
||||
|
||||
// http classes
|
||||
'cookie' => 'Kirby\Http\Cookie',
|
||||
'header' => 'Kirby\Http\Header',
|
||||
'remote' => 'Kirby\Http\Remote',
|
||||
'server' => 'Kirby\Http\Server',
|
||||
|
||||
// image classes
|
||||
'dimensions' => 'Kirby\Image\Dimensions',
|
||||
|
||||
// panel classes
|
||||
'panel' => 'Kirby\Panel\Panel',
|
||||
|
||||
// toolkit classes
|
||||
'a' => 'Kirby\Toolkit\A',
|
||||
'c' => 'Kirby\Toolkit\Config',
|
||||
'config' => 'Kirby\Toolkit\Config',
|
||||
'escape' => 'Kirby\Toolkit\Escape',
|
||||
'i18n' => 'Kirby\Toolkit\I18n',
|
||||
'obj' => 'Kirby\Toolkit\Obj',
|
||||
'str' => 'Kirby\Toolkit\Str',
|
||||
'tpl' => 'Kirby\Toolkit\Tpl',
|
||||
'v' => 'Kirby\Toolkit\V',
|
||||
'xml' => 'Kirby\Toolkit\Xml',
|
||||
|
||||
// TODO: remove in 4.0.0
|
||||
'kirby\cms\asset' => 'Kirby\Filesystem\Asset',
|
||||
'kirby\cms\dir' => 'Kirby\Filesystem\Dir',
|
||||
'kirby\cms\filename' => 'Kirby\Filesystem\Filename',
|
||||
'kirby\cms\filefoundation' => 'Kirby\Filesystem\IsFile',
|
||||
'kirby\cms\form' => 'Kirby\Form\Form',
|
||||
'kirby\cms\kirbytag' => 'Kirby\Text\KirbyTag',
|
||||
'kirby\cms\kirbytags' => 'Kirby\Text\KirbyTags',
|
||||
'kirby\toolkit\dir' => 'Kirby\Filesystem\Dir',
|
||||
'kirby\toolkit\f' => 'Kirby\Filesystem\F',
|
||||
'kirby\toolkit\file' => 'Kirby\Filesystem\File',
|
||||
'kirby\toolkit\mime' => 'Kirby\Filesystem\Mime',
|
||||
];
|
||||
27
kirby/config/api/authentication.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Exception\PermissionException;
|
||||
|
||||
return function () {
|
||||
$auth = $this->kirby()->auth();
|
||||
$allowImpersonation = $this->kirby()->option('api.allowImpersonation') ?? false;
|
||||
|
||||
// csrf token check
|
||||
if (
|
||||
$auth->type($allowImpersonation) === 'session' &&
|
||||
$auth->csrf() === false
|
||||
) {
|
||||
throw new PermissionException('Unauthenticated');
|
||||
}
|
||||
|
||||
// get user from session or basic auth
|
||||
if ($user = $auth->user(null, $allowImpersonation)) {
|
||||
if ($user->role()->permissions()->for('access', 'panel') === false) {
|
||||
throw new PermissionException(['key' => 'access.panel']);
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
throw new PermissionException('Unauthenticated');
|
||||
};
|
||||
70
kirby/config/api/collections.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Api Collection Definitions
|
||||
*/
|
||||
return [
|
||||
|
||||
/**
|
||||
* Children
|
||||
*/
|
||||
'children' => [
|
||||
'model' => 'page',
|
||||
'type' => 'Kirby\Cms\Pages',
|
||||
'view' => 'compact'
|
||||
],
|
||||
|
||||
/**
|
||||
* Files
|
||||
*/
|
||||
'files' => [
|
||||
'model' => 'file',
|
||||
'type' => 'Kirby\Cms\Files'
|
||||
],
|
||||
|
||||
/**
|
||||
* Languages
|
||||
*/
|
||||
'languages' => [
|
||||
'model' => 'language',
|
||||
'type' => 'Kirby\Cms\Languages'
|
||||
],
|
||||
|
||||
/**
|
||||
* Pages
|
||||
*/
|
||||
'pages' => [
|
||||
'model' => 'page',
|
||||
'type' => 'Kirby\Cms\Pages',
|
||||
'view' => 'compact'
|
||||
],
|
||||
|
||||
/**
|
||||
* Roles
|
||||
*/
|
||||
'roles' => [
|
||||
'model' => 'role',
|
||||
'type' => 'Kirby\Cms\Roles',
|
||||
'view' => 'compact'
|
||||
],
|
||||
|
||||
/**
|
||||
* Translations
|
||||
*/
|
||||
'translations' => [
|
||||
'model' => 'translation',
|
||||
'type' => 'Kirby\Cms\Translations',
|
||||
'view' => 'compact'
|
||||
],
|
||||
|
||||
/**
|
||||
* Users
|
||||
*/
|
||||
'users' => [
|
||||
'default' => fn () => $this->users(),
|
||||
'model' => 'user',
|
||||
'type' => 'Kirby\Cms\Users',
|
||||
'view' => 'compact'
|
||||
]
|
||||
|
||||
];
|
||||
20
kirby/config/api/models.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Api Model Definitions
|
||||
*/
|
||||
return [
|
||||
'File' => include __DIR__ . '/models/File.php',
|
||||
'FileBlueprint' => include __DIR__ . '/models/FileBlueprint.php',
|
||||
'FileVersion' => include __DIR__ . '/models/FileVersion.php',
|
||||
'Language' => include __DIR__ . '/models/Language.php',
|
||||
'Page' => include __DIR__ . '/models/Page.php',
|
||||
'PageBlueprint' => include __DIR__ . '/models/PageBlueprint.php',
|
||||
'Role' => include __DIR__ . '/models/Role.php',
|
||||
'Site' => include __DIR__ . '/models/Site.php',
|
||||
'SiteBlueprint' => include __DIR__ . '/models/SiteBlueprint.php',
|
||||
'System' => include __DIR__ . '/models/System.php',
|
||||
'Translation' => include __DIR__ . '/models/Translation.php',
|
||||
'User' => include __DIR__ . '/models/User.php',
|
||||
'UserBlueprint' => include __DIR__ . '/models/UserBlueprint.php',
|
||||
];
|
||||
115
kirby/config/api/models/File.php
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\File;
|
||||
use Kirby\Form\Form;
|
||||
|
||||
/**
|
||||
* File
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'blueprint' => fn (File $file) => $file->blueprint(),
|
||||
'content' => fn (File $file) => Form::for($file)->values(),
|
||||
'dimensions' => fn (File $file) => $file->dimensions()->toArray(),
|
||||
'dragText' => fn (File $file) => $file->panel()->dragText(),
|
||||
'exists' => fn (File $file) => $file->exists(),
|
||||
'extension' => fn (File $file) => $file->extension(),
|
||||
'filename' => fn (File $file) => $file->filename(),
|
||||
'id' => fn (File $file) => $file->id(),
|
||||
'link' => fn (File $file) => $file->panel()->url(true),
|
||||
'mime' => fn (File $file) => $file->mime(),
|
||||
'modified' => fn (File $file) => $file->modified('c'),
|
||||
'name' => fn (File $file) => $file->name(),
|
||||
'next' => fn (File $file) => $file->next(),
|
||||
'nextWithTemplate' => function (File $file) {
|
||||
$files = $file->templateSiblings()->sorted();
|
||||
$index = $files->indexOf($file);
|
||||
|
||||
return $files->nth($index + 1);
|
||||
},
|
||||
'niceSize' => fn (File $file) => $file->niceSize(),
|
||||
'options' => fn (File $file) => $file->panel()->options(),
|
||||
'panelImage' => fn (File $file) => $file->panel()->image(),
|
||||
'panelUrl' => fn (File $file) => $file->panel()->url(true),
|
||||
'prev' => fn (File $file) => $file->prev(),
|
||||
'prevWithTemplate' => function (File $file) {
|
||||
$files = $file->templateSiblings()->sorted();
|
||||
$index = $files->indexOf($file);
|
||||
|
||||
return $files->nth($index - 1);
|
||||
},
|
||||
'parent' => fn (File $file) => $file->parent(),
|
||||
'parents' => fn (File $file) => $file->parents()->flip(),
|
||||
'size' => fn (File $file) => $file->size(),
|
||||
'template' => fn (File $file) => $file->template(),
|
||||
'thumbs' => function ($file) {
|
||||
if ($file->isResizable() === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'tiny' => $file->resize(128)->url(),
|
||||
'small' => $file->resize(256)->url(),
|
||||
'medium' => $file->resize(512)->url(),
|
||||
'large' => $file->resize(768)->url(),
|
||||
'huge' => $file->resize(1024)->url(),
|
||||
];
|
||||
},
|
||||
'type' => fn (File $file) => $file->type(),
|
||||
'url' => fn (File $file) => $file->url(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\File',
|
||||
'views' => [
|
||||
'default' => [
|
||||
'content',
|
||||
'dimensions',
|
||||
'exists',
|
||||
'extension',
|
||||
'filename',
|
||||
'id',
|
||||
'link',
|
||||
'mime',
|
||||
'modified',
|
||||
'name',
|
||||
'next' => 'compact',
|
||||
'niceSize',
|
||||
'parent' => 'compact',
|
||||
'options',
|
||||
'prev' => 'compact',
|
||||
'size',
|
||||
'template',
|
||||
'type',
|
||||
'url'
|
||||
],
|
||||
'compact' => [
|
||||
'filename',
|
||||
'id',
|
||||
'link',
|
||||
'type',
|
||||
'url',
|
||||
],
|
||||
'panel' => [
|
||||
'blueprint',
|
||||
'content',
|
||||
'dimensions',
|
||||
'extension',
|
||||
'filename',
|
||||
'id',
|
||||
'link',
|
||||
'mime',
|
||||
'modified',
|
||||
'name',
|
||||
'nextWithTemplate' => 'compact',
|
||||
'niceSize',
|
||||
'options',
|
||||
'panelIcon',
|
||||
'panelImage',
|
||||
'parent' => 'compact',
|
||||
'parents' => ['id', 'slug', 'title'],
|
||||
'prevWithTemplate' => 'compact',
|
||||
'template',
|
||||
'type',
|
||||
'url'
|
||||
]
|
||||
],
|
||||
];
|
||||
18
kirby/config/api/models/FileBlueprint.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\FileBlueprint;
|
||||
|
||||
/**
|
||||
* FileBlueprint
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'name' => fn (FileBlueprint $blueprint) => $blueprint->name(),
|
||||
'options' => fn (FileBlueprint $blueprint) => $blueprint->options(),
|
||||
'tabs' => fn (FileBlueprint $blueprint) => $blueprint->tabs(),
|
||||
'title' => fn (FileBlueprint $blueprint) => $blueprint->title(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\FileBlueprint',
|
||||
'views' => [
|
||||
],
|
||||
];
|
||||
59
kirby/config/api/models/FileVersion.php
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\FileVersion;
|
||||
|
||||
/**
|
||||
* FileVersion
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'dimensions' => fn (FileVersion $file) => $file->dimensions()->toArray(),
|
||||
'exists' => fn (FileVersion $file) => $file->exists(),
|
||||
'extension' => fn (FileVersion $file) => $file->extension(),
|
||||
'filename' => fn (FileVersion $file) => $file->filename(),
|
||||
'id' => fn (FileVersion $file) => $file->id(),
|
||||
'mime' => fn (FileVersion $file) => $file->mime(),
|
||||
'modified' => fn (FileVersion $file) => $file->modified('c'),
|
||||
'name' => fn (FileVersion $file) => $file->name(),
|
||||
'niceSize' => fn (FileVersion $file) => $file->niceSize(),
|
||||
'size' => fn (FileVersion $file) => $file->size(),
|
||||
'type' => fn (FileVersion $file) => $file->type(),
|
||||
'url' => fn (FileVersion $file) => $file->url(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\FileVersion',
|
||||
'views' => [
|
||||
'default' => [
|
||||
'dimensions',
|
||||
'exists',
|
||||
'extension',
|
||||
'filename',
|
||||
'id',
|
||||
'mime',
|
||||
'modified',
|
||||
'name',
|
||||
'niceSize',
|
||||
'size',
|
||||
'type',
|
||||
'url'
|
||||
],
|
||||
'compact' => [
|
||||
'filename',
|
||||
'id',
|
||||
'type',
|
||||
'url',
|
||||
],
|
||||
'panel' => [
|
||||
'dimensions',
|
||||
'extension',
|
||||
'filename',
|
||||
'id',
|
||||
'mime',
|
||||
'modified',
|
||||
'name',
|
||||
'niceSize',
|
||||
'template',
|
||||
'type',
|
||||
'url'
|
||||
]
|
||||
],
|
||||
];
|
||||
30
kirby/config/api/models/Language.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Language;
|
||||
|
||||
/**
|
||||
* Language
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'code' => fn (Language $language) => $language->code(),
|
||||
'default' => fn (Language $language) => $language->isDefault(),
|
||||
'direction' => fn (Language $language) => $language->direction(),
|
||||
'locale' => fn (Language $language) => $language->locale(),
|
||||
'name' => fn (Language $language) => $language->name(),
|
||||
'rules' => fn (Language $language) => $language->rules(),
|
||||
'url' => fn (Language $language) => $language->url(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\Language',
|
||||
'views' => [
|
||||
'default' => [
|
||||
'code',
|
||||
'default',
|
||||
'direction',
|
||||
'locale',
|
||||
'name',
|
||||
'rules',
|
||||
'url'
|
||||
]
|
||||
]
|
||||
];
|
||||
123
kirby/config/api/models/Page.php
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Helpers;
|
||||
use Kirby\Cms\Page;
|
||||
use Kirby\Form\Form;
|
||||
|
||||
/**
|
||||
* Page
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'blueprint' => fn (Page $page) => $page->blueprint(),
|
||||
'blueprints' => fn (Page $page) => $page->blueprints(),
|
||||
'children' => fn (Page $page) => $page->children(),
|
||||
'content' => fn (Page $page) => Form::for($page)->values(),
|
||||
'drafts' => fn (Page $page) => $page->drafts(),
|
||||
'errors' => fn (Page $page) => $page->errors(),
|
||||
'files' => fn (Page $page) => $page->files()->sorted(),
|
||||
'hasChildren' => fn (Page $page) => $page->hasChildren(),
|
||||
'hasDrafts' => fn (Page $page) => $page->hasDrafts(),
|
||||
'hasFiles' => fn (Page $page) => $page->hasFiles(),
|
||||
'id' => fn (Page $page) => $page->id(),
|
||||
'isSortable' => fn (Page $page) => $page->isSortable(),
|
||||
/**
|
||||
* @deprecated 3.6.0
|
||||
* @todo Remove in 3.8.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
'next' => function (Page $page) {
|
||||
Helpers::deprecated('The API field page.next has been deprecated and will be removed in 3.8.0.');
|
||||
|
||||
return $page
|
||||
->nextAll()
|
||||
->filter('intendedTemplate', $page->intendedTemplate())
|
||||
->filter('status', $page->status())
|
||||
->filter('isReadable', true)
|
||||
->first();
|
||||
},
|
||||
'num' => fn (Page $page) => $page->num(),
|
||||
'options' => fn (Page $page) => $page->panel()->options(['preview']),
|
||||
'panelImage' => fn (Page $page) => $page->panel()->image(),
|
||||
'parent' => fn (Page $page) => $page->parent(),
|
||||
'parents' => fn (Page $page) => $page->parents()->flip(),
|
||||
/**
|
||||
* @deprecated 3.6.0
|
||||
* @todo Remove in 3.8.0
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
'prev' => function (Page $page) {
|
||||
Helpers::deprecated('The API field page.prev has been deprecated and will be removed in 3.8.0.');
|
||||
|
||||
return $page
|
||||
->prevAll()
|
||||
->filter('intendedTemplate', $page->intendedTemplate())
|
||||
->filter('status', $page->status())
|
||||
->filter('isReadable', true)
|
||||
->last();
|
||||
},
|
||||
'previewUrl' => fn (Page $page) => $page->previewUrl(),
|
||||
'siblings' => function (Page $page) {
|
||||
if ($page->isDraft() === true) {
|
||||
return $page->parentModel()->children()->not($page);
|
||||
} else {
|
||||
return $page->siblings();
|
||||
}
|
||||
},
|
||||
'slug' => fn (Page $page) => $page->slug(),
|
||||
'status' => fn (Page $page) => $page->status(),
|
||||
'template' => fn (Page $page) => $page->intendedTemplate()->name(),
|
||||
'title' => fn (Page $page) => $page->title()->value(),
|
||||
'url' => fn (Page $page) => $page->url(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\Page',
|
||||
'views' => [
|
||||
'compact' => [
|
||||
'id',
|
||||
'title',
|
||||
'url',
|
||||
'num'
|
||||
],
|
||||
'default' => [
|
||||
'content',
|
||||
'id',
|
||||
'status',
|
||||
'num',
|
||||
'options',
|
||||
'parent' => 'compact',
|
||||
'slug',
|
||||
'template',
|
||||
'title',
|
||||
'url'
|
||||
],
|
||||
'panel' => [
|
||||
'id',
|
||||
'blueprint',
|
||||
'content',
|
||||
'status',
|
||||
'options',
|
||||
'next' => ['id', 'slug', 'title'],
|
||||
'parents' => ['id', 'slug', 'title'],
|
||||
'prev' => ['id', 'slug', 'title'],
|
||||
'previewUrl',
|
||||
'slug',
|
||||
'title',
|
||||
'url'
|
||||
],
|
||||
'selector' => [
|
||||
'id',
|
||||
'title',
|
||||
'parent' => [
|
||||
'id',
|
||||
'title'
|
||||
],
|
||||
'children' => [
|
||||
'hasChildren',
|
||||
'id',
|
||||
'panelIcon',
|
||||
'panelImage',
|
||||
'title',
|
||||
],
|
||||
]
|
||||
],
|
||||
];
|
||||
21
kirby/config/api/models/PageBlueprint.php
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\PageBlueprint;
|
||||
|
||||
/**
|
||||
* PageBlueprint
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'name' => fn (PageBlueprint $blueprint) => $blueprint->name(),
|
||||
'num' => fn (PageBlueprint $blueprint) => $blueprint->num(),
|
||||
'options' => fn (PageBlueprint $blueprint) => $blueprint->options(),
|
||||
'preview' => fn (PageBlueprint $blueprint) => $blueprint->preview(),
|
||||
'status' => fn (PageBlueprint $blueprint) => $blueprint->status(),
|
||||
'tabs' => fn (PageBlueprint $blueprint) => $blueprint->tabs(),
|
||||
'title' => fn (PageBlueprint $blueprint) => $blueprint->title(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\PageBlueprint',
|
||||
'views' => [
|
||||
],
|
||||
];
|
||||
23
kirby/config/api/models/Role.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Role;
|
||||
|
||||
/**
|
||||
* Role
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'description' => fn (Role $role) => $role->description(),
|
||||
'name' => fn (Role $role) => $role->name(),
|
||||
'permissions' => fn (Role $role) => $role->permissions()->toArray(),
|
||||
'title' => fn (Role $role) => $role->title(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\Role',
|
||||
'views' => [
|
||||
'compact' => [
|
||||
'description',
|
||||
'name',
|
||||
'title'
|
||||
]
|
||||
]
|
||||
];
|
||||
52
kirby/config/api/models/Site.php
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Site;
|
||||
use Kirby\Form\Form;
|
||||
|
||||
/**
|
||||
* Site
|
||||
*/
|
||||
return [
|
||||
'default' => fn () => $this->site(),
|
||||
'fields' => [
|
||||
'blueprint' => fn (Site $site) => $site->blueprint(),
|
||||
'children' => fn (Site $site) => $site->children(),
|
||||
'content' => fn (Site $site) => Form::for($site)->values(),
|
||||
'drafts' => fn (Site $site) => $site->drafts(),
|
||||
'files' => fn (Site $site) => $site->files()->sorted(),
|
||||
'options' => fn (Site $site) => $site->permissions()->toArray(),
|
||||
'previewUrl' => fn (Site $site) => $site->previewUrl(),
|
||||
'title' => fn (Site $site) => $site->title()->value(),
|
||||
'url' => fn (Site $site) => $site->url(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\Site',
|
||||
'views' => [
|
||||
'compact' => [
|
||||
'title',
|
||||
'url'
|
||||
],
|
||||
'default' => [
|
||||
'content',
|
||||
'options',
|
||||
'title',
|
||||
'url'
|
||||
],
|
||||
'panel' => [
|
||||
'title',
|
||||
'blueprint',
|
||||
'content',
|
||||
'options',
|
||||
'previewUrl',
|
||||
'url'
|
||||
],
|
||||
'selector' => [
|
||||
'title',
|
||||
'children' => [
|
||||
'id',
|
||||
'title',
|
||||
'panelIcon',
|
||||
'hasChildren'
|
||||
],
|
||||
]
|
||||
]
|
||||
];
|
||||
17
kirby/config/api/models/SiteBlueprint.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\SiteBlueprint;
|
||||
|
||||
/**
|
||||
* SiteBlueprint
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'name' => fn (SiteBlueprint $blueprint) => $blueprint->name(),
|
||||
'options' => fn (SiteBlueprint $blueprint) => $blueprint->options(),
|
||||
'tabs' => fn (SiteBlueprint $blueprint) => $blueprint->tabs(),
|
||||
'title' => fn (SiteBlueprint $blueprint) => $blueprint->title(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\SiteBlueprint',
|
||||
'views' => [],
|
||||
];
|
||||
98
kirby/config/api/models/System.php
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\System;
|
||||
use Kirby\Toolkit\Str;
|
||||
|
||||
/**
|
||||
* System
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'ascii' => fn () => Str::$ascii,
|
||||
'authStatus' => fn () => $this->kirby()->auth()->status()->toArray(),
|
||||
'defaultLanguage' => fn () => $this->kirby()->panelLanguage(),
|
||||
'isOk' => fn (System $system) => $system->isOk(),
|
||||
'isInstallable' => fn (System $system) => $system->isInstallable(),
|
||||
'isInstalled' => fn (System $system) => $system->isInstalled(),
|
||||
'isLocal' => fn (System $system) => $system->isLocal(),
|
||||
'multilang' => fn () => $this->kirby()->option('languages', false) !== false,
|
||||
'languages' => fn () => $this->kirby()->languages(),
|
||||
'license' => fn (System $system) => $system->license(),
|
||||
'locales' => function () {
|
||||
$locales = [];
|
||||
$translations = $this->kirby()->translations();
|
||||
foreach ($translations as $translation) {
|
||||
$locales[$translation->code()] = $translation->locale();
|
||||
}
|
||||
return $locales;
|
||||
},
|
||||
'loginMethods' => fn (System $system) => array_keys($system->loginMethods()),
|
||||
'requirements' => fn (System $system) => $system->toArray(),
|
||||
'site' => fn (System $system) => $system->title(),
|
||||
'slugs' => fn () => Str::$language,
|
||||
'title' => fn () => $this->site()->title()->value(),
|
||||
'translation' => function () {
|
||||
if ($user = $this->user()) {
|
||||
$translationCode = $user->language();
|
||||
} else {
|
||||
$translationCode = $this->kirby()->panelLanguage();
|
||||
}
|
||||
|
||||
if ($translation = $this->kirby()->translation($translationCode)) {
|
||||
return $translation;
|
||||
} else {
|
||||
return $this->kirby()->translation('en');
|
||||
}
|
||||
},
|
||||
'kirbytext' => fn () => $this->kirby()->option('panel.kirbytext') ?? true,
|
||||
'user' => fn () => $this->user(),
|
||||
'version' => function () {
|
||||
$user = $this->user();
|
||||
|
||||
if ($user && $user->role()->permissions()->for('access', 'system') === true) {
|
||||
return $this->kirby()->version();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
],
|
||||
'type' => 'Kirby\Cms\System',
|
||||
'views' => [
|
||||
'login' => [
|
||||
'authStatus',
|
||||
'isOk',
|
||||
'isInstallable',
|
||||
'isInstalled',
|
||||
'loginMethods',
|
||||
'title',
|
||||
'translation'
|
||||
],
|
||||
'troubleshooting' => [
|
||||
'isOk',
|
||||
'isInstallable',
|
||||
'isInstalled',
|
||||
'title',
|
||||
'translation',
|
||||
'requirements'
|
||||
],
|
||||
'panel' => [
|
||||
'ascii',
|
||||
'defaultLanguage',
|
||||
'isOk',
|
||||
'isInstalled',
|
||||
'isLocal',
|
||||
'kirbytext',
|
||||
'languages',
|
||||
'license',
|
||||
'locales',
|
||||
'multilang',
|
||||
'requirements',
|
||||
'site',
|
||||
'slugs',
|
||||
'title',
|
||||
'translation',
|
||||
'user' => 'auth',
|
||||
'version'
|
||||
]
|
||||
],
|
||||
];
|
||||
24
kirby/config/api/models/Translation.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Translation;
|
||||
|
||||
/**
|
||||
* Translation
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'author' => fn (Translation $translation) => $translation->author(),
|
||||
'data' => fn (Translation $translation) => $translation->dataWithFallback(),
|
||||
'direction' => fn (Translation $translation) => $translation->direction(),
|
||||
'id' => fn (Translation $translation) => $translation->id(),
|
||||
'name' => fn (Translation $translation) => $translation->name(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\Translation',
|
||||
'views' => [
|
||||
'compact' => [
|
||||
'direction',
|
||||
'id',
|
||||
'name'
|
||||
]
|
||||
]
|
||||
];
|
||||
77
kirby/config/api/models/User.php
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\User;
|
||||
use Kirby\Form\Form;
|
||||
|
||||
/**
|
||||
* User
|
||||
*/
|
||||
return [
|
||||
'default' => fn () => $this->user(),
|
||||
'fields' => [
|
||||
'avatar' => fn (User $user) => $user->avatar() ? $user->avatar()->crop(512) : null,
|
||||
'blueprint' => fn (User $user) => $user->blueprint(),
|
||||
'content' => fn (User $user) => Form::for($user)->values(),
|
||||
'email' => fn (User $user) => $user->email(),
|
||||
'files' => fn (User $user) => $user->files()->sorted(),
|
||||
'id' => fn (User $user) => $user->id(),
|
||||
'language' => fn (User $user) => $user->language(),
|
||||
'name' => fn (User $user) => $user->name()->value(),
|
||||
'next' => fn (User $user) => $user->next(),
|
||||
'options' => fn (User $user) => $user->panel()->options(),
|
||||
'panelImage' => fn (User $user) => $user->panel()->image(),
|
||||
'permissions' => fn (User $user) => $user->role()->permissions()->toArray(),
|
||||
'prev' => fn (User $user) => $user->prev(),
|
||||
'role' => fn (User $user) => $user->role(),
|
||||
'roles' => fn (User $user) => $user->roles(),
|
||||
'username' => fn (User $user) => $user->username()
|
||||
],
|
||||
'type' => 'Kirby\Cms\User',
|
||||
'views' => [
|
||||
'default' => [
|
||||
'avatar',
|
||||
'content',
|
||||
'email',
|
||||
'id',
|
||||
'language',
|
||||
'name',
|
||||
'next' => 'compact',
|
||||
'options',
|
||||
'prev' => 'compact',
|
||||
'role',
|
||||
'username'
|
||||
],
|
||||
'compact' => [
|
||||
'avatar' => 'compact',
|
||||
'id',
|
||||
'email',
|
||||
'language',
|
||||
'name',
|
||||
'role' => 'compact',
|
||||
'username'
|
||||
],
|
||||
'auth' => [
|
||||
'avatar' => 'compact',
|
||||
'permissions',
|
||||
'email',
|
||||
'id',
|
||||
'name',
|
||||
'role',
|
||||
'language'
|
||||
],
|
||||
'panel' => [
|
||||
'avatar' => 'compact',
|
||||
'blueprint',
|
||||
'content',
|
||||
'email',
|
||||
'id',
|
||||
'language',
|
||||
'name',
|
||||
'next' => ['id', 'name'],
|
||||
'options',
|
||||
'prev' => ['id', 'name'],
|
||||
'role',
|
||||
'username',
|
||||
],
|
||||
]
|
||||
];
|
||||
18
kirby/config/api/models/UserBlueprint.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\UserBlueprint;
|
||||
|
||||
/**
|
||||
* UserBlueprint
|
||||
*/
|
||||
return [
|
||||
'fields' => [
|
||||
'name' => fn (UserBlueprint $blueprint) => $blueprint->name(),
|
||||
'options' => fn (UserBlueprint $blueprint) => $blueprint->options(),
|
||||
'tabs' => fn (UserBlueprint $blueprint) => $blueprint->tabs(),
|
||||
'title' => fn (UserBlueprint $blueprint) => $blueprint->title(),
|
||||
],
|
||||
'type' => 'Kirby\Cms\UserBlueprint',
|
||||
'views' => [
|
||||
],
|
||||
];
|
||||
26
kirby/config/api/routes.php
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Api Routes Definitions
|
||||
*/
|
||||
return function ($kirby) {
|
||||
$routes = array_merge(
|
||||
include __DIR__ . '/routes/auth.php',
|
||||
include __DIR__ . '/routes/pages.php',
|
||||
include __DIR__ . '/routes/roles.php',
|
||||
include __DIR__ . '/routes/site.php',
|
||||
include __DIR__ . '/routes/users.php',
|
||||
include __DIR__ . '/routes/files.php',
|
||||
include __DIR__ . '/routes/lock.php',
|
||||
include __DIR__ . '/routes/system.php',
|
||||
include __DIR__ . '/routes/translations.php'
|
||||
);
|
||||
|
||||
// only add the language routes if the
|
||||
// multi language setup is activated
|
||||
if ($kirby->option('languages', false) !== false) {
|
||||
$routes = array_merge($routes, include __DIR__ . '/routes/languages.php');
|
||||
}
|
||||
|
||||
return $routes;
|
||||
};
|
||||
108
kirby/config/api/routes/auth.php
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Exception\InvalidArgumentException;
|
||||
use Kirby\Exception\NotFoundException;
|
||||
|
||||
/**
|
||||
* Authentication
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => 'auth',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
if ($user = $this->kirby()->auth()->user()) {
|
||||
return $this->resolve($user)->view('auth');
|
||||
}
|
||||
|
||||
throw new NotFoundException('The user cannot be found');
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'auth/code',
|
||||
'method' => 'POST',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
$auth = $this->kirby()->auth();
|
||||
|
||||
// csrf token check
|
||||
if ($auth->type() === 'session' && $auth->csrf() === false) {
|
||||
throw new InvalidArgumentException('Invalid CSRF token');
|
||||
}
|
||||
|
||||
$user = $auth->verifyChallenge($this->requestBody('code'));
|
||||
|
||||
return [
|
||||
'code' => 200,
|
||||
'status' => 'ok',
|
||||
'user' => $this->resolve($user)->view('auth')->toArray()
|
||||
];
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'auth/login',
|
||||
'method' => 'POST',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
$auth = $this->kirby()->auth();
|
||||
$methods = $this->kirby()->system()->loginMethods();
|
||||
|
||||
// csrf token check
|
||||
if ($auth->type() === 'session' && $auth->csrf() === false) {
|
||||
throw new InvalidArgumentException('Invalid CSRF token');
|
||||
}
|
||||
|
||||
$email = $this->requestBody('email');
|
||||
$long = $this->requestBody('long');
|
||||
$password = $this->requestBody('password');
|
||||
|
||||
if ($password) {
|
||||
if (isset($methods['password']) !== true) {
|
||||
throw new InvalidArgumentException('Login with password is not enabled');
|
||||
}
|
||||
|
||||
if (
|
||||
isset($methods['password']['2fa']) === true &&
|
||||
$methods['password']['2fa'] === true
|
||||
) {
|
||||
$status = $auth->login2fa($email, $password, $long);
|
||||
} else {
|
||||
$user = $auth->login($email, $password, $long);
|
||||
}
|
||||
} else {
|
||||
if (isset($methods['code']) === true) {
|
||||
$mode = 'login';
|
||||
} elseif (isset($methods['password-reset']) === true) {
|
||||
$mode = 'password-reset';
|
||||
} else {
|
||||
throw new InvalidArgumentException('Login without password is not enabled');
|
||||
}
|
||||
|
||||
$status = $auth->createChallenge($email, $long, $mode);
|
||||
}
|
||||
|
||||
if (isset($user)) {
|
||||
return [
|
||||
'code' => 200,
|
||||
'status' => 'ok',
|
||||
'user' => $this->resolve($user)->view('auth')->toArray()
|
||||
];
|
||||
} else {
|
||||
return [
|
||||
'code' => 200,
|
||||
'status' => 'ok',
|
||||
'challenge' => $status->challenge()
|
||||
];
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'auth/logout',
|
||||
'method' => 'POST',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
$this->kirby()->auth()->logout();
|
||||
return true;
|
||||
}
|
||||
],
|
||||
];
|
||||
132
kirby/config/api/routes/files.php
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
<?php
|
||||
|
||||
// routing pattern to match all models with files
|
||||
$pattern = '(account|pages/[^/]+|site|users/[^/]+)';
|
||||
|
||||
/**
|
||||
* Files Routes
|
||||
*/
|
||||
return [
|
||||
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)/sections/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $path, string $filename, string $sectionName) {
|
||||
if ($section = $this->file($path, $filename)->blueprint()->section($sectionName)) {
|
||||
return $section->toResponse();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)/fields/(:any)/(:all?)',
|
||||
'method' => 'ALL',
|
||||
'action' => function (string $parent, string $filename, string $fieldName, string $path = null) {
|
||||
if ($file = $this->file($parent, $filename)) {
|
||||
return $this->fieldApi($file, $fieldName, $path);
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $path) {
|
||||
return $this->parent($path)->files()->sorted();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files',
|
||||
'method' => 'POST',
|
||||
'action' => function (string $path) {
|
||||
// move_uploaded_file() not working with unit test
|
||||
// @codeCoverageIgnoreStart
|
||||
return $this->upload(function ($source, $filename) use ($path) {
|
||||
return $this->parent($path)->createFile([
|
||||
'content' => [
|
||||
'sort' => $this->requestBody('sort')
|
||||
],
|
||||
'source' => $source,
|
||||
'template' => $this->requestBody('template'),
|
||||
'filename' => $filename
|
||||
]);
|
||||
});
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function (string $path) {
|
||||
$files = $this->parent($path)->files();
|
||||
|
||||
if ($this->requestMethod() === 'GET') {
|
||||
return $files->search($this->requestQuery('q'));
|
||||
} else {
|
||||
return $files->query($this->requestBody());
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/sort',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $path) {
|
||||
return $this->parent($path)->files()->changeSort(
|
||||
$this->requestBody('files'),
|
||||
$this->requestBody('index')
|
||||
);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $path, string $filename) {
|
||||
return $this->file($path, $filename);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $path, string $filename) {
|
||||
return $this->file($path, $filename)->update($this->requestBody(), $this->language(), true);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)',
|
||||
'method' => 'POST',
|
||||
'action' => function (string $path, string $filename) {
|
||||
return $this->upload(function ($source) use ($path, $filename) {
|
||||
return $this->file($path, $filename)->replace($source);
|
||||
});
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)',
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $path, string $filename) {
|
||||
return $this->file($path, $filename)->delete();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => $pattern . '/files/(:any)/name',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $path, string $filename) {
|
||||
return $this->file($path, $filename)->changeName($this->requestBody('name'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'files/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function () {
|
||||
$files = $this
|
||||
->site()
|
||||
->index(true)
|
||||
->filter('isReadable', true)
|
||||
->files();
|
||||
|
||||
if ($this->requestMethod() === 'GET') {
|
||||
return $files->search($this->requestQuery('q'));
|
||||
} else {
|
||||
return $files->query($this->requestBody());
|
||||
}
|
||||
}
|
||||
],
|
||||
];
|
||||
46
kirby/config/api/routes/languages.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Roles Routes
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => 'languages',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
return $this->kirby()->languages();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'languages',
|
||||
'method' => 'POST',
|
||||
'action' => function () {
|
||||
return $this->kirby()->languages()->create($this->requestBody());
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'languages/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $code) {
|
||||
return $this->kirby()->languages()->find($code);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'languages/(:any)',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $code) {
|
||||
if ($language = $this->kirby()->languages()->find($code)) {
|
||||
return $language->update($this->requestBody());
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'languages/(:any)',
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $code) {
|
||||
if ($language = $this->kirby()->languages()->find($code)) {
|
||||
return $language->delete();
|
||||
}
|
||||
}
|
||||
]
|
||||
];
|
||||
44
kirby/config/api/routes/lock.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Content Lock Routes
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => '(:all)/lock',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $path) {
|
||||
if ($lock = $this->parent($path)->lock()) {
|
||||
return $lock->create();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => '(:all)/lock',
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $path) {
|
||||
if ($lock = $this->parent($path)->lock()) {
|
||||
return $lock->remove();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => '(:all)/unlock',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $path) {
|
||||
if ($lock = $this->parent($path)->lock()) {
|
||||
return $lock->unlock();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => '(:all)/unlock',
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $path) {
|
||||
if ($lock = $this->parent($path)->lock()) {
|
||||
return $lock->resolve();
|
||||
}
|
||||
}
|
||||
],
|
||||
];
|
||||
121
kirby/config/api/routes/pages.php
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Page Routes
|
||||
*/
|
||||
return [
|
||||
|
||||
[
|
||||
'pattern' => 'pages/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->update($this->requestBody(), $this->language(), true);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)',
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->delete($this->requestBody('force', false));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/blueprint',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->blueprint();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/blueprints',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->blueprints($this->requestQuery('section'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/children',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->pages($id, $this->requestQuery('status'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/children',
|
||||
'method' => 'POST',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->createChild($this->requestBody());
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/children/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function (string $id) {
|
||||
return $this->searchPages($id);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/duplicate',
|
||||
'method' => 'POST',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->duplicate($this->requestBody('slug'), [
|
||||
'children' => $this->requestBody('children'),
|
||||
'files' => $this->requestBody('files'),
|
||||
]);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/slug',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->changeSlug($this->requestBody('slug'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/status',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->changeStatus($this->requestBody('status'), $this->requestBody('position'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/template',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->changeTemplate($this->requestBody('template'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/title',
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->page($id)->changeTitle($this->requestBody('title'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/sections/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id, string $sectionName) {
|
||||
if ($section = $this->page($id)->blueprint()->section($sectionName)) {
|
||||
return $section->toResponse();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'pages/(:any)/fields/(:any)/(:all?)',
|
||||
'method' => 'ALL',
|
||||
'action' => function (string $id, string $fieldName, string $path = null) {
|
||||
if ($page = $this->page($id)) {
|
||||
return $this->fieldApi($page, $fieldName, $path);
|
||||
}
|
||||
}
|
||||
],
|
||||
];
|
||||
30
kirby/config/api/routes/roles.php
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Roles Routes
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => 'roles',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
$kirby = $this->kirby();
|
||||
|
||||
switch ($kirby->request()->get('canBe')) {
|
||||
case 'changed':
|
||||
return $kirby->roles()->canBeChanged();
|
||||
case 'created':
|
||||
return $kirby->roles()->canBeCreated();
|
||||
default:
|
||||
return $kirby->roles();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'roles/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $name) {
|
||||
return $this->kirby()->roles()->find($name);
|
||||
}
|
||||
]
|
||||
];
|
||||
104
kirby/config/api/routes/site.php
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* Site Routes
|
||||
*/
|
||||
return [
|
||||
|
||||
[
|
||||
'pattern' => 'site',
|
||||
'action' => function () {
|
||||
return $this->site();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site',
|
||||
'method' => 'PATCH',
|
||||
'action' => function () {
|
||||
return $this->site()->update($this->requestBody(), $this->language(), true);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/children',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
return $this->pages(null, $this->requestQuery('status'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/children',
|
||||
'method' => 'POST',
|
||||
'action' => function () {
|
||||
return $this->site()->createChild($this->requestBody());
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/children/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function () {
|
||||
return $this->searchPages();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/blueprint',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
return $this->site()->blueprint();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/blueprints',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
return $this->site()->blueprints($this->requestQuery('section'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/find',
|
||||
'method' => 'POST',
|
||||
'action' => function () {
|
||||
return $this->site()->find(false, ...$this->requestBody());
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/title',
|
||||
'method' => 'PATCH',
|
||||
'action' => function () {
|
||||
return $this->site()->changeTitle($this->requestBody('title'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function () {
|
||||
$pages = $this
|
||||
->site()
|
||||
->index(true)
|
||||
->filter('isReadable', true);
|
||||
|
||||
if ($this->requestMethod() === 'GET') {
|
||||
return $pages->search($this->requestQuery('q'));
|
||||
} else {
|
||||
return $pages->query($this->requestBody());
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/sections/(:any)',
|
||||
'method' => 'GET',
|
||||
'action' => function (string $sectionName) {
|
||||
if ($section = $this->site()->blueprint()->section($sectionName)) {
|
||||
return $section->toResponse();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'site/fields/(:any)/(:all?)',
|
||||
'method' => 'ALL',
|
||||
'action' => function (string $fieldName, string $path = null) {
|
||||
return $this->fieldApi($this->site(), $fieldName, $path);
|
||||
}
|
||||
]
|
||||
|
||||
];
|
||||
79
kirby/config/api/routes/system.php
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Exception\Exception;
|
||||
use Kirby\Exception\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* System Routes
|
||||
*/
|
||||
return [
|
||||
|
||||
[
|
||||
'pattern' => 'system',
|
||||
'method' => 'GET',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
$system = $this->kirby()->system();
|
||||
|
||||
if ($this->kirby()->user()) {
|
||||
return $system;
|
||||
} else {
|
||||
if ($system->isOk() === true) {
|
||||
$info = $this->resolve($system)->view('login')->toArray();
|
||||
} else {
|
||||
$info = $this->resolve($system)->view('troubleshooting')->toArray();
|
||||
}
|
||||
|
||||
return [
|
||||
'status' => 'ok',
|
||||
'data' => $info,
|
||||
'type' => 'model'
|
||||
];
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'system/register',
|
||||
'method' => 'POST',
|
||||
'action' => function () {
|
||||
return $this->kirby()->system()->register($this->requestBody('license'), $this->requestBody('email'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'system/install',
|
||||
'method' => 'POST',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
$system = $this->kirby()->system();
|
||||
$auth = $this->kirby()->auth();
|
||||
|
||||
// csrf token check
|
||||
if ($auth->type() === 'session' && $auth->csrf() === false) {
|
||||
throw new InvalidArgumentException('Invalid CSRF token');
|
||||
}
|
||||
|
||||
if ($system->isOk() === false) {
|
||||
throw new Exception('The server is not setup correctly');
|
||||
}
|
||||
|
||||
if ($system->isInstallable() === false) {
|
||||
throw new Exception('The Panel cannot be installed');
|
||||
}
|
||||
|
||||
if ($system->isInstalled() === true) {
|
||||
throw new Exception('The Panel is already installed');
|
||||
}
|
||||
|
||||
// create the first user
|
||||
$user = $this->users()->create($this->requestBody());
|
||||
$token = $user->login($this->requestBody('password'));
|
||||
|
||||
return [
|
||||
'status' => 'ok',
|
||||
'token' => $token,
|
||||
'user' => $this->resolve($user)->view('auth')->toArray()
|
||||
];
|
||||
}
|
||||
]
|
||||
|
||||
];
|
||||
24
kirby/config/api/routes/translations.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Translations Routes
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => 'translations',
|
||||
'method' => 'GET',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
return $this->kirby()->translations();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'translations/(:any)',
|
||||
'method' => 'GET',
|
||||
'auth' => false,
|
||||
'action' => function (string $code) {
|
||||
return $this->kirby()->translations()->find($code);
|
||||
}
|
||||
]
|
||||
|
||||
];
|
||||
207
kirby/config/api/routes/users.php
Normal file
|
|
@ -0,0 +1,207 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Filesystem\F;
|
||||
|
||||
/**
|
||||
* User Routes
|
||||
*/
|
||||
return [
|
||||
[
|
||||
'pattern' => 'users',
|
||||
'method' => 'GET',
|
||||
'action' => function () {
|
||||
return $this->users()->sort('username', 'asc', 'email', 'asc');
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'users',
|
||||
'method' => 'POST',
|
||||
'action' => function () {
|
||||
return $this->users()->create($this->requestBody());
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => 'users/search',
|
||||
'method' => 'GET|POST',
|
||||
'action' => function () {
|
||||
if ($this->requestMethod() === 'GET') {
|
||||
return $this->users()->search($this->requestQuery('q'));
|
||||
} else {
|
||||
return $this->users()->query($this->requestBody());
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)',
|
||||
'users/(:any)',
|
||||
],
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)',
|
||||
'users/(:any)',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->update($this->requestBody(), $this->language(), true);
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)',
|
||||
'users/(:any)',
|
||||
],
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->delete();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/avatar',
|
||||
'users/(:any)/avatar',
|
||||
],
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->avatar();
|
||||
}
|
||||
],
|
||||
// @codeCoverageIgnoreStart
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/avatar',
|
||||
'users/(:any)/avatar',
|
||||
],
|
||||
'method' => 'POST',
|
||||
'action' => function (string $id) {
|
||||
if ($avatar = $this->user($id)->avatar()) {
|
||||
$avatar->delete();
|
||||
}
|
||||
|
||||
return $this->upload(function ($source, $filename) use ($id) {
|
||||
return $this->user($id)->createFile([
|
||||
'filename' => 'profile.' . F::extension($filename),
|
||||
'template' => 'avatar',
|
||||
'source' => $source
|
||||
]);
|
||||
}, $single = true);
|
||||
}
|
||||
],
|
||||
// @codeCoverageIgnoreEnd
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/avatar',
|
||||
'users/(:any)/avatar',
|
||||
],
|
||||
'method' => 'DELETE',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->avatar()->delete();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/blueprint',
|
||||
'users/(:any)/blueprint',
|
||||
],
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->blueprint();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/blueprints',
|
||||
'users/(:any)/blueprints',
|
||||
],
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->blueprints($this->requestQuery('section'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/email',
|
||||
'users/(:any)/email',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->changeEmail($this->requestBody('email'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/language',
|
||||
'users/(:any)/language',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->changeLanguage($this->requestBody('language'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/name',
|
||||
'users/(:any)/name',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->changeName($this->requestBody('name'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/password',
|
||||
'users/(:any)/password',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->changePassword($this->requestBody('password'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/role',
|
||||
'users/(:any)/role',
|
||||
],
|
||||
'method' => 'PATCH',
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->changeRole($this->requestBody('role'));
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/roles',
|
||||
'users/(:any)/roles',
|
||||
],
|
||||
'action' => function (string $id) {
|
||||
return $this->user($id)->roles();
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/sections/(:any)',
|
||||
'users/(:any)/sections/(:any)',
|
||||
],
|
||||
'method' => 'GET',
|
||||
'action' => function (string $id, string $sectionName) {
|
||||
if ($section = $this->user($id)->blueprint()->section($sectionName)) {
|
||||
return $section->toResponse();
|
||||
}
|
||||
}
|
||||
],
|
||||
[
|
||||
'pattern' => [
|
||||
'(account)/fields/(:any)/(:all?)',
|
||||
'users/(:any)/fields/(:any)/(:all?)',
|
||||
],
|
||||
'method' => 'ALL',
|
||||
'action' => function (string $id, string $fieldName, string $path = null) {
|
||||
return $this->fieldApi($this->user($id), $fieldName, $path);
|
||||
}
|
||||
],
|
||||
];
|
||||
14
kirby/config/areas/account.php
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function () {
|
||||
return [
|
||||
'icon' => 'account',
|
||||
'label' => I18n::translate('view.account'),
|
||||
'search' => 'users',
|
||||
'dialogs' => require __DIR__ . '/account/dialogs.php',
|
||||
'dropdowns' => require __DIR__ . '/account/dropdowns.php',
|
||||
'views' => require __DIR__ . '/account/views.php'
|
||||
];
|
||||
};
|
||||
70
kirby/config/areas/account/dialogs.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
$dialogs = require __DIR__ . '/../users/dialogs.php';
|
||||
|
||||
return [
|
||||
|
||||
// change email
|
||||
'account.changeEmail' => [
|
||||
'pattern' => '(account)/changeEmail',
|
||||
'load' => $dialogs['user.changeEmail']['load'],
|
||||
'submit' => $dialogs['user.changeEmail']['submit'],
|
||||
],
|
||||
|
||||
// change language
|
||||
'account.changeLanguage' => [
|
||||
'pattern' => '(account)/changeLanguage',
|
||||
'load' => $dialogs['user.changeLanguage']['load'],
|
||||
'submit' => $dialogs['user.changeLanguage']['submit'],
|
||||
],
|
||||
|
||||
// change name
|
||||
'account.changeName' => [
|
||||
'pattern' => '(account)/changeName',
|
||||
'load' => $dialogs['user.changeName']['load'],
|
||||
'submit' => $dialogs['user.changeName']['submit'],
|
||||
],
|
||||
|
||||
// change password
|
||||
'account.changePassword' => [
|
||||
'pattern' => '(account)/changePassword',
|
||||
'load' => $dialogs['user.changePassword']['load'],
|
||||
'submit' => $dialogs['user.changePassword']['submit'],
|
||||
],
|
||||
|
||||
// change role
|
||||
'account.changeRole' => [
|
||||
'pattern' => '(account)/changeRole',
|
||||
'load' => $dialogs['user.changeRole']['load'],
|
||||
'submit' => $dialogs['user.changeRole']['submit'],
|
||||
],
|
||||
|
||||
// delete
|
||||
'account.delete' => [
|
||||
'pattern' => '(account)/delete',
|
||||
'load' => $dialogs['user.delete']['load'],
|
||||
'submit' => $dialogs['user.delete']['submit'],
|
||||
],
|
||||
|
||||
// change file name
|
||||
'account.file.changeName' => [
|
||||
'pattern' => '(account)/files/(:any)/changeName',
|
||||
'load' => $dialogs['user.file.changeName']['load'],
|
||||
'submit' => $dialogs['user.file.changeName']['submit'],
|
||||
],
|
||||
|
||||
// change file sort
|
||||
'account.file.changeSort' => [
|
||||
'pattern' => '(account)/files/(:any)/changeSort',
|
||||
'load' => $dialogs['user.file.changeSort']['load'],
|
||||
'submit' => $dialogs['user.file.changeSort']['submit'],
|
||||
],
|
||||
|
||||
// delete
|
||||
'account.file.delete' => [
|
||||
'pattern' => '(account)/files/(:any)/delete',
|
||||
'load' => $dialogs['user.file.delete']['load'],
|
||||
'submit' => $dialogs['user.file.delete']['submit'],
|
||||
],
|
||||
|
||||
];
|
||||
14
kirby/config/areas/account/dropdowns.php
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
$dropdowns = require __DIR__ . '/../users/dropdowns.php';
|
||||
|
||||
return [
|
||||
'account' => [
|
||||
'pattern' => '(account)',
|
||||
'options' => $dropdowns['user']['options']
|
||||
],
|
||||
'account.file' => [
|
||||
'pattern' => '(account)/files/(:any)',
|
||||
'options' => $dropdowns['user.file']['options']
|
||||
],
|
||||
];
|
||||
35
kirby/config/areas/account/views.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Panel\Panel;
|
||||
|
||||
return [
|
||||
'account' => [
|
||||
'pattern' => 'account',
|
||||
'action' => fn () => [
|
||||
'component' => 'k-account-view',
|
||||
'props' => App::instance()->user()->panel()->props(),
|
||||
],
|
||||
],
|
||||
'account.file' => [
|
||||
'pattern' => 'account/files/(:any)',
|
||||
'action' => function (string $filename) {
|
||||
return Find::file('account', $filename)->panel()->view();
|
||||
}
|
||||
],
|
||||
'account.logout' => [
|
||||
'pattern' => 'logout',
|
||||
'auth' => false,
|
||||
'action' => function () {
|
||||
if ($user = App::instance()->user()) {
|
||||
$user->logout();
|
||||
}
|
||||
Panel::go('login');
|
||||
},
|
||||
],
|
||||
'account.password' => [
|
||||
'pattern' => 'reset-password',
|
||||
'action' => fn () => ['component' => 'k-reset-password-view']
|
||||
]
|
||||
];
|
||||
132
kirby/config/areas/files/dialogs.php
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Panel\Field;
|
||||
use Kirby\Panel\Panel;
|
||||
use Kirby\Toolkit\Escape;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
/**
|
||||
* Shared file dialogs
|
||||
* They are included in the site and
|
||||
* users area to create dialogs there.
|
||||
* The array keys are replaced by
|
||||
* the appropriate routes in the areas.
|
||||
*/
|
||||
return [
|
||||
'changeName' => [
|
||||
'load' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'name' => [
|
||||
'label' => I18n::translate('name'),
|
||||
'type' => 'slug',
|
||||
'required' => true,
|
||||
'icon' => 'title',
|
||||
'allow' => '@._-',
|
||||
'after' => '.' . $file->extension(),
|
||||
'preselect' => true
|
||||
]
|
||||
],
|
||||
'submitButton' => I18n::translate('rename'),
|
||||
'value' => [
|
||||
'name' => $file->name(),
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
$renamed = $file->changeName($file->kirby()->request()->get('name'));
|
||||
$oldUrl = $file->panel()->url(true);
|
||||
$newUrl = $renamed->panel()->url(true);
|
||||
$response = [
|
||||
'event' => 'file.changeName',
|
||||
'dispatch' => [
|
||||
'content/move' => [
|
||||
$oldUrl,
|
||||
$newUrl
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
// check for a necessary redirect after the filename has changed
|
||||
if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) {
|
||||
$response['redirect'] = $newUrl;
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
],
|
||||
|
||||
'changeSort' => [
|
||||
'load' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'position' => Field::filePosition($file)
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'position' => $file->sort()->isEmpty() ? $file->siblings(false)->count() + 1 : $file->sort()->toInt(),
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
$files = $file->siblings()->sorted();
|
||||
$ids = $files->keys();
|
||||
$newIndex = (int)($file->kirby()->request()->get('position')) - 1;
|
||||
$oldIndex = $files->indexOf($file);
|
||||
|
||||
array_splice($ids, $oldIndex, 1);
|
||||
array_splice($ids, $newIndex, 0, $file->id());
|
||||
|
||||
$files->changeSort($ids);
|
||||
|
||||
return [
|
||||
'event' => 'file.sort',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
'delete' => [
|
||||
'load' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
return [
|
||||
'component' => 'k-remove-dialog',
|
||||
'props' => [
|
||||
'text' => I18n::template('file.delete.confirm', [
|
||||
'filename' => Escape::html($file->filename())
|
||||
]),
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $path, string $filename) {
|
||||
$file = Find::file($path, $filename);
|
||||
$redirect = false;
|
||||
$referrer = Panel::referrer();
|
||||
$url = $file->panel()->url(true);
|
||||
|
||||
$file->delete();
|
||||
|
||||
// redirect to the parent model URL
|
||||
// if the dialog has been opened in the file view
|
||||
if ($referrer === $url) {
|
||||
$redirect = $file->parent()->panel()->url(true);
|
||||
}
|
||||
|
||||
return [
|
||||
'event' => 'file.delete',
|
||||
'dispatch' => ['content/remove' => [$url]],
|
||||
'redirect' => $redirect
|
||||
];
|
||||
}
|
||||
],
|
||||
];
|
||||
9
kirby/config/areas/files/dropdowns.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Find;
|
||||
|
||||
return [
|
||||
'file' => function (string $parent, string $filename) {
|
||||
return Find::file($parent, $filename)->panel()->dropdown();
|
||||
}
|
||||
];
|
||||
40
kirby/config/areas/installation.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Panel\Panel;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'icon' => 'settings',
|
||||
'label' => I18n::translate('view.installation'),
|
||||
'views' => [
|
||||
'installation' => [
|
||||
'pattern' => 'installation',
|
||||
'auth' => false,
|
||||
'action' => function () use ($kirby) {
|
||||
$system = $kirby->system();
|
||||
return [
|
||||
'component' => 'k-installation-view',
|
||||
'props' => [
|
||||
'isInstallable' => $system->isInstallable(),
|
||||
'isInstalled' => $system->isInstalled(),
|
||||
'isOk' => $system->isOk(),
|
||||
'requirements' => $system->status(),
|
||||
'translations' => $kirby->translations()->values(function ($translation) {
|
||||
return [
|
||||
'text' => $translation->name(),
|
||||
'value' => $translation->code(),
|
||||
];
|
||||
}),
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
'installation.fallback' => [
|
||||
'pattern' => '(:all)',
|
||||
'auth' => false,
|
||||
'action' => fn () => Panel::go('installation')
|
||||
]
|
||||
]
|
||||
];
|
||||
};
|
||||
13
kirby/config/areas/languages.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'icon' => 'globe',
|
||||
'label' => I18n::translate('view.languages'),
|
||||
'menu' => true,
|
||||
'dialogs' => require __DIR__ . '/languages/dialogs.php',
|
||||
'views' => require __DIR__ . '/languages/views.php'
|
||||
];
|
||||
};
|
||||
155
kirby/config/areas/languages/dialogs.php
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Panel\Field;
|
||||
use Kirby\Toolkit\A;
|
||||
use Kirby\Toolkit\Escape;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
$languageDialogFields = [
|
||||
'name' => [
|
||||
'label' => I18n::translate('language.name'),
|
||||
'type' => 'text',
|
||||
'required' => true,
|
||||
'icon' => 'title'
|
||||
],
|
||||
'code' => [
|
||||
'label' => I18n::translate('language.code'),
|
||||
'type' => 'text',
|
||||
'required' => true,
|
||||
'counter' => false,
|
||||
'icon' => 'globe',
|
||||
'width' => '1/2'
|
||||
],
|
||||
'direction' => [
|
||||
'label' => I18n::translate('language.direction'),
|
||||
'type' => 'select',
|
||||
'required' => true,
|
||||
'empty' => false,
|
||||
'options' => [
|
||||
['value' => 'ltr', 'text' => I18n::translate('language.direction.ltr')],
|
||||
['value' => 'rtl', 'text' => I18n::translate('language.direction.rtl')]
|
||||
],
|
||||
'width' => '1/2'
|
||||
],
|
||||
'locale' => [
|
||||
'label' => I18n::translate('language.locale'),
|
||||
'type' => 'text',
|
||||
],
|
||||
];
|
||||
|
||||
return [
|
||||
|
||||
// create language
|
||||
'language.create' => [
|
||||
'pattern' => 'languages/create',
|
||||
'load' => function () use ($languageDialogFields) {
|
||||
return [
|
||||
'component' => 'k-language-dialog',
|
||||
'props' => [
|
||||
'fields' => $languageDialogFields,
|
||||
'submitButton' => I18n::translate('language.create'),
|
||||
'value' => [
|
||||
'code' => '',
|
||||
'direction' => 'ltr',
|
||||
'locale' => '',
|
||||
'name' => '',
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function () {
|
||||
$kirby = App::instance();
|
||||
|
||||
$data = $kirby->request()->get([
|
||||
'code',
|
||||
'direction',
|
||||
'locale',
|
||||
'name'
|
||||
]);
|
||||
$kirby->languages()->create($data);
|
||||
|
||||
return [
|
||||
'event' => 'language.create'
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// delete language
|
||||
'language.delete' => [
|
||||
'pattern' => 'languages/(:any)/delete',
|
||||
'load' => function (string $id) {
|
||||
$language = Find::language($id);
|
||||
return [
|
||||
'component' => 'k-remove-dialog',
|
||||
'props' => [
|
||||
'text' => I18n::template('language.delete.confirm', [
|
||||
'name' => Escape::html($language->name())
|
||||
])
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
Find::language($id)->delete();
|
||||
return [
|
||||
'event' => 'language.delete',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// update language
|
||||
'language.update' => [
|
||||
'pattern' => 'languages/(:any)/update',
|
||||
'load' => function (string $id) use ($languageDialogFields) {
|
||||
$language = Find::language($id);
|
||||
$fields = $languageDialogFields;
|
||||
$locale = $language->locale();
|
||||
|
||||
// use the first locale key if there's only one
|
||||
if (count($locale) === 1) {
|
||||
$locale = A::first($locale);
|
||||
}
|
||||
|
||||
// the code of an existing language cannot be changed
|
||||
$fields['code']['disabled'] = true;
|
||||
|
||||
// if the locale settings is more complex than just a
|
||||
// single string, the text field won't do it anymore.
|
||||
// Changes can only be made in the language file and
|
||||
// we display a warning box instead.
|
||||
if (is_array($locale) === true) {
|
||||
$fields['locale'] = [
|
||||
'label' => $fields['locale']['label'],
|
||||
'type' => 'info',
|
||||
'text' => I18n::translate('language.locale.warning')
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-language-dialog',
|
||||
'props' => [
|
||||
'fields' => $fields,
|
||||
'submitButton' => I18n::translate('save'),
|
||||
'value' => [
|
||||
'code' => $language->code(),
|
||||
'direction' => $language->direction(),
|
||||
'locale' => $locale,
|
||||
'name' => $language->name(),
|
||||
'rules' => $language->rules(),
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$kirby = App::instance();
|
||||
|
||||
$data = $kirby->request()->get(['direction', 'locale', 'name']);
|
||||
$language = Find::language($id)->update($data);
|
||||
|
||||
return [
|
||||
'event' => 'language.update'
|
||||
];
|
||||
}
|
||||
],
|
||||
];
|
||||
25
kirby/config/areas/languages/views.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Toolkit\Escape;
|
||||
|
||||
return [
|
||||
'languages' => [
|
||||
'pattern' => 'languages',
|
||||
'action' => function () {
|
||||
$kirby = App::instance();
|
||||
|
||||
return [
|
||||
'component' => 'k-languages-view',
|
||||
'props' => [
|
||||
'languages' => $kirby->languages()->values(fn ($language) => [
|
||||
'default' => $language->isDefault(),
|
||||
'id' => $language->code(),
|
||||
'info' => Escape::html($language->code()),
|
||||
'text' => Escape::html($language->name()),
|
||||
])
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
];
|
||||
44
kirby/config/areas/login.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Panel\Panel;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'icon' => 'user',
|
||||
'label' => I18n::translate('login'),
|
||||
'views' => [
|
||||
'login' => [
|
||||
'pattern' => 'login',
|
||||
'auth' => false,
|
||||
'action' => function () use ($kirby) {
|
||||
$system = $kirby->system();
|
||||
$status = $kirby->auth()->status();
|
||||
return [
|
||||
'component' => 'k-login-view',
|
||||
'props' => [
|
||||
'methods' => array_keys($system->loginMethods()),
|
||||
'pending' => [
|
||||
'email' => $status->email(),
|
||||
'challenge' => $status->challenge()
|
||||
]
|
||||
],
|
||||
];
|
||||
}
|
||||
],
|
||||
'login.fallback' => [
|
||||
'pattern' => '(:all)',
|
||||
'auth' => false,
|
||||
'action' => function ($path) use ($kirby) {
|
||||
/**
|
||||
* Store the current path in the session
|
||||
* Once the user is logged in, the path will
|
||||
* be used to redirect to that view again
|
||||
*/
|
||||
$kirby->session()->set('panel.path', $path);
|
||||
Panel::go('login');
|
||||
}
|
||||
]
|
||||
]
|
||||
];
|
||||
};
|
||||
18
kirby/config/areas/site.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'breadcrumbLabel' => function () use ($kirby) {
|
||||
return $kirby->site()->title()->or(I18n::translate('view.site'))->toString();
|
||||
},
|
||||
'icon' => 'home',
|
||||
'label' => $kirby->site()->blueprint()->title() ?? I18n::translate('view.site'),
|
||||
'menu' => true,
|
||||
'dialogs' => require __DIR__ . '/site/dialogs.php',
|
||||
'dropdowns' => require __DIR__ . '/site/dropdowns.php',
|
||||
'searches' => require __DIR__ . '/site/searches.php',
|
||||
'views' => require __DIR__ . '/site/views.php',
|
||||
];
|
||||
};
|
||||
584
kirby/config/areas/site/dialogs.php
Normal file
|
|
@ -0,0 +1,584 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Exception\Exception;
|
||||
use Kirby\Exception\InvalidArgumentException;
|
||||
use Kirby\Exception\PermissionException;
|
||||
use Kirby\Panel\Field;
|
||||
use Kirby\Panel\Panel;
|
||||
use Kirby\Toolkit\I18n;
|
||||
use Kirby\Toolkit\Str;
|
||||
|
||||
$files = require __DIR__ . '/../files/dialogs.php';
|
||||
|
||||
return [
|
||||
|
||||
// change page position
|
||||
'page.changeSort' => [
|
||||
'pattern' => 'pages/(:any)/changeSort',
|
||||
'load' => function (string $id) {
|
||||
$page = Find::page($id);
|
||||
|
||||
if ($page->blueprint()->num() !== 'default') {
|
||||
throw new PermissionException([
|
||||
'key' => 'page.sort.permission',
|
||||
'data' => [
|
||||
'slug' => $page->slug()
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'position' => Field::pagePosition($page),
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'position' => $page->panel()->position()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::page($id)->changeStatus(
|
||||
'listed',
|
||||
$request->get('position')
|
||||
);
|
||||
|
||||
return [
|
||||
'event' => 'page.sort',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change page status
|
||||
'page.changeStatus' => [
|
||||
'pattern' => 'pages/(:any)/changeStatus',
|
||||
'load' => function (string $id) {
|
||||
$page = Find::page($id);
|
||||
$blueprint = $page->blueprint();
|
||||
$status = $page->status();
|
||||
$states = [];
|
||||
$position = null;
|
||||
|
||||
foreach ($blueprint->status() as $key => $state) {
|
||||
$states[] = [
|
||||
'value' => $key,
|
||||
'text' => $state['label'],
|
||||
'info' => $state['text'],
|
||||
];
|
||||
}
|
||||
|
||||
if ($status === 'draft') {
|
||||
$errors = $page->errors();
|
||||
|
||||
// switch to the error dialog if there are
|
||||
// errors and the draft cannot be published
|
||||
if (count($errors) > 0) {
|
||||
return [
|
||||
'component' => 'k-error-dialog',
|
||||
'props' => [
|
||||
'message' => I18n::translate('error.page.changeStatus.incomplete'),
|
||||
'details' => $errors,
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$fields = [
|
||||
'status' => [
|
||||
'label' => I18n::translate('page.changeStatus.select'),
|
||||
'type' => 'radio',
|
||||
'required' => true,
|
||||
'options' => $states
|
||||
]
|
||||
];
|
||||
|
||||
if ($blueprint->num() === 'default') {
|
||||
$fields['position'] = Field::pagePosition($page, [
|
||||
'when' => [
|
||||
'status' => 'listed'
|
||||
]
|
||||
]);
|
||||
|
||||
$position = $page->panel()->position();
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => $fields,
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'status' => $status,
|
||||
'position' => $position
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::page($id)->changeStatus(
|
||||
$request->get('status'),
|
||||
$request->get('position')
|
||||
);
|
||||
|
||||
return [
|
||||
'event' => 'page.changeStatus',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change template
|
||||
'page.changeTemplate' => [
|
||||
'pattern' => 'pages/(:any)/changeTemplate',
|
||||
'load' => function (string $id) {
|
||||
$page = Find::page($id);
|
||||
$blueprints = $page->blueprints();
|
||||
|
||||
if (count($blueprints) <= 1) {
|
||||
throw new Exception([
|
||||
'key' => 'page.changeTemplate.invalid',
|
||||
'data' => [
|
||||
'slug' => $id
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'template' => Field::template($blueprints, [
|
||||
'required' => true
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'template' => $page->intendedTemplate()->name()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::page($id)->changeTemplate($request->get('template'));
|
||||
|
||||
return [
|
||||
'event' => 'page.changeTemplate',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change title
|
||||
'page.changeTitle' => [
|
||||
'pattern' => 'pages/(:any)/changeTitle',
|
||||
'load' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$page = Find::page($id);
|
||||
$permissions = $page->permissions();
|
||||
$select = $request->get('select', 'title');
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'title' => Field::title([
|
||||
'required' => true,
|
||||
'preselect' => $select === 'title',
|
||||
'disabled' => $permissions->can('changeTitle') === false
|
||||
]),
|
||||
'slug' => Field::slug([
|
||||
'required' => true,
|
||||
'preselect' => $select === 'slug',
|
||||
'path' => $page->parent() ? '/' . $page->parent()->id() . '/' : '/',
|
||||
'disabled' => $permissions->can('changeSlug') === false,
|
||||
'wizard' => [
|
||||
'text' => I18n::translate('page.changeSlug.fromTitle'),
|
||||
'field' => 'title'
|
||||
]
|
||||
])
|
||||
],
|
||||
'autofocus' => false,
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'title' => $page->title()->value(),
|
||||
'slug' => $page->slug(),
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$page = Find::page($id);
|
||||
$title = trim($request->get('title', ''));
|
||||
$slug = trim($request->get('slug', ''));
|
||||
|
||||
// basic input validation before we move on
|
||||
if (Str::length($title) === 0) {
|
||||
throw new InvalidArgumentException([
|
||||
'key' => 'page.changeTitle.empty'
|
||||
]);
|
||||
}
|
||||
|
||||
if (Str::length($slug) === 0) {
|
||||
throw new InvalidArgumentException([
|
||||
'key' => 'page.slug.invalid'
|
||||
]);
|
||||
}
|
||||
|
||||
// nothing changed
|
||||
if ($page->title()->value() === $title && $page->slug() === $slug) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// prepare the response
|
||||
$response = [
|
||||
'event' => []
|
||||
];
|
||||
|
||||
// the page title changed
|
||||
if ($page->title()->value() !== $title) {
|
||||
$page->changeTitle($title);
|
||||
$response['event'][] = 'page.changeTitle';
|
||||
}
|
||||
|
||||
// the slug changed
|
||||
if ($page->slug() !== $slug) {
|
||||
$newPage = $page->changeSlug($slug);
|
||||
$response['event'][] = 'page.changeSlug';
|
||||
$response['dispatch'] = [
|
||||
'content/move' => [
|
||||
$oldUrl = $page->panel()->url(true),
|
||||
$newUrl = $newPage->panel()->url(true)
|
||||
]
|
||||
];
|
||||
|
||||
// check for a necessary redirect after the slug has changed
|
||||
if (Panel::referrer() === $oldUrl && $oldUrl !== $newUrl) {
|
||||
$response['redirect'] = $newUrl;
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
],
|
||||
|
||||
// create a new page
|
||||
'page.create' => [
|
||||
'pattern' => 'pages/create',
|
||||
'load' => function () {
|
||||
$kirby = App::instance();
|
||||
$request = $kirby->request();
|
||||
|
||||
// the parent model for the new page
|
||||
$parent = $request->get('parent', 'site');
|
||||
|
||||
// the view on which the add button is located
|
||||
// this is important to find the right section
|
||||
// and provide the correct templates for the new page
|
||||
$view = $request->get('view', $parent);
|
||||
|
||||
// templates will be fetched depending on the
|
||||
// section settings in the blueprint
|
||||
$section = $request->get('section');
|
||||
|
||||
// this is the parent model
|
||||
$model = Find::parent($parent);
|
||||
|
||||
// this is the view model
|
||||
// i.e. site if the add button is on
|
||||
// the dashboard
|
||||
$view = Find::parent($view);
|
||||
|
||||
// available blueprints/templates for the new page
|
||||
// are always loaded depending on the matching section
|
||||
// in the view model blueprint
|
||||
$blueprints = $view->blueprints($section);
|
||||
|
||||
// the pre-selected template
|
||||
$template = $blueprints[0]['name'] ?? $blueprints[0]['value'] ?? null;
|
||||
|
||||
$fields = [
|
||||
'parent' => Field::hidden(),
|
||||
'title' => Field::title([
|
||||
'required' => true,
|
||||
'preselect' => true
|
||||
]),
|
||||
'slug' => Field::slug([
|
||||
'required' => true,
|
||||
'sync' => 'title',
|
||||
'path' => empty($model->id()) === false ? '/' . $model->id() . '/' : '/'
|
||||
]),
|
||||
'template' => Field::hidden()
|
||||
];
|
||||
|
||||
// only show template field if > 1 templates available
|
||||
// or when in debug mode
|
||||
if (count($blueprints) > 1 || $kirby->option('debug') === true) {
|
||||
$fields['template'] = Field::template($blueprints, [
|
||||
'required' => true
|
||||
]);
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => $fields,
|
||||
'submitButton' => I18n::translate('page.draft.create'),
|
||||
'value' => [
|
||||
'parent' => $parent,
|
||||
'slug' => '',
|
||||
'template' => $template,
|
||||
'title' => '',
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function () {
|
||||
$request = App::instance()->request();
|
||||
$title = trim($request->get('title', ''));
|
||||
|
||||
if (Str::length($title) === 0) {
|
||||
throw new InvalidArgumentException([
|
||||
'key' => 'page.changeTitle.empty'
|
||||
]);
|
||||
}
|
||||
|
||||
$page = Find::parent($request->get('parent', 'site'))->createChild([
|
||||
'content' => ['title' => $title],
|
||||
'slug' => $request->get('slug'),
|
||||
'template' => $request->get('template'),
|
||||
]);
|
||||
|
||||
return [
|
||||
'event' => 'page.create',
|
||||
'redirect' => $page->panel()->url(true)
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// delete page
|
||||
'page.delete' => [
|
||||
'pattern' => 'pages/(:any)/delete',
|
||||
'load' => function (string $id) {
|
||||
$page = Find::page($id);
|
||||
$text = I18n::template('page.delete.confirm', [
|
||||
'title' => Escape::html($page->title()->value())
|
||||
]);
|
||||
|
||||
if ($page->childrenAndDrafts()->count() > 0) {
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'info' => [
|
||||
'type' => 'info',
|
||||
'theme' => 'negative',
|
||||
'text' => I18n::translate('page.delete.confirm.subpages')
|
||||
],
|
||||
'check' => [
|
||||
'label' => I18n::translate('page.delete.confirm.title'),
|
||||
'type' => 'text',
|
||||
'counter' => false
|
||||
]
|
||||
],
|
||||
'size' => 'medium',
|
||||
'submitButton' => I18n::translate('delete'),
|
||||
'text' => $text,
|
||||
'theme' => 'negative',
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-remove-dialog',
|
||||
'props' => [
|
||||
'text' => $text
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$page = Find::page($id);
|
||||
$redirect = false;
|
||||
$referrer = Panel::referrer();
|
||||
$url = $page->panel()->url(true);
|
||||
|
||||
if (
|
||||
$page->childrenAndDrafts()->count() > 0 &&
|
||||
$request->get('check') !== $page->title()->value()
|
||||
) {
|
||||
throw new InvalidArgumentException(['key' => 'page.delete.confirm']);
|
||||
}
|
||||
|
||||
$page->delete(true);
|
||||
|
||||
// redirect to the parent model URL
|
||||
// if the dialog has been opened in the page view
|
||||
if ($referrer === $url) {
|
||||
$redirect = $page->parentModel()->panel()->url(true);
|
||||
}
|
||||
|
||||
return [
|
||||
'event' => 'page.delete',
|
||||
'dispatch' => ['content/remove' => [$url]],
|
||||
'redirect' => $redirect
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// duplicate page
|
||||
'page.duplicate' => [
|
||||
'pattern' => 'pages/(:any)/duplicate',
|
||||
'load' => function (string $id) {
|
||||
$page = Find::page($id);
|
||||
$hasChildren = $page->hasChildren();
|
||||
$hasFiles = $page->hasFiles();
|
||||
$toggleWidth = '1/' . count(array_filter([$hasChildren, $hasFiles]));
|
||||
|
||||
$fields = [
|
||||
'title' => Field::title([
|
||||
'required' => true
|
||||
]),
|
||||
'slug' => Field::slug([
|
||||
'required' => true,
|
||||
'path' => $page->parent() ? '/' . $page->parent()->id() . '/' : '/',
|
||||
'wizard' => [
|
||||
'text' => I18n::translate('page.changeSlug.fromTitle'),
|
||||
'field' => 'title'
|
||||
]
|
||||
])
|
||||
];
|
||||
|
||||
if ($hasFiles === true) {
|
||||
$fields['files'] = [
|
||||
'label' => I18n::translate('page.duplicate.files'),
|
||||
'type' => 'toggle',
|
||||
'required' => true,
|
||||
'width' => $toggleWidth
|
||||
];
|
||||
}
|
||||
|
||||
if ($hasChildren === true) {
|
||||
$fields['children'] = [
|
||||
'label' => I18n::translate('page.duplicate.pages'),
|
||||
'type' => 'toggle',
|
||||
'required' => true,
|
||||
'width' => $toggleWidth
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => $fields,
|
||||
'submitButton' => I18n::translate('duplicate'),
|
||||
'value' => [
|
||||
'children' => false,
|
||||
'files' => false,
|
||||
'slug' => $page->slug() . '-' . Str::slug(I18n::translate('page.duplicate.appendix')),
|
||||
'title' => $page->title() . ' ' . I18n::translate('page.duplicate.appendix')
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$newPage = Find::page($id)->duplicate($request->get('slug'), [
|
||||
'children' => (bool)$request->get('children'),
|
||||
'files' => (bool)$request->get('files'),
|
||||
'title' => (string)$request->get('title'),
|
||||
]);
|
||||
|
||||
return [
|
||||
'event' => 'page.duplicate',
|
||||
'redirect' => $newPage->panel()->url(true)
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change filename
|
||||
'page.file.changeName' => [
|
||||
'pattern' => '(pages/.*?)/files/(:any)/changeName',
|
||||
'load' => $files['changeName']['load'],
|
||||
'submit' => $files['changeName']['submit'],
|
||||
],
|
||||
|
||||
// change sort
|
||||
'page.file.changeSort' => [
|
||||
'pattern' => '(pages/.*?)/files/(:any)/changeSort',
|
||||
'load' => $files['changeSort']['load'],
|
||||
'submit' => $files['changeSort']['submit'],
|
||||
],
|
||||
|
||||
// delete
|
||||
'page.file.delete' => [
|
||||
'pattern' => '(pages/.*?)/files/(:any)/delete',
|
||||
'load' => $files['delete']['load'],
|
||||
'submit' => $files['delete']['submit'],
|
||||
],
|
||||
|
||||
// change site title
|
||||
'site.changeTitle' => [
|
||||
'pattern' => 'site/changeTitle',
|
||||
'load' => function () {
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'title' => Field::title([
|
||||
'required' => true,
|
||||
'preselect' => true
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('rename'),
|
||||
'value' => [
|
||||
'title' => App::instance()->site()->title()->value()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function () {
|
||||
$kirby = App::instance();
|
||||
|
||||
$kirby->site()->changeTitle($kirby->request()->get('title'));
|
||||
return [
|
||||
'event' => 'site.changeTitle',
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change filename
|
||||
'site.file.changeName' => [
|
||||
'pattern' => '(site)/files/(:any)/changeName',
|
||||
'load' => $files['changeName']['load'],
|
||||
'submit' => $files['changeName']['submit'],
|
||||
],
|
||||
|
||||
// change sort
|
||||
'site.file.changeSort' => [
|
||||
'pattern' => '(site)/files/(:any)/changeSort',
|
||||
'load' => $files['changeSort']['load'],
|
||||
'submit' => $files['changeSort']['submit'],
|
||||
],
|
||||
|
||||
// delete
|
||||
'site.file.delete' => [
|
||||
'pattern' => '(site)/files/(:any)/delete',
|
||||
'load' => $files['delete']['load'],
|
||||
'submit' => $files['delete']['submit'],
|
||||
],
|
||||
|
||||
];
|
||||
26
kirby/config/areas/site/dropdowns.php
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Panel\Dropdown;
|
||||
|
||||
$files = require __DIR__ . '/../files/dropdowns.php';
|
||||
|
||||
return [
|
||||
'changes' => [
|
||||
'pattern' => 'changes',
|
||||
'options' => fn () => Dropdown::changes()
|
||||
],
|
||||
'page' => [
|
||||
'pattern' => 'pages/(:any)',
|
||||
'options' => function (string $path) {
|
||||
return Find::page($path)->panel()->dropdown();
|
||||
}
|
||||
],
|
||||
'page.file' => [
|
||||
'pattern' => '(pages/.*?)/files/(:any)',
|
||||
'options' => $files['file']
|
||||
],
|
||||
'site.file' => [
|
||||
'pattern' => '(site)/files/(:any)',
|
||||
'options' => $files['file']
|
||||
]
|
||||
];
|
||||
57
kirby/config/areas/site/searches.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Toolkit\Escape;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return [
|
||||
'pages' => [
|
||||
'label' => I18n::translate('pages'),
|
||||
'icon' => 'page',
|
||||
'query' => function (string $query = null) {
|
||||
$pages = App::instance()->site()
|
||||
->index(true)
|
||||
->search($query)
|
||||
->filter('isReadable', true)
|
||||
->limit(10);
|
||||
|
||||
$results = [];
|
||||
|
||||
foreach ($pages as $page) {
|
||||
$results[] = [
|
||||
'image' => $page->panel()->image(),
|
||||
'text' => Escape::html($page->title()->value()),
|
||||
'link' => $page->panel()->url(true),
|
||||
'info' => Escape::html($page->id())
|
||||
];
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
],
|
||||
'files' => [
|
||||
'label' => I18n::translate('files'),
|
||||
'icon' => 'image',
|
||||
'query' => function (string $query = null) {
|
||||
$files = App::instance()->site()
|
||||
->index(true)
|
||||
->filter('isReadable', true)
|
||||
->files()
|
||||
->search($query)
|
||||
->limit(10);
|
||||
|
||||
$results = [];
|
||||
|
||||
foreach ($files as $file) {
|
||||
$results[] = [
|
||||
'image' => $file->panel()->image(),
|
||||
'text' => Escape::html($file->filename()),
|
||||
'link' => $file->panel()->url(true),
|
||||
'info' => Escape::html($file->id())
|
||||
];
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
]
|
||||
];
|
||||
27
kirby/config/areas/site/views.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
|
||||
return [
|
||||
'page' => [
|
||||
'pattern' => 'pages/(:any)',
|
||||
'action' => fn (string $path) => Find::page($path)->panel()->view()
|
||||
],
|
||||
'page.file' => [
|
||||
'pattern' => 'pages/(:any)/files/(:any)',
|
||||
'action' => function (string $id, string $filename) {
|
||||
return Find::file('pages/' . $id, $filename)->panel()->view();
|
||||
}
|
||||
],
|
||||
'site' => [
|
||||
'pattern' => 'site',
|
||||
'action' => fn () => App::instance()->site()->panel()->view()
|
||||
],
|
||||
'site.file' => [
|
||||
'pattern' => 'site/files/(:any)',
|
||||
'action' => function (string $filename) {
|
||||
return Find::file('site', $filename)->panel()->view();
|
||||
}
|
||||
],
|
||||
];
|
||||
13
kirby/config/areas/system.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'icon' => 'settings',
|
||||
'label' => I18n::translate('view.system'),
|
||||
'menu' => true,
|
||||
'dialogs' => require __DIR__ . '/system/dialogs.php',
|
||||
'views' => require __DIR__ . '/system/views.php'
|
||||
];
|
||||
};
|
||||
86
kirby/config/areas/system/dialogs.php
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Panel\Field;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return [
|
||||
// license key
|
||||
'license' => [
|
||||
'load' => function () {
|
||||
$license = App::instance()->system()->license();
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
// the system is registered but the license
|
||||
// key is only visible for admins
|
||||
if ($license === true) {
|
||||
$license = 'Kirby 3';
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'size' => 'medium',
|
||||
'fields' => [
|
||||
'license' => [
|
||||
'type' => 'info',
|
||||
'label' => I18n::translate('license'),
|
||||
'text' => $license ? $license : I18n::translate('license.unregistered.label'),
|
||||
'theme' => $license ? 'code' : 'negative',
|
||||
'help' => $license ?
|
||||
// @codeCoverageIgnoreStart
|
||||
'<a href="https://hub.getkirby.com">' . I18n::translate('license.manage') . ' →</a>' :
|
||||
// @codeCoverageIgnoreEnd
|
||||
'<a href="https://getkirby.com/buy">' . I18n::translate('license.buy') . ' →</a>'
|
||||
]
|
||||
],
|
||||
'submitButton' => false,
|
||||
'cancelButton' => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
// license registration
|
||||
'registration' => [
|
||||
'load' => function () {
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'license' => [
|
||||
'label' => I18n::translate('license.register.label'),
|
||||
'type' => 'text',
|
||||
'required' => true,
|
||||
'counter' => false,
|
||||
'placeholder' => 'K3-',
|
||||
'help' => I18n::translate('license.register.help')
|
||||
],
|
||||
'email' => Field::email([
|
||||
'required' => true
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('license.register'),
|
||||
'value' => [
|
||||
'license' => null,
|
||||
'email' => null
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function () {
|
||||
// @codeCoverageIgnoreStart
|
||||
$kirby = App::instance();
|
||||
$kirby->system()->register(
|
||||
$kirby->request()->get('license'),
|
||||
$kirby->request()->get('email')
|
||||
);
|
||||
|
||||
return [
|
||||
'event' => 'system.register',
|
||||
'message' => I18n::translate('license.register.success')
|
||||
];
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
],
|
||||
];
|
||||
55
kirby/config/areas/system/views.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
|
||||
return [
|
||||
'system' => [
|
||||
'pattern' => 'system',
|
||||
'action' => function () {
|
||||
$kirby = App::instance();
|
||||
$system = $kirby->system();
|
||||
$license = $system->license();
|
||||
|
||||
// @codeCoverageIgnoreStart
|
||||
if ($license === true) {
|
||||
// valid license, but user is not admin
|
||||
$license = 'Kirby 3';
|
||||
} elseif ($license === false) {
|
||||
// no valid license
|
||||
$license = null;
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
$plugins = $system->plugins()->values(function ($plugin) {
|
||||
return [
|
||||
'author' => $plugin->authorsNames(),
|
||||
'license' => $plugin->license(),
|
||||
'name' => [
|
||||
'text' => $plugin->name(),
|
||||
'href' => $plugin->link(),
|
||||
],
|
||||
'version' => $plugin->version(),
|
||||
];
|
||||
});
|
||||
|
||||
return [
|
||||
'component' => 'k-system-view',
|
||||
'props' => [
|
||||
'debug' => $kirby->option('debug', false),
|
||||
'license' => $license,
|
||||
'plugins' => $plugins,
|
||||
'php' => phpversion(),
|
||||
'server' => $system->serverSoftware(),
|
||||
'https' => $kirby->environment()->https(),
|
||||
'version' => $kirby->version(),
|
||||
'urls' => [
|
||||
'content' => $system->exposedFileUrl('content'),
|
||||
'git' => $system->exposedFileUrl('git'),
|
||||
'kirby' => $system->exposedFileUrl('kirby'),
|
||||
'site' => $system->exposedFileUrl('site')
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
];
|
||||
16
kirby/config/areas/users.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return function ($kirby) {
|
||||
return [
|
||||
'icon' => 'users',
|
||||
'label' => I18n::translate('view.users'),
|
||||
'search' => 'users',
|
||||
'menu' => true,
|
||||
'dialogs' => require __DIR__ . '/users/dialogs.php',
|
||||
'dropdowns' => require __DIR__ . '/users/dropdowns.php',
|
||||
'searches' => require __DIR__ . '/users/searches.php',
|
||||
'views' => require __DIR__ . '/users/views.php'
|
||||
];
|
||||
};
|
||||
311
kirby/config/areas/users/dialogs.php
Normal file
|
|
@ -0,0 +1,311 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Cms\UserRules;
|
||||
use Kirby\Exception\InvalidArgumentException;
|
||||
use Kirby\Panel\Field;
|
||||
use Kirby\Panel\Panel;
|
||||
use Kirby\Toolkit\Escape;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
$files = require __DIR__ . '/../files/dialogs.php';
|
||||
|
||||
return [
|
||||
|
||||
// create
|
||||
'user.create' => [
|
||||
'pattern' => 'users/create',
|
||||
'load' => function () {
|
||||
$kirby = App::instance();
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'name' => Field::username(),
|
||||
'email' => Field::email([
|
||||
'link' => false,
|
||||
'required' => true
|
||||
]),
|
||||
'password' => Field::password(),
|
||||
'translation' => Field::translation([
|
||||
'required' => true
|
||||
]),
|
||||
'role' => Field::role([
|
||||
'required' => true
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('create'),
|
||||
'value' => [
|
||||
'name' => '',
|
||||
'email' => '',
|
||||
'password' => '',
|
||||
'translation' => $kirby->panelLanguage(),
|
||||
'role' => $kirby->user()->role()->name()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function () {
|
||||
$kirby = App::instance();
|
||||
|
||||
$kirby->users()->create([
|
||||
'name' => $kirby->request()->get('name'),
|
||||
'email' => $kirby->request()->get('email'),
|
||||
'password' => $kirby->request()->get('password'),
|
||||
'language' => $kirby->request()->get('translation'),
|
||||
'role' => $kirby->request()->get('role')
|
||||
]);
|
||||
|
||||
return [
|
||||
'event' => 'user.create'
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change email
|
||||
'user.changeEmail' => [
|
||||
'pattern' => 'users/(:any)/changeEmail',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'email' => [
|
||||
'label' => I18n::translate('email'),
|
||||
'required' => true,
|
||||
'type' => 'email',
|
||||
'preselect' => true
|
||||
]
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'email' => $user->email()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::user($id)->changeEmail($request->get('email'));
|
||||
|
||||
return [
|
||||
'event' => 'user.changeEmail'
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change language
|
||||
'user.changeLanguage' => [
|
||||
'pattern' => 'users/(:any)/changeLanguage',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'translation' => Field::translation(['required' => true])
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
'value' => [
|
||||
'translation' => $user->language()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::user($id)->changeLanguage($request->get('translation'));
|
||||
|
||||
return [
|
||||
'event' => 'user.changeLanguage',
|
||||
'reload' => [
|
||||
'globals' => '$translation'
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change name
|
||||
'user.changeName' => [
|
||||
'pattern' => 'users/(:any)/changeName',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'name' => Field::username([
|
||||
'preselect' => true
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('rename'),
|
||||
'value' => [
|
||||
'name' => $user->name()->value()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
Find::user($id)->changeName($request->get('name'));
|
||||
|
||||
return [
|
||||
'event' => 'user.changeName'
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change password
|
||||
'user.changePassword' => [
|
||||
'pattern' => 'users/(:any)/changePassword',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'password' => Field::password([
|
||||
'label' => I18n::translate('user.changePassword.new'),
|
||||
]),
|
||||
'passwordConfirmation' => Field::password([
|
||||
'label' => I18n::translate('user.changePassword.new.confirm'),
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('change'),
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$user = Find::user($id);
|
||||
$password = $request->get('password');
|
||||
$passwordConfirmation = $request->get('passwordConfirmation');
|
||||
|
||||
// validate the password
|
||||
UserRules::validPassword($user, $password ?? '');
|
||||
|
||||
// compare passwords
|
||||
if ($password !== $passwordConfirmation) {
|
||||
throw new InvalidArgumentException([
|
||||
'key' => 'user.password.notSame'
|
||||
]);
|
||||
}
|
||||
|
||||
// change password if everything's fine
|
||||
$user->changePassword($password);
|
||||
|
||||
return [
|
||||
'event' => 'user.changePassword'
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change role
|
||||
'user.changeRole' => [
|
||||
'pattern' => 'users/(:any)/changeRole',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
|
||||
return [
|
||||
'component' => 'k-form-dialog',
|
||||
'props' => [
|
||||
'fields' => [
|
||||
'role' => Field::role([
|
||||
'label' => I18n::translate('user.changeRole.select'),
|
||||
'required' => true,
|
||||
])
|
||||
],
|
||||
'submitButton' => I18n::translate('user.changeRole'),
|
||||
'value' => [
|
||||
'role' => $user->role()->name()
|
||||
]
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$request = App::instance()->request();
|
||||
|
||||
$user = Find::user($id)->changeRole($request->get('role'));
|
||||
|
||||
return [
|
||||
'event' => 'user.changeRole',
|
||||
'user' => $user->toArray()
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// delete
|
||||
'user.delete' => [
|
||||
'pattern' => 'users/(:any)/delete',
|
||||
'load' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
$i18nPrefix = $user->isLoggedIn() ? 'account' : 'user';
|
||||
|
||||
return [
|
||||
'component' => 'k-remove-dialog',
|
||||
'props' => [
|
||||
'text' => I18n::template($i18nPrefix . '.delete.confirm', [
|
||||
'email' => Escape::html($user->email())
|
||||
])
|
||||
]
|
||||
];
|
||||
},
|
||||
'submit' => function (string $id) {
|
||||
$user = Find::user($id);
|
||||
$redirect = false;
|
||||
$referrer = Panel::referrer();
|
||||
$url = $user->panel()->url(true);
|
||||
|
||||
$user->delete();
|
||||
|
||||
// redirect to the users view
|
||||
// if the dialog has been opened in the user view
|
||||
if ($referrer === $url) {
|
||||
$redirect = '/users';
|
||||
}
|
||||
|
||||
// logout the user if they deleted themselves
|
||||
if ($user->isLoggedIn()) {
|
||||
$redirect = '/logout';
|
||||
}
|
||||
|
||||
return [
|
||||
'event' => 'user.delete',
|
||||
'dispatch' => ['content/remove' => [$url]],
|
||||
'redirect' => $redirect
|
||||
];
|
||||
}
|
||||
],
|
||||
|
||||
// change file name
|
||||
'user.file.changeName' => [
|
||||
'pattern' => '(users/.*?)/files/(:any)/changeName',
|
||||
'load' => $files['changeName']['load'],
|
||||
'submit' => $files['changeName']['submit'],
|
||||
],
|
||||
|
||||
// change file sort
|
||||
'user.file.changeSort' => [
|
||||
'pattern' => '(users/.*?)/files/(:any)/changeSort',
|
||||
'load' => $files['changeSort']['load'],
|
||||
'submit' => $files['changeSort']['submit'],
|
||||
],
|
||||
|
||||
// delete file
|
||||
'user.file.delete' => [
|
||||
'pattern' => '(users/.*?)/files/(:any)/delete',
|
||||
'load' => $files['delete']['load'],
|
||||
'submit' => $files['delete']['submit'],
|
||||
]
|
||||
|
||||
];
|
||||
18
kirby/config/areas/users/dropdowns.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\Find;
|
||||
|
||||
$files = require __DIR__ . '/../files/dropdowns.php';
|
||||
|
||||
return [
|
||||
'user' => [
|
||||
'pattern' => 'users/(:any)',
|
||||
'options' => function (string $id) {
|
||||
return Find::user($id)->panel()->dropdown();
|
||||
}
|
||||
],
|
||||
'user.file' => [
|
||||
'pattern' => '(users/.*?)/files/(:any)',
|
||||
'options' => $files['file']
|
||||
]
|
||||
];
|
||||
27
kirby/config/areas/users/searches.php
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Toolkit\Escape;
|
||||
use Kirby\Toolkit\I18n;
|
||||
|
||||
return [
|
||||
'users' => [
|
||||
'label' => I18n::translate('users'),
|
||||
'icon' => 'users',
|
||||
'query' => function (string $query = null) {
|
||||
$users = App::instance()->users()->search($query)->limit(10);
|
||||
$results = [];
|
||||
|
||||
foreach ($users as $user) {
|
||||
$results[] = [
|
||||
'image' => $user->panel()->image(),
|
||||
'text' => Escape::html($user->username()),
|
||||
'link' => $user->panel()->url(true),
|
||||
'info' => Escape::html($user->role()->title())
|
||||
];
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
]
|
||||
];
|
||||
66
kirby/config/areas/users/views.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
use Kirby\Cms\App;
|
||||
use Kirby\Cms\Find;
|
||||
use Kirby\Toolkit\Escape;
|
||||
|
||||
return [
|
||||
'users' => [
|
||||
'pattern' => 'users',
|
||||
'action' => function () {
|
||||
$kirby = App::instance();
|
||||
$role = $kirby->request()->get('role');
|
||||
$roles = $kirby->roles()->toArray(fn ($role) => [
|
||||
'id' => $role->id(),
|
||||
'title' => $role->title(),
|
||||
]);
|
||||
|
||||
return [
|
||||
'component' => 'k-users-view',
|
||||
'props' => [
|
||||
'role' => function () use ($kirby, $roles, $role) {
|
||||
if ($role) {
|
||||
return $roles[$role] ?? null;
|
||||
}
|
||||
},
|
||||
'roles' => array_values($roles),
|
||||
'users' => function () use ($kirby, $role) {
|
||||
$users = $kirby->users();
|
||||
|
||||
if (empty($role) === false) {
|
||||
$users = $users->role($role);
|
||||
}
|
||||
|
||||
$users = $users->paginate([
|
||||
'limit' => 20,
|
||||
'page' => $kirby->request()->get('page')
|
||||
]);
|
||||
|
||||
return [
|
||||
'data' => $users->values(fn ($user) => [
|
||||
'id' => $user->id(),
|
||||
'image' => $user->panel()->image(),
|
||||
'info' => Escape::html($user->role()->title()),
|
||||
'link' => $user->panel()->url(true),
|
||||
'text' => Escape::html($user->username())
|
||||
]),
|
||||
'pagination' => $users->pagination()->toArray()
|
||||
];
|
||||
},
|
||||
]
|
||||
];
|
||||
}
|
||||
],
|
||||
'user' => [
|
||||
'pattern' => 'users/(:any)',
|
||||
'action' => function (string $id) {
|
||||
return Find::user($id)->panel()->view();
|
||||
}
|
||||
],
|
||||
'user.file' => [
|
||||
'pattern' => 'users/(:any)/files/(:any)',
|
||||
'action' => function (string $id, string $filename) {
|
||||
return Find::file('users/' . $id, $filename)->panel()->view();
|
||||
}
|
||||
],
|
||||
];
|
||||
2
kirby/config/blocks/code/code.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<pre><code class="language-<?= $block->language()->or('text') ?>"><?= $block->code()->html(false) ?></code></pre>
|
||||
59
kirby/config/blocks/code/code.yml
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
name: field.blocks.code.name
|
||||
icon: code
|
||||
wysiwyg: true
|
||||
preview: code
|
||||
fields:
|
||||
code:
|
||||
label: field.blocks.code.name
|
||||
type: textarea
|
||||
placeholder: field.blocks.code.placeholder
|
||||
buttons: false
|
||||
font: monospace
|
||||
language:
|
||||
label: field.blocks.code.language
|
||||
type: select
|
||||
default: text
|
||||
options:
|
||||
bash: Bash
|
||||
basic: BASIC
|
||||
c: C
|
||||
clojure: Clojure
|
||||
cpp: C++
|
||||
csharp: C#
|
||||
css: CSS
|
||||
diff: Diff
|
||||
elixir: Elixir
|
||||
elm: Elm
|
||||
erlang: Erlang
|
||||
go: Go
|
||||
graphql: GraphQL
|
||||
haskell: Haskell
|
||||
html: HTML
|
||||
java: Java
|
||||
js: JavaScript
|
||||
json: JSON
|
||||
latext: LaTeX
|
||||
less: Less
|
||||
lisp: Lisp
|
||||
lua: Lua
|
||||
makefile: Makefile
|
||||
markdown: Markdown
|
||||
markup: Markup
|
||||
objectivec: Objective-C
|
||||
pascal: Pascal
|
||||
perl: Perl
|
||||
php: PHP
|
||||
text: Plain Text
|
||||
python: Python
|
||||
r: R
|
||||
ruby: Ruby
|
||||
rust: Rust
|
||||
sass: Sass
|
||||
scss: SCSS
|
||||
shell: Shell
|
||||
sql: SQL
|
||||
swift: Swift
|
||||
typescript: TypeScript
|
||||
vbnet: VB.net
|
||||
xml: XML
|
||||
yaml: YAML
|
||||
10
kirby/config/blocks/gallery/gallery.php
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<figure>
|
||||
<ul>
|
||||
<?php foreach ($block->images()->toFiles() as $image): ?>
|
||||
<li>
|
||||
<?= $image ?>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
</figure>
|
||||
16
kirby/config/blocks/gallery/gallery.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
name: field.blocks.gallery.name
|
||||
icon: dashboard
|
||||
preview: gallery
|
||||
fields:
|
||||
images:
|
||||
label: field.blocks.gallery.images.label
|
||||
type: files
|
||||
query: model.images
|
||||
multiple: true
|
||||
layout: cards
|
||||
size: tiny
|
||||
empty: field.blocks.gallery.images.empty
|
||||
uploads:
|
||||
template: blocks/image
|
||||
image:
|
||||
ratio: 1/1
|
||||
2
kirby/config/blocks/heading/heading.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<<?= $level = $block->level()->or('h2') ?>><?= $block->text() ?></<?= $level ?>>
|
||||
24
kirby/config/blocks/heading/heading.yml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
name: field.blocks.heading.name
|
||||
icon: title
|
||||
wysiwyg: true
|
||||
preview: heading
|
||||
fields:
|
||||
level:
|
||||
label: field.blocks.heading.level
|
||||
type: select
|
||||
empty: false
|
||||
default: "h2"
|
||||
width: 1/6
|
||||
options:
|
||||
- h1
|
||||
- h2
|
||||
- h3
|
||||
- h4
|
||||
- h5
|
||||
- h6
|
||||
text:
|
||||
label: field.blocks.heading.text
|
||||
type: writer
|
||||
inline: true
|
||||
width: 5/6
|
||||
placeholder: field.blocks.heading.placeholder
|
||||
35
kirby/config/blocks/image/image.php
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
/** @var \Kirby\Cms\Block $block */
|
||||
$alt = $block->alt();
|
||||
$caption = $block->caption();
|
||||
$crop = $block->crop()->isTrue();
|
||||
$link = $block->link();
|
||||
$ratio = $block->ratio()->or('auto');
|
||||
$src = null;
|
||||
|
||||
if ($block->location() == 'web') {
|
||||
$src = $block->src()->esc();
|
||||
} elseif ($image = $block->image()->toFile()) {
|
||||
$alt = $alt ?? $image->alt();
|
||||
$src = $image->url();
|
||||
}
|
||||
|
||||
?>
|
||||
<?php if ($src): ?>
|
||||
<figure<?= Html::attr(['data-ratio' => $ratio, 'data-crop' => $crop], null, ' ') ?>>
|
||||
<?php if ($link->isNotEmpty()): ?>
|
||||
<a href="<?= Str::esc($link->toUrl()) ?>">
|
||||
<img src="<?= $src ?>" alt="<?= $alt->esc() ?>">
|
||||
</a>
|
||||
<?php else: ?>
|
||||
<img src="<?= $src ?>" alt="<?= $alt->esc() ?>">
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($caption->isNotEmpty()): ?>
|
||||
<figcaption>
|
||||
<?= $caption ?>
|
||||
</figcaption>
|
||||
<?php endif ?>
|
||||
</figure>
|
||||
<?php endif ?>
|
||||
60
kirby/config/blocks/image/image.yml
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
name: field.blocks.image.name
|
||||
icon: image
|
||||
preview: image
|
||||
fields:
|
||||
location:
|
||||
label: field.blocks.image.location
|
||||
type: radio
|
||||
columns: 2
|
||||
default: "kirby"
|
||||
options:
|
||||
kirby: Kirby
|
||||
web: Web
|
||||
image:
|
||||
label: field.blocks.image.name
|
||||
type: files
|
||||
query: model.images
|
||||
multiple: false
|
||||
image:
|
||||
back: black
|
||||
uploads:
|
||||
template: blocks/image
|
||||
when:
|
||||
location: kirby
|
||||
src:
|
||||
label: field.blocks.image.url
|
||||
type: url
|
||||
when:
|
||||
location: web
|
||||
alt:
|
||||
label: field.blocks.image.alt
|
||||
type: text
|
||||
icon: title
|
||||
caption:
|
||||
label: field.blocks.image.caption
|
||||
type: writer
|
||||
icon: text
|
||||
inline: true
|
||||
link:
|
||||
label: field.blocks.image.link
|
||||
type: text
|
||||
icon: url
|
||||
ratio:
|
||||
label: field.blocks.image.ratio
|
||||
type: select
|
||||
placeholder: Auto
|
||||
width: 1/2
|
||||
options:
|
||||
1/1: "1:1"
|
||||
16/9: "16:9"
|
||||
10/8: "10:8"
|
||||
21/9: "21:9"
|
||||
7/5: "7:5"
|
||||
4/3: "4:3"
|
||||
5/3: "5:3"
|
||||
3/2: "3:2"
|
||||
3/1: "3:1"
|
||||
crop:
|
||||
label: field.blocks.image.crop
|
||||
type: toggle
|
||||
width: 1/2
|
||||
1
kirby/config/blocks/line/line.php
Normal file
|
|
@ -0,0 +1 @@
|
|||
<hr />
|
||||
4
kirby/config/blocks/line/line.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
name: field.blocks.line.name
|
||||
icon: divider
|
||||
preview: line
|
||||
wysiwyg: true
|
||||
2
kirby/config/blocks/list/list.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<?= $block->text();
|
||||
8
kirby/config/blocks/list/list.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
name: field.blocks.list.name
|
||||
icon: list-bullet
|
||||
wysiwyg: true
|
||||
preview: list
|
||||
fields:
|
||||
text:
|
||||
label: field.blocks.list.name
|
||||
type: list
|
||||
2
kirby/config/blocks/markdown/markdown.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<?= $block->text()->kt();
|
||||
11
kirby/config/blocks/markdown/markdown.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
name: field.blocks.markdown.name
|
||||
icon: markdown
|
||||
preview: markdown
|
||||
wysiwyg: true
|
||||
fields:
|
||||
text:
|
||||
label: field.blocks.markdown.label
|
||||
placeholder: field.blocks.markdown.placeholder
|
||||
type: textarea
|
||||
buttons: false
|
||||
font: monospace
|
||||
9
kirby/config/blocks/quote/quote.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<blockquote>
|
||||
<?= $block->text() ?>
|
||||
<?php if ($block->citation()->isNotEmpty()): ?>
|
||||
<footer>
|
||||
<?= $block->citation() ?>
|
||||
</footer>
|
||||
<?php endif ?>
|
||||
</blockquote>
|
||||
17
kirby/config/blocks/quote/quote.yml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
name: field.blocks.quote.name
|
||||
icon: quote
|
||||
wysiwyg: true
|
||||
preview: quote
|
||||
fields:
|
||||
text:
|
||||
label: field.blocks.quote.text.label
|
||||
placeholder: field.blocks.quote.text.placeholder
|
||||
type: writer
|
||||
inline: true
|
||||
icon: quote
|
||||
citation:
|
||||
label: field.blocks.quote.citation.label
|
||||
placeholder: field.blocks.quote.citation.placeholder
|
||||
type: writer
|
||||
inline: true
|
||||
icon: user
|
||||
3
kirby/config/blocks/table/table.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
name: Table
|
||||
icon: menu
|
||||
preview: table
|
||||
2
kirby/config/blocks/text/text.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php /** @var \Kirby\Cms\Block $block */ ?>
|
||||
<?= $block->text();
|
||||
9
kirby/config/blocks/text/text.yml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
name: field.blocks.text.name
|
||||
icon: text
|
||||
wysiwyg: true
|
||||
preview: text
|
||||
fields:
|
||||
text:
|
||||
type: writer
|
||||
nodes: false
|
||||
placeholder: field.blocks.text.placeholder
|
||||