From f3880bec27fa92ad25e51f81c80d7bd7d2c34105 Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 16 Jan 2021 12:32:44 +0100 Subject: [PATCH] fix page-scanner bug (introduce in previous commit) & update doc --- docs/architecture.html | 1 - docs/assets/tw.css | 4 +- docs/configuration.html | 2 - docs/contribute.html | 6 -- docs/cookbook.html | 9 --- docs/create-extension.html | 1 - docs/extension.html | 1 - docs/extension/admin.html | 6 -- docs/extension/conversation.html | 34 ----------- docs/extension/facebook.html | 7 --- docs/extension/flat.html | 4 -- docs/extension/page-scanner.html | 7 --- docs/extension/page-update-notifier.html | 5 -- docs/extension/static-generator.html | 17 ------ docs/extension/svg.html | 3 - docs/extension/template-editor.html | 6 -- docs/extensions.html | 1 - docs/feed.xml | 2 +- docs/index.html | 2 +- docs/installation.html | 3 - docs/license.html | 1 - docs/roadmap.html | 1 - docs/search.json | 3 - docs/sitemap.txt | 4 +- docs/sitemap.xml | 58 +++++++++---------- docs/themes.html | 1 - docs/upgrade.html | 5 -- packages/core/webpack.config.js | 2 +- packages/docs/assets/app.css | 2 +- packages/docs/assets/webpack.config.js | 4 +- packages/docs/content/roadmap.md | 1 - packages/js-helper/src/tailwind.prose.css | 41 +++++++++---- .../page-scanner/src/PageScannerService.php | 4 ++ packages/skeleton/assets/webpack.config.js | 2 +- packages/skeleton/public/assets/tw.css | 2 +- packages/skeleton/var/page-scan | 2 +- 36 files changed, 76 insertions(+), 178 deletions(-) delete mode 100644 docs/architecture.html delete mode 100644 docs/configuration.html delete mode 100644 docs/contribute.html delete mode 100644 docs/cookbook.html delete mode 100644 docs/create-extension.html delete mode 100644 docs/extension.html delete mode 100644 docs/extension/admin.html delete mode 100644 docs/extension/conversation.html delete mode 100644 docs/extension/facebook.html delete mode 100644 docs/extension/flat.html delete mode 100644 docs/extension/page-scanner.html delete mode 100644 docs/extension/page-update-notifier.html delete mode 100644 docs/extension/static-generator.html delete mode 100644 docs/extension/svg.html delete mode 100644 docs/extension/template-editor.html delete mode 100644 docs/extensions.html delete mode 100644 docs/installation.html delete mode 100644 docs/license.html delete mode 100644 docs/roadmap.html delete mode 100644 docs/search.json delete mode 100644 docs/themes.html delete mode 100644 docs/upgrade.html diff --git a/docs/architecture.html b/docs/architecture.html deleted file mode 100644 index 4bbc563d8..000000000 --- a/docs/architecture.html +++ /dev/null @@ -1 +0,0 @@ - Puswhord Code Architecture

The Code Architecture

Are you searching for :

  • organizing your own app code
  • organizing the code for a pushword extension

Else, you are at the good place.

The code for all officially maintained extension and the core is kept in an unique repository adopting the mono-repository.

The core contain the minimum features, then everything is done via extension.

Each extension are facultative.

Keeping all this extensions in one repository permit to test them easily and to code much quicker.

The skeleton isn't a real skeleton (copy and install). It's used for testing, demos and a few class from skeleton are extracted by the default installer.

On top of Symfony

Each package (except skeleton) is build as a symfony bundle.

The core package required a symfony app instaled to be functionnel.

When you know that, you just have to learn how to make a bundle for symfony and you will know how to make an extension for pushword.

There is some simple example like flat or more complex like conversation (and more respecting the symfony best practices).

Learn more about create an extension for Puswhord

