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

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 definition på serversidan. Det är också möjligt för utvecklare att skapa anpassade hjälpprogram.

De anpassade SCF-hjälprarna 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 ingen kontext 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: String

    (Valfritt) Standard är den tomma strängen

  • maxLength: Number

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

  • maxWords: Number

    (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: String

    (Valfritt) Standard är den tomma strängen.

  • numChars: Number

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

  • moreText: String

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

  • ellipsesText: String

    (Valfritt) Den text som ska visas anger att det finns dold text. Standardvärdet är "…".

  • safeString: Boolean

    (Valfritt) Ett booleskt värde som anger om Handlebars.SafeString() ska användas 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: Number

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

  • format: String

    (Valfritt) Datumformatet som ska användas. Standardvärdet är "YYYY-MM-DDTHH:mm:ss.sssZoch 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: String

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

  • rvalue: String

    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: String

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

  • läge: String

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

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: String

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

  • standard: String

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

  • kommentar: String

    (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.

Med den här metoden kan resursen 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.

Det finns bara ett urval av webbgruppskomponenter att ta med.

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 du inte anger en relativ sökväg)

    Använd this för att skicka det aktuella sammanhanget.

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

  • resourceType: String

    (Valfritt) Resurstypen är som standard resurstyp från kontext.

  • mall: String

    Sökväg till komponentskript.

  • bana: String

    (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"}}

Innehåller 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. Om flera inkluderingar av olika typer, till exempel js och css, ska 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: String

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

  • tema: String

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

  • js: String

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

  • css: String

    (Valfritt) En lista med kommaavgränsade klientbibliotekskategorier. 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: Number

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

  • daysCutoff: Number

    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! Den här hjälpen ä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! Den här hjälpen är inte en validerare och ska inte användas för att skriva åtgärdbara attribut (href, src, händelsehanterare).

Parametrar parameters-10

  • kontext: Object

    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! Den här hjälpen är inte en validerare och ska inte användas för att skriva till godtycklig JavaScript.

Parametrar parameters-11

  • kontext: Object

    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! Den här hjälpen kan returnera en tom sträng.

Parametrar parameters-12

  • kontext: Object

    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 ( name av hjälpfunktionen), följt av noll eller flera blankstegsavgränsade parametrar.

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

  • 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, till exempel 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*}} och {{/*name*}}.

  • Handtag ger en slutgiltig parameter till hjälpredor som heter "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 på serversidan och 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 när Hanterarfält har lästs in.
  • be ingår.

Obs! SCF-hjälprarna definieras i /etc/clientlibs/social/commons/scf/helpers.js.

recommendation-more-help
81e2cd9d-0789-409d-b87c-2a8ce4f28791