2.10.9 • Published 10 months ago

@incrowd/article-rendering-engine v2.10.9

Weekly downloads
80
License
-
Repository
-
Last release
10 months ago

InCrowd Article Rendering Engine (ICARE)

A component for rendering article from the CMS.

Motivation

To reuse this component across all web apps.

Getting Started

npm i @incrowd/article-rendering-engine

Then import @incrowd/article-rendering-engine/public/icare_example.css in global scope.

/* .icare {} */
.icare * {
	box-sizing: border-box;
}
.icare-body {
	padding: 0 1rem 1rem;
}
.icare h1 {
	font-size: 2rem;
	font-weight: bold;
	margin-bottom: 1.5rem;
}
.icare h2 {
	font-size: 1.5rem;
	font-weight: 500;
	margin-bottom: 1rem;
}
.icare-metadata {
	display: flex;
	margin-bottom: 1rem;
}
.icare-metadata img {
	width: 3.5rem;
	height: 3.5rem;
	margin-right: 0.5rem;
	border-radius: 9999px;
}
.icare-metadata p {
	margin: 0.25rem 0;
}
.icare-content-block {
	margin-bottom: 1rem;
}
.icare-content-block-sponsor {
	display: flex;
}
.icare-content-block-sponsor span {
	font-size: 0.875rem;
	margin-top: auto;
	margin-bottom: auto;
	margin-right: 0.5rem;
}
.icare-content-block-sponsor img {
	height: 2rem;
}
/* .icare-image {} */
/* .icare-video-youtube {} */
/* .icare-video-media {} */
.icare-text * {
	margin-bottom: 1rem;
}
.icare-text iframe {
	width: 100%;
	display: block;
}
/* .icare-gallery {} */
.icare-quote {
	margin: 0 auto;
	padding: 1.5rem 0 0 2rem;
	font-weight: 700;
}
.icare-quote-text::before {
	content: '\201C';
	font-size: 4rem;
	position: absolute;
	left: -2rem;
	top: -2rem;
}
.icare-quote-text {
	position: relative;
	font-size: 1.25rem;
	text-align: center;
	margin: 0;
}
.icare-quote-footer {
	text-transform: uppercase;
	text-align: right;
	margin-top: 0.5rem;
}
.icare-quote-author::before {
	content: "\2013\00A0";
}
.icare-quote-author {
	margin: 0;
}
.icare-quote-title {
	margin: 0;
	font-size: 0.5rem;
	opacity: 0.5;
}
.icare-cm {
	display: grid;
	grid-gap: 0.5rem;
	grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
}
.icare-cm-video-column {
	grid-column: auto / span 2;
	display: flex;
}
.icare-cm-playlist-column {
	display: flex;
	margin-bottom: 1rem;
}
.icare-cm-playlist-container {
	width: 100%;
	outline: 1px solid grey;
	display: flex;
	flex-direction: column;
}
.icare-cm-playlist-title {
	margin: 0.5rem;
	font-size: 1.25rem;
	font-weight: 500;
}
.icare-cm-playlist {
	outline: 1px solid grey;
	flex: 1 1 0%;
	max-height: 400px;
	overflow-y: auto;

}
.icare-cm-playlist-item {
	display: flex;
	padding: 0.25rem 0.5rem;
	cursor: pointer;
}
.icare-cm-playlist-item img {
	width: 100px;
	height: auto;
	margin: 0 0.5rem;
}
.icare-cm-playlist-item p {
	margin: auto 0;
	font-size: 0.875rem;
}
.icare-cm-playlist-item-active {
	background-color: lightgrey;
}
.icare-related-content-list {
	margin: 0
}
.icare-related-content-list-item {
	cursor: pointer;
	margin-bottom: 1rem;
}
.icare-footer-author {
	border-top: 1px solid lightgray;
	padding-top: 1rem;
	display: flex;
}
.icare-footer-author-image {
	width: 5rem;
	height: 5rem;
	margin-right: 1rem;
	border-radius: 9999px;
}
.icare-footer-author-name {
	margin: 0 0 0.25rem;
	font-size: 1.25rem;
	font-weight: bold;
}
.icare-footer-author-title {
	margin: 0 0 0.25rem;
}
.icare-social-icon {
	display: block;
	width: 1.5rem;
	height: 1.5rem;
	margin-right: 0.25rem;
}

Or copy the class names and customize them.

Usage

In Svelte.js

<Icare {article} {accessToken} {apiUrl} {campaignApiUrl} {onRelatedContentClick}/>

<script>
import Icare from '@incrowd/article-rendering-engine'
</script>

In all other environment

<div id="icare"/>

<script>
import Icare from '@incrowd/article-rendering-engine'
const icareInstance = new Icare({
	target: document.getElementById("icare"),
	props: { article, accessToken, apiUrl, campaignApiUrl, onRelatedContentClick }
})
</script>

accessToken is optional. It is used for executing campaign (PROMO block) and fetching KSession for stream videos.

apiUrl is set to https://article-cms-api.incrowdsports.com/v2/articles by default.

campaignApiUrl is set to https://promoblocks-cms-api.incrowdsports.com/v1 by default.

onRelatedContentClick should be a function that has content as the first argument which will be called when a related content is clicked. For example:

const onRelatedContentClick = content => {
	console.log(JSON.stringify(content, null, 4))
}

Can call icareInstance.$destroy() to destroy the element. For more information, please read the Svelte.js documentation.

2.10.9

10 months ago

2.10.8

10 months ago

2.10.5

2 years ago

2.10.4

2 years ago

2.10.3

4 years ago

2.10.2

4 years ago

2.10.1

4 years ago

2.10.0

4 years ago

2.9.1

4 years ago

2.9.0

4 years ago

2.8.0

4 years ago

2.7.0

4 years ago

2.6.5

4 years ago

2.6.4

5 years ago

2.6.3

5 years ago

2.6.2

5 years ago

2.6.1

5 years ago

2.6.0

5 years ago

2.5.1

5 years ago

2.5.0

5 years ago

2.4.0

5 years ago

2.3.0

5 years ago

2.2.2

5 years ago

2.2.1

5 years ago

2.2.0

5 years ago

2.1.0

5 years ago

2.0.3

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago