Hjälpmedel för SCF-handtag scf-handlebars-helpers

CAUTION
AEM 6.4 har nått slutet på den utökade supporten och denna dokumentation är inte längre uppdaterad. Mer information finns i teknisk supportperiod. Hitta de versioner som stöds här.

Handlister Hjälpprogram är metoder som kan anropas från Handlebars-skript för att underlätta arbetet med SCF-komponenter.

Implementeringen innehåller en definition på klientsidan och en serversida. Det är också möjligt för utvecklare att skapa anpassade hjälpprogram.

De anpassade SCF-hjälpen som levereras med AEM Communities definieras i klientbibliotek:

  • /etc/clientlibs/social/commons/scf/helpers.js

Förkortning abbreviate

En hjälp som returnerar en förkortad sträng som uppfyller egenskaperna maxWords och maxLength.

Strängen som ska förkortas anges som kontext. Om inget sammanhang anges returneras en tom sträng.

Först trimmas kontexten till maxLength och sedan delas kontexten upp i ord och reduceras till maxWords.

Om safeString är true är den returnerade strängen SafeString.

Parametrar parameters

  • kontext: Sträng

    (valfritt) Standard är den tomma strängen

  • maxLength: Nummer

    (valfritt) Standard är längden på kontexten.

  • maxWords: Nummer

    (valfritt) Standard är antalet ord i den trimmade strängen.

  • safeString: Boolean

    (valfritt) Returnerar en Handlebars.SafeString() om true. Standardvärdet är false.

Exempel 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"
*/

Content-loadMore content-loadmore

Ett hjälpmedel för att lägga till två intervall under en div, ett för den fullständiga texten och det andra för den mindre texten, med möjlighet att växla mellan de två vyerna.

Parametrar parameters-1

  • kontext: Sträng

    (valfritt) Default är den tomma strängen.

  • numChars: Nummer

    (valfritt) Det antal tecken som ska visas när den fullständiga texten inte visas. Standardvärdet är 100.

  • moreText: Sträng

    (valfritt) Texten som ska visas anger att det finns mer text att visa. Standardvärdet är "more".

  • ellipsesText: Sträng

    (valfritt) Den text som ska visas som indikation på dold text. Standardvärdet är "…".

  • safeString: Boolean

    (valfritt) Ett booleskt värde som anger om Handlebars.SafeString() ska användas eller inte innan resultatet returneras. Standardvärdet är false.

Exempel 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

En hjälp som returnerar en formaterad datumsträng.

Parametrar parameters-2

  • kontext: Nummer

    (valfritt) en millisekundförskjutning från 1 januari 1970 (epok). Standard är aktuellt datum.

  • format: Sträng

    (valfritt) Datumformatet som ska användas. Standardvärdet är "YYY-MM-DDTHHss.sssZ" och resultatet visas som"2015-03-18T18":17:13-07:00"

Exempel 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"

Lika med equals

En hjälpfunktion som returnerar innehåll beroende på ett likhetsvillkor.

Parametrar parameters-3

  • lvalue: Sträng

    Det vänstra värdet som ska jämföras

  • rvalue: Sträng

    Högervärdet som ska jämföras

Exempel 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

En blockhjälp som testar det aktuella värdet för WCM-läge mot en strängavgränsad lista med lägen.

Parametrar parameters-4

  • kontext: Sträng

    (valfritt) Den sträng som ska översättas. Obligatoriskt om inget standardvärde har angetts.

  • läge: Sträng

    (valfritt) En kommaavgränsad lista med WCM-lägen för att testa om det är inställt.

Exempel example-2

