feat: change to other sitepakage
This commit is contained in:
70
packages/base/.editorconfig
Normal file
70
packages/base/.editorconfig
Normal file
@@ -0,0 +1,70 @@
|
||||
# EditorConfig is awesome: http://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
# Unix-style newlines with a newline ending every file
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# CSS-Files
|
||||
[*.css]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# HTML-Files
|
||||
[*.html]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# TMPL-Files
|
||||
[*.tmpl]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# JS-Files
|
||||
[*.js]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# PHP-Files
|
||||
[*.php]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# MD-Files
|
||||
[*.md]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# ReST-Files
|
||||
[*.rst]
|
||||
indent_style = space
|
||||
indent_size = 3
|
||||
|
||||
# TypoScript
|
||||
[*.typoscript]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# YML-Files
|
||||
[{*.yml,*.yaml}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# package.json
|
||||
[package.json]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# composer.json
|
||||
[composer.json]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# phpstan
|
||||
[*.neon]
|
||||
indent_style = tab
|
||||
2
packages/base/Classes/.htaccess
Normal file
2
packages/base/Classes/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
1
packages/base/Classes/Controller/.gitkeep
Normal file
1
packages/base/Classes/Controller/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
packages/base/Classes/Domain/.gitkeep
Normal file
1
packages/base/Classes/Domain/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
packages/base/Classes/Domain/Model/.gitkeep
Normal file
1
packages/base/Classes/Domain/Model/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
packages/base/Classes/Domain/Repository/.gitkeep
Normal file
1
packages/base/Classes/Domain/Repository/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
packages/base/Classes/ViewHelpers/.gitkeep
Normal file
1
packages/base/Classes/ViewHelpers/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
2
packages/base/Configuration/.htaccess
Normal file
2
packages/base/Configuration/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
61
packages/base/Configuration/ContentSecurityPolicies.php
Normal file
61
packages/base/Configuration/ContentSecurityPolicies.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Directive;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Mutation;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationCollection;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationMode;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Scope;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceKeyword;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\SourceScheme;
|
||||
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\UriValue;
|
||||
use TYPO3\CMS\Core\Type\Map;
|
||||
|
||||
return Map::fromEntries([
|
||||
// Provide declarations for the backend
|
||||
Scope::backend(),
|
||||
// NOTICE: When using `MutationMode::Set` existing declarations will be overridden
|
||||
|
||||
new MutationCollection(
|
||||
// Results in `default-src 'self'`
|
||||
new Mutation(
|
||||
MutationMode::Set,
|
||||
Directive::DefaultSrc,
|
||||
SourceKeyword::self,
|
||||
),
|
||||
|
||||
// Extends the ancestor directive ('default-src'),
|
||||
// thus reuses 'self' and adds additional sources
|
||||
// Results in `img-src 'self' data: https://*.typo3.org`
|
||||
new Mutation(
|
||||
MutationMode::Extend,
|
||||
Directive::ImgSrc,
|
||||
SourceScheme::data,
|
||||
new UriValue('https://*.typo3.org'),
|
||||
),
|
||||
// NOTICE: the following two instructions for `Directive::ImgSrc` are identical to the previous instruction,
|
||||
// `MutationMode::Extend` is a shortcut for `MutationMode::InheritOnce` and `MutationMode::Append`
|
||||
// new Mutation(MutationMode::InheritOnce, Directive::ImgSrc, SourceScheme::data),
|
||||
// new Mutation(MutationMode::Append, Directive::ImgSrc, SourceScheme::data, new UriValue('https://*.typo3.org')),
|
||||
|
||||
// Extends the ancestor directive ('default-src'),
|
||||
// thus reuses 'self' and adds additional sources
|
||||
// Results in `script-src 'self' 'nonce-[random]'`
|
||||
// ('nonce-proxy' is substituted when compiling the policy)
|
||||
new Mutation(
|
||||
MutationMode::Extend,
|
||||
Directive::ScriptSrc,
|
||||
SourceKeyword::nonceProxy,
|
||||
),
|
||||
|
||||
// Sets (overrides) the directive,
|
||||
// thus ignores 'self' of the 'default-src' directive
|
||||
// Results in `worker-src blob:`
|
||||
new Mutation(
|
||||
MutationMode::Set,
|
||||
Directive::WorkerSrc,
|
||||
SourceScheme::blob,
|
||||
),
|
||||
),
|
||||
]);
|
||||
42
packages/base/Configuration/RTE/Default.yaml
Normal file
42
packages/base/Configuration/RTE/Default.yaml
Normal file
@@ -0,0 +1,42 @@
|
||||
imports:
|
||||
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
|
||||
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
|
||||
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
|
||||
|
||||
editor:
|
||||
config:
|
||||
contentsCss: "EXT:base/Resources/Public/Css/rte.css"
|
||||
|
||||
stylesSet:
|
||||
- { name: "Lead", element: "p", attributes: { 'class': 'lead' } }
|
||||
|
||||
toolbarGroups:
|
||||
- { name: styles, groups: [ format, styles ] }
|
||||
- { name: basicstyles, groups: [ basicstyles ] }
|
||||
- { name: paragraph, groups: [ list, indent, blocks, align ] }
|
||||
- "/"
|
||||
- { name: links, groups: [ links ] }
|
||||
- { name: clipboard, groups: [ clipboard, cleanup, undo ] }
|
||||
- { name: editing, groups: [ spellchecker ] }
|
||||
- { name: insert, groups: [ insert ] }
|
||||
- { name: tools, groups: [ table, specialchar ] }
|
||||
- { name: document, groups: [ mode ] }
|
||||
|
||||
format_tags: "p;h1;h2;h3;h4;h5;pre"
|
||||
|
||||
justifyClasses:
|
||||
- text-left
|
||||
- text-center
|
||||
- text-right
|
||||
- text-justify
|
||||
|
||||
extraPlugins:
|
||||
- justify
|
||||
|
||||
removePlugins:
|
||||
- image
|
||||
|
||||
removeButtons:
|
||||
- Anchor
|
||||
- Underline
|
||||
- Strike
|
||||
@@ -0,0 +1,47 @@
|
||||
#
|
||||
# BACKENDLAYOUT: DEFAULT
|
||||
#
|
||||
mod {
|
||||
web_layout {
|
||||
BackendLayouts {
|
||||
default {
|
||||
title = Default
|
||||
config {
|
||||
backend_layout {
|
||||
colCount = 12
|
||||
rowCount = 2
|
||||
rows {
|
||||
1 {
|
||||
columns {
|
||||
1 {
|
||||
name = LLL:EXT:base/Resources/Private/Language/locallang_be.xlf:backend_layout.column.normal
|
||||
colPos = 0
|
||||
colspan = 12
|
||||
identifier = main
|
||||
}
|
||||
}
|
||||
}
|
||||
2 {
|
||||
columns {
|
||||
1 {
|
||||
name = Footer Left
|
||||
colPos = 90
|
||||
colspan = 6
|
||||
identifier = footer-left
|
||||
}
|
||||
2 {
|
||||
name = Footer Right
|
||||
colPos = 91
|
||||
colspan = 6
|
||||
identifier = footer-right
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
icon = EXT:test/Resources/Public/Icons/BackendLayouts/example.svg
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
lib.dynamicContent = COA
|
||||
lib.dynamicContent {
|
||||
5 = LOAD_REGISTER
|
||||
5 {
|
||||
colPos.cObject = TEXT
|
||||
colPos.cObject {
|
||||
field = colPos
|
||||
ifEmpty.cObject = TEXT
|
||||
ifEmpty.cObject {
|
||||
value.current = 1
|
||||
ifEmpty = 0
|
||||
}
|
||||
}
|
||||
slide.cObject = TEXT
|
||||
slide.cObject {
|
||||
override {
|
||||
field = slide
|
||||
if {
|
||||
isInList.field = slide
|
||||
value = -1, 0, 1, 2
|
||||
}
|
||||
}
|
||||
ifEmpty = 0
|
||||
}
|
||||
pageUid.cObject = TEXT
|
||||
pageUid.cObject {
|
||||
field = pageUid
|
||||
ifEmpty.data = TSFE:id
|
||||
}
|
||||
contentFromPid.cObject = TEXT
|
||||
contentFromPid.cObject {
|
||||
data = DB:pages:{register:pageUid}:content_from_pid
|
||||
data.insertData = 1
|
||||
}
|
||||
wrap.cObject = TEXT
|
||||
wrap.cObject {
|
||||
field = wrap
|
||||
}
|
||||
elementWrap.cObject = TEXT
|
||||
elementWrap.cObject {
|
||||
field = elementWrap
|
||||
}
|
||||
}
|
||||
20 = CONTENT
|
||||
20 {
|
||||
table = tt_content
|
||||
select {
|
||||
includeRecordsWithoutDefaultTranslation = 1
|
||||
orderBy = sorting
|
||||
where = {#colPos}={register:colPos}
|
||||
where.insertData = 1
|
||||
pidInList.data = register:pageUid
|
||||
pidInList.override.data = register:contentFromPid
|
||||
}
|
||||
slide = {register:slide}
|
||||
slide.insertData = 1
|
||||
renderObj {
|
||||
stdWrap {
|
||||
dataWrap = {register:elementWrap}
|
||||
required = 1
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
dataWrap = {register:wrap}
|
||||
required = 1
|
||||
}
|
||||
}
|
||||
90 = RESTORE_REGISTER
|
||||
}
|
||||
lib.dynamicContentSlide =< lib.dynamicContent
|
||||
lib.dynamicContentSlide.20.slide = -1
|
||||
@@ -0,0 +1,36 @@
|
||||
################
|
||||
#### CONFIG ####
|
||||
################
|
||||
config {
|
||||
absRefPrefix = auto
|
||||
no_cache = {$config.no_cache}
|
||||
uniqueLinkVars = 1
|
||||
pageTitleFirst = 1
|
||||
linkVars = L
|
||||
prefixLocalAnchors = {$config.prefixLocalAnchors}
|
||||
renderCharset = utf-8
|
||||
metaCharset = utf-8
|
||||
doctype = html5
|
||||
removeDefaultJS = {$config.removeDefaultJS}
|
||||
inlineStyle2TempFile = 1
|
||||
admPanel = {$config.admPanel}
|
||||
debug = 0
|
||||
cache_period = 86400
|
||||
sendCacheHeaders = {$config.sendCacheHeaders}
|
||||
intTarget =
|
||||
extTarget =
|
||||
disablePrefixComment = 1
|
||||
index_enable = 1
|
||||
index_externals = 1
|
||||
index_metatags = 1
|
||||
headerComment = {$config.headerComment}
|
||||
|
||||
// Disable Image Upscaling
|
||||
noScaleUp = 1
|
||||
|
||||
// Compression and Concatenation of CSS and JS Files
|
||||
compressJs = 1
|
||||
compressCss = 1
|
||||
concatenateJs = 1
|
||||
concatenateCss = 1
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
##############
|
||||
#### PAGE ####
|
||||
##############
|
||||
page = PAGE
|
||||
page {
|
||||
typeNum = 0
|
||||
shortcutIcon = EXT:base/Resources/Public/Icons/favicon.ico
|
||||
|
||||
10 = PAGEVIEW
|
||||
10 {
|
||||
paths {
|
||||
0 = EXT:base/Resources/Private/PageView/
|
||||
1 = {$page.pageview.paths}
|
||||
}
|
||||
dataProcessing {
|
||||
10 = files
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
20 = menu
|
||||
20 {
|
||||
levels = 2
|
||||
includeSpacer = 1
|
||||
as = mainnavigation
|
||||
}
|
||||
30 = page-content
|
||||
}
|
||||
}
|
||||
|
||||
meta {
|
||||
viewport = {$page.meta.viewport}
|
||||
robots = {$page.meta.robots}
|
||||
apple-mobile-web-app-capable = {$page.meta.apple-mobile-web-app-capable}
|
||||
|
||||
X-UA-Compatible = {$page.meta.compatible}
|
||||
X-UA-Compatible {
|
||||
attribute = http-equiv
|
||||
}
|
||||
}
|
||||
|
||||
includeCSSLibs {
|
||||
|
||||
}
|
||||
|
||||
includeCSS {
|
||||
main = EXT:base/Resources/Public/Scss/main.scss
|
||||
}
|
||||
|
||||
includeJSLibs {
|
||||
navigation = EXT:base/Resources/Public/JavaScript/navigation.js
|
||||
|
||||
}
|
||||
|
||||
includeJS {
|
||||
|
||||
}
|
||||
|
||||
includeJSFooterlibs {
|
||||
|
||||
}
|
||||
|
||||
includeJSFooter {
|
||||
test_scripts = EXT:base/Resources/Public/JavaScript/main.js
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
<INCLUDE_TYPOSCRIPT: source="DIR:EXT:base/ContentBlocks" extensions="typoscript">
|
||||
lib.contentElement {
|
||||
layoutRootPaths {
|
||||
0 = EXT:base/Resources/Private/ContentElements/Layouts/
|
||||
}
|
||||
}
|
||||
lib.contentBlock {
|
||||
partialRootPaths.0 < lib.contentElement.partialRootPaths.0
|
||||
layoutRootPaths.0 < lib.contentElement.layoutRootPaths.0
|
||||
|
||||
settings < lib.contentElement.settings
|
||||
}
|
||||
5
packages/base/Configuration/Sets/SitePackage/config.yaml
Normal file
5
packages/base/Configuration/Sets/SitePackage/config.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
name: cloonar-typo3/base
|
||||
label: 'Base Design'
|
||||
dependencies:
|
||||
- typo3/fluid-styled-content
|
||||
- typo3/fluid-styled-content-css
|
||||
21
packages/base/Configuration/Sets/SitePackage/page.tsconfig
Normal file
21
packages/base/Configuration/Sets/SitePackage/page.tsconfig
Normal file
@@ -0,0 +1,21 @@
|
||||
@import './PageTsConfig/BackendLayouts/'
|
||||
|
||||
RTE {
|
||||
default {
|
||||
preset = base
|
||||
}
|
||||
}
|
||||
|
||||
TCEFORM {
|
||||
pages {
|
||||
|
||||
}
|
||||
tt_content {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
TCEMAIN {
|
||||
|
||||
}
|
||||
|
||||
28
packages/base/Configuration/Sets/SitePackage/settings.yaml
Normal file
28
packages/base/Configuration/Sets/SitePackage/settings.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
styles:
|
||||
templates:
|
||||
layoutRootPath: 'EXT:base/Resources/Private/ContentElements/Layouts/'
|
||||
partialRootPath: 'EXT:base/Resources/Private/ContentElements/Partials/'
|
||||
templateRootPath: 'EXT:base/Resources/Private/ContentElements/Templates/'
|
||||
|
||||
page:
|
||||
pageview:
|
||||
paths: 'EXT:base/Resources/Private/PageView/'
|
||||
|
||||
meta:
|
||||
viewport: 'width=device-width, initial-scale=1'
|
||||
robots: 'index,follow'
|
||||
apple-mobile-web-app-capable: 'no'
|
||||
compatible: 'IE=edge'
|
||||
|
||||
tracking:
|
||||
google:
|
||||
trackingID: ''
|
||||
anonymizeIp: '1'
|
||||
|
||||
config:
|
||||
no_cache: '0'
|
||||
removeDefaultJS: '0'
|
||||
admPanel: '1'
|
||||
prefixLocalAnchors: 'all'
|
||||
headerComment: 'build by get.typo3.org/sitepackage'
|
||||
sendCacheHeaders: '1'
|
||||
@@ -0,0 +1 @@
|
||||
@import './TypoScript/'
|
||||
3
packages/base/Configuration/TCA/Overrides/tt_content.php
Normal file
3
packages/base/Configuration/TCA/Overrides/tt_content.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
// $GLOBALS['TCA']['tt_content']['columns']['cloonar_hero_bodytext']['config']['enableRichText'] = true;
|
||||
@@ -0,0 +1,3 @@
|
||||
.frame-type-cloonar_hero .container {
|
||||
display: flex;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 16 16"><path fill="#FFF" d="M1 1h14v14H1V1z"/><path fill="#999" d="M1 1v14h14V1H1zm1 1h12v12H2V2z"/><path fill="#666" d="M3 3h10v1H3V3z"/><path fill="#B9B9B9" d="M3 5h10v1H3V5z"/><path fill="#59F" d="M7 7h6v6H7V7z"/><path fill="#FFF" d="M11 12H8l.75-1 .75-1 .75 1 .75 1z"/><path fill="#FFF" d="M12 12H9.333l.667-.667.667-.666.666.666L12 12z"/><circle cx="11.5" cy="9.5" r=".5" fill="#FFF"/><path fill="#B9B9B9" d="M3 7h3v1H3V7zm0 2h3v1H3V9zm0 2h3v1H3v-1z"/></svg>
|
||||
|
After Width: | Height: | Size: 537 B |
21
packages/base/ContentBlocks/ContentElements/hero/config.yaml
Normal file
21
packages/base/ContentBlocks/ContentElements/hero/config.yaml
Normal file
@@ -0,0 +1,21 @@
|
||||
name: cloonar/hero
|
||||
typeName: cloonar_hero
|
||||
group: default
|
||||
prefixFields: true
|
||||
prefixType: full
|
||||
fields:
|
||||
-
|
||||
identifier: header
|
||||
useExistingField: true
|
||||
-
|
||||
identifier: bodytext
|
||||
type: Textarea
|
||||
enableRichtext: true
|
||||
useExistingField: true
|
||||
- identifier: image
|
||||
type: File
|
||||
properties:
|
||||
allowed: [jpg, jpeg, png, gif]
|
||||
useExistingField: true
|
||||
- identifier: imageorient
|
||||
useExistingField: true
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file datatype="plaintext" original="labels.xlf" source-language="en" date="2024-12-12T00:46:08+00:00" product-name="cloonar/hero">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="title">
|
||||
<source>Hero</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="description">
|
||||
<source>Description for Content Element cloonar/hero</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,21 @@
|
||||
<html
|
||||
xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true"
|
||||
>
|
||||
|
||||
<f:layout name="Preview"/>
|
||||
|
||||
<f:section name="Header">
|
||||
<be:link.editRecord uid="{data.uid}" table="{data.mainType}">{data.header}</be:link.editRecord>
|
||||
</f:section>
|
||||
|
||||
<f:section name="Content">
|
||||
Preview for Content Block: cloonar/hero
|
||||
</f:section>
|
||||
|
||||
<f:comment>
|
||||
<!-- Uncomment to override preview footer -->
|
||||
<f:section name="Footer">
|
||||
My custom Footer
|
||||
</f:section>
|
||||
</f:comment>
|
||||
@@ -0,0 +1,18 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:cb="http://typo3.org/ns/TYPO3/CMS/ContentBlocks/ViewHelpers"
|
||||
xmlns:bk2k="http://typo3.org/ns/BK2K/BootstrapPackage/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true">
|
||||
|
||||
<f:layout name="Default" />
|
||||
<f:section name="Main">
|
||||
|
||||
<f:asset.css identifier="hero" href="{cb:assetPath()}/frontend.css"/>
|
||||
<div class="textpic textpic-{data.imageorient}">
|
||||
<div class="textpic-item textpic-gallery">
|
||||
<f:image image="{data.image.0}" alt="Wobi" />
|
||||
</div>
|
||||
<div class="textpic-item textpic-text">
|
||||
<f:format.html>{data.bodytext}</f:format.html>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
4
packages/base/README.md
Normal file
4
packages/base/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
Site Package for the project "Test"
|
||||
==============================================================
|
||||
|
||||
Add some explanation here.
|
||||
2
packages/base/Resources/Private/.htaccess
Normal file
2
packages/base/Resources/Private/.htaccess
Normal file
@@ -0,0 +1,2 @@
|
||||
Order deny,allow
|
||||
Deny from all
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="frame frame-type-{data.CType}">
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h2>{data.header}</h2>
|
||||
</div>
|
||||
<f:render section="Main" optional="true" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
11
packages/base/Resources/Private/Language/locallang.xlf
Normal file
11
packages/base/Resources/Private/Language/locallang.xlf
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2024-12-11UTC16:10:160">
|
||||
<header>
|
||||
<authorName>Test</authorName>
|
||||
<authorEmail>test@test.at</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
23
packages/base/Resources/Private/Language/locallang_be.xlf
Normal file
23
packages/base/Resources/Private/Language/locallang_be.xlf
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2024-12-11UTC16:10:160">
|
||||
<header>
|
||||
<authorName>Test</authorName>
|
||||
<authorEmail>test@test.at</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id="backend_layout.default">
|
||||
<source>Default</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="backend_layout.column.stage">
|
||||
<source>Stage</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="backend_layout.column.normal">
|
||||
<source>Normal</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="backend_layout.column.right">
|
||||
<source>Right</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
11
packages/base/Resources/Private/Language/locallang_db.xlf
Normal file
11
packages/base/Resources/Private/Language/locallang_db.xlf
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2024-12-11UTC16:10:160">
|
||||
<header>
|
||||
<authorName>Test</authorName>
|
||||
<authorEmail>test@test.at</authorEmail>
|
||||
</header>
|
||||
<body>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,21 @@
|
||||
<header>
|
||||
<!-- Main Navigation -->
|
||||
<f:render partial="Navigation/Main" arguments="{_all}" />
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<!-- Main Section -->
|
||||
<f:render section="Main" />
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<f:cObject
|
||||
typoscriptObjectPath="lib.dynamicContentSlide"
|
||||
data="{pageUid: '{data.uid}', colPos: '90'}"
|
||||
/>
|
||||
<f:cObject
|
||||
typoscriptObjectPath="lib.dynamicContentSlide"
|
||||
data="{pageUid: '{data.uid}', colPos: '91'}"
|
||||
/>
|
||||
<p>© {f:format.date(date: 'now', format: 'Y')} Your Company</p>
|
||||
</footer>
|
||||
@@ -0,0 +1,6 @@
|
||||
<f:layout name="Default" />
|
||||
<f:section name="Main">
|
||||
|
||||
<f:render partial="Content" arguments="{records: content.main.records}"/>
|
||||
|
||||
</f:section>
|
||||
@@ -0,0 +1,7 @@
|
||||
<f:for each="{records}" as="record">
|
||||
<f:cObject
|
||||
typoscriptObjectPath="{record.mainType}"
|
||||
data="{record}"
|
||||
table="{record.mainType}"
|
||||
/>
|
||||
</f:for>
|
||||
@@ -0,0 +1,29 @@
|
||||
<nav class="main-nav" id="mainNav">
|
||||
<div class="container">
|
||||
<a href="/" class="nav-logo">Brand Logo</a>
|
||||
<button class="nav-toggle" id="navToggle" aria-label="Toggle Menu">
|
||||
<span class="nav-toggle-icon"></span>
|
||||
</button>
|
||||
|
||||
<ul class="nav-links" id="navLinks">
|
||||
<f:for each="{mainnavigation}" as="mainnavigationItem">
|
||||
<li class="nav-item{f:if(condition: mainnavigationItem.active, then:' active')}{f:if(condition: mainnavigationItem.children, then:' has-submenu')}">
|
||||
<a href="{mainnavigationItem.link}" target="{mainnavigationItem.target}" title="{mainnavigationItem.title}">
|
||||
{mainnavigationItem.title}
|
||||
</a>
|
||||
<f:if condition="{mainnavigationItem.children}">
|
||||
<ul class="sub-menu">
|
||||
<f:for each="{mainnavigationItem.children}" as="child">
|
||||
<li class="{f:if(condition: child.active, then:'active')}">
|
||||
<a class="nav-link" href="{child.link}" target="{child.target}" title="{child.title}">
|
||||
{child.title}
|
||||
</a>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</f:if>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
0
packages/base/Resources/Public/Css/layout.css
Normal file
0
packages/base/Resources/Public/Css/layout.css
Normal file
3
packages/base/Resources/Public/Css/rte.css
Normal file
3
packages/base/Resources/Public/Css/rte.css
Normal file
@@ -0,0 +1,3 @@
|
||||
/**
|
||||
* Created by get.typo3.org/sitepackage
|
||||
*/
|
||||
1
packages/base/Resources/Public/Fonts/.gitkeep
Normal file
1
packages/base/Resources/Public/Fonts/.gitkeep
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
3
packages/base/Resources/Public/Icons/Extension.svg
Normal file
3
packages/base/Resources/Public/Icons/Extension.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="83.098" height="84.172" viewBox="43.201 42.122 83.098 84.172">
|
||||
<path fill="#FF8700" d="M106.074 100.128c-1.247.368-2.242.506-3.549.506-10.689 0-26.389-37.359-26.389-49.793 0-4.577 1.083-6.104 2.613-7.415-13.084 1.527-28.784 6.329-33.806 12.433-1.085 1.529-1.743 3.926-1.743 6.98 0 19.41 20.718 63.455 35.332 63.455 6.765.001 18.164-11.112 27.542-26.166M99.25 42.122c13.52 0 27.049 2.18 27.049 9.812 0 15.483-9.819 34.246-14.832 34.246-8.942 0-20.065-24.867-20.065-37.301.001-5.67 2.181-6.757 7.848-6.757"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 563 B |
BIN
packages/base/Resources/Public/Icons/favicon.ico
Normal file
BIN
packages/base/Resources/Public/Icons/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
packages/base/Resources/Public/Images/BackendLayouts/default.png
Normal file
BIN
packages/base/Resources/Public/Images/BackendLayouts/default.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 182 B |
1
packages/base/Resources/Public/JavaScript/main.js
Normal file
1
packages/base/Resources/Public/JavaScript/main.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log('WE LOVE TYPO3');
|
||||
41
packages/base/Resources/Public/JavaScript/navigation.js
Normal file
41
packages/base/Resources/Public/JavaScript/navigation.js
Normal file
@@ -0,0 +1,41 @@
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const nav = document.getElementById('mainNav');
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const navLinks = document.getElementById('navLinks');
|
||||
let lastScrollTop = 0;
|
||||
|
||||
// Toggle menu on mobile
|
||||
toggle.addEventListener('click', function () {
|
||||
nav.classList.toggle('open');
|
||||
toggle.classList.toggle('active');
|
||||
});
|
||||
|
||||
// Sticky on scroll
|
||||
window.addEventListener('scroll', function () {
|
||||
const currentScroll = window.pageYOffset || document.documentElement.scrollTop;
|
||||
if (currentScroll > 0) {
|
||||
nav.classList.add('sticky');
|
||||
} else {
|
||||
nav.classList.remove('sticky');
|
||||
}
|
||||
lastScrollTop = currentScroll <= 0 ? 0 : currentScroll;
|
||||
});
|
||||
|
||||
// Optionally handle dropdowns on mobile (if desired)
|
||||
// For example:
|
||||
const submenuParents = document.querySelectorAll('.nav-item.has-submenu');
|
||||
submenuParents.forEach(parent => {
|
||||
parent.addEventListener('click', (e) => {
|
||||
if (window.innerWidth <= 992) {
|
||||
e.preventDefault();
|
||||
const subMenu = parent.querySelector('.sub-menu');
|
||||
if (subMenu) {
|
||||
const isOpen = subMenu.style.display === 'block';
|
||||
// Close all open submenus first (optional)
|
||||
document.querySelectorAll('.sub-menu').forEach(sm => sm.style.display = 'none');
|
||||
subMenu.style.display = isOpen ? 'none' : 'block';
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
10
packages/base/Resources/Public/Scss/abstracts/_mixins.scss
Normal file
10
packages/base/Resources/Public/Scss/abstracts/_mixins.scss
Normal file
@@ -0,0 +1,10 @@
|
||||
// Example mixin for transitions
|
||||
@mixin transition($property: all, $duration: 0.3s, $timing: ease-in-out) {
|
||||
transition: $property $duration $timing;
|
||||
}
|
||||
|
||||
@mixin respond($breakpoint) {
|
||||
@media (min-width: $breakpoint) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// Example variables, extend as needed
|
||||
$primary-color: #4b4b4b;
|
||||
$secondary-color: #ffffff;
|
||||
$brand-color: #6B8E23;
|
||||
$font-stack: 'Helvetica', sans-serif;
|
||||
|
||||
// Breakpoints
|
||||
$breakpoint-sm: 576px;
|
||||
$breakpoint-md: 768px;
|
||||
$breakpoint-lg: 992px;
|
||||
$breakpoint-xl: 1200px;
|
||||
20
packages/base/Resources/Public/Scss/base/_container.scss
Normal file
20
packages/base/Resources/Public/Scss/base/_container.scss
Normal file
@@ -0,0 +1,20 @@
|
||||
.container {
|
||||
margin: auto;
|
||||
padding: 3rem 1rem;
|
||||
|
||||
@include respond($breakpoint-sm) {
|
||||
max-width: 540px;
|
||||
}
|
||||
|
||||
@include respond($breakpoint-md) {
|
||||
max-width: 720px;
|
||||
}
|
||||
|
||||
@include respond($breakpoint-lg) {
|
||||
max-width: 960px;
|
||||
}
|
||||
|
||||
@include respond($breakpoint-xl) {
|
||||
max-width: 1140px;
|
||||
}
|
||||
}
|
||||
5
packages/base/Resources/Public/Scss/base/_global.scss
Normal file
5
packages/base/Resources/Public/Scss/base/_global.scss
Normal file
@@ -0,0 +1,5 @@
|
||||
body {
|
||||
font-family: $font-stack;
|
||||
color: $primary-color;
|
||||
line-height: 1.5;
|
||||
}
|
||||
6
packages/base/Resources/Public/Scss/base/_reset.scss
Normal file
6
packages/base/Resources/Public/Scss/base/_reset.scss
Normal file
@@ -0,0 +1,6 @@
|
||||
// A simple CSS reset, adapt as needed
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
3
packages/base/Resources/Public/Scss/base/base.scss
Normal file
3
packages/base/Resources/Public/Scss/base/base.scss
Normal file
@@ -0,0 +1,3 @@
|
||||
@import 'reset';
|
||||
@import 'global';
|
||||
@import 'container';
|
||||
@@ -0,0 +1,19 @@
|
||||
.content-element {
|
||||
margin: 2rem auto;
|
||||
padding: 2rem;
|
||||
background-color: #f5f5f5; // default background
|
||||
|
||||
// Apply responsive widths at breakpoints using the respond mixin
|
||||
|
||||
&--blue {
|
||||
background-color: #cceeff;
|
||||
}
|
||||
|
||||
&--gray {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
&--image {
|
||||
background: url('EXT:my_sitepackage/Resources/Public/Images/background-image.jpg') no-repeat center/cover;
|
||||
}
|
||||
}
|
||||
142
packages/base/Resources/Public/Scss/components/_navigation.scss
Normal file
142
packages/base/Resources/Public/Scss/components/_navigation.scss
Normal file
@@ -0,0 +1,142 @@
|
||||
.main-nav {
|
||||
width: 100%;
|
||||
background: $secondary-color url('EXT:my_sitepackage/Resources/Public/Images/linen-texture.png') repeat;
|
||||
position: relative;
|
||||
z-index: 1000;
|
||||
|
||||
&.sticky {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin: 0 auto;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.nav-logo {
|
||||
img {
|
||||
display: block;
|
||||
max-height: 50px;
|
||||
height: auto;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-toggle {
|
||||
background: none;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: none; // hidden by default on desktop
|
||||
position: relative;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
|
||||
.nav-toggle-icon {
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: $primary-color;
|
||||
display: block;
|
||||
position: relative;
|
||||
@include transition(all, 0.3s);
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: '';
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: $primary-color;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
@include transition(all, 0.3s);
|
||||
}
|
||||
|
||||
&::before {
|
||||
top: -8px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
&.active .nav-toggle-icon {
|
||||
background: transparent;
|
||||
|
||||
&::before {
|
||||
transform: rotate(45deg) translate(5px, 5px);
|
||||
}
|
||||
|
||||
&::after {
|
||||
transform: rotate(-45deg) translate(5px, -5px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
|
||||
.nav-item {
|
||||
margin: 0 1rem;
|
||||
|
||||
.nav-link {
|
||||
text-decoration: none;
|
||||
color: $primary-color;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
font-size: 1rem;
|
||||
@include transition(color);
|
||||
|
||||
&:hover {
|
||||
color: $brand-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Responsive: show hamburger and collapse menu on smaller screens
|
||||
@media (max-width: $breakpoint-lg) {
|
||||
.nav-toggle {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Hide links by default on mobile and show only when toggled
|
||||
.nav-links {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
flex-direction: column;
|
||||
background: $secondary-color url('EXT:my_sitepackage/Resources/Public/Images/linen-texture.png') repeat;
|
||||
max-height: 0;
|
||||
overflow: hidden;
|
||||
@include transition(max-height, 0.4s);
|
||||
|
||||
.nav-item {
|
||||
margin: 0;
|
||||
padding: 1rem;
|
||||
border-top: 1px solid rgba(0,0,0,0.1);
|
||||
|
||||
&:first-child {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.open .nav-links {
|
||||
max-height: 500px; // Adjust to fit all items
|
||||
}
|
||||
}
|
||||
}
|
||||
4
packages/base/Resources/Public/Scss/main.scss
Normal file
4
packages/base/Resources/Public/Scss/main.scss
Normal file
@@ -0,0 +1,4 @@
|
||||
@import 'abstracts/variables';
|
||||
@import 'abstracts/mixins';
|
||||
@import 'base/base';
|
||||
@import 'components/navigation';
|
||||
23
packages/base/composer.json
Normal file
23
packages/base/composer.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "cloonar-typo3/base",
|
||||
"type": "typo3-cms-extension",
|
||||
"description": "Base Design",
|
||||
"homepage": "https://cloonar.com",
|
||||
"license": ["GPL-2.0-or-later"],
|
||||
"keywords": ["TYPO3 CMS"],
|
||||
"require": {
|
||||
"typo3/cms-core": "^13.4",
|
||||
"typo3/cms-rte-ckeditor": "^13.4",
|
||||
"typo3/cms-fluid-styled-content": "^13.4"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Cloonar\\Base\\": "Classes/"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"typo3/cms": {
|
||||
"extension-key": "base"
|
||||
}
|
||||
}
|
||||
}
|
||||
3
packages/base/ext_conf_template.txt
Normal file
3
packages/base/ext_conf_template.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
#
|
||||
# Extension Configuration template
|
||||
#
|
||||
29
packages/base/ext_emconf.php
Normal file
29
packages/base/ext_emconf.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
$EM_CONF[$_EXTKEY] = [
|
||||
'title' => 'Test',
|
||||
'description' => 'Test',
|
||||
'category' => 'templates',
|
||||
'constraints' => [
|
||||
'depends' => [
|
||||
'typo3' => '13.4.0-13.4.99',
|
||||
'fluid_styled_content' => '13.4.0-13.4.99',
|
||||
'rte_ckeditor' => '13.4.0-13.4.99',
|
||||
],
|
||||
'conflicts' => [
|
||||
],
|
||||
],
|
||||
'autoload' => [
|
||||
'psr-4' => [
|
||||
'Test\\Test\\' => 'Classes',
|
||||
],
|
||||
],
|
||||
'state' => 'stable',
|
||||
'uploadfolder' => 0,
|
||||
'createDirs' => '',
|
||||
'clearCacheOnLoad' => 1,
|
||||
'author' => 'Test',
|
||||
'author_email' => 'test@test.at',
|
||||
'author_company' => 'test',
|
||||
'version' => '1.0.0',
|
||||
];
|
||||
6
packages/base/ext_localconf.php
Normal file
6
packages/base/ext_localconf.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
|
||||
defined('TYPO3') or die('Access denied.');
|
||||
|
||||
// Add default RTE configuration
|
||||
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['base'] = 'EXT:base/Configuration/RTE/Default.yaml';
|
||||
3
packages/base/ext_tables.php
Normal file
3
packages/base/ext_tables.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
defined('TYPO3') or die('Access denied.');
|
||||
Reference in New Issue
Block a user