SCF Handlebars Helpers scf-handlebars-helpers
Handlebars Helpers (helpers) zijn methodes callable van de manuscripten van Handlebars om het werken met componenten te vergemakkelijken SCF.
De implementatie omvat een client-side en een server-side definitie. Ontwikkelaars kunnen ook aangepaste hulplijnen maken.
De aangepaste SCF-hulplijnen die bij AEM Communities worden geleverd, zijn gedefinieerd in het dialoogvenster clientbibliotheek:
- /etc/clientlibs/social/commons/scf/helpers.js
Afkorting abbreviate
Een helper om een afgekorte tekenreeks te retourneren die voldoet aan de eigenschappen maxWords en maxLength.
De tekenreeks die moet worden afgekort, wordt opgegeven als de context. Als er geen context is opgegeven, wordt een lege tekenreeks geretourneerd.
Eerst wordt de context bijgesneden tot maxLength en vervolgens wordt de context in woorden gesegmenteerd en tot maxWords teruggebracht.
Als safeString is ingesteld op true, is de geretourneerde tekenreeks een SafeString.
Parameters parameters
-
context: String
(optioneel) Standaard is de lege tekenreeks
-
maxLength: Getal
(optioneel) Standaard is de lengte van de context.
-
maxWords: Getal
(optioneel) De standaardwaarde is het aantal woorden in de bijgesneden tekenreeks.
-
safeString: Boolean
(optioneel) Retourneert een Handlebars.SafeString(), indien true. De standaardwaarde is false.
Voorbeelden examples
{{abbreviate subject maxWords=2}}
/*
If subject =
"AEM Communities - Site Creation Wizard"
Then abbreviate would return
"AEM Communities".
*/
{{{abbreviate message safeString=true maxLength=30}}}
/*
If message =
"The goal of AEM Communities is to quickly create a community engagement site."
Then abbreviate would return
"The goal of AEM Communities is"
*/
Inhoud laden content-loadmore
Een hulpmiddel om twee reeksen onder een div toe te voegen, één voor de volledige tekst en andere voor minder tekst, met de capaciteit om tussen de twee meningen van een knevel te voorzien.
Parameters parameters-1
-
context: String
(optioneel) Standaard is de lege tekenreeks.
-
numChars: Getal
(optioneel) Het aantal tekens dat moet worden weergegeven wanneer geen volledige tekst wordt weergegeven. De standaardwaarde is 100.
-
moreText: String
(optioneel) De tekst die moet worden weergegeven om aan te geven dat er meer tekst moet worden weergegeven. Standaard is "meer".
-
ellipsesText: String
(optioneel) De tekst die moet worden weergegeven om aan te geven dat er verborgen tekst is. Standaard is "…".
-
safeString: Boolean
(optioneel) Booleaanse waarde die aangeeft of Handlebars.SafeString() al dan niet moet worden toegepast voordat het resultaat wordt geretourneerd. De standaardwaarde is false.
Voorbeeld example
{{content-loadmore context numChars=32 moreText="go on" ellipsesText="..." }}
/*
If context =
"Here is the initial less content and this is more content."
Then content-loadmore would return
"Here is the initial less content<span class="moreelipses">...</span> <span class="scf-morecontent"><span>and this is more content.</span> <a href="" class="scf-morelink" evt="click=toggleContent">go on</a></span>"
*/
DateUtil dateutil
Een hulpmiddel om een geformatteerde datumreeks terug te keren.
Parameters parameters-2
-
context: Getal
(optioneel) Een millisecondenverschuiving vanaf 1 januari 1970 (tijdperk). De standaardwaarde is de huidige datum.
-
format: String
(optioneel) De datumnotatie die moet worden toegepast. Standaard is "YYYY-MM-DDTHHss.sssZ" en het resultaat wordt weergegeven als "2015-03-18T18":17:13-07:00"
Voorbeelden examples-1
{{dateUtil this.memberSince format="dd MMM yyyy, hh:mm"}}
// returns "18 Mar 2015, 18:17"
{{dateUtil this.birthday format="MM-DD-YYYY"}}
// returns "03-18-2015"
Gelijk equals
Een hulpmiddel om inhoud terug te keren afhankelijk van een voorwaardelijk gelijk aan.
Parameters parameters-3
-
lvalue: String
De linkerwaarde die moet worden vergeleken
-
tegenwaarde: String
De rechterwaarde die moet worden vergeleken
Voorbeeld example-1
{{#equals value "some-value"}}
<div>They are EQUAL!</div>
{{else}}
<div>They are NOT equal!</div>
{{/equals}}
If-wcm-mode if-wcm-mode
Een blokhelper die de huidige waarde van test WCM-modus op een door een tekenreeks gescheiden lijst met modi.
Parameters parameters-4
-
context: String
(optioneel) De tekenreeks die moet worden vertaald. Vereist als er geen standaard is opgegeven.
-
mode: String
(optioneel) Een door komma's gescheiden lijst met WCM-modi om te testen of deze is ingesteld.
Voorbeeld example-2
{{#if-wcm-mode mode="DESIGN, EDIT"}}
...
{{else}}
...
{{/if-wcm-mode}}
i18n i-n
Deze hulp treedt helper "i18n"van Handlebars met voeten.
Zie ook Tekenreeksen internationaliseren in JavaScript-code.
Parameters parameters-5
-
context: String
(optioneel) De tekenreeks die moet worden vertaald. Vereist als er geen standaard is opgegeven.
-
default: String
(optioneel) De standaardtekenreeks die moet worden omgezet. Vereist als er geen context is opgegeven.
-
opmerking: String
(optioneel) Een vertaaltip
Voorbeeld example-3
{{i18n "hello"}}
{{i18n "hello" comment="greeting" default="bonjour"}}
Inclusief include
Een hulpmiddel om een component als niet bestaand middel in een malplaatje te omvatten.
Hierdoor kan de bron beter programmatisch worden aangepast dan mogelijk is voor een bron die als JCR-knooppunt wordt toegevoegd. Zie Een onderdeel van een Gemeenschappen toevoegen of opnemen.
Slechts een paar communautaire componenten zijn inbegrepen. Voor AEM 6.1 zijn de opgenomen opmerkingen, beoordeling, beoordelingen, en stemmen.
Deze helper, die alleen geschikt is aan de serverzijde, biedt functionaliteit die lijkt op cq:include voor JSP-scripts.
Parameters parameters-6
-
context: Tekenreeks of object
(optioneel, tenzij een relatief pad wordt opgegeven)
gebruiken
this
om de huidige context door te gevengebruiken
this.id
om de bron te verkrijgen opid
voor het renderen van het aangevraagde resourceType -
resourceType: String
(facultatief) middeltype zal aan middeltype van context in gebreke blijven
-
template: String
pad naar componentscript
-
pad: String
(vereist) Het pad naar de bron. Als het pad relatief is, moet een context worden opgegeven, anders wordt de lege tekenreeks geretourneerd.
-
authoringDisabled: Boolean
(optioneel) Standaard is false. Uitsluitend voor intern gebruik.
Voorbeeld example-4
{{include this.id path="comments" resourceType="social/commons/components/hbs/comments"}}
Dit omvat een nieuwe component comments op this.id
+ /comments
IncludeClientLib includeclientlib
Een helper die een AEM HTML- cliëntbibliotheek omvat, die een js, een css of een themabibliotheek kan zijn. Voor meerdere inclusies van verschillende typen, bijvoorbeeld js en css, moet deze tag meerdere keren worden gebruikt in het Handlebars-script.
Deze helper, die alleen geschikt is aan de serverzijde, biedt functionaliteit die lijkt op ui:includeClientLib voor JSP-scripts.
Parameters parameters-7
-
categorieën: String
(optioneel) Een lijst met door komma's gescheiden clientbibliotheekcategorieën. Dit omvat alle JavaScript- en CSS-bibliotheken voor de opgegeven categorieën. De themanaam wordt uit de aanvraag geëxtraheerd.
-
thema: String
(optioneel) Een lijst met door komma's gescheiden clientbibliotheekcategorieën. Dit omvat alle themabibliotheken (zowel CSS als JS) voor de opgegeven categorieën. De themanaam wordt uit de aanvraag geëxtraheerd.
-
js: String
(optioneel) Een lijst met door komma's gescheiden clientbibliotheekcategorieën. Dit omvat alle bibliotheken Javascript voor de bepaalde categorieën.
-
css: String
(optioneel) Een lijst met door komma's gescheiden clientbibliotheekcategorieën. Dit omvat alle CSS-bibliotheken voor de opgegeven categorieën.
Voorbeelden examples-2
// all: js + theme (theme-js + css)
{{includeClientLib categories="cq.social.hbs.comments, cq.social.hbs.voting"}}
// returns
<link href="/etc/clientlibs/social/hbs/tally/voting.css" rel="stylesheet" type="text/css">
<link href="/etc/clientlibs/social/hbs/socialgraph.css" rel="stylesheet" type="text/css">
<link href="/etc/clientlibs/social/hbs/comments.css" rel="stylesheet" type="text/css">
<script src="/etc/clientlibs/social/hbs/tally/voting.js" type="text/javascript"></script>
<script src="/etc/clientlibs/social/hbs/socialgraph.js" type="text/javascript"></script>
<script src="/etc/clientlibs/social/hbs/comments.js" type="text/javascript"></script>
// only js libs
{{includeClientLib js="cq.social.hbs.comments, cq.social.hbs.voting"}}
// returns
<script src="/etc/clientlibs/social/hbs/tally/voting.js" type="text/javascript"></script>
<script src="/etc/clientlibs/social/hbs/socialgraph.js" type="text/javascript"></script>
<script src="/etc/clientlibs/social/hbs/comments.js" type="text/javascript"></script>
// theme only (theme-js + css)
{{includeClientLib theme="cq.social.hbs.comments, cq.social.hbs.voting"}}
// returns
<link href="/etc/clientlibs/social/hbs/tally/voting.css" rel="stylesheet" type="text/css">
<link href="/etc/clientlibs/social/hbs/comments.css" rel="stylesheet" type="text/css">
<script src="/etc/clientlibs/social/hbs/tally/voting.js" type="text/javascript"></script>
<script src="/etc/clientlibs/social/hbs/comments.js" type="text/javascript"></script>
// css only
{{includeClientLib css="cq.social.hbs.comments, cq.social.hbs.voting"}}
// returns
<link href="/etc/clientlibs/social/hbs/tally/voting.css" rel="stylesheet" type="text/css">
<link href="/etc/clientlibs/social/hbs/socialgraph.css" rel="stylesheet" type="text/css">
<link href="/etc/clientlibs/social/hbs/comments.css" rel="stylesheet" type="text/css">
Nochtans pretty-time
Een hulpmiddel om te tonen hoeveel tijd tot een afbreekpunt is overgegaan, waarna een regelmatige datumformaat wordt getoond.
Bijvoorbeeld:
- 12 uur geleden
- 7 dagen geleden
Parameters parameters-8
-
context: Getal
Een tijd in het verleden om te vergelijken met "nu". Tijd wordt uitgedrukt als een millisecondenverschuiving vanaf 1 januari 1970 (tijdperk).
-
daysCutoff: Getal
Het aantal dagen geleden voordat wordt overgeschakeld op een werkelijke datum. De standaardwaarde is 60.
Voorbeeld example-5
{{pretty-time this.published daysCutoff=7}}
/*
Depending on how long in the past, may return
"3 minutes ago"
"3 hours ago"
"3 days ago"
*/
Xss-html xss-html
Een hulpmiddel dat een bronkoord voor HTML elementinhoud codeert helpen tegen XSS beschermen.
OPMERKING: Dit is geen validator en moet niet worden gebruikt voor het schrijven van kenmerkwaarden.
Parameters parameters-9
-
context: object
de te coderen HTML
Voorbeeld example-6
<p>{{xss-html forum-ugc}}</p>
Xss-htmlAttr xss-htmlattr
Een helper die een bronkoord codeert voor het schrijven aan een waarde van het attribuut van HTML om tegen XSS te helpen beschermen.
OPMERKING: dit is geen validator en moet niet worden gebruikt voor het schrijven van actionable attributen (href, src, gebeurtenismanagers).
Parameters parameters-10
-
context: Object
De te coderen HTML
Voorbeeld example-7
<div id={{xss-htmlAttr id}} />
Xss-jsString xss-jsstring
Een hulpmiddel dat een bronkoord codeert voor het schrijven aan JavaScript koordinhoud helpen tegen XSS beschermen.
OPMERKING: Dit is geen validator en mag niet worden gebruikt voor het schrijven naar willekeurig JavaScript.
Parameters parameters-11
-
context: Object
De te coderen HTML
Voorbeeld example-8
var input = {{xss-jsString topic-title}}
Xss-validHref xss-validhref
Een helper die een URL ontsmetten voor het schrijven als HTML href of srce attributenwaarde helpen tegen XSS.
OPMERKING: dit kan een lege tekenreeks retourneren
Parameters parameters-12
-
context: Object
De URL die moet worden ontsmet
Voorbeeld example-9
<a href="{{xss-validHref url}}">my link</a>
Handlebars.js Basic - Overzicht handlebars-js-basic-overview
-
Een hulpvraag van Handlebars is een eenvoudig herkenningsteken (*name *of helper), die door nul of meer ruimte-gescheiden parameters wordt gevolgd.
-
Parameters kunnen een eenvoudig String-, Number-, Boolean- of JSON-object zijn, plus een optionele reeks sleutelwaardeparen (hash-argumenten) als de laatste parameter(s).
-
De sleutels in knoeiboelargumenten moeten eenvoudige herkenningstekens zijn.
-
De waarden in hash-argumenten zijn Handlebars-expressies: eenvoudige id's, paden of tekenreeksen.
-
De huidige context,
this
, is altijd beschikbaar voor de helpers van Handlebars. -
De context kan een String, Number, boolean of een JSON-gegevensobject zijn.
-
Het is mogelijk een object door te geven dat in de huidige context als de context is genest, zoals
this.url
ofthis.id
(zie de volgende voorbeelden van eenvoudige en blokhulplijnen). -
De helpers van het blok zijn functies die van overal in het malplaatje kunnen worden geroepen. Ze kunnen een blok van de sjabloon telkens nul of meer keer aanroepen met een andere context. Ze bevatten een context tussen {{#name}} and {{/name}}.
-
Handlebars verstrekt een definitieve parameter aan helpers genoemd "opties". Het speciale object 'options' bevat
- Optionele privégegevens (options.data)
- Optionele sleutel-waarde eigenschappen van de aanroep (options.hash)
- Mogelijkheid om zichzelf aan te roepen (options.fn())
- Mogelijkheid om de inverse van zichzelf aan te roepen (options.inverse())
-
Men adviseert dat de inhoud van het Koord van HTML die van een helper wordt teruggekeerd een SafeString is.
Een voorbeeld van een eenvoudige helper van documentatie Handlebars.js: an-example-of-a-simple-helper-from-handlebars-js-documentation
Handlebars.registerHelper('link_to', function(title, options) {
return new Handlebars.SafeString('<a href="/posts' + this.url + '">' + title + "!</a>");
});
var context = {posts: [
{url: "/hello-world",
body: "Hello World!"}
] };
// when link_to is called, posts is the current context
var source = '<ul>{{#posts}}<li>{{{link_to "Post"}}}</li>{{/posts}}</ul>'
var template = Handlebars.compile(source);
template(context);
Zou renderen:
<ul>
<li><a href="/posts/hello-world">Publiceren!</a></li>
</ul>
Een voorbeeld van een blokhelper van documentatie Handlebars.js: an-example-of-a-block-helper-from-handlebars-js-documentation
Handlebars.registerHelper('link', function(options) {
return new Handlebars.SafeString('<a href="/people/' + this.id + '">' + options.fn(this) + '</a>');
});
var data = { "people": [
{ "name": "Alan", "id": 1 },
{ "name": "Yehuda", "id": 2 }
]};
// when link is called, people is the current context
var source = "<ul>{{#people}}<li>{{#link}}{{name}}{{/link}}</li>{{/people}}</ul>";
var template = Handlebars.compile(source);
template(data);
Zou renderen:
<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>
Aangepaste SCF-hulplijnen custom-scf-helpers
Aangepaste helpers moeten zowel aan de serverzijde als aan de clientzijde worden geïmplementeerd, vooral wanneer gegevens worden doorgegeven. Voor SCF, worden de meeste malplaatjes gecompileerd en op server-kant teruggegeven aangezien de server de HTML voor een bepaalde component produceert wanneer de pagina wordt gevraagd.
Aangepaste hulp op de server server-side-custom-helpers
Om een douaneSCF helper op de server uit te voeren en te registreren, voer eenvoudig de interface van Java uit TemplateHelper, maak er een OSGi-service en installeer het als deel van een bundel OSGi.
Bijvoorbeeld:
FooTextHelper.java footexthelper-java
/** Custom Handlebars Helper */
package com.my.helpers;
import java.io.IOException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import com.adobe.cq.social.handlebars.api.TemplateHelper;
import com.github.jknack.handlebars.Options;
@Service
@Component
public class FooTextHelper implements TemplateHelper<String>{
@Override
public CharSequence apply(String context, Options options) throws IOException {
return "foo-" + context;
}
@Override
public String getHelperName() {
return "foo-text";
}
@Override
public Class<String> getContextType() {
return String.class;
}
}
Aangepaste hulp aan clientzijde client-side-custom-helpers
De helpers aan de clientzijde zijn Handlebars-scripts die zijn geregistreerd door het aanroepen van Handlebars.registerHelper()
.
Bijvoorbeeld:
custom-helpers.js custom-helpers-js
function(Handlebars, SCF, $CQ) {
Handlebars.registerHelper('foo-text', function(context, options) {
if (!context) {
return "";
}
return "foo-" + context;
});
})(Handlebars, SCF, $CQ);
De aangepaste client-side helpers moeten worden toegevoegd aan een aangepaste clientbibliotheek.
Clilib moet:
- Een afhankelijkheid opnemen van
cq.social.scf
- Laden nadat handgrepen zijn geladen
- zijn inbegrepen
Opmerking: de SCF-helpers worden gedefinieerd in /etc/clientlibs/social/commons/scf/helpers.js
.