{{#if-wcm-mode mode="DESIGN, EDIT"}}
 ...
{{else}}
 ...
{{/if-wcm-mode}}

i18n i-n

Den här hjälpen åsidosätter Handlebars help 'i18n'.

Se även Internationalisering av strängar i JavaScript-kod.

Parametrar parameters-5

  • kontext: Sträng

    (valfritt) Den sträng som ska översättas. Obligatoriskt om inget standardvärde har angetts.

  • standard: Sträng

    (valfritt) Standardsträngen som ska översättas. Obligatoriskt om ingen kontext har angetts.

  • kommentar: Sträng

    (valfritt) Ett översättningstips

Exempel example-3

{{i18n "hello"}}
{{i18n "hello" comment="greeting" default="bonjour"}}

Inkludera include

En hjälp som du kan använda för att inkludera en komponent som en icke-befintlig resurs i en mall.

Detta gör att resursen kan anpassas programmatiskt enklare än vad som är möjligt för en resurs som lagts till som en JCR-nod. Se Lägg till eller inkludera en webbgruppskomponent.

Endast ett urval av webbgruppskomponenter kan inkluderas. För AEM 6.1 är de som ingår kommentarer, värdering, recensioneroch röstning.

Den här hjälpen, som bara är lämplig på serversidan, har funktioner som liknar cq:include för JSP-skript.

Parametrar parameters-6

  • kontext: Sträng eller objekt

    (valfritt, såvida det inte finns en relativ sökväg)

    use thisför att skicka det aktuella sammanhanget

    use this.id för att hämta resursen på id för återgivning av begärd resourceType

  • resourceType: Sträng

    (valfritt) resurstypen blir standard för resurstypen från kontext

  • mall: Sträng

    sökväg till komponentskript

  • bana: Sträng

    (obligatoriskt) Sökvägen till resursen. Om sökvägen är relativ måste en kontext anges, annars returneras den tomma strängen.

  • authoringDisabled: Boolean

    (valfritt) Standardvärdet är false. Endast för internt bruk.

Exempel example-4

{{include this.id path="comments" resourceType="social/commons/components/hbs/comments"}}

Detta kommer att innehålla en ny kommentarkomponent på this.id + /comments

IncludeClientLib includeclientlib

En handledare som innehåller ett AEM HTML-klientbibliotek, som kan vara ett js, en css eller ett temabibliotek. För flera inkluderingar av olika typer, till exempel js och css, måste den här taggen användas flera gånger i Handlebars-skriptet.

Den här hjälpen, som bara är lämplig på serversidan, har funktioner som liknar ui:includeClientLib för JSP-skript.

Parametrar parameters-7

  • kategorier: Sträng

    (valfritt) En lista med kommaavgränsade klientbibliotekskategorier. Detta inkluderar alla JavaScript- och CSS-bibliotek för de angivna kategorierna. Temanamnet extraheras från begäran.

  • tema: Sträng

    (valfritt) En lista med kommaavgränsade klientbibliotekskategorier. Detta inkluderar alla temarelaterade bibliotek (både CSS och JS) för de angivna kategorierna. Temanamnet extraheras från begäran.

  • js: Sträng

    (valfritt) En lista med kommaavgränsade klientbibliotekskategorier. Detta inkluderar alla JavaScript-bibliotek för de angivna kategorierna.

  • css: Sträng

    (valfritt) En lista med kommaavgränsade klientbibliotekskategorier. Detta inkluderar alla CSS-bibliotek för de angivna kategorierna.

Exempel 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">

Vackert pretty-time

En hjälpfunktion som visar hur mycket tid som har gått upp till en brytpunkt, efter vilken ett vanligt datumformat visas.

Till exempel:

  • För 12 timmar sedan
  • 7 dagar sedan

Parametrar parameters-8

  • kontext: Nummer

    Tidigare kunde man jämföra med"now". Tiden uttrycks som en millisekundförskjutning från 1 januari 1970 (epok).

  • daysCutoff: Nummer

    Antalet dagar sedan innan du växlar till ett faktiskt datum. Standardvärdet är 60.

Exempel 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

En hjälp som kodar en källsträng för HTML-elementinnehåll för att skydda mot XSS.

OBS! det här är inte en validerare och ska inte användas för att skriva attributvärden.

Parametrar parameters-9

  • kontext: object

    HTML som ska kodas

Exempel example-6

<p>{{xss-html forum-ugc}}</p>

Xss-htmlAttr xss-htmlattr

En hjälpskrivare som kodar en källsträng för skrivning till ett HTML-attributvärde för att skydda mot XSS.

OBS! det här är inte en validerare och ska inte användas för att skriva åtgärdbara attribut (href, src, händelsehanterare).

Parametrar parameters-10

  • kontext: Objekt

    HTML som ska kodas

Exempel example-7

<div id={{xss-htmlAttr id}} />

Xss-jsString xss-jsstring

En hjälp som kodar en källsträng för skrivning till JavaScript-stränginnehåll för att skydda mot XSS.

OBS! detta är inte en validerare och ska inte användas för att skriva till godtycklig JavaScript.

Parametrar parameters-11

  • kontext: Objekt

    HTML som ska kodas

Exempel example-8

var input = {{xss-jsString topic-title}}

Xss-validHref xss-validhref

En hjälp som sanerar en URL som kan skrivas som ett HTML href- eller srce-attributvärde för att skydda mot XSS.

OBS! detta kan returnera en tom sträng

Parametrar parameters-12

  • kontext: Objekt

    Den URL som ska saneras

Exempel example-9

<a href="{{xss-validHref url}}">my link</a>

Handlebars.js Basic Overview handlebars-js-basic-overview

  • Ett Handlebars-anrop är en enkel identifierare (hjälpens *namn *) följt av noll eller flera blankstegsavgränsade parametrar.

  • Parametrar kan vara ett enkelt String-, number-, boolean- eller JSON-objekt, samt en valfri sekvens av nyckelvärdepar (hash-argument) som den sista parametern/de sista.

  • Nycklarna i hash-argumenten måste vara enkla identifierare.

  • Värdena i hash-argument är Handlebars-uttryck: enkla identifierare, sökvägar eller strängar.

  • Det aktuella sammanhanget this, är alltid tillgängligt för Handlebars hjälpprogram.

  • Kontexten kan vara ett String-, number-, boolean- eller JSON-dataobjekt.

  • Det går att skicka ett objekt som är inkapslat i den aktuella kontexten som kontext, t.ex. this.url eller this.id (se följande exempel på enkla och blockerade hjälpmedel).

  • Blockhjälpredor är funktioner som kan anropas var som helst i mallen. De kan anropa ett mallblock noll eller flera gånger med olika kontext varje gång. De innehåller ett sammanhang mellan {{#name}} and {{/name}}.

  • Handtag ger en slutgiltig parameter för hjälpredor med namnet"options". Alternativobjektet innehåller

    • Valfria privata data (options.data)
    • Valfria nyckelvärdegenskaper från anropet (options.hash)
    • Möjlighet att anropa sig själv (options.fn())
    • Möjlighet att anropa den inverterade av sig själv (options.inverse())
  • Vi rekommenderar att HTML String-innehåll som returneras från en hjälpfunktion är en SafeString.

Ett exempel på en enkel hjälp från Handlebars.js-dokumentationen: 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);

Återger:

<ul>
<li><a href="/posts/hello-world">Posta!</a></li>
</ul>

Ett exempel på en blockhjälp från Handlebars.js-dokumentationen: 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);

Återger:
<ul>
<li><a href="/people/1">Alan</a></li>
<li><a href="/people/2">Yehuda</a></li>
</ul>

Anpassade SCF-hjälpredor custom-scf-helpers

Anpassade hjälpprogram måste implementeras både på serversidan och på klientsidan, särskilt när data skickas. För SCF kompileras och återges de flesta mallar på serversidan när servern genererar HTML för en viss komponent när sidan begärs.

Anpassade hjälpmedel på serversidan server-side-custom-helpers

Implementera och registrera en anpassad SCF-hjälp på serversidan genom att implementera Java-gränssnittet TemplateHelper, gör det till en OSGi Service och installera det som en del av ett OSGi-paket.

Till exempel:

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;
    }
}
NOTE
En hjälp som skapats för serversidan måste också skapas för klientsidan.
Komponenten återges på nytt på klientsidan för den inloggade användaren, och om hjälpen på klientsidan inte hittas försvinner komponenten.

Anpassade hjälpmedel på klientsidan client-side-custom-helpers

Hjälpprogram på klientsidan är Handlebars-skript som registreras genom att anropa Handlebars.registerHelper().
Till exempel:

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 anpassade hjälpfilerna på klientsidan måste läggas till i ett anpassat klientbibliotek.
Klientlib måste:

  • Inkludera ett beroende på cq.social.scf
  • Läs in efter att handtag har lästs in
  • be ingår

Obs! Hjälpprogrammen för SCF definieras i /etc/clientlibs/social/commons/scf/helpers.js.

recommendation-more-help
5d37d7b0-a330-461b-814d-068612705ff6