API -Proxy

Förutom standardfunktionerna i XSLT finns det ett API i proxymodulen som kan användas. Dessa funktioner gör det enklare att göra vissa saker, och är specifika för hur proxy-integrationer görs. De ger även tillgång till funktioner i SiteVision som är bra att ha.

Funktionerna är tillgängliga via en Java-klass som registreras som namespace i XSLT-transformationen. Standardtransformationen som används vid skapande av en ny proxymodul gör detta automatiskt, och gör namespacet "proxy" tillgängligt. Nedan redovisas vilka funktioner som finns att använda.

Funktioner:

Denna funktion tar den angivna länken, som kan vara relativ, och skriver om den i enlighet med de uppsatta reglerna för länkomskrivning. Resultatet är alltid en absolut länk oavsett om den anses vara intern eller inte.

Om länken är till en sida utanför länkomfånget används URL'en till den sida som gav upphov till HTML'en i nuvarande anrop för att göra den absolut. Om HTML'en exempelvis laddas från "http://www.somecompany.com/foo/index.html" och länken är "aboutus.html" blir alltså den resulterande länken "http://www.somecompany.com/foo/aboutus.html".

Om länken är till en sida i det angivna länkomfånget registreras den internt i proxyn och istället returneras en länk som pekar på proxymodulen. Dessa länkar startar alltid med "/sitevision/proxy". När klienten följer dessa länkar kommer proxymodulen att slå upp den registrerade länken och hämta den HTML som finns där.

Exempel

<xsl:template match="a[@href]"> <a href="{proxy:link($proxy,@href)}">En omskriven länk</a> </xsl:template>

String link(String link, boolean solo)

Denna funktion fungerar på samma sätt som ovanstående, men öppnar angiven länk i "solo"-läge om parametern solo är satt till "true", dvs endast proxymodulen utan omgivande sida visas. Detta är framförallt användbart om länken ska öppnas i nytt fönster, där man inte vill ha med navigationen och övrigt på sidan som proxymodulen finns på.

Exempel

<xsl:template match="a[@href]"> <a target="popup" href="{proxy:link($proxy,@href, true())}">En omskriven länk i ett nytt fönster</a> </xsl:template>

Den genererade länken kommer att innehålla resursens sökväg som sista del. Detta gör det möjligt att manuellt lägga till extra sökvägsdelar eller parametrar:
<script>
link = '<xsl:value-of select="proxy:link($proxy,'http://somehost/someresource.html', true())"/>';
</script>
<a href=""
onclick="javascript:window.open(link+'?someparam=somevalue');return false">Generated link</a>

String script(String script)

Gör länkomskrivning i JavaScript. Framförallt anrop till JavaScript-funktionen "open" görs om så att länken som skickas in följer de länkomskrivningsregler som är uppsatta.

Exempel

Följande exempel skriver ut ett script som öppnar en given URL i ett nytt fönster. <xsl:variable name="script">window.open("/foo.html")</xsl:variable> <script type="text/javascript"> <xsl:value-of select="proxy:script($proxy,$script)"/> </script>

String rewriteScriptMap(String parameterMap)

Gör länkomskrivning i map-parametrar i JavaScript. Framförallt används detta för Ajax-bibliotek som t.ex. jQuery.

Exempel


Följande exempel skriver om parametern url:

<xsl:template match="//script/text()"> <xsl:value-of select="proxy:rewriteScriptMap($proxy, 'url', .)"/> </xsl:template>

i följande javascript:

$.ajax({ type: "GET", url: '/Test.jsp', dataType: "html", success: function (data) { doSomething(data); } });

String rewriteScriptParameter(String parameterMap)

Gör länkomskrivning i funktionsparametrar i JavaScript. Framförallt används detta för Ajax-bibliotek som t.ex. Prototype.

Exempel


Följande exempel skriver om parametern i funktionen Ajax.Request:

<xsl:template match="//script/text()"> <xsl:value-of select="proxy:rewriteScriptParameter($proxy, 'Ajax.Request', .)"/> </xsl:template>

i följande javascript:

new Ajax.Request('/some_url')

String base()

Returnera startadressen för proxymodulen.

Exempel


Current app: <xsl:value-of select="proxy:base($proxy)"/>

String url()

Returnera nuvarande URL som processas.

Exempel


Skriv ut "base" tagg i HTML:

<base href="{proxy:base($proxy)}"/>

URL'en kan användas för att avgöra om en viss regel ska köras:
<xsl:template match="html[contains(proxy:url($proxy),'somehost')]">
Showing content from "somehost":<br/>
<xsl:apply-templates select="body"/>
</xsl:template>

 

String width()

Returnera proxymodulens bredd.

Exempel

