├── tests
├── end-to-end
│ ├── .node_version
│ ├── .gitignore
│ ├── cypress.env.json
│ ├── .prettierrc.json
│ ├── tsconfig.json
│ ├── src
│ │ └── main
│ │ │ └── features
│ │ │ └── howlite_tests_content.json
│ ├── .eslintrc.json
│ ├── support
│ │ ├── types.ts
│ │ └── consts.ts
│ ├── jest.config.ts
│ ├── .percy.yml
│ ├── cypress.config.ts
│ └── package.json
├── content
│ ├── README.md
│ └── src
│ │ └── main
│ │ └── content
│ │ ├── jcr_root
│ │ └── content
│ │ │ └── howlite-test
│ │ │ ├── assets
│ │ │ ├── .content.xml
│ │ │ ├── landscape.jpg
│ │ │ │ ├── _jcr_content
│ │ │ │ │ └── renditions
│ │ │ │ │ │ ├── original.jpg
│ │ │ │ │ │ ├── thumbnail-32x32.webp
│ │ │ │ │ │ ├── thumbnail-200x200.webp
│ │ │ │ │ │ ├── original.jpg.dir
│ │ │ │ │ │ └── .content.xml
│ │ │ │ │ │ ├── thumbnail-32x32.webp.dir
│ │ │ │ │ │ └── .content.xml
│ │ │ │ │ │ └── thumbnail-200x200.webp.dir
│ │ │ │ │ │ └── .content.xml
│ │ │ │ └── .content.xml
│ │ │ └── portrait.jpg
│ │ │ │ ├── _jcr_content
│ │ │ │ └── renditions
│ │ │ │ │ ├── original.jpg
│ │ │ │ │ ├── thumbnail-32x32.webp
│ │ │ │ │ ├── thumbnail-200x200.webp
│ │ │ │ │ ├── original.jpg.dir
│ │ │ │ │ └── .content.xml
│ │ │ │ │ ├── thumbnail-200x200.webp.dir
│ │ │ │ │ └── .content.xml
│ │ │ │ │ └── thumbnail-32x32.webp.dir
│ │ │ │ │ └── .content.xml
│ │ │ │ └── .content.xml
│ │ │ ├── .content.xml
│ │ │ └── pages
│ │ │ ├── .content.xml
│ │ │ └── Footer
│ │ │ └── .content.xml
│ │ └── META-INF
│ │ └── vault
│ │ └── filter.xml
├── README.md
└── pom.xml
├── ui.frontend
├── src
│ ├── resources
│ │ ├── fonts
│ │ │ ├── .gitkeep
│ │ │ └── ds-font
│ │ │ │ ├── ds-iconfonts.eot
│ │ │ │ ├── ds-iconfonts.ttf
│ │ │ │ ├── ds-iconfonts.woff
│ │ │ │ └── ds-iconfonts.woff2
│ │ └── images
│ │ │ ├── .gitkeep
│ │ │ ├── check.svg
│ │ │ └── broken-image.svg
│ ├── components
│ │ ├── CTA
│ │ │ └── _index.scss
│ │ ├── Footer
│ │ │ └── _index.scss
│ │ ├── Header
│ │ │ └── _index.scss
│ │ ├── Image
│ │ │ ├── _index.scss
│ │ │ └── image.scss
│ │ ├── Quote
│ │ │ └── _index.scss
│ │ ├── Title
│ │ │ ├── _index.scss
│ │ │ ├── title.ts
│ │ │ └── title.scss
│ │ ├── Accordion
│ │ │ ├── _index.scss
│ │ │ └── accordion.js
│ │ ├── CTAsList
│ │ │ ├── _index.scss
│ │ │ └── ctasList.scss
│ │ ├── CardsList
│ │ │ └── _index.scss
│ │ ├── Container
│ │ │ ├── _index.scss
│ │ │ └── container.scss
│ │ ├── RichText
│ │ │ └── _index.scss
│ │ ├── LogosCloud
│ │ │ ├── _index.scss
│ │ │ └── logos-cloud.scss
│ │ ├── SocialLinks
│ │ │ ├── _index.scss
│ │ │ └── social-links.scss
│ │ ├── MainContainer
│ │ │ ├── _index.scss
│ │ │ └── main-container.scss
│ │ ├── Navigation
│ │ │ └── _index.scss
│ │ ├── PageSection
│ │ │ ├── _index.scss
│ │ │ └── variants
│ │ │ │ ├── _index.scss
│ │ │ │ └── hl-page-section--featured-content.scss
│ │ └── index.scss
│ ├── theme.ts
│ ├── sass
│ │ ├── abstracts
│ │ │ ├── _variables.scss
│ │ │ ├── _zindex.scss
│ │ │ ├── _index.scss
│ │ │ ├── _functions.scss
│ │ │ ├── _colors.scss
│ │ │ ├── _spacing.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _custom-bootstrap.scss
│ │ │ └── _negative-margins.scss
│ │ ├── base
│ │ │ ├── _utils.scss
│ │ │ ├── _index.scss
│ │ │ ├── _icons.scss
│ │ │ └── _reset.scss
│ │ ├── theme
│ │ │ └── demo-content-theme.scss
│ │ └── global.scss
│ ├── author.ts
│ ├── js
│ │ ├── constants
│ │ │ └── breakpoints.js
│ │ ├── helpers
│ │ │ ├── platform.js
│ │ │ └── utils.js
│ │ └── scrollbar.js
│ ├── main.ts
│ └── main.scss
├── .eslintignore
├── .babelrc
├── tsconfig.json
├── README.md
├── assembly.xml
└── .eslintrc.js
├── core
├── src
│ ├── main
│ │ ├── resources
│ │ │ └── libs
│ │ │ │ └── howlite
│ │ │ │ ├── author
│ │ │ │ ├── author.js
│ │ │ │ └── author.css
│ │ │ │ ├── components
│ │ │ │ ├── common
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── stylevariant
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── headinglevel
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── headingsize
│ │ │ │ │ │ └── .content.json
│ │ │ │ ├── pagesection
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── pagesection.html
│ │ │ │ ├── layouts
│ │ │ │ │ ├── onecol
│ │ │ │ │ │ ├── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── threecols
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── twocols
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── fourcolumns
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── imageleftsection
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── imagerightsection
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── calltoactionsection
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── contentimagefullwidth
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── herosection
│ │ │ │ │ │ └── .content.json
│ │ │ │ ├── image
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── image.html
│ │ │ │ ├── quote
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── editConfig
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ ├── title
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── editConfig
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── title.html
│ │ │ │ │ └── template.html
│ │ │ │ ├── footer
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── footer.html
│ │ │ │ ├── header
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── header.html
│ │ │ │ ├── footerreference
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── footerreference.html
│ │ │ │ ├── headerreference
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── headerreference.html
│ │ │ │ ├── navigation
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── navigation.html
│ │ │ │ │ └── template.html
│ │ │ │ ├── richtext
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── editConfig
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template.html
│ │ │ │ │ ├── richtext.html
│ │ │ │ │ └── dialog
│ │ │ │ │ │ └── .content.json
│ │ │ │ ├── sociallinks
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── sociallinks.html
│ │ │ │ │ └── template.html
│ │ │ │ ├── cardslist
│ │ │ │ │ ├── card
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── editConfig
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ ├── accordion
│ │ │ │ │ ├── accordionitem
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ ├── template
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ │ ├── dialog
│ │ │ │ │ │ │ └── .content.json
│ │ │ │ │ │ └── accordionitem.html
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── dialog
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── accordion.html
│ │ │ │ ├── cta
│ │ │ │ │ ├── editConfig
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── cta.html
│ │ │ │ │ └── template.html
│ │ │ │ ├── ctaslist
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── dialog
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── ctaslist.html
│ │ │ │ ├── logoscloud
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── dialog
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── logoscloud.html
│ │ │ │ ├── container
│ │ │ │ │ ├── template
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── fixedContainer
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── fixedContainer.html
│ │ │ │ │ ├── dialog
│ │ │ │ │ │ └── .content.json
│ │ │ │ │ └── container.html
│ │ │ │ ├── rootcontainer
│ │ │ │ │ ├── fixedrootcontainer
│ │ │ │ │ │ ├── .content.json
│ │ │ │ │ │ └── fixedrootcontainer.html
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── rootcontainer.html
│ │ │ │ ├── page
│ │ │ │ │ ├── .content.json
│ │ │ │ │ ├── head-libs.html
│ │ │ │ │ ├── body-content.html
│ │ │ │ │ └── body.html
│ │ │ │ └── maincontainer
│ │ │ │ │ ├── fixedmaincontainer
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── fixedmaincontainer.html
│ │ │ │ │ ├── .content.json
│ │ │ │ │ └── maincontainer.html
│ │ │ │ ├── .content.json
│ │ │ │ └── templates
│ │ │ │ ├── homepage
│ │ │ │ ├── .content.json
│ │ │ │ └── initial
│ │ │ │ │ └── .content.json
│ │ │ │ ├── contentpage
│ │ │ │ ├── .content.json
│ │ │ │ └── initial
│ │ │ │ │ └── .content.json
│ │ │ │ └── pagesspace
│ │ │ │ └── .content.json
│ │ └── java
│ │ │ └── pl
│ │ │ └── ds
│ │ │ └── howlite
│ │ │ └── components
│ │ │ ├── Styled.java
│ │ │ ├── package-info.java
│ │ │ ├── utils
│ │ │ ├── GridDisplayType.java
│ │ │ ├── package-info.java
│ │ │ └── DefaultImageUtil.java
│ │ │ ├── models
│ │ │ ├── package-info.java
│ │ │ ├── AccordionItemComponent.java
│ │ │ ├── NavigationComponent.java
│ │ │ ├── FooterReferenceComponent.java
│ │ │ ├── HeaderReferenceComponent.java
│ │ │ ├── HeaderComponent.java
│ │ │ ├── FooterComponent.java
│ │ │ ├── SocialLinksComponent.java
│ │ │ ├── DefaultGridComponent.java
│ │ │ ├── NavigationItemComponent.java
│ │ │ ├── DefaultStyledComponent.java
│ │ │ ├── SingleSocialLinkComponent.java
│ │ │ └── CardsListComponent.java
│ │ │ ├── Grid.java
│ │ │ └── GridImpl.java
│ └── test
│ │ ├── resources
│ │ ├── example.json
│ │ ├── cta.json
│ │ ├── title.json
│ │ ├── quote.json
│ │ ├── image.json
│ │ ├── navigation.json
│ │ ├── sociallinks.json
│ │ ├── accordionItem.json
│ │ ├── header.json
│ │ ├── styled.json
│ │ └── footer.json
│ │ └── java
│ │ └── pl
│ │ └── ds
│ │ └── howlite
│ │ └── components
│ │ └── utils
│ │ └── DefaultImageUtilTest.java
├── bnd.bnd
└── README.md
├── COPYRIGHT
├── RELEASING.md
├── .mvn
├── extensions.xml
└── wrapper
│ └── maven-wrapper.properties
├── .github
├── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
├── dependabot.yml
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
└── google_checks_suppressions.xml
/tests/end-to-end/.node_version:
--------------------------------------------------------------------------------
1 | 14.18.2
--------------------------------------------------------------------------------
/ui.frontend/src/resources/fonts/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ui.frontend/src/resources/images/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/author/author.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ui.frontend/.eslintignore:
--------------------------------------------------------------------------------
1 | ./src/main/webpack/tests/
2 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/common/.content.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/.content.json:
--------------------------------------------------------------------------------
1 | {"sling:resourceType": "ws:Application"}
--------------------------------------------------------------------------------
/core/bnd.bnd:
--------------------------------------------------------------------------------
1 | WebSight-Apps-WebRoot: /libs/howlite/web_root
2 | Sling-Bundle-Resources: /libs/howlite
3 |
--------------------------------------------------------------------------------
/tests/end-to-end/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | cypress
4 | node
5 | target
6 |
7 | launcher
8 |
--------------------------------------------------------------------------------
/tests/end-to-end/cypress.env.json:
--------------------------------------------------------------------------------
1 | {
2 | "loginUsername": "wsadmin",
3 | "loginPassword": "wsadmin"
4 | }
5 |
--------------------------------------------------------------------------------
/tests/end-to-end/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "semi": true,
3 | "singleQuote": true,
4 | "trailingComma": "none"
5 | }
6 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/pagesection/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "classes": ""
4 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/onecol/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "classes": "",
3 | "jcr:primaryType": "nt:unstructured"
4 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/image/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Image"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/quote/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Quote"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/title/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Title"
5 | }
--------------------------------------------------------------------------------
/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.eot
--------------------------------------------------------------------------------
/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.ttf
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/footer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": ".hidden",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Footer"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/header/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": ".hidden",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Header"
5 | }
--------------------------------------------------------------------------------
/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.woff
--------------------------------------------------------------------------------
/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/ui.frontend/src/resources/fonts/ds-font/ds-iconfonts.woff2
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/footerreference/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": ".hidden",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Footer"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/headerreference/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": ".hidden",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Header"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/navigation/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": ".hidden",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Navigation"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/richtext/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Rich text editor"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/sociallinks/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Social Links"
5 | }
--------------------------------------------------------------------------------
/core/src/test/resources/example.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "exampleTitle": "Example title",
4 | "sling:resourceType": "howlite/components/example"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cardslist/card/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite Restricted",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Card Item"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/accordionitem/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite Restricted",
3 | "sling:resourceType": "ws:Component",
4 | "title": "Accordion Item"
5 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cta/editConfig/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "inlineEditing": {
3 | "config": {
4 | "property": "label",
5 | "editor": "text"
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cta/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "group": "Howlite",
3 | "sling:resourceType": "ws:Component",
4 | "description": "This is CTA component for Howlite",
5 | "title": "CTA"
6 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cta/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "classes": "hl-cta--secondary",
4 | "displayIcon": false,
5 | "openInNewTab": false
6 | }
--------------------------------------------------------------------------------
/tests/content/README.md:
--------------------------------------------------------------------------------
1 | # Howlite test content
2 | Content for testing Howlite components
3 |
4 | ## Sync test content
5 | Create package with WebSight CMS Package Manager, unzip in `src/main/content/jcr_root` and clean all dates etc.
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/richtext/editConfig/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "inlineEditing": {
3 | "config": {
4 | "property": "text",
5 | "editor": "rich-text"
6 | }
7 | }
8 | }
9 |
10 |
11 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/templates/homepage/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "allowedChildren": ["/libs/howlite/templates/contentpage"],
3 | "sling:resourceType": "ws:PageTemplate",
4 | "description": "Howlite",
5 | "title": "Home Page"
6 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/ui.frontend/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "@babel/typescript"
4 | ],
5 | "plugins": [
6 | "@babel/plugin-proposal-class-properties",
7 | "@babel/plugin-proposal-object-rest-spread"
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/templates/contentpage/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "allowedChildren": ["/libs/howlite/templates/contentpage"],
3 | "sling:resourceType": "ws:PageTemplate",
4 | "description": "Howlite",
5 | "title": "Content Page"
6 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/ctaslist/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": "Howlite",
4 | "allowedComponents": "/libs/howlite/components/cta",
5 | "sling:resourceType": "ws:Component",
6 | "title": "CTAs List"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/sociallinks/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "icon1": "icon-linkedin",
4 | "icon2": "icon-linkedin",
5 | "icon3": "icon-linkedin",
6 | "icon4": "icon-linkedin"
7 | }
--------------------------------------------------------------------------------
/tests/end-to-end/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["es5", "dom", "ES2021.String"],
5 | "types": ["cypress", "@percy/cypress", "node", "@4tw/cypress-drag-drop"]
6 | },
7 | "include": ["**/*.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/image/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "lgColSize": "12",
4 | "lgOffset": "",
5 | "mdColSize": "12",
6 | "mdOffset": "",
7 | "smColSize": "12",
8 | "smOffset": ""
9 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/logoscloud/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": "Howlite",
4 | "allowedComponents": "/libs/howlite/components/image",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Logo cloud"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cardslist/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": "Howlite",
4 | "allowedComponents": "/libs/howlite/components/cardslist/card",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Cards List"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/container/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "lgColSize": "12",
4 | "lgOffset": "",
5 | "mdColSize": "12",
6 | "mdOffset": "",
7 | "smColSize": "12",
8 | "smOffset": ""
9 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/title/editConfig/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "inlineEditing": {
3 | "config": {
4 | "property": "title",
5 | "domSelectors": [".hl-title__heading"],
6 | "editor": "text"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cardslist/card/editConfig/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "inlineEditing": {
3 | "config": {
4 | "property": "title",
5 | "domSelectors": [".card__title"],
6 | "editor": "text"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/threecols/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Empty Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "3 Columns"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/twocols/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Empty Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "2 Columns"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": "Howlite",
4 | "allowedComponents": "/libs/howlite/components/accordion/accordionitem",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Accordion"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/fourcolumns/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Empty Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "4 Columns"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/rootcontainer/fixedrootcontainer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": false,
3 | "group": ".hidden",
4 | "sling:resourceType": "ws:Component",
5 | "description": "Use for most outer, non-editable root",
6 | "title": "Body"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/templates/pagesspace/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "allowedChildren": [
3 | "/libs/howlite/templates/homepage",
4 | "/libs/howlite/templates/contentpage"
5 | ],
6 | "sling:resourceType": "ws:PagesTemplate",
7 | "title": "Howlite pages"
8 | }
--------------------------------------------------------------------------------
/core/README.md:
--------------------------------------------------------------------------------
1 | ## Description:
2 |
3 | Module contains components logic for Howlite
4 |
5 | ## Usage:
6 |
7 | Build
8 | ```bash
9 | ../mvnw clean install
10 | ```
11 |
12 | Build with local deployment
13 | ```bash
14 | ../mvnw clean install -P autoInstallBundle
15 | ```
16 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/imageleftsection/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Filled Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Image Left"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/container/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": "Howlite",
4 | "allowedComponents": "Howlite",
5 | "sling:resourceType": "ws:Component",
6 | "description": "Editable components wrapper",
7 | "title": "Container"
8 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/imagerightsection/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Filled Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Image Right"
7 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/original.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/original.jpg
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/original.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/original.jpg
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/calltoactionsection/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Filled Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Call To Action"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/contentimagefullwidth/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Filled Sections",
5 | "sling:resourceType": "ws:Component",
6 | "title": "Full Width Image"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/quote/editConfig/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "inlineEditing": {
3 | "config": {
4 | "property": "quoteText",
5 | "editor": "rich-text",
6 | "domSelectors": [".hl-quote__content .hl-rich-text"]
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/quote/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "classes": "",
4 | "lgColSize": "12",
5 | "lgOffset": "",
6 | "mdColSize": "12",
7 | "mdOffset": "",
8 | "smColSize": "12",
9 | "smOffset": ""
10 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/richtext/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "classes": "",
4 | "lgColSize": "12",
5 | "lgOffset": "",
6 | "mdColSize": "12",
7 | "mdOffset": "",
8 | "smColSize": "12",
9 | "smOffset": ""
10 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/container/fixedContainer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": false,
3 | "group": ".hidden",
4 | "sling:resourceType": "ws:Component",
5 | "description": "Non-editable container used in initial content to create layouts",
6 | "title": "Container"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/rootcontainer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": ".hidden",
4 | "allowedComponents": "Howlite",
5 | "sling:resourceType": "ws:Component",
6 | "description": "Use for most outer, editable (homepage) root",
7 | "title": "Body"
8 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-32x32.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-32x32.webp
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-32x32.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-32x32.webp
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-200x200.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-200x200.webp
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-200x200.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/websight-io/howlite/HEAD/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-200x200.webp
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/onecol/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Empty Sections",
5 | "sling:resourceType": "ws:Component",
6 | "description": "Empty Page Section",
7 | "title": "1 Column"
8 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/page/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceSuperType": "wcm/core/components/page",
3 | "group": ".hidden",
4 | "sling:resourceType": "ws:Component",
5 | "description": "Page component that can be used to render Howlite pages.",
6 | "title": "Howlite Page"
7 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/pagesection/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": ".hidden",
4 | "allowedComponents": "Howlite",
5 | "sling:resourceType": "ws:Component",
6 | "description": "Use for 12 cols page sections, inside main content",
7 | "title": "Page Section"
8 | }
--------------------------------------------------------------------------------
/COPYRIGHT:
--------------------------------------------------------------------------------
1 | Copyright (C) 2023 Dynamic Solutions sp. z o.o. sp. k. All rights reserved.
2 |
3 | This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 | you may not use this file except in compliance with the License. You may obtain a copy
5 | of the License at http://www.apache.org/licenses/LICENSE-2.0
6 |
--------------------------------------------------------------------------------
/RELEASING.md:
--------------------------------------------------------------------------------
1 | # Releasing
2 | Howlite release is done using GitHub Actions `Release Howlite` workflow.
3 |
4 | The 'Prepare release' step requires configuring:
5 | - a public key as [deploy keys](https://docs.github.com/v3/guides/managing-deploy-keys/#deploy-keys)
6 | - a private key as a GitHub Action secret (`SSH_SECRET_KEY`).
7 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/herosection/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "instanceResourceType": "howlite/components/pagesection",
3 | "isLayout": true,
4 | "group": "Filled Sections",
5 | "sling:resourceType": "ws:Component",
6 | "description": "First section of any content page",
7 | "title": "Hero"
8 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/maincontainer/fixedmaincontainer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": false,
3 | "group": ".hidden",
4 | "sling:resourceType": "ws:Component",
5 | "description": "Non-editable container, use for main content, inside body tag, between header and footer",
6 | "title": "Main Content"
7 | }
--------------------------------------------------------------------------------
/tests/end-to-end/src/main/features/howlite_tests_content.json:
--------------------------------------------------------------------------------
1 | {
2 | "bundles": [
3 | {
4 | "id": "pl.ds.howlite:howlite-core:${howlite.version}",
5 | "start-order": "25"
6 | }
7 | ],
8 | "content-packages:ARTIFACTS|true": [
9 | "pl.ds.howlite:howlite-tests-content:zip:${howlite.version}"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/accordionitem/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "sling:resourceType": "howlite/components/accordion/accordionitem",
4 | "lgColSize": "12",
5 | "lgOffset": "",
6 | "mdColSize": "12",
7 | "mdOffset": "",
8 | "smColSize": "12",
9 | "smOffset": ""
10 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/title/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "headingLevel": "h2",
4 | "headingSize": "hl-title__heading--size-4",
5 | "classes": "",
6 | "lgColSize": "12",
7 | "lgOffset": "",
8 | "mdColSize": "12",
9 | "mdOffset": "",
10 | "smColSize": "12",
11 | "smOffset": ""
12 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/dialog/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/dialog",
3 | "tabs": {
4 | "sling:resourceType": "wcm/dialogs/components/tabs",
5 | "gridTab": {
6 | "sling:resourceType": "wcm/dialogs/components/include",
7 | "path": "/libs/howlite/components/common/gridTab"
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/ctaslist/dialog/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/dialog",
3 | "tabs": {
4 | "sling:resourceType": "wcm/dialogs/components/tabs",
5 | "gridTab": {
6 | "sling:resourceType": "wcm/dialogs/components/include",
7 | "path": "/libs/howlite/components/common/gridTab"
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/logoscloud/dialog/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/dialog",
3 | "tabs": {
4 | "sling:resourceType": "wcm/dialogs/components/tabs",
5 | "gridTab": {
6 | "sling:resourceType": "wcm/dialogs/components/include",
7 | "path": "/libs/howlite/components/common/gridTab"
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/ui.frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "es6",
5 | "baseUrl": "../ui.frontend",
6 | "removeComments": true,
7 | "allowJs": true,
8 | "preserveConstEnums": true,
9 | "allowSyntheticDefaultImports": true,
10 | "sourceMap": true
11 | },
12 | "include": [ "./src/**/*.ts" ]
13 | }
14 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/core/src/test/resources/cta.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/cta",
5 | "label": "Sample CTA"
6 | },
7 | "complex": {
8 | "jcr:primaryType": "nt:unstructured",
9 | "sling:resourceType": "howlite/components/cta",
10 | "label": "Sample CTA",
11 | "link": "https://www.example.com",
12 | "displayIcon": "true",
13 | "openInNewTab": "true"
14 | }
15 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/original.jpg.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/original.jpg.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/maincontainer/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "isContainer": true,
3 | "group": ".hidden",
4 | "allowedComponents": [
5 | "/libs/howlite/components/pagesection",
6 | "/libs/howlite/components/container",
7 | "Empty Sections",
8 | "Filled Sections"
9 | ],
10 | "sling:resourceType": "ws:Component",
11 | "description": "Use for main content, inside body tag, between header and footer",
12 | "title": "Main Content"
13 | }
--------------------------------------------------------------------------------
/tests/end-to-end/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true
5 | },
6 | "extends": [
7 | "eslint:recommended",
8 | "plugin:@typescript-eslint/recommended",
9 | "plugin:cypress/recommended",
10 | "plugin:chai-friendly/recommended"
11 | ],
12 | "parser": "@typescript-eslint/parser",
13 | "parserOptions": {
14 | "ecmaVersion": "latest",
15 | "sourceType": "module"
16 | },
17 | "plugins": ["@typescript-eslint"],
18 | "rules": {}
19 | }
20 |
--------------------------------------------------------------------------------
/core/src/test/resources/title.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/title"
5 | },
6 | "complex": {
7 | "jcr:primaryType": "nt:unstructured",
8 | "title": "Title",
9 | "subtitle": "Subtitle",
10 | "headingLevel": "h1",
11 | "classes": "title-class other-title-class",
12 | "smColSize": 12,
13 | "mdColSize": 6,
14 | "lgColSize": 3,
15 | "sling:resourceType": "howlite/components/title"
16 | }
17 | }
--------------------------------------------------------------------------------
/core/src/test/resources/quote.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/quote"
5 | },
6 | "complex": {
7 | "jcr:primaryType": "nt:unstructured",
8 | "sling:resourceType": "howlite/components/quote",
9 | "quoteText": "Sample Quote",
10 | "authorName": "Author Name",
11 | "authorDescription": "Author Description",
12 | "authorImage": "http://content/author/image",
13 | "imageAlt": "Author profile image"
14 | }
15 | }
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/pages/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-32x32.webp.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-200x200.webp.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/portrait.jpg/_jcr_content/renditions/thumbnail-32x32.webp.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/ui.frontend/README.md:
--------------------------------------------------------------------------------
1 | ## Description
2 |
3 | Module contains Front-End for Howlite. During build it copy build results to web root folder i core.
4 |
5 | ## Usage:
6 |
7 | Build
8 |
9 | ```bash
10 | ../mvnw clean install
11 | ```
12 |
13 | Local development
14 |
15 | Run `npm run sync` to watch your changes. Those will be deployed to local environment on the fly
16 |
17 | Local deployment
18 |
19 | Front-End files are deployed as a part of `core` bundle.
20 |
21 | 1. Build this module
22 | 2. Build with local deployment `core` module
23 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/assets/landscape.jpg/_jcr_content/renditions/thumbnail-200x200.webp.dir/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/ctaslist/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "cta1": {
4 | "jcr:primaryType": "nt:unstructured",
5 | "sling:resourceType": "howlite/components/cta",
6 | "classes": "hl-cta--secondary",
7 | "displayIcon": false,
8 | "openInNewTab": false
9 | },
10 | "cta2": {
11 | "jcr:primaryType": "nt:unstructured",
12 | "sling:resourceType": "howlite/components/cta",
13 | "classes": "hl-cta--secondary",
14 | "displayIcon": false,
15 | "openInNewTab": false
16 | }
17 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cardslist/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "card1": {
4 | "jcr:primaryType": "nt:unstructured",
5 | "ctaLabel": "Link",
6 | "sling:resourceType": "howlite/components/cardslist/card"
7 | },
8 | "card2": {
9 | "jcr:primaryType": "nt:unstructured",
10 | "ctaLabel": "Link",
11 | "sling:resourceType": "howlite/components/cardslist/card"
12 | },
13 | "card3": {
14 | "jcr:primaryType": "nt:unstructured",
15 | "ctaLabel": "Link",
16 | "sling:resourceType": "howlite/components/cardslist/card"
17 | }
18 | }
--------------------------------------------------------------------------------
/.mvn/extensions.xml:
--------------------------------------------------------------------------------
1 |
7 |
9 |
10 | com.google.cloud.artifactregistry
11 | artifactregistry-maven-wagon
12 | 2.2.1
13 |
14 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/templates/homepage/initial/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "ws:Page",
3 | "jcr:content": {
4 | "jcr:primaryType": "ws:PageContent",
5 | "sling:resourceType": "howlite/components/page",
6 | "rootcontainer": {
7 | "sling:resourceType": "howlite/components/rootcontainer/fixedrootcontainer",
8 | "header": {"sling:resourceType": "howlite/components/header"},
9 | "maincontainer": {
10 | "sling:resourceType": "howlite/components/maincontainer",
11 | "pagesection": {"sling:resourceType": "howlite/components/pagesection"}
12 | },
13 | "footer": {"sling:resourceType": "howlite/components/footer"}
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/twocols/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "classes": "",
3 | "jcr:primaryType": "nt:unstructured",
4 | "container1": {
5 | "jcr:primaryType": "nt:unstructured",
6 | "sling:resourceType": "howlite/components/container",
7 | "smColSize": 12,
8 | "mdColSize": 6,
9 | "lgColSize": 6,
10 | "lgOffset": "",
11 | "mdOffset": "",
12 | "smOffset": ""
13 | },
14 | "container2": {
15 | "jcr:primaryType": "nt:unstructured",
16 | "sling:resourceType": "howlite/components/container",
17 | "smColSize": 12,
18 | "mdColSize": 6,
19 | "lgColSize": 6,
20 | "lgOffset": "",
21 | "mdOffset": "",
22 | "smOffset": ""
23 | }
24 | }
--------------------------------------------------------------------------------
/ui.frontend/src/components/CTA/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'cta';
18 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/templates/contentpage/initial/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "ws:Page",
3 | "jcr:content": {
4 | "jcr:primaryType": "ws:PageContent",
5 | "sling:resourceType": "howlite/components/page",
6 | "rootcontainer": {
7 | "sling:resourceType": "howlite/components/rootcontainer/fixedrootcontainer",
8 | "header": {"sling:resourceType": "howlite/components/headerreference"},
9 | "maincontainer": {
10 | "sling:resourceType": "howlite/components/maincontainer",
11 | "pagesection": {"sling:resourceType": "howlite/components/pagesection"}
12 | },
13 | "footer": {"sling:resourceType": "howlite/components/footerreference"}
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/ui.frontend/src/components/Footer/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'footer';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Header/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'header';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Image/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'image';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Quote/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'quote';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Title/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'title';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Accordion/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'accordion';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/CTAsList/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'ctasList';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/CardsList/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'cards-list';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Container/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'container';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/RichText/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'rich-text';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/theme.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | import "./sass/theme/demo-content-theme.scss";
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/LogosCloud/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'logos-cloud';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/SocialLinks/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'social-links';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/MainContainer/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'main-container';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Navigation/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'navigation.scss';
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_variables.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | $page-padding-horizontal: 1.5rem;
18 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/base/_utils.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | .v-min-height {
18 | min-height: 100vh;
19 | }
20 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/base/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'typography';
18 | @forward 'icons';
19 | @forward 'grid';
20 |
--------------------------------------------------------------------------------
/ui.frontend/src/author.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | // Stylesheets that will be loaded in Edit mode only
18 | import "./author.scss";
19 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/PageSection/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'page-section';
18 | @forward './variants/index';
19 |
--------------------------------------------------------------------------------
/ui.frontend/src/js/constants/breakpoints.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export const breakpoints = {
18 | sm: 0,
19 | md: 768,
20 | lg: 970
21 | };
22 |
--------------------------------------------------------------------------------
/core/src/test/resources/image.json:
--------------------------------------------------------------------------------
1 | {
2 | "lgImage": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/image",
5 | "lgImageSrc": "/content/space/assets/imageLg.jpg"
6 | },
7 | "lgAndMdImage": {
8 | "jcr:primaryType": "nt:unstructured",
9 | "sling:resourceType": "howlite/components/image",
10 | "lgImageSrc": "/content/space/assets/imageLg.jpg",
11 | "mdImageSrc": "/content/space/assets/imageMd.jpg"
12 | },
13 | "lgAndMdAndSmImage": {
14 | "jcr:primaryType": "nt:unstructured",
15 | "sling:resourceType": "howlite/components/image",
16 | "lgImageSrc": "/content/space/assets/imageLg.jpg",
17 | "mdImageSrc": "/content/space/assets/imageMd.jpg",
18 | "smImageSrc": "/content/space/assets/imageSm.jpg"
19 | }
20 | }
--------------------------------------------------------------------------------
/ui.frontend/src/main.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 |
18 | // Stylesheets
19 | import "./main.scss";
20 |
21 | // Javascript or Typescript
22 | import "./**/*.+(js|ts)";
23 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_zindex.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | $z-index: (
18 | 'second-floor': 2,
19 | 'first-floor': 1,
20 | 'basement': -1,
21 | );
22 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/page/head-libs.html:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/core/src/test/resources/navigation.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/navigation"
5 | },
6 | "complex": {
7 | "jcr:primaryType": "nt:unstructured",
8 | "sling:resourceType": "howlite/components/navigation",
9 | "menuItems": {
10 | "jcr:primaryType": "nt:unstructured",
11 | "1": {
12 | "jcr:primaryType": "nt:unstructured",
13 | "label": "Navigation item 1",
14 | "link": "http://www.navigate-to-link-1.com",
15 | "openInNewTab": "true"
16 | },
17 | "2": {
18 | "jcr:primaryType": "nt:unstructured",
19 | "label": "Navigation item 2",
20 | "link": "http://www.navigate-to-link-2.com",
21 | "openInNewTab": "false"
22 | }
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/tests/end-to-end/support/types.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export enum SelectionMode {
18 | FULL_MATCH = '',
19 | STARTS_WITH = '^',
20 | ENDS_WITH = '$',
21 | CONTAINS = '*'
22 | }
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/Styled.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components;
18 |
19 | public interface Styled {
20 |
21 | String[] getClasses();
22 |
23 | }
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @Version("1.0.0")
18 | package pl.ds.howlite.components;
19 |
20 | import org.osgi.annotation.versioning.Version;
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/utils/GridDisplayType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.utils;
18 |
19 | public enum GridDisplayType {
20 |
21 | GRID
22 | }
23 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/container/fixedContainer/fixedContainer.html:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @Version("1.0.0")
18 | package pl.ds.howlite.components.models;
19 |
20 | import org.osgi.annotation.versioning.Version;
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/utils/package-info.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @Version("1.0.0")
18 | package pl.ds.howlite.components.utils;
19 |
20 | import org.osgi.annotation.versioning.Version;
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/maincontainer/fixedmaincontainer/fixedmaincontainer.html:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/rootcontainer/fixedrootcontainer/fixedrootcontainer.html:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/ui.frontend/src/main.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use '../node_modules/@glidejs/glide/src/assets/sass/glide.core.scss';
18 |
19 | @import './sass/global';
20 | @import './sass/base/index';
21 | @import './components/index';
22 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/META-INF/vault/filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/page/body-content.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/rootcontainer/rootcontainer.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
--------------------------------------------------------------------------------
/core/src/test/resources/sociallinks.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/sociallinks"
5 | },
6 |
7 | "complex": {
8 | "jcr:primaryType": "nt:unstructured",
9 | "socialLinkItems": {
10 | "1": {
11 | "title": "Title linkedin",
12 | "url": "http://www.linkedin.com",
13 | "icon": "linkedin"
14 | },
15 | "2": {
16 | "title": "Title facebook",
17 | "url": "http://www.facebook.com",
18 | "icon": "facebook"
19 | },
20 | "3": {
21 | "title": "Title twitter",
22 | "url": "http://www.twitter.com",
23 | "icon": "twitter"
24 | },
25 | "4": {
26 | "title": "Title instagram",
27 | "url": "http://www.instagram.com",
28 | "icon": "instagram"
29 | }
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/richtext/template.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
${text @ context='html'}
18 |
--------------------------------------------------------------------------------
/tests/README.md:
--------------------------------------------------------------------------------
1 | # Howlite tests
2 | This module is responsible for the automatic validation of the Howlite components.
3 |
4 | It contains:
5 | - [content](./content) - providing the minimal set of components and pages used during testing
6 | - [end-to-end](./end-to-end) - end-to-end tests validating both Howlite components on authoring and publication
7 |
8 | ## How to run tests without Percy
9 |
10 | ```bash
11 | ../mvnw clean install -P e2e
12 | ```
13 |
14 | ## How to run tests with Percy
15 | You need to set HOWLITE_PERCY_TOKEN variable to upload snapshot to Percy.
16 | ```bash
17 | ../mvnw clean install -P e2e-visual
18 | ```
19 |
20 | Remember that e2e and e2e-visual are overlaying in some part and should not be run together!
21 |
22 | Packs the content package, then builds a Docker image that contains the package. Finally, it runs the container with the created Docker image
23 | and runs functional tests.
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'colors';
18 | @forward 'custom-bootstrap';
19 | @forward 'fonts';
20 | @forward 'icons';
21 | @forward 'negative-margins';
22 | @forward 'spacing';
23 | @forward 'variables';
24 | @forward 'zindex';
25 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/header/header.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/ui.frontend/src/resources/images/check.svg:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/footer/footer.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
20 |
--------------------------------------------------------------------------------
/tests/end-to-end/jest.config.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | module.exports = {
18 | preset: 'ts-jest',
19 | testEnvironment: 'node',
20 | transform: {
21 | '^.+\\.ts?$': 'ts-jest'
22 | },
23 | transformIgnorePatterns: ['/node_modules/'],
24 | roots: ['./support/']
25 | };
26 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/author/author.css:
--------------------------------------------------------------------------------
1 | .hl-main-container{padding-bottom:40px;padding-top:40px}.hl-placeholder--image{align-items:center;background-color:#f4f5f7;display:flex;height:50px;justify-content:center;min-width:60px}.hl-placeholder--image.hl-image--featured{min-height:605px}.hl-image--broken{align-items:center;background-color:#f4f5f7;display:flex;height:50px;justify-content:center}.hl-image--broken:after{background-image:url(../web_root/images/broken-image.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;content:"";height:28px;width:28px}.hl-cards-list .hl-placeholder--image.card__image{margin-bottom:40px;min-height:90pt;padding-bottom:0}.hl-page-section--featured-banner>.hl-placeholder--image{min-height:300px}.hl-logos-cloud .hl-image--broken,.hl-logos-cloud .hl-placeholder--image{width:90pt}.hl-page-section--featured-banner .hl-placeholder.hl-social-links{margin-top:3pc!important;min-width:150px}
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_functions.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:math';
18 |
19 | @function strip-unit($number) {
20 | @if type-of($number) == 'number' and not unitless($number) {
21 | @return math.div($number, $number * 0 + 1);
22 | }
23 |
24 | @return $number;
25 | }
26 |
--------------------------------------------------------------------------------
/tests/end-to-end/.percy.yml:
--------------------------------------------------------------------------------
1 | # Copyright (C) 2022 Dynamic Solutions
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | version: 2
16 | snapshot:
17 | widths:
18 | - 1280
19 | minHeight: 1024
20 | discovery:
21 | allowedHostnames: []
22 | disallowedHostnames: []
23 | networkIdleTimeout: 100
24 | upload:
25 | files: '**/*.{png,jpg,jpeg}'
26 | ignore: ''
27 | stripExtensions: false
28 |
--------------------------------------------------------------------------------
/tests/end-to-end/support/consts.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export const selectors = {
18 | overlayName: 'span.name',
19 | autosuggestionsBox: '.autosuggestion-options'
20 | };
21 |
22 | export const testIds = {
23 | editIcon: 'ToolbarItem_Properties',
24 | dialogSubmitButton: 'Action_Submit'
25 | };
26 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/richtext/richtext.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/PageSection/variants/_index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @forward 'hl-page-section--call-to-action';
18 | @forward 'hl-page-section--featured-banner';
19 | @forward 'hl-page-section--featured-content';
20 | @forward 'hl-page-section--contact-form';
21 | @forward 'hl-page-section--bleeding-image';
22 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Description**
11 | Provide a clear and concise description of what the bug is.
12 |
13 | **Steps to reproduce**
14 | 1. Go to '...'
15 | 2. Click on '....'
16 | 3. Scroll down to '....'
17 |
18 | **Current result**
19 | Describe the result caused by the bug.
20 |
21 | **Expected behavior**
22 | A clear and concise description of what you expected to happen.
23 |
24 | **Screenshots**
25 | If applicable, add screenshots to help explain your problem.
26 |
27 | **WebSight CMS version**
28 | A version of CMS you are using (you will find it on the login page).
29 |
30 | **Desktop (please complete the following information):**
31 | - OS: [e.g. iOS]
32 | - Browser [e.g. chrome, safari]
33 | - Version [e.g. 22]
34 |
35 | **Additional context**
36 | Add any other context about the problem here.
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # These are some examples of commonly ignored file patterns.
2 | # You should customize this list as applicable to your project.
3 | # Learn more about .gitignore:
4 | # https://www.atlassian.com/git/tutorials/saving-changes/gitignore
5 |
6 | # Node artifact files
7 | node_modules/
8 | node/
9 |
10 | # Compiled Java class files
11 | *.class
12 |
13 | # Compiled Python bytecode
14 | *.py[cod]
15 |
16 | # Log files
17 | *.log
18 |
19 | # Package files
20 | *.jar
21 |
22 | # Maven
23 | target/
24 | dist/
25 |
26 | # JetBrains and VSC IDE
27 | .idea/
28 | .history/
29 |
30 | # Unit test reports
31 | TEST*.xml
32 |
33 | # Generated by MacOS
34 | .DS_Store
35 |
36 | # Generated by Windows
37 | Thumbs.db
38 |
39 | # Applications
40 | *.app
41 | *.exe
42 | *.war
43 |
44 | # Large media files
45 | *.mp4
46 | *.tiff
47 | *.avi
48 | *.flv
49 | *.mov
50 | *.wmv
51 |
52 | # IntelliJ files
53 | *.iml
54 |
55 | /core/src/main/resources/libs/howlite/web_root/*
56 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/navigation/navigation.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/google_checks_suppressions.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/sociallinks/sociallinks.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/core/src/test/resources/accordionItem.json:
--------------------------------------------------------------------------------
1 | {
2 | "accordion-default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/accordion",
5 | "accordionitem-default": {
6 | "jcr:primaryType": "nt:unstructured",
7 | "sling:resourceType": "howlite/components/accordion/accordionitem"
8 | },
9 | "accordionitem-simple": {
10 | "jcr:primaryType": "nt:unstructured",
11 | "sling:resourceType": "howlite/components/accordion/accordionitem",
12 | "headingLevel": "h6",
13 | "title": "Simple title",
14 | "content": "Simple content"
15 | }
16 | },
17 | "accordion-with-hlevel": {
18 | "jcr:primaryType": "nt:unstructured",
19 | "sling:resourceType": "howlite/components/accordion",
20 | "headingLevel": "h1",
21 | "accordionitem-without-hlevel": {
22 | "jcr:primaryType": "nt:unstructured",
23 | "sling:resourceType": "howlite/components/accordion/accordionitem"
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/ui.frontend/src/components/SocialLinks/social-links.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 | @use '../../sass/abstracts';
19 |
20 |
21 | $social-media-icon-padding: 10px;
22 |
23 | .hl-social-links {
24 | display: flex;
25 | gap: map.get(abstracts.$spacing, 'medium');
26 |
27 | &__link {
28 | @include abstracts.social-icon;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/ui.frontend/src/js/helpers/platform.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export const isRunningIos = () => {
18 | return (
19 | ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||
20 | // iPad on iOS 13 detection
21 | (navigator.userAgent.includes('Mac') && 'ontouchend' in document)
22 | );
23 | };
24 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/threecols/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "classes": "",
3 | "jcr:primaryType": "nt:unstructured",
4 | "container1": {
5 | "jcr:primaryType": "nt:unstructured",
6 | "sling:resourceType": "howlite/components/container",
7 | "smColSize": 12,
8 | "mdColSize": 4,
9 | "lgColSize": 4,
10 | "lgOffset": "",
11 | "mdOffset": "",
12 | "smOffset": ""
13 | },
14 | "container2": {
15 | "jcr:primaryType": "nt:unstructured",
16 | "sling:resourceType": "howlite/components/container",
17 | "smColSize": 12,
18 | "mdColSize": 4,
19 | "lgColSize": 4,
20 | "lgOffset": "",
21 | "mdOffset": "",
22 | "smOffset": ""
23 | },
24 | "container3": {
25 | "jcr:primaryType": "nt:unstructured",
26 | "sling:resourceType": "howlite/components/container",
27 | "smColSize": 12,
28 | "mdColSize": 4,
29 | "lgColSize": 4,
30 | "lgOffset": "",
31 | "mdOffset": "",
32 | "smOffset": ""
33 | }
34 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/page/body.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Image/image.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 |
19 | @use '../../sass/abstracts';
20 |
21 | .hl-image {
22 | &__link {
23 | width: fit-content;
24 | }
25 |
26 | &__img {
27 | max-width: 100%;
28 | }
29 | }
30 |
31 | .hl-image.hl-image--featured {
32 | margin-top: map.get(abstracts.$spacing, 'large');
33 | }
34 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/Grid.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components;
18 |
19 | public interface Grid {
20 |
21 | Integer getSmColSize();
22 |
23 | Integer getMdColSize();
24 |
25 | Integer getLgColSize();
26 |
27 | Integer getSmOffset();
28 |
29 | Integer getMdOffset();
30 |
31 | Integer getLgOffset();
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cta/cta.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # Copyright (C) 2022 Dynamic Solutions
2 | #
3 | # Licensed under the Apache License, Version 2.0 (the "License");
4 | # you may not use this file except in compliance with the License.
5 | # You may obtain a copy of the License at
6 | #
7 | # http://www.apache.org/licenses/LICENSE-2.0
8 | #
9 | # Unless required by applicable law or agreed to in writing, software
10 | # distributed under the License is distributed on an "AS IS" BASIS,
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | # See the License for the specific language governing permissions and
13 | # limitations under the License.
14 |
15 | version: 2
16 | updates:
17 | - package-ecosystem: "maven"
18 | directory: "/"
19 | schedule:
20 | interval: "weekly"
21 | - package-ecosystem: "npm"
22 | directory: "/ui.frontend"
23 | schedule:
24 | interval: "weekly"
25 | - package-ecosystem: "npm"
26 | directory: "/tests/end-to-end"
27 | schedule:
28 | interval: "weekly"
29 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_colors.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | $neutral-50: #151515;
18 | $neutral-200: #313131;
19 | $neutral-500: #818181;
20 | $neutral-800: #cfcfcf;
21 |
22 | $primary-colors: (
23 | 'blue': #39d1fe,
24 | 'purple': #9875e3,
25 | 'green': #1ce3a4,
26 | 'red': #fb6991,
27 | 'yellow': #e3d339,
28 | );
29 |
30 | $shades-0: #000000;
31 | $shades-100: #ffffff;
32 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/accordionitem/dialog/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/dialog",
3 | "tabs": {
4 | "sling:resourceType": "wcm/dialogs/components/tabs",
5 | "generalTab": {
6 | "sling:resourceType": "wcm/dialogs/components/tab",
7 | "label": "General",
8 | "title": {
9 | "sling:resourceType": "wcm/dialogs/components/textfield",
10 | "name": "title",
11 | "label": "Title"
12 | },
13 | "dialogContent": {
14 | "sling:resourceType": "wcm/dialogs/components/richtext",
15 | "name": "content",
16 | "label": "Content",
17 | "ws:disallowedContext": ["edit:panel"]
18 | },
19 | "panelContent": {
20 | "sling:resourceType": "wcm/dialogs/components/richtext",
21 | "name": "content",
22 | "label": "Content",
23 | "ws:disallowedContext": ["edit:dialog"],
24 | "configuration": "wcm/dialogs/components/richtext/configurations/compact"
25 | }
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "accordionitem1": {
4 | "jcr:primaryType": "nt:unstructured",
5 | "sling:resourceType": "howlite/components/accordion/accordionitem",
6 | "lgColSize": "12",
7 | "lgOffset": "",
8 | "mdColSize": "12",
9 | "mdOffset": "",
10 | "smColSize": "12",
11 | "smOffset": ""
12 | },
13 | "accordionitem2": {
14 | "jcr:primaryType": "nt:unstructured",
15 | "sling:resourceType": "howlite/components/accordion/accordionitem",
16 | "lgColSize": "12",
17 | "lgOffset": "",
18 | "mdColSize": "12",
19 | "mdOffset": "",
20 | "smColSize": "12",
21 | "smOffset": ""
22 | },
23 | "accordionitem3": {
24 | "jcr:primaryType": "nt:unstructured",
25 | "sling:resourceType": "howlite/components/accordion/accordionitem",
26 | "lgColSize": "12",
27 | "lgOffset": "",
28 | "mdColSize": "12",
29 | "mdOffset": "",
30 | "smColSize": "12",
31 | "smOffset": ""
32 | }
33 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/footerreference/footerreference.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
20 |
21 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/headerreference/headerreference.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
20 |
21 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/title/title.html:
--------------------------------------------------------------------------------
1 |
16 |
19 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Title/title.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2023 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | import { TitleComponent } from './title.class';
18 |
19 | const initTitleComponents = () => {
20 | document.addEventListener( 'DOMContentLoaded', () => {
21 | Array.from(document.querySelectorAll(TitleComponent.SELECTOR)).forEach(component => {
22 | new TitleComponent(component);
23 | });
24 | });
25 | };
26 |
27 | initTitleComponents();
28 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # https://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip
18 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar
19 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/logoscloud/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "lgColSize": "12",
4 | "lgOffset": "",
5 | "mdColSize": "12",
6 | "mdOffset": "",
7 | "smColSize": "12",
8 | "smOffset": "",
9 | "image1": {
10 | "jcr:primaryType": "nt:unstructured",
11 | "sling:resourceType": "howlite/components/image",
12 | "lgColSize": "12",
13 | "lgOffset": "",
14 | "mdColSize": "12",
15 | "mdOffset": "",
16 | "smColSize": "12",
17 | "smOffset": ""
18 | },
19 | "image2": {
20 | "jcr:primaryType": "nt:unstructured",
21 | "sling:resourceType": "howlite/components/image",
22 | "lgColSize": "12",
23 | "lgOffset": "",
24 | "mdColSize": "12",
25 | "mdOffset": "",
26 | "smColSize": "12",
27 | "smOffset": ""
28 | },
29 | "image3": {
30 | "jcr:primaryType": "nt:unstructured",
31 | "sling:resourceType": "howlite/components/image",
32 | "lgColSize": "12",
33 | "lgOffset": "",
34 | "mdColSize": "12",
35 | "mdOffset": "",
36 | "smColSize": "12",
37 | "smOffset": ""
38 | }
39 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/cta/template.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
20 | ${label}
21 |
22 |
--------------------------------------------------------------------------------
/ui.frontend/src/js/scrollbar.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export const getScrollbarWidth = () => {
18 | return window.innerWidth - document.documentElement.clientWidth;
19 | };
20 |
21 |
22 | const initScrollbarCssVariable = () => {
23 | document.addEventListener(
24 | 'DOMContentLoaded',
25 | () => {
26 | document.documentElement.style.setProperty(
27 | '--scrollbar-width',
28 | `${getScrollbarWidth()}px`,
29 | );
30 | },
31 | { once: true },
32 | );
33 | };
34 |
35 | initScrollbarCssVariable();
36 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/common/stylevariant/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/components/select",
3 | "name": "bodyClasses",
4 | "label": "Style variant",
5 | "default": {
6 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
7 | "label": "Default color",
8 | "value": ""
9 | },
10 | "yellow": {
11 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
12 | "label": "Yellow",
13 | "value": "primary-color--yellow"
14 | },
15 | "blue": {
16 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
17 | "label": "Blue",
18 | "value": "primary-color--blue"
19 | },
20 | "green": {
21 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
22 | "label": "Green",
23 | "value": "primary-color--green"
24 | },
25 | "red": {
26 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
27 | "label": "Red",
28 | "value": "primary-color--red"
29 | },
30 | "purple": {
31 | "sling:resourceType": "wcm/dialogs/components/select/selectitem",
32 | "label": "Purple",
33 | "value": "primary-color--purple"
34 | }
35 | }
--------------------------------------------------------------------------------
/ui.frontend/src/sass/theme/demo-content-theme.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @import url('https://fonts.googleapis.com/css2?family=Jost&display=swap');
18 |
19 | body {
20 | --color-primary: #0F154A;
21 |
22 | --color-default: #1D1F31;
23 | --color-body-background: #FFFFFF;
24 | --color-neutral-800: #151515;
25 | --color-neutral-500: #727272;
26 | --color-neutral-200: #F0F0F0;
27 |
28 | --font-headings: 'Jost', 'Montserrat', sans-serif;
29 | --font-body: 'Avenir', 'Montserrat', sans-serif;
30 | --links-text-transform: uppercase;
31 | }
32 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/common/headinglevel/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/components/radio",
3 | "name": "headingLevel",
4 | "description": "HTML heading level help to communicate the organization and hierarchy of the content (for SEO and accessibility)",
5 | "label": "Heading level",
6 | "h1": {
7 | "sling:resourceType": "wcm/dialogs/components/radio/option",
8 | "label": "H1",
9 | "value": "h1"
10 | },
11 | "h2": {
12 | "sling:resourceType": "wcm/dialogs/components/radio/option",
13 | "label": "H2",
14 | "selected": true,
15 | "value": "h2"
16 | },
17 | "h3": {
18 | "sling:resourceType": "wcm/dialogs/components/radio/option",
19 | "label": "H3",
20 | "value": "h3"
21 | },
22 | "h4": {
23 | "sling:resourceType": "wcm/dialogs/components/radio/option",
24 | "label": "H4",
25 | "value": "h4"
26 | },
27 | "h5": {
28 | "sling:resourceType": "wcm/dialogs/components/radio/option",
29 | "label": "H5",
30 | "value": "h5"
31 | },
32 | "h6": {
33 | "sling:resourceType": "wcm/dialogs/components/radio/option",
34 | "label": "H6",
35 | "value": "h6"
36 | }
37 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/contentimagefullwidth/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "jcr:primaryType": "nt:unstructured",
3 | "classes": "hl-page-section--featured-content",
4 | "image": {
5 | "jcr:primaryType": "nt:unstructured",
6 | "sling:resourceType": "howlite/components/image"
7 | },
8 | "container": {
9 | "jcr:primaryType": "nt:unstructured",
10 | "sling:resourceType": "howlite/components/container",
11 | "title": {
12 | "jcr:primaryType": "nt:unstructured",
13 | "smColSize": 12,
14 | "mdColSize": 12,
15 | "lgColSize": 5,
16 | "lgOffset": 1,
17 | "title": "Add your section title here",
18 | "headingLevel": "h2",
19 | "subtitle": "Add your subtitle here",
20 | "showSubtitle": true,
21 | "sling:resourceType": "howlite/components/title"
22 | },
23 | "richtext": {
24 | "jcr:primaryType": "nt:unstructured",
25 | "smColSize": 12,
26 | "mdColSize": 12,
27 | "lgColSize": 6,
28 | "sling:resourceType": "howlite/components/richtext",
29 | "classes": "",
30 | "lgOffset": "",
31 | "mdOffset": "",
32 | "smOffset": ""
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/title/template.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
${subtitle}
20 |
21 |
${title}
22 |
23 |
24 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/CTAsList/ctasList.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 | @use '../../sass/abstracts';
19 |
20 | .hl-ctas-list {
21 | display: flex;
22 | flex-wrap: wrap;
23 | gap: map.get(abstracts.$spacing, 'small-3');
24 | justify-content: center;
25 |
26 | .hl-cta {
27 | margin: 0;
28 | }
29 | }
30 |
31 | * + .hl-ctas-list {
32 | margin-top: map.get(abstracts.$spacing, 'medium-2');
33 |
34 | @include abstracts.media-breakpoint-up(md) {
35 | margin-top: map.get(abstracts.$spacing, 'medium-4');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Container/container.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 | @use '../../sass/abstracts';
19 |
20 | .hl-container {
21 | align-items: center;
22 |
23 | background-image: var(--bg-image-sm);
24 | @include abstracts.media-breakpoint-up(md) {
25 | background-image: var(--bg-image-md);
26 | }
27 | @include abstracts.media-breakpoint-up(lg) {
28 | background-image: var(--bg-image-lg);
29 | }
30 |
31 | background-size: contain;
32 | background-repeat: no-repeat;
33 | background-position: center;
34 | }
35 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/index.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @import './Accordion/index';
18 | @import './CardsList/index';
19 | @import './Container/index';
20 | @import './CTA/index';
21 | @import './CTAsList/index';
22 | @import './Footer/index';
23 | @import './Image/index';
24 | @import './MainContainer/index';
25 | @import './Navigation/index';
26 | @import './Header/index';
27 | @import './Quote/index';
28 | @import './RichText/index';
29 | @import './SocialLinks/index';
30 | @import './Title/index';
31 | @import './PageSection/index';
32 | @import './LogosCloud/index';
33 |
--------------------------------------------------------------------------------
/ui.frontend/src/resources/images/broken-image.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/maincontainer/maincontainer.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/GridImpl.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components;
18 |
19 | import lombok.Builder;
20 | import lombok.Getter;
21 | import lombok.RequiredArgsConstructor;
22 |
23 | @Getter
24 | @Builder
25 | @RequiredArgsConstructor
26 | public class GridImpl implements Grid {
27 |
28 | private final Integer smColSize;
29 |
30 | private final Integer mdColSize;
31 |
32 | private final Integer lgColSize;
33 |
34 | private final Integer smOffset;
35 |
36 | private final Integer mdOffset;
37 |
38 | private final Integer lgOffset;
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/accordionitem/accordionitem.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
22 |
23 | ${model.content @ context='html'}
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/MainContainer/main-container.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 |
19 | @use '../../sass/abstracts';
20 |
21 | .hl-main-container {
22 | margin: 0 auto;
23 | max-width: 100%;
24 | padding-right: abstracts.$page-padding-horizontal;
25 | padding-left: abstracts.$page-padding-horizontal;
26 |
27 | @include abstracts.media-breakpoint-up(md) {
28 | max-width: map.get(abstracts.$container-max-widths, 'md');
29 | }
30 |
31 | @include abstracts.media-breakpoint-up(lg) {
32 | max-width: map.get(abstracts.$container-max-widths, 'lg');
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/container/dialog/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/dialog",
3 | "tabs": {
4 | "sling:resourceType": "wcm/dialogs/components/tabs",
5 | "generalTab": {
6 | "sling:resourceType": "wcm/dialogs/components/tab",
7 | "label": "General",
8 | "backgroundImageLg": {
9 | "sling:resourceType": "wcm/dialogs/components/assetreference",
10 | "mimeTypes": ["image/*"],
11 | "name": "backgroundImageLg",
12 | "label": "Background image - L breakpoint"
13 | },
14 | "backgroundImageMd": {
15 | "sling:resourceType": "wcm/dialogs/components/assetreference",
16 | "mimeTypes": ["image/*"],
17 | "name": "backgroundImageMd",
18 | "label": "Background image - M breakpoint"
19 | },
20 | "backgroundImageSm": {
21 | "sling:resourceType": "wcm/dialogs/components/assetreference",
22 | "mimeTypes": ["image/*"],
23 | "name": "backgroundImageSm",
24 | "label": "Background image - S breakpoint"
25 | }
26 | },
27 | "gridTab": {
28 | "sling:resourceType": "wcm/dialogs/components/include",
29 | "path": "/libs/howlite/components/common/gridTab"
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/ui.frontend/src/js/helpers/utils.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | export const throttle = (fn, limit = 25) => {
18 | let isBusy = false;
19 | return (...args) => {
20 | if (!isBusy) {
21 | fn.apply(this, args);
22 | isBusy = true;
23 | setTimeout(() => {
24 | isBusy = false;
25 | }, limit);
26 | }
27 | };
28 | };
29 |
30 | export const debounce = (fn, timeout = 50) => {
31 | let timer = null;
32 | return (...args) => {
33 | clearTimeout(timer);
34 | timer = setTimeout(() => {
35 | timer = null;
36 | fn.apply(this, args);
37 | }, timeout);
38 | };
39 | };
40 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/common/headingsize/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "sling:resourceType": "wcm/dialogs/components/radio",
3 | "name": "headingSize",
4 | "description": "Changes font size (without affecting html heading level)",
5 | "label": "Heading size",
6 | "xs": {
7 | "sling:resourceType": "wcm/dialogs/components/radio/option",
8 | "label": "XS",
9 | "value": "hl-title__heading--size-6"
10 | },
11 | "s": {
12 | "sling:resourceType": "wcm/dialogs/components/radio/option",
13 | "label": "S",
14 | "value": "hl-title__heading--size-5"
15 | },
16 | "m": {
17 | "sling:resourceType": "wcm/dialogs/components/radio/option",
18 | "label": "M",
19 | "selected": true,
20 | "value": "hl-title__heading--size-4"
21 | },
22 | "l": {
23 | "sling:resourceType": "wcm/dialogs/components/radio/option",
24 | "label": "L",
25 | "value": "hl-title__heading--size-3"
26 | },
27 | "xl": {
28 | "sling:resourceType": "wcm/dialogs/components/radio/option",
29 | "label": "XL",
30 | "value": "hl-title__heading--size-2"
31 | },
32 | "xxl": {
33 | "sling:resourceType": "wcm/dialogs/components/radio/option",
34 | "label": "XXL",
35 | "value": "hl-title__heading--size-1"
36 | }
37 | }
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_spacing.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | $spacing: (
18 | // the px values are listed with assumption that
19 | // rem is calculated based on the 16px
20 | //
21 | // 4px
22 | 'small': 0.25rem,
23 | // 8px
24 | 'small-2': 0.5rem,
25 | // 16px
26 | 'small-3': 1rem,
27 | // 24px
28 | 'medium': 1.5rem,
29 | // 32px
30 | 'medium-2': 2rem,
31 | // 40px
32 | 'medium-3': 2.5rem,
33 | // 48px
34 | 'medium-4': 3rem,
35 | // 56px
36 | 'large': 3.5rem,
37 | // 64px
38 | 'large-2': 4rem,
39 | // 80px
40 | 'large-3': 5rem,
41 | // 128px
42 | 'large-4': 8rem
43 | );
44 |
--------------------------------------------------------------------------------
/tests/end-to-end/cypress.config.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | import { defineConfig } from 'cypress';
18 |
19 | export default defineConfig({
20 | chromeWebSecurity: false,
21 | screenshotsFolder: 'build/screenshots',
22 | videosFolder: 'build/video',
23 | fixturesFolder: false,
24 | video: false,
25 | viewportWidth: 1280,
26 | viewportHeight: 1024,
27 | e2e: {
28 | setupNodeEvents(on, config) {},
29 | baseUrl: 'http://localhost:8080',
30 | specPattern: 'tests/**/*.cy.{js,jsx,ts,tsx}',
31 | supportFile: 'support/index.ts',
32 | experimentalSessionAndOrigin: true,
33 | defaultCommandTimeout: 30000
34 | }
35 | });
36 |
--------------------------------------------------------------------------------
/tests/end-to-end/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "websight-e2e-tests",
3 | "version": "0.0.1",
4 | "description": "WebSight distribution functional and visual tests.",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "cypress open --browser chrome",
8 | "test": "cypress run --browser chrome",
9 | "test:formatting": "prettier --check . && eslint **/*.ts",
10 | "test:visual": "percy exec -- cypress run",
11 | "format": "prettier --write .",
12 | "format:watch": "onchange \"**/*\" -- prettier --write --ignore-unknown {{changed}}",
13 | "rebuild-content": "cd ../content && mvn clean install -P autoInstallPackage"
14 | },
15 | "devDependencies": {
16 | "@4tw/cypress-drag-drop": "^2.2.5",
17 | "@percy/cli": "^1.28.7",
18 | "@percy/cypress": "^3.1.2",
19 | "@types/jest": "^29.5.12",
20 | "@types/node": "^20.14.0",
21 | "@typescript-eslint/eslint-plugin": "^7.13.0",
22 | "chai": "^5.1.1",
23 | "cypress": "^13.11.0",
24 | "eslint": "^8.57.0",
25 | "eslint-plugin-chai-friendly": "^1.0.0",
26 | "eslint-plugin-cypress": "^3.3.0",
27 | "onchange": "^7.1.0",
28 | "prettier": "^3.3.2",
29 | "ts-jest": "^29.1.4",
30 | "ts-node": "^10.9.2",
31 | "typescript": "^5.4.5",
32 | "wait-on": "^7.2.0"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/fourcolumns/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "classes": "",
3 | "jcr:primaryType": "nt:unstructured",
4 | "container1": {
5 | "jcr:primaryType": "nt:unstructured",
6 | "sling:resourceType": "howlite/components/container",
7 | "smColSize": 12,
8 | "mdColSize": 6,
9 | "lgColSize": 3,
10 | "lgOffset": "",
11 | "mdOffset": "",
12 | "smOffset": ""
13 | },
14 | "container2": {
15 | "jcr:primaryType": "nt:unstructured",
16 | "sling:resourceType": "howlite/components/container",
17 | "smColSize": 12,
18 | "mdColSize": 6,
19 | "lgColSize": 3,
20 | "lgOffset": "",
21 | "mdOffset": "",
22 | "smOffset": ""
23 | },
24 | "container3": {
25 | "jcr:primaryType": "nt:unstructured",
26 | "sling:resourceType": "howlite/components/container",
27 | "smColSize": 12,
28 | "mdColSize": 6,
29 | "lgColSize": 3,
30 | "lgOffset": "",
31 | "mdOffset": "",
32 | "smOffset": ""
33 | },
34 | "container4": {
35 | "jcr:primaryType": "nt:unstructured",
36 | "sling:resourceType": "howlite/components/container",
37 | "smColSize": 12,
38 | "mdColSize": 6,
39 | "lgColSize": 3,
40 | "lgOffset": "",
41 | "mdOffset": "",
42 | "smOffset": ""
43 | }
44 | }
--------------------------------------------------------------------------------
/core/src/test/resources/header.json:
--------------------------------------------------------------------------------
1 | {
2 | "default": {
3 | "jcr:primaryType": "nt:unstructured",
4 | "sling:resourceType": "howlite/components/header"
5 | },
6 | "complex": {
7 | "jcr:primaryType": "nt:unstructured",
8 | "sling:resourceType": "howlite/components/header",
9 | "image": {
10 | "jcr:primaryType": "nt:unstructured",
11 | "lgImageSrc": "/content/space/assets/imageLg.jpg",
12 | "alt": "alt test text"
13 | },
14 | "navigation": {
15 | "jcr:primaryType": "nt:unstructured",
16 | "menuItems": {
17 | "jcr:primaryType": "nt:unstructured",
18 | "1": {
19 | "jcr:primaryType": "nt:unstructured",
20 | "label": "Navigation item 1",
21 | "link": "http://www.navigate-to-link-1.com",
22 | "openInNewTab": "true"
23 | },
24 | "2": {
25 | "jcr:primaryType": "nt:unstructured",
26 | "label": "Navigation item 2",
27 | "link": "http://www.navigate-to-link-2.com",
28 | "openInNewTab": "false"
29 | }
30 | }
31 | },
32 | "cta": {
33 | "jcr:primaryType": "nt:unstructured",
34 | "label": "Test CTA",
35 | "link": "http://www.example.domain.com",
36 | "openInNewTab": "false",
37 | "displayIcon": "true"
38 | }
39 | }
40 | }
--------------------------------------------------------------------------------
/ui.frontend/src/sass/global.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use './abstracts';
18 |
19 | // CSS reset
20 | @import './base/reset';
21 | @import './base/utils';
22 |
23 | * {
24 | box-sizing: border-box;
25 | color: var(--color-default);
26 | }
27 |
28 | a {
29 | text-decoration: none;
30 | }
31 |
32 | img,
33 | svg {
34 | vertical-align: middle;
35 | }
36 |
37 | // global styles
38 | body {
39 | background-color: var(--color-body-background);
40 |
41 | @include abstracts.font-body;
42 |
43 | &.primary-color {
44 | @each $name, $color in abstracts.$primary-colors {
45 | &--#{$name} {
46 | --color-primary: #{$color};
47 | }
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/AccordionItemComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import javax.inject.Inject;
20 | import lombok.Getter;
21 | import org.apache.sling.api.resource.Resource;
22 | import org.apache.sling.models.annotations.Default;
23 | import org.apache.sling.models.annotations.Model;
24 |
25 | @Model(adaptables = Resource.class)
26 | public class AccordionItemComponent {
27 |
28 | @Getter
29 | @Inject
30 | @Default(values = "Accordion item title")
31 | private String title;
32 |
33 | @Getter
34 | @Inject
35 | @Default(values = "Add your content here")
36 | private String content;
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/image/image.html:
--------------------------------------------------------------------------------
1 |
16 |
20 |
21 |
24 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Description
4 |
5 |
6 | ## Motivation and Context
7 |
8 |
9 |
10 | ## Screenshots (if appropriate)
11 |
12 | ## Upgrade notes (if appropriate)
13 |
14 |
15 | ## Types of changes
16 |
17 | - [ ] Bug fix (non-breaking change which fixes an issue) labeled with `bug`
18 | - [ ] New feature (non-breaking change which adds functionality) labeled with `enhancement`
19 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
20 |
21 | ## Checklist:
22 |
23 |
24 | - [ ] My code follows the [code standards](/CONTRIBUTING.md) of this project.
25 | - [ ] My change requires updating the documentation. I have updated the documentation accordingly.
26 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/NavigationComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
20 |
21 | import java.util.Collections;
22 | import java.util.List;
23 | import javax.annotation.PostConstruct;
24 | import javax.inject.Inject;
25 | import lombok.Getter;
26 | import org.apache.sling.api.resource.Resource;
27 | import org.apache.sling.models.annotations.Model;
28 |
29 | @Model(adaptables = Resource.class, defaultInjectionStrategy = OPTIONAL)
30 | public class NavigationComponent {
31 |
32 | @Inject
33 | @Getter
34 | private List menuItems;
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/ctaslist/ctaslist.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
21 |
22 |
23 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/utils/DefaultImageUtil.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.utils;
18 |
19 | import java.util.Arrays;
20 | import java.util.Collections;
21 | import java.util.List;
22 | import org.apache.commons.lang3.StringUtils;
23 | import org.jetbrains.annotations.NotNull;
24 | import org.jetbrains.annotations.Nullable;
25 |
26 | public class DefaultImageUtil {
27 |
28 | @Nullable
29 | public static String chooseDefaultImage(@NotNull String... sources) {
30 | List images = Arrays.asList(sources);
31 | Collections.reverse(images);
32 | return images.stream()
33 | .filter(StringUtils::isNotEmpty)
34 | .findFirst()
35 | .orElse(null);
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/Title/title.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 | @use '../../sass/abstracts';
19 |
20 |
21 | .hl-title {
22 | .subtitle {
23 | color: var(--color-default);
24 | line-height: 1.5rem;
25 | font-weight: abstracts.$font-weight-xbold;
26 | font-size: abstracts.$font-regular-small;
27 | padding-bottom: map.get(abstracts.$spacing, 'small-2');
28 |
29 | @include abstracts.media-breakpoint-up(md) {
30 | font-size: abstracts.$font-regular;
31 | padding-bottom: map.get(abstracts.$spacing, 'small-3');
32 | }
33 | }
34 |
35 | .hl-main-container &.hl-title--centered {
36 | text-align: center;
37 | }
38 | }
39 |
40 | .hl-container > .hl-title {
41 | text-align: center;
42 | }
43 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/FooterReferenceComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
20 |
21 | import org.apache.sling.api.resource.Resource;
22 | import org.apache.sling.models.annotations.Model;
23 |
24 | @Model(adaptables = Resource.class, defaultInjectionStrategy = OPTIONAL)
25 | public class FooterReferenceComponent extends HomepageComponentReference {
26 |
27 | @Override
28 | public String getPath() {
29 | return "jcr:content/rootcontainer/footer";
30 | }
31 |
32 | @Override
33 | public Class getType() {
34 | return FooterComponent.class;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/HeaderReferenceComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
20 |
21 | import org.apache.sling.api.resource.Resource;
22 | import org.apache.sling.models.annotations.Model;
23 |
24 | @Model(adaptables = Resource.class, defaultInjectionStrategy = OPTIONAL)
25 | public class HeaderReferenceComponent extends HomepageComponentReference {
26 |
27 | @Override
28 | public String getPath() {
29 | return "jcr:content/rootcontainer/header";
30 | }
31 |
32 | @Override
33 | public Class getType() {
34 | return HeaderComponent.class;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_icons.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use './colors';
18 |
19 | $social-icon-size: 40px;
20 |
21 | @mixin social-icon {
22 | text-decoration: none;
23 | border-radius: 50%;
24 | display: block;
25 | appearance: none;
26 | background: transparent;
27 | border: 0;
28 | padding: 0;
29 |
30 | &:hover {
31 | .hl-icon {
32 | background-color: var(--color-default);
33 | color: var(--color-body-background);
34 | }
35 | }
36 |
37 | .hl-icon {
38 | display: block;
39 | border: 2px solid var(--color-default);
40 | border-radius: 50%;
41 | width: $social-icon-size;
42 | height: $social-icon-size;
43 | display: flex;
44 | justify-content: center;
45 | align-items: center;
46 | }
47 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/accordion/accordion.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/ui.frontend/src/sass/abstracts/_custom-bootstrap.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | // based on https://getbootstrap.com/docs/5.0/customize/sass/
18 |
19 | @import '../../../node_modules/bootstrap/scss/functions';
20 |
21 | // custom variables
22 | $grid-columns: 12;
23 | $grid-gutter-width: 1.5rem;
24 | $spacer: 1rem;
25 |
26 | $gutters: (
27 | 0: 0,
28 | 1: $spacer * 0.25,
29 | 2: $spacer * 0.5,
30 | 3: $spacer,
31 | 4: $spacer * 1.5,
32 | 5: $spacer * 2
33 | );
34 |
35 | $grid-breakpoints: (
36 | sm: 0,
37 | md: 768px,
38 | lg: 970px,
39 | xl: 1200px
40 | );
41 |
42 | $container-max-widths: (
43 | md: 100%,
44 | lg: 1300px
45 | );
46 |
47 | @import '../../../node_modules/bootstrap/scss/variables';
48 | @import '../../../node_modules/bootstrap/scss/mixins';
49 |
--------------------------------------------------------------------------------
/tests/content/src/main/content/jcr_root/content/howlite-test/pages/Footer/.content.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
20 |
23 |
26 |
29 |
30 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/ui.frontend/assembly.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
20 | distribution
21 |
22 | zip
23 |
24 | false
25 |
26 |
27 | ${basedir}/dist
28 |
29 | **/*
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/ui.frontend/src/components/PageSection/variants/hl-page-section--featured-content.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | @use 'sass:map';
18 | @use '../../../sass/abstracts';
19 |
20 | .hl-page-section--featured-content {
21 | .hl-image {
22 | margin-bottom: map.get(abstracts.$spacing, 'large');
23 | }
24 |
25 | .hl-title {
26 | padding-bottom: map.get(abstracts.$spacing, 'medium');
27 | @include abstracts.media-breakpoint-up(lg) {
28 | padding-bottom: 0;
29 | padding-right: map.get(abstracts.$spacing, 'medium');
30 | }
31 | }
32 |
33 | .hl-main-container > &.hl-page-section .hl-title {
34 | text-align: left;
35 | align-self: start;
36 |
37 | + * {
38 | margin-top: 0;
39 | }
40 | }
41 |
42 | .hl-rich-text {
43 | align-self: start;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/HeaderComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
20 |
21 | import javax.inject.Inject;
22 | import lombok.Getter;
23 | import org.apache.sling.api.resource.Resource;
24 | import org.apache.sling.models.annotations.Model;
25 |
26 | @Model(adaptables = Resource.class, defaultInjectionStrategy = OPTIONAL)
27 | public class HeaderComponent {
28 |
29 | @Getter
30 | @Inject
31 | private String mobileMenuTitle;
32 |
33 | @Inject
34 | @Getter
35 | private ImageComponent image;
36 |
37 | @Inject
38 | @Getter
39 | private NavigationComponent navigation;
40 |
41 | @Inject
42 | @Getter
43 | private CtaComponent cta;
44 | }
--------------------------------------------------------------------------------
/core/src/main/java/pl/ds/howlite/components/models/FooterComponent.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2022 Dynamic Solutions
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package pl.ds.howlite.components.models;
18 |
19 | import static org.apache.sling.models.annotations.DefaultInjectionStrategy.OPTIONAL;
20 |
21 | import javax.inject.Inject;
22 | import lombok.Getter;
23 | import org.apache.sling.api.resource.Resource;
24 | import org.apache.sling.models.annotations.Model;
25 |
26 | @Model(adaptables = Resource.class, defaultInjectionStrategy = OPTIONAL)
27 | public class FooterComponent {
28 |
29 | @Inject
30 | @Getter
31 | private ImageComponent image;
32 |
33 | @Inject
34 | @Getter
35 | private NavigationComponent navigation;
36 |
37 | @Inject
38 | @Getter
39 | private SocialLinksComponent socialLinks;
40 |
41 | @Inject
42 | @Getter
43 | private String copyright;
44 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/layouts/calltoactionsection/template/.content.json:
--------------------------------------------------------------------------------
1 | {
2 | "classes": "hl-page-section--call-to-action",
3 | "jcr:primaryType": "nt:unstructured",
4 | "image": {
5 | "jcr:primaryType": "nt:unstructured",
6 | "sling:resourceType": "howlite/components/image",
7 | "openInNewTab": false
8 | },
9 | "title": {
10 | "jcr:primaryType": "nt:unstructured",
11 | "sling:resourceType": "howlite/components/title",
12 | "headingLevel": "h2",
13 | "headingSize": "hl-title__heading--size-4",
14 | "classes": "",
15 | "lgColSize": "12",
16 | "lgOffset": "",
17 | "mdColSize": "12",
18 | "mdOffset": "",
19 | "smColSize": "12",
20 | "smOffset": ""
21 | },
22 | "ctaslist": {
23 | "jcr:primaryType": "nt:unstructured",
24 | "sling:resourceType": "howlite/components/ctaslist",
25 | "cta_1": {
26 | "jcr:primaryType": "nt:unstructured",
27 | "sling:resourceType": "howlite/components/cta",
28 | "displayIcon": false,
29 | "classes": "hl-cta--primary",
30 | "link": "https://test.com",
31 | "label": "Link",
32 | "openInNewTab": false
33 | },
34 | "cta": {
35 | "jcr:primaryType": "nt:unstructured",
36 | "sling:resourceType": "howlite/components/cta",
37 | "classes": "hl-cta--text",
38 | "displayIcon": false,
39 | "link": "https://test.com",
40 | "label": "Link",
41 | "openInNewTab": false
42 | }
43 | }
44 | }
--------------------------------------------------------------------------------
/core/src/main/resources/libs/howlite/components/navigation/template.html:
--------------------------------------------------------------------------------
1 |
16 |
17 |