\ No newline at end of file diff --git a/docs/assets/tw.css b/docs/assets/tw.css index 983c33fa7..a36752f51 100644 --- a/docs/assets/tw.css +++ b/docs/assets/tw.css @@ -1,3 +1 @@ -html{font-family:var(--font-family);line-height:var(--line-height)}.prose{max-width:none}.prose ul.list-none{margin:0}.prose ul.list-none>li{padding-left:0;margin:0}.prose ul.list-none>li:before{height:0;width:0}.m-0{margin:0!important}.mt-0{margin-top:0!important}.text-white{color:#fff!important}.prose span[data-rot]{cursor:pointer;color:var(--primary);text-decoration:underline;font-weight:500}.prose span[data-rot]:hover{color:var(--primary)} - -/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}strong{font-weight:bolder}code,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}button,input,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}blockquote,figure,h1,h2,h3,h4,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9ca3af}input::placeholder,textarea::placeholder{color:#9ca3af}button{cursor:pointer}h1,h2,h3,h4{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,textarea{padding:0;line-height:inherit;color:inherit}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}iframe,img,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#333;max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--secondary);text-decoration:underline;font-weight:500}.prose a:hover{opacity:.75}.prose strong{color:#111827;font-weight:600}.prose ol{counter-reset:list-counter;margin-top:1.25em;margin-bottom:1.25em}.prose ol>li{position:relative;counter-increment:list-counter;padding-left:1.75em}.prose ol>li:before{content:counter(list-counter) ".";position:absolute;font-weight:400;color:#6b7280;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d1d5db;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e5e7eb;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#111827;border-left-width:.25rem;border-left-color:#e5e7eb;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#111827;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#111827;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#111827;font-weight:600}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#111827;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#111827}.prose pre{color:#e5e7eb;background-color:#1f2937;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:""}.prose thead{color:#111827;font-weight:600;border-bottom-width:1px;border-bottom-color:#d1d5db}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e5e7eb}.prose tbody tr:last-child{border-bottom-width:0}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose>:first-child,.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm blockquote{margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm h2{font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm h3{font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm h4{margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm figure,.prose-sm img,.prose-sm video{margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm figure>*{margin-top:0;margin-bottom:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm li{margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;width:.3571429em;top:.67857em;left:.2142857em}.prose-sm>ul>li p{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm hr{margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm>:first-child,.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.aspect-w-16{position:relative;padding-bottom:calc(var(--tw-aspect-h)/var(--tw-aspect-w)*100%)}.aspect-w-16>*{position:absolute;height:100%;width:100%;top:0;right:0;bottom:0;left:0}.aspect-w-16{--tw-aspect-w:16}.aspect-h-9{--tw-aspect-h:9}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0.25rem*var(--tw-space-x-reverse));margin-left:calc(0.25rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.-space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(-1px*var(--tw-space-y-reverse))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgba(254,202,202,var(--tw-bg-opacity))}.bg-primary,.hover\:bg-primary:hover{background-color:var(--primary)}.bg-opacity-25{--tw-bg-opacity:0.25}.hover\:bg-opacity-75:hover{--tw-bg-opacity:0.75}.bg-center{background-position:50%}.bg-contain{background-size:contain}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(243,244,246,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.focus\:border-primary:focus{border-color:var(--primary)}.rounded-none{border-radius:0}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.border-none{border-style:none}.border{border-width:1px}.border-b-2{border-bottom-width:2px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-pointer{cursor:pointer}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.content-center{align-content:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-1{flex:1 1 0%}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.h-1{height:.25rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-12{height:3rem}.h-auto{height:auto}.h-full{height:100%}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.leading-tight{line-height:1.25}.list-none{list-style-type:none}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mb-3{margin-bottom:.75rem}.mt-5{margin-top:1.25rem}.mb-5{margin-bottom:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mt-10{margin-top:2.5rem}.mr-24{margin-right:6rem}.ml-auto{margin-left:auto}.max-w-md{max-width:28rem}.max-w-screen-sm{max-width:640px}.max-w-screen-md{max-width:768px}.max-w-screen-xl{max-width:1280px}.min-h-screen{min-height:100vh}.hover\:opacity-75:hover{opacity:.75}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}*{--tw-shadow:0 0 transparent}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.focus\:shadow-none:focus{--tw-shadow:0 0 transparent;box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.fill-current{fill:currentColor}.text-center{text-align:center}.text-right{text-align:right}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.group:hover .group-hover\:text-primary,.text-primary{color:var(--primary)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.hover\:text-primary:hover{color:var(--primary)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uppercase{text-transform:uppercase}.hover\:underline:hover{text-decoration:underline}.tracking-wide{letter-spacing:.025em}.visible{visibility:visible}.w-0{width:0}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-12{width:3rem}.w-20{width:5rem}.w-60{width:15rem}.w-2\/5{width:40%}.w-full{width:100%}.focus\:w-60:focus{width:15rem}.z-40{z-index:40}.z-50{z-index:50}.focus\:z-10:focus{z-index:10}.gap-3{gap:.75rem}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transition-colors{transition-property:background-color,border-color,color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@media (min-width:640px){.sm\:prose{color:#333;max-width:65ch}.sm\:prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.sm\:prose a{color:var(--secondary);text-decoration:underline;font-weight:500}.sm\:prose a:hover{opacity:.75}.sm\:prose strong{color:#111827;font-weight:600}.sm\:prose ol{counter-reset:list-counter;margin-top:1.25em;margin-bottom:1.25em}.sm\:prose ol>li{position:relative;counter-increment:list-counter;padding-left:1.75em}.sm\:prose ol>li:before{content:counter(list-counter) ".";position:absolute;font-weight:400;color:#6b7280;left:0}.sm\:prose ul>li{position:relative;padding-left:1.75em}.sm\:prose ul>li:before{content:"";position:absolute;background-color:#d1d5db;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.sm\:prose hr{border-color:#e5e7eb;border-top-width:1px;margin-top:3em;margin-bottom:3em}.sm\:prose blockquote{font-weight:500;font-style:italic;color:#111827;border-left-width:.25rem;border-left-color:#e5e7eb;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.sm\:prose blockquote p:first-of-type:before{content:open-quote}.sm\:prose blockquote p:last-of-type:after{content:close-quote}.sm\:prose h1{color:#111827;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.sm\:prose h2{color:#111827;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.sm\:prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.sm\:prose h3,.sm\:prose h4{color:#111827;font-weight:600}.sm\:prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.sm\:prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.sm\:prose code{color:#111827;font-weight:600;font-size:.875em}.sm\:prose code:after,.sm\:prose code:before{content:"`"}.sm\:prose a code{color:#111827}.sm\:prose pre{color:#e5e7eb;background-color:#1f2937;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.sm\:prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.sm\:prose pre code:after,.sm\:prose pre code:before{content:""}.sm\:prose thead{color:#111827;font-weight:600;border-bottom-width:1px;border-bottom-color:#d1d5db}.sm\:prose tbody tr{border-bottom-width:1px;border-bottom-color:#e5e7eb}.sm\:prose tbody tr:last-child{border-bottom-width:0}.sm\:prose{font-size:1rem;line-height:1.75}.sm\:prose p{margin-top:1.25em;margin-bottom:1.25em}.sm\:prose figure,.sm\:prose img,.sm\:prose video{margin-top:2em;margin-bottom:2em}.sm\:prose figure>*{margin-top:0;margin-bottom:0}.sm\:prose h2 code{font-size:.875em}.sm\:prose h3 code{font-size:.9em}.sm\:prose ul{margin-top:1.25em;margin-bottom:1.25em}.sm\:prose li{margin-top:.5em;margin-bottom:.5em}.sm\:prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.sm\:prose>ul>li>:first-child{margin-top:1.25em}.sm\:prose>ul>li>:last-child{margin-bottom:1.25em}.sm\:prose>ol>li>:first-child{margin-top:1.25em}.sm\:prose>ol>li>:last-child{margin-bottom:1.25em}.sm\:prose ol ol,.sm\:prose ol ul,.sm\:prose ul ol,.sm\:prose ul ul{margin-top:.75em;margin-bottom:.75em}.sm\:prose>:first-child,.sm\:prose h2+*,.sm\:prose h3+*,.sm\:prose h4+*,.sm\:prose hr+*{margin-top:0}.sm\:prose>:last-child{margin-bottom:0}.sm\:flex-row{flex-direction:row}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:w-1\/2{width:50%}}@media (min-width:768px){.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:focus\:w-full:focus,.md\:w-full{width:100%}}@media (min-width:1024px){.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:hidden{display:none}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:text-xs{font-size:.75rem;line-height:1rem}.lg\:mr-0{margin-right:0}.lg\:ml-0{margin-left:0}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:max-w-xs{max-width:20rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:absolute{position:absolute}.lg\:w-auto{width:auto}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-4\/5{width:80%}}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#f3f4f6}.dark\:prose-light [class~=lead]{color:#d1d5db}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#9ca3af}.dark\:prose-light ul>li:before{background-color:#4b5563}.dark\:prose-light hr{border-color:#e5e7eb}.dark\:prose-light blockquote{color:#e5e7eb;border-left-color:#4b5563}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#f3f4f6}.dark\:prose-light figure figcaption{color:#9ca3af}.dark\:prose-light a code,.dark\:prose-light code{color:#f3f4f6}.dark\:prose-light pre{color:#e5e7eb;background-color:#4b5563}.dark\:prose-light thead{color:#f3f4f6;border-bottom-color:#9ca3af}.dark\:prose-light tbody tr{border-bottom-color:#4b5563}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(55,65,81,var(--tw-bg-opacity))}.dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgba(55,65,81,var(--tw-border-opacity))}.dark\:text-gray-100{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(209,213,219,var(--tw-text-opacity))}.dark\:hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity))}} \ No newline at end of file +/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}strong{font-weight:bolder}code,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}button,input,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}blockquote,figure,h1,h2,h3,h4,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9ca3af}input::placeholder,textarea::placeholder{color:#9ca3af}button{cursor:pointer}h1,h2,h3,h4{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,textarea{padding:0;line-height:inherit;color:inherit}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}iframe,img,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#333;max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--secondary);text-decoration:underline;font-weight:500}.prose a:hover{opacity:.75}.prose strong{color:#111827;font-weight:600}.prose ol{counter-reset:list-counter;margin-top:1.25em;margin-bottom:1.25em}.prose ol>li{position:relative;counter-increment:list-counter;padding-left:1.75em}.prose ol>li:before{content:counter(list-counter) ".";position:absolute;font-weight:400;color:#6b7280;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d1d5db;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e5e7eb;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#111827;border-left-width:.25rem;border-left-color:#e5e7eb;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#111827;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#111827;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h3,.prose h4{color:#111827;font-weight:600}.prose h4{margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#111827;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#111827}.prose pre{color:#e5e7eb;background-color:#1f2937;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:""}.prose thead{color:#111827;font-weight:600;border-bottom-width:1px;border-bottom-color:#d1d5db}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e5e7eb}.prose tbody tr:last-child{border-bottom-width:0}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose>:first-child,.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm p{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm [class~=lead]{font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm blockquote{margin-top:1.3333333em;margin-bottom:1.3333333em;padding-left:1.1111111em}.prose-sm h1{font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm h2{font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm h3{font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm h4{margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm figure,.prose-sm img,.prose-sm video{margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm figure>*{margin-top:0;margin-bottom:0}.prose-sm figure figcaption{font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm code{font-size:.8571429em}.prose-sm h2 code{font-size:.9em}.prose-sm h3 code{font-size:.8888889em}.prose-sm pre{font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding:.6666667em 1em}.prose-sm ol,.prose-sm ul{margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm li{margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm ol>li{padding-left:1.5714286em}.prose-sm ol>li:before{left:0}.prose-sm ul>li{padding-left:1.5714286em}.prose-sm ul>li:before{height:.3571429em;width:.3571429em;top:.67857em;left:.2142857em}.prose-sm>ul>li p{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm>ul>li>:first-child{margin-top:1.1428571em}.prose-sm>ul>li>:last-child{margin-bottom:1.1428571em}.prose-sm>ol>li>:first-child{margin-top:1.1428571em}.prose-sm>ol>li>:last-child{margin-bottom:1.1428571em}.prose-sm ol ol,.prose-sm ol ul,.prose-sm ul ol,.prose-sm ul ul{margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm hr{margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm>:first-child,.prose-sm h2+*,.prose-sm h3+*,.prose-sm h4+*,.prose-sm hr+*{margin-top:0}.prose-sm>:last-child{margin-bottom:0}.aspect-w-16{position:relative;padding-bottom:calc(var(--tw-aspect-h)/var(--tw-aspect-w)*100%)}.aspect-w-16>*{position:absolute;height:100%;width:100%;top:0;right:0;bottom:0;left:0}.aspect-w-16{--tw-aspect-w:16}.aspect-h-9{--tw-aspect-h:9}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(0.25rem*var(--tw-space-x-reverse));margin-left:calc(0.25rem*(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.-space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(-1px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(-1px*var(--tw-space-y-reverse))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-red-200{--tw-bg-opacity:1;background-color:rgba(254,202,202,var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgba(255,251,235,var(--tw-bg-opacity))}.bg-primary,.hover\:bg-primary:hover{background-color:var(--primary)}.bg-opacity-25{--tw-bg-opacity:0.25}.hover\:bg-opacity-75:hover{--tw-bg-opacity:0.75}.bg-center{background-position:50%}.bg-contain{background-size:contain}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(243,244,246,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.border-yellow-500{--tw-border-opacity:1;border-color:rgba(245,158,11,var(--tw-border-opacity))}.focus\:border-primary:focus{border-color:var(--primary)}.rounded-none{border-radius:0}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.border-none{border-style:none}.border{border-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-pointer{cursor:pointer}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.content-center{align-content:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-1{flex:1 1 0%}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.h-1{height:.25rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-12{height:3rem}.h-auto{height:auto}.h-full{height:100%}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.leading-tight{line-height:1.25}.list-none{list-style-type:none}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mb-3{margin-bottom:.75rem}.mt-5{margin-top:1.25rem}.mb-5{margin-bottom:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mt-10{margin-top:2.5rem}.mr-24{margin-right:6rem}.ml-auto{margin-left:auto}.-mt-1{margin-top:-.25rem}.max-w-md{max-width:28rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-screen-sm{max-width:640px}.max-w-screen-md{max-width:768px}.max-w-screen-xl{max-width:1280px}.min-h-screen{min-height:100vh}.hover\:opacity-75:hover{opacity:.75}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-12{padding-top:3rem}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.placeholder-gray-500:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgba(107,114,128,var(--tw-placeholder-opacity))}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-y-0{top:0;bottom:0}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}*{--tw-shadow:0 0 transparent}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow-lg,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.focus\:shadow-none:focus{--tw-shadow:0 0 transparent;box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}*{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.fill-current{fill:currentColor}.text-center{text-align:center}.text-right{text-align:right}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgba(146,64,14,var(--tw-text-opacity))}.group:hover .group-hover\:text-primary,.text-primary{color:var(--primary)}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.hover\:text-primary:hover{color:var(--primary)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.uppercase{text-transform:uppercase}.hover\:underline:hover{text-decoration:underline}.tracking-wide{letter-spacing:.025em}.visible{visibility:visible}.w-0{width:0}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-12{width:3rem}.w-20{width:5rem}.w-60{width:15rem}.w-2\/5{width:40%}.w-full{width:100%}.focus\:w-60:focus{width:15rem}.z-40{z-index:40}.z-50{z-index:50}.focus\:z-10:focus{z-index:10}.gap-1{gap:.25rem}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transition-colors{transition-property:background-color,border-color,color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@media (min-width:640px){.sm\:flex-row{flex-direction:row}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:w-1\/2{width:50%}}@media (min-width:768px){.md\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:px-20{padding-left:5rem;padding-right:5rem}.md\:focus\:w-full:focus,.md\:w-full{width:100%}.md\:gap-3{gap:.75rem}}@media (min-width:1024px){.lg\:block{display:block}.lg\:inline-block{display:inline-block}.lg\:hidden{display:none}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:text-xs{font-size:.75rem;line-height:1rem}.lg\:mr-0{margin-right:0}.lg\:ml-0{margin-left:0}.lg\:mr-3{margin-right:.75rem}.lg\:mb-3{margin-bottom:.75rem}.lg\:max-w-xs{max-width:20rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:absolute{position:absolute}.lg\:w-auto{width:auto}.lg\:w-3\/4{width:75%}.lg\:w-1\/5{width:20%}.lg\:w-4\/5{width:80%}}@media (prefers-color-scheme:dark){.dark\:prose-light{color:#f3f4f6}.dark\:prose-light [class~=lead]{color:#d1d5db}.dark\:prose-light strong{color:#fff}.dark\:prose-light ol>li:before{color:#9ca3af}.dark\:prose-light ul>li:before{background-color:#4b5563}.dark\:prose-light hr{border-color:#e5e7eb}.dark\:prose-light blockquote{color:#e5e7eb;border-left-color:#4b5563}.dark\:prose-light h1,.dark\:prose-light h2,.dark\:prose-light h3,.dark\:prose-light h4{color:#f3f4f6}.dark\:prose-light figure figcaption{color:#9ca3af}.dark\:prose-light a code,.dark\:prose-light code{color:#f3f4f6}.dark\:prose-light pre{color:#e5e7eb;background-color:#4b5563}.dark\:prose-light thead{color:#f3f4f6;border-bottom-color:#9ca3af}.dark\:prose-light tbody tr{border-bottom-color:#4b5563}.dark\:bg-gray-700{--tw-bg-opacity:1;background-color:rgba(55,65,81,var(--tw-bg-opacity))}.dark\:bg-gray-900{--tw-bg-opacity:1;background-color:rgba(17,24,39,var(--tw-bg-opacity))}.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgba(55,65,81,var(--tw-border-opacity))}.dark\:text-gray-100{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgba(209,213,219,var(--tw-text-opacity))}.dark\:hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity))}} \ No newline at end of file diff --git a/docs/configuration.html b/docs/configuration.html deleted file mode 100644 index 0564ee4a8..000000000 --- a/docs/configuration.html +++ /dev/null @@ -1,2 +0,0 @@ - Configure a fresh install of Pushword

Configuration

Have a look inside config/packages/pushword.yaml.

Try this command to get the up to date configuration's options :

php bin/console config:dump-reference PushwordCoreBundle
-
\ No newline at end of file diff --git a/docs/contribute.html b/docs/contribute.html deleted file mode 100644 index 94296dd3c..000000000 --- a/docs/contribute.html +++ /dev/null @@ -1,6 +0,0 @@ - Contribute to Pushword : Documention, Core or Extension

Contribution and signaling issues

Signaling an issue

Use the github issue tracker.

This project is open source, and as such, the maintainers give their free time to build and maintain the source code held within. They make the code freely available in the hope that it will be of use to other developers. It would be extremely unfair for them to suffer abuse or anger for their hard work.

Contribute

Contributions are welcome.

Please, send your contribution via a github pull request on Puswhord/Puswhord.

The code is mainly organised in a mono-repo, learn more about the code architecture

Contribute to the documentation

The docs is inside the main repo, you will find write in markdown in packages/docs/content.

On each PR, the docs is compiled and published [pushword.piedweb.com] by a github action.

Pull Requests

New Features

When requesting or submitting new features, first consider to create a dedicated extension.

If your extension reply to an important community need, you can create a pull request to merge it in this Mono Repo. It will permit to maintain easily it compatibility in next Puswhord update. Moreover, extension will be tested at each commit on one of Pushword's package.

Else, consider create it own git repo and create a Pull Request on the doc to add a link to this fresh extension. The link will be accepted if your extension is well tested and fully functionnal.

Coding standards

This project respect PSR-2 Coding standard. Before your pull-request, run php-cs-fixer.

composer format
-

Tests

composer test
-
-# and to test with --prefer-lowest
-composer tests
-

Other Requirements

This attention, not always respected by the main maintener, would be cool :

  • Add tests

  • Document any change in behaviour - Make sure the documentation are kept up-to-date.

  • Consider our release cycle - We try to follow SemVer v2.0.0. Randomly breaking public APIs is not an option.

  • One pull request per feature - If you want to do more than one thing, send multiple pull requests.

  • Send coherent history - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting.

Happy coding!

\ No newline at end of file diff --git a/docs/cookbook.html b/docs/cookbook.html deleted file mode 100644 index 4a537b080..000000000 --- a/docs/cookbook.html +++ /dev/null @@ -1,9 +0,0 @@ - Puswhord Cookbook

Cookbook

Installation and Personalization

Editing an entity

When you install a new project, entities are installed full featured. -To remove default feature or add new one, you just need to edit Entity/Page.php, Entity/Media.php or Entity/User.php in your src folder. -Look at Pushword\Core\Entity\Page.php & co for full traits list.

You can easily extends and override Admin as well.

Edit the navbar

See override current theme.

{% set logo = page.locale == 'en' ? {'alt' : 'Alps Guide', 'href':'/en'} : {'alt':'Accompagnateur Vercors Pied Vert'} %}
-
{{ "
-{{ homepage() }}
-{{ page('my-slug') }}
-{{ page(pageObjecct) }}" }}
-

Optimize CSS

Activate purge css commented code in webpack.config.js

Maintaining

Update all cached image

Command line

php bin/console pushword:media:cache
-

Editor Tips

See help in the admin (/admin/markdown-cheatsheet).

\ No newline at end of file diff --git a/docs/create-extension.html b/docs/create-extension.html deleted file mode 100644 index 8abb4f682..000000000 --- a/docs/create-extension.html +++ /dev/null @@ -1 +0,0 @@ - Create a Pushword Extension the easy way

Create an extension

Each extension is build as a symfony bundle.

When you know that, you just have to learn how to make a bundle for symfony and you will know how to make an extension for Pushword.

There is some simple example like flat or more complex like conversation (and more respecting the symfony best practices).

\ No newline at end of file diff --git a/docs/extension.html b/docs/extension.html deleted file mode 100644 index 991b23d5c..000000000 --- a/docs/extension.html +++ /dev/null @@ -1 +0,0 @@ - Redirect to extensions

Redirect to extensions

Location: /extensions

\ No newline at end of file diff --git a/docs/extension/admin.html b/docs/extension/admin.html deleted file mode 100644 index 0d9d1340e..000000000 --- a/docs/extension/admin.html +++ /dev/null @@ -1,6 +0,0 @@ - Standard Admin for Pushword : Admin User Interface

Admin

Create, edit, delete Page, Media, User with an interface built on top of Sonata Admin.

Contents

Install

composer require pushword/admin
-

Add Routes

admin:
-  resource: '@PushwordAdminBundle/AdminRoutes.yaml'
-# or do it in 1 command line
-# $ sed -i '1s/^/admin:\n    resource: "@PushwordAdminBundle\/AdminRoutes.yaml"\n/' config/routes.yaml
-
\ No newline at end of file diff --git a/docs/extension/conversation.html b/docs/extension/conversation.html deleted file mode 100644 index f73246916..000000000 --- a/docs/extension/conversation.html +++ /dev/null @@ -1,34 +0,0 @@ - Conversation: Add Comment, Newsletter Form or Contact For

Conversation

Extend your Pushword website with comments, a contact form or just an user input.

Install

Via Packagist :

# Get the Bundle
-composer require pushword/conversation
-
-# Add the route to your Routes:
-conversation:
-    resource: '@PushwordConversationBundle/Resources/config/routes/conversation.yaml'
-
-# or do it in 1 command line
-# $ sed -i '1s/^/admin:\n    resource: "@PushwordConversationBundle\/Resources\/config\/routes\/conversation.yaml"\n/' config/routes.yaml
-

Update database

php bin/console doctrine:schema:update --force
-

Usage

You can use it as is and include it in your Page with two manners :

# Load form via fetch (javascript)
-<div data-live="{{ conversation('newsletter') }}"></div>
-# =
-<div data-live="{{ path('pushword_conversation', {'type': 'newsletter', 'referring': 'newsletter-'~page.slug, 'host': page.host}) }}"></div>
-
-# Render form in Controller
-{{ render(controller('Pushword\\Conversation\\Controller\\ConversationFormController::show')) }}
-
-# Or add a button to click before loading block
-<button src-data-live="{{ path('pushword_conversation', {'type': 'newsletter', 'referring': 'nslttr-'~page.slug, 'host': page.host}) }}" class="btn btn-primary">Register</button>
-

Activate the data-live element with @pushword/js-helper :

import { liveForm } from "@pushword/js-helper/src/helpers";
-
-// on dom changed and on page loaded&nbsp;:
-liveBlock();
-```
-
-### Render published comment
-
-```twig
-{{ showConversation(referring[, orderBy, limit, template]) }}
-

Get mail notification for new message

Configure the bundle (piedweb_conversation.notification_email_to) and programm a cron :

bin/console pushword:conversation:notify
-

Customization

Small rendering customization

By overriding @PushwordConversation/conversation/conversation.html.twig -(or '@PushwordConversation/conversation/'.$type.'Step'.$step.'.html.twig -or '@PushwordConversation/conversation/'.$type.$referring.'Step'.$step.'.html.twig).

Create a new form

Per default, there is 3 form types : newsletter, message and multiStepMessage.

Add a new class in config piedweb_conversation.form.myNewType: myNewFormClass.

\ No newline at end of file diff --git a/docs/extension/facebook.html b/docs/extension/facebook.html deleted file mode 100644 index 8e2af88dd..000000000 --- a/docs/extension/facebook.html +++ /dev/null @@ -1,7 +0,0 @@ - Write from Facebook on Pushword CMS

Facebook

Write from Facebook on your page managed by Pushword.

Install

composer require pushword/facebook
-

Usage

For now, this extension just permit to show last post from a page.

{{ facebook_last_post('Google') }}
-# will return the last post from Google's Facebook Page render via /component/FacebookLastPost.html.twig
-
-{% set fb_last_post_meta_data = facebook_last_post('Google', '') %}
-# will return an array
-

Override default theme

Create a /component/FacebookLastPost.html.twig in your app template directory.

\ No newline at end of file diff --git a/docs/extension/flat.html b/docs/extension/flat.html deleted file mode 100644 index 5eb884787..000000000 --- a/docs/extension/flat.html +++ /dev/null @@ -1,4 +0,0 @@ - Puswhord Flat File CMS - Markdown and Twig Ready

Flat

Transform Pushword in a FlatFile CMS.

Install

composer require pushword/flat-file
-

Configure

Add in your current config/package/pushword.yaml for an App or globally under pushword_static_generator:

    flat_content_dir: content #default value
-

Usage

Command Line

php bin/console pushword:flat:import $host
-

Where $host is facultative.


\ No newline at end of file diff --git a/docs/extension/page-scanner.html b/docs/extension/page-scanner.html deleted file mode 100644 index 76fbdec13..000000000 --- a/docs/extension/page-scanner.html +++ /dev/null @@ -1,7 +0,0 @@ - Pushword Page Scanner : Find dead links, 404, 301 and more.

Page Scanner

Find dead links, 404, 301 and more (command line or admin).

Contents

Install

composer require pushword/page-scanner
-

Add Routes

page_scanner:
-  resource: '@PushwordPageScannerBundle/PageScannerRoutes.yaml'
-# or do it in 1 command line
-# $ sed -i '1s/^/page_scanner:\n    resource: "@PushwordPageScannerBundle\/PageScannerRoutes.yaml"\n/' config/routes.yaml
-

Command

php bin/console pushword:page:scan $host
-
\ No newline at end of file diff --git a/docs/extension/page-update-notifier.html b/docs/extension/page-update-notifier.html deleted file mode 100644 index 584a4c2cf..000000000 --- a/docs/extension/page-update-notifier.html +++ /dev/null @@ -1,5 +0,0 @@ - Be notify when a page is edited on your Pushword CMS

Page Update Notifier

Get mail notification when your pushword content (page) is edited.

Install

composer require pushword/page-update-notifier
-

Configure

Add in your current config/package/pushword.yaml for an App or globally under pushword_page_update_notifier:

    notifier_email: fromMe@example.tld
-    page_update_notification_mail: NotificationForMe@example.tld
-    interval: 'P1D' #See PHP DateInterval format https://www.php.net/manual/fr/class.dateinterval.php
-

Usage

Nothing to do, just get notify. On postPersist/postUpdate, the extension check if you didn't get notify till too long (interval), then, send the last edit since interval.

\ No newline at end of file diff --git a/docs/extension/static-generator.html b/docs/extension/static-generator.html deleted file mode 100644 index 165dd9117..000000000 --- a/docs/extension/static-generator.html +++ /dev/null @@ -1,17 +0,0 @@ - Static Website Generator with Pushword CMS

Static Generator

Generate a static website serve by github pages, apaches with one command or via the admin.

Install

composer require pushword/template-editor
-

Add Routes

static:
-  resource: '@PushwordStaticGeneratorBundle/StaticRoutes.yaml'
-# or do it in 1 command line
-# $ sed -i '1s/^/static:\n    resource: "@PushwordStaticGeneratorBundle\/StaticRoutes.yaml"\n/' config/routes.yaml
-

Configure

Add in your current config/package/pushword.yaml for an App or globally under pushword_static_generator:

    static_generators: apache|github|[..., classNameGenerator, ...]
-    static_symlink: true
-    static_dir: '' #default /%mainHost.tld%/
-

Command

# Generate all apps
-php bin/console pushword:static:generate
-
-# Generate 1 app
-php bin/console pushword:static:generate $host
-
-# (re)Generate only one page
-php bin/console pushword:static:generate $host $slug
-
\ No newline at end of file diff --git a/docs/extension/svg.html b/docs/extension/svg.html deleted file mode 100644 index 9da640ef4..000000000 --- a/docs/extension/svg.html +++ /dev/null @@ -1,3 +0,0 @@ - Insert SVG/Icon in your content - Pushword CMS

SVG

Add SVG with ease in your main content or in a template file via a twig function.

Install

composer require pushword/svg
-

Usage

By default, this extension use FontAwesome 5.15. You just need to use twig svg function :

svg('surprise')
-

Will show

Configure

By default, this extension load FontAwesome 5.15's icons. You can choose to use your custom SVG icons by specifyng the svg_dir in your app config or under pushword_svg.

\ No newline at end of file diff --git a/docs/extension/template-editor.html b/docs/extension/template-editor.html deleted file mode 100644 index ab374cd19..000000000 --- a/docs/extension/template-editor.html +++ /dev/null @@ -1,6 +0,0 @@ - Template Editor with Pushword CMS

Template Editor

Edit view file online in the admin.

Contents

Install

composer require pushword/template-editor
-

Add Routes

template_editor:
-  resource: '@PushwordTemplateEditorBundle/TemplateEditorRoutes.yaml'
-# or do it in 1 command line
-# $ sed -i '1s/^/template_editor:\n    resource: "@PushwordTemplateEditorBundle\/TemplateEditorRoutes.yaml"\n/' config/routes.yaml
-
\ No newline at end of file diff --git a/docs/extensions.html b/docs/extensions.html deleted file mode 100644 index 8c3f385a4..000000000 --- a/docs/extensions.html +++ /dev/null @@ -1 +0,0 @@ - Extensions

Find your missing feature with a Pushword Extension

  • Admin Create, edit, delete Page, Media, User with an interface built on top of Sonata Admin.
  • Conversation Extend your Pushword website with comments, a contact form or just an user input.
  • Flat Transform Pushword in a FlatFile CMS.
  • Facebook Write from Facebook on your page managed by Pushword.
  • Page Scanner Find dead links, 404, 301 and more (command line or admin).
  • Page Update Notifier Get mail notification when your pushword content (page) is edited.
  • Static Generator Generate a static website serve by github pages, apaches with one command or via the admin.
  • Svg Add SVG with ease in your main content or in a template file via a twig function.
  • Template Editor Edit view file online in the admin.

Add your own extension editing this file on github.

\ No newline at end of file diff --git a/docs/feed.xml b/docs/feed.xml index 824ce009b..8bb6ced3a 100644 --- a/docs/feed.xml +++ b/docs/feed.xml @@ -1 +1 @@ -Pushword - Modern CMS to build rapidly Websites (powered by Symfony) https://pushword.piedweb.com/ https://pushword.piedweb.com/extension/facebook https://pushword.piedweb.com/extension/facebook Wed, 13 Jan 2021 17:55:39 +0100 https://pushword.piedweb.com/extension/svg https://pushword.piedweb.com/extension/svg Tue, 12 Jan 2021 20:33:23 +0100 https://pushword.piedweb.com/architecture https://pushword.piedweb.com/architecture Fri, 08 Jan 2021 16:21:48 +0100 https://pushword.piedweb.com/configuration https://pushword.piedweb.com/configuration Fri, 08 Jan 2021 16:21:48 +0100 https://pushword.piedweb.com/contribute https://pushword.piedweb.com/contribute Fri, 08 Jan 2021 16:21:48 +0100 \ No newline at end of file +Pushword - Modern CMS to build rapidly Websites (powered by Symfony) https://pushword.piedweb.com/ https://pushword.piedweb.com/architecture https://pushword.piedweb.com/architecture Sat, 16 Jan 2021 11:11:19 +0000 https://pushword.piedweb.com/configuration https://pushword.piedweb.com/configuration Sat, 16 Jan 2021 11:11:19 +0000 https://pushword.piedweb.com/contribute https://pushword.piedweb.com/contribute Sat, 16 Jan 2021 11:11:19 +0000 https://pushword.piedweb.com/cookbook https://pushword.piedweb.com/cookbook Sat, 16 Jan 2021 11:11:19 +0000 https://pushword.piedweb.com/create-extension https://pushword.piedweb.com/create-extension Sat, 16 Jan 2021 11:11:19 +0000 \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 5a190796d..785ec0a04 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ - Pushword - Modern CMS to build rapidly Websites (powered by Symfony)

Build modern websites rapidly
maintain it as quickly

Puswhord is a php CMS build on top of Symfony to rapidly create, manage and maintain Modern Website(s).

Edition
Simple and efficient Admin

  • Simple, functionnable and efficient default Admin. If you come from Wordpress, you will not be lost. If you prefer a flat file cms, Pushword do that too !
  • Write as you prefer in a rich Text editor, in Markdown or directly in html (with Twig functionnalities avalaible !)
  • Multi-site, Multi-language (i18n), Multi-domain or just one simple website : both are possible on the same installation
  • Easily extendable (extensions list) or ask a developper what you wish

Theme it

  • Customize the default theme with ease, it's built with Tailwind CSS (you never use it ? It's amazing).
  • Create new theme extending other or just override default theme, see docs example (assets, components)
  • Stack : Twig / WhatYouWant (Webpack/Encore per default)

Extend
Feel at home if you ever used Symfony and composer

If not, be happy : there is autowiring, event suscriber and more !

  • Build on top on Symfony and other fantastic well maintained packages
  • Build as a symfony bundle, extendable with symfony bundle
  • Tested / Traits / Command

Be visible on Search Engine
SEO : feel like wikipedia

  • Title / H1 / Description / Url Rewriting
  • i18n (link alternate hreflang) easy way
  • Links Watcher (dead links, redirection, etc.)
  • Links Improver (links suggestion on writing, or automatic adding)
  • Blazing Fast (static website generator with dynamic possibilities)

... and more to discover, just install it in a few seconds or browse the code.

\ No newline at end of file + Welcome : this is your first page

Welcome : this is your first page

You just succeed to install Pushword/Core.

You are on your future homepage.

Go to admin to edit this one.

Use the credentials you enter during the installation.

Have Fun,

Robin From Pied Web

Pushword
\ No newline at end of file diff --git a/docs/installation.html b/docs/installation.html deleted file mode 100644 index 9ca6ecccf..000000000 --- a/docs/installation.html +++ /dev/null @@ -1,3 +0,0 @@ - Install Pushword in a few seconds (automatic installer)

Installation

Supposing composer is installed globally


curl https://raw.githubusercontent.com/Pushword/Pushword/main/packages/installer/src/installer >> installer && chmod +x installer && echo 'y' | ./installer ./my-folder - -

Else, look in the shell script installer where each step is describe.

...
\ No newline at end of file diff --git a/docs/license.html b/docs/license.html deleted file mode 100644 index 658c9064a..000000000 --- a/docs/license.html +++ /dev/null @@ -1 +0,0 @@ - Pushword CMS License and contributors

License and contributors

Contributors

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

\ No newline at end of file diff --git a/docs/roadmap.html b/docs/roadmap.html deleted file mode 100644 index 781831e1c..000000000 --- a/docs/roadmap.html +++ /dev/null @@ -1 +0,0 @@ - Where Pushword is going ? Roadmap, TODO and Ideas

ROADMAP Just TODO and IDEA

TODO before v1

  • [ ] Revoir la gestion des assets
  • [ ] release de sonata 4
  • [ ] Import(/export) Media in Flat (see facebook image importer)
  • [ ] Test installer

TODO Extension

  • [ ] FacebookManager (post from facebook and ~~show last facebook status~~ )
  • [ ] Flat: Transform markdown link to page link (useful for navigate in docs from editor)
  • [ ] Flat: Throw error when the content is more up to date in database... add export (and maintain ID)
  • [ ] Wordpress To Pushword/Core (and vice versa)
  • [ ] Intégrer LinksImprover (+ UX), après précédent
  • [ ] name suggester : parse content, find words or multiple words used only in this doc, suggest it as potential name
  • [ ] export/import FLAT FILES (spatie/yaml-front-matter, vérif à chaque requête pour une sync constante admin -> flat files)
  • [ ] Create a page from a Media (media edit) => button to create a new page with title = name and mainImage = Media (useful for photographer website)... or create a dynamic page /media/[slug]/ showing data from Media
  • [ ] Intégrer Schema.org dans le backend d'une page
  • [ ] Settings Manager (simple textarea permitting to edit pushword config and parameters ? and rebooting cache)

To plan

  • [ ] Media Management v2 : utiliser IPTC&exif pour stocker toutes les infos stockées en bdd (static power)
  • [ ] CI : Test Installer
  • [ ] Author for page (will permit to manage page view right later)
  • [ ] Archive edit (page) (extension or core ?)
  • [ ] Multi-user editor Multi-site but not everybody can edit everything (see draft.md) (extension or core ?)
  • [ ] Look for a better writer experience (https://github.com/front/g-editor or https://editorjs.io) (1/2)
  • [ ] Gérer un système d'extension viable pour l'admin : à l'install, créer les fichiers Admin qui étendent l'admin de base L'ajout d'un plugin modifie automatiquement ce nouveau fichier en ajoutant le code nécessaire (ajout d'une trait + édition d'une fonction) Retro-compatibilité : créer le fichier admin + le services (autowire) si il n'existe pas
  • [ ] Scan : scanner une page en direct + scanner plus de choses (liens externes, texte alternative manquant, etc.)
  • [ ] Multi upload
  • [ ] Test the code, search for all "todo" in the code,
  • [ ] Installation without composer (download composer if not installed)
  • [ ] Pagination children/list (molto idea : PageController capture les pages /slug/[0-0]*/ et renvoie si existe)
  • [ ] Page with dynamic slug ?!
  • [ ] Add https://github.com/nan-guo/Sonata-Menu-Bundle
  • [ ] Move route to annotation (less extendable but more pratical with priority)
  • [ ] Move media to var (and create a link ?!)
\ No newline at end of file diff --git a/docs/search.json b/docs/search.json deleted file mode 100644 index aa6b0d8c3..000000000 --- a/docs/search.json +++ /dev/null @@ -1,3 +0,0 @@ - - -[{"title":"Facebook","url":"\/extension\/facebook","slug":"extension\/facebook","content":"

Write from Facebook on your page managed by Pushword.<\/p>\n\n

Install<\/h2>\n\n
composer require pushword\/facebook\n<\/code><\/pre>\n\n

Usage<\/h2>\n\n

For now, this extension just permit to show last post from a page.<\/p>\n\n

{{ facebook_last_post('Google') }"},{"title":"SVG","url":"\/extension\/svg","slug":"extension\/svg","content":"

Add SVG with ease in your main content or in a template file via a twig function.<\/p>\n\n

Install<\/h2>\n\n
composer require pushword\/svg\n<\/code><\/pre>\n\n

Usage<\/h2>\n\n

By default, this extension use FontAwes"},{"title":"The Code Architecture","url":"\/architecture","slug":"architecture","content":"

Are you searching for :<\/p>\n\n