<table width="{proxy:width($proxy)}"> <tr><td>Table using all space</td></tr> </table>

String height()

Returnera proxymodulens höjd.

Exempel

<div style="height:{proxy:width($proxy)}"> Use all space for this div. </div>

target(String target)

Sätt vilken portlet som ska ta emot anropet för efterkommande länkar. Detta kan användas för att från en proxymodul ange en annan proxymodul på samma sida.

Det är antingen namnet på proxymodulen eller dess id som ska anges. Enklast är oftast att ange namnet på modulen såsom det är angivet i sidans innehåll.

Exempel


Ett exempel på detta är att ha två proxymoduler där den ena är navigation och den andra innehåll. Navigationsmodulen anger då den andra som target på följande sätt:
<xsl:template match="/">
<xsl:value-of select="proxy:target($proxy, 'main')" />
<xsl:apply-imports/>
</xsl:template>


Alla länkar som skapas kommer att visa innehållet i den proxymodul på samma sida som har namnet "main". Navigationsmodulen kommer i detta fall aldrig att byta innehåll.

String resolve(String url)

Gör om en relativ URL till en absolut URL med hjälp av URL'en till sidan som just nu processas.

Exempel


Om sidan http://www.senselogic.se/test/foo.html just nu processas kan man göra följande:
<xsl:value-of select="proxy:resolve($proxy,'bar.html')"/>
Detta kommer att skriva ut den absoluta URL'en http://www.senselogic.se/test/bar.html

Node get(String url)

Utför en HTTP GET på angiven URL. Om URL'en är relativ kommer den först att göras absolut genom anropet resolve(url), som beskrivits ovan. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.

Exempel

Hämta titel från länkad sida och ange som "alt" på en länk: <xsl:template match="a[@href]"> <xsl:copy> <xsl:attribute name="alt"> <xsl:value-of select="proxy:get($proxy, @href)/head/title"/> </xsl:attribute> <xsl:apply-templates select="@*"/> </xsl:copy> </xsl:template>

Node post(String url)

Utför en HTTP POST mot en angiven URL. Om URL'en är relativ kommer den först att göras absolut genom anropet resolve(url), som beskrivits ovan. Eventuella parametrar till sidan som proxyn finns på kommer att skickas med som parametrar i postningen. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.

Exempel

Posta till en given URL: <xsl:template match="/"> <xsl:apply-templates select="proxy:post($proxy, 'http://somehost/form.html')"/> </xsl:template>

Node post(Node form)

Utför en HTTP POST genom att skicka det formulär som finns i angiven DOM. Alla input-fält som finns i formuläret kommer att sättas som parametrar i anropet. Metoden returnerar en DOM som motsvarar det dokument som URL'en pekar på. Denna kan sedan användas för vidare bearbetning.

Exempel


Skapa formulär som variabel, posta det, och skriv ut resultatet:
<xsl:variable name="form">
<form action="someform.html">
<input name="firstname" value="Rickard"/>
<input name="lastname" value="Oberg"/>
</form>
</xsl:variable>

<xsl:template match="/">
<xsl:apply-templates select="proxy:post($proxy, $form)"/>
</xsl:template>

String parameter(String name)

Returnera parameter från anropet till sidan där proxymodulen finns.

Exempel

Skriv ut värdet av parametern "foo": Foo: <xsl:value-of select="proxy:parameter($proxy,'foo')"/>

String attribute(String name)

Returnera attribut från anropet till sidan där proxymodulen finns.

Exempel

Skriv ut värdet av attributet "foo": Foo: <xsl:value-of select="proxy:attribute($proxy,'foo')"/>

String storedParameter(String name)

Returnera sparad parameter för nuvarande resurs som bearbetas.

Exempel

Undansparat användarnamn för nuvarande sida: <xsl:value-of select="proxy:storedParameter($proxy,"username")/>

String storedParameter(String name, String uri)

Returnera sparad parameter för resurs med angiven URI.

Exempel

Undansparat användarnamn för loginsidan: <xsl:value-of select="proxy:storedParameter($proxy,"username", "/login.html")/>

removeStoredParameters(String uri)

Ta bort sparade parametrar för angiven URI.

Exempel

Ta bort alla sparade parametrar till loginsida: <xsl:variable name="dummy" select="proxy:removeStoredParameters('/login.html')/>

logout()

Ta bort inloggningsinformation. Detta gör att efterföljande anrop kommer skapa ny session mot underliggande applikation, vilket normalt sett leder till att användaren måste logga in igen.

Exempel


Logga ut om "logout" parameter angivits:
<xsl:if test="proxy:parameter($proxy,'logout')">
<xsl:variable name="dummy" select="proxy:logout($proxy)"/>
</xsl:if>