<body>
<a name="top"/>
+<!--#if expr='"$QUERY_STRING" = /limit=([^&]+)/' -->
+ <!--#set var="limit" value="$1" -->
+<!--#else -->
+ <!--#set var="limit" value="10" -->
+<!--#endif -->
+
+<!--#if expr='"$QUERY_STRING" = /offset=([^&]+)/' -->
+ <!--#set var="offset" value="$1" -->
+<!--#else -->
+ <!--#set var="offset" value="0" -->
+<!--#endif -->
+
<!--#if expr='"$QUERY_STRING" = /service=([^&]+)/' -->
<!--#set var="service" value="$1" -->
+<!--#else -->
+ <!--#set var="service" value="" -->
+<!--#endif -->
+
+<!--#if expr='"$QUERY_STRING" = /method=([^&]+)/' -->
+ <!--#set var="method" value="$1" -->
<!--#endif -->
<!--#if expr="$QUERY_STRING = /all=on/" -->
<!--#if expr="$QUERY_STRING = /param=%22([^&]+)%22/" -->
<!--#set var="param" value="$1" -->
+<!--#else -->
+ <!--#set var="param" value="" -->
<!--#endif -->
- <xsl:if test="not(res:content)">
+ <xsl:if test="not(res:content/res:response)">
<br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/>
</xsl:if>
this.param.value = "\"" + this.param.value + "\"";
if (this.all.checked) this.method.value = "opensrf.system.method.all";
'>
- <xsl:if test="not(res:content)">
+ <xsl:if test="not(res:content/res:response)">
<xsl:attribute name="style">
<xsl:value-of select="'text-align:center;'"/>
</xsl:attribute>
</xsl:if>
Application:
- <input name="service" type="text" value='<!--#echo var="service" -->'>
- <xsl:if test="not(res:content)">
- <xsl:attribute name="value">
- <xsl:value-of select="''"/>
- </xsl:attribute>
- </xsl:if>
- </input> 
+ <input name="service" type="text" value='<!--#echo var="service" -->'/> 
API Method Name Regex:
<input name="param" type="text" value='<!--#echo var="param" -->'>
<xsl:if test="'<!--#echo var="all" -->' = 'true'">
<xsl:value-of select="'true'"/>
</xsl:attribute>
</xsl:if>
- <xsl:if test="'<!--#echo var="param" -->' = '(none)'">
- <xsl:attribute name="value">
- <xsl:value-of select="''"/>
- </xsl:attribute>
- </xsl:if>
</input> 
- All Methods
+ All Methods (Use with care!)
<input
name="all"
type="checkbox"
<button name="method" value="opensrf.system.method">Find 'em</button>
</form>
- <xsl:if test="res:content">
+ <xsl:if test="res:content/res:response">
<hr/>
<xsl:apply-templates select="res:content/res:response"/>
this.param.value = "\"" + this.param.value + "\"";
if (this.all.checked) this.method.value = "opensrf.system.method.all";
'>
- <xsl:if test="not(res:content)">
+ <xsl:if test="not(res:content/res:response)">
<xsl:attribute name="style">
<xsl:value-of select="'text-align:center;'"/>
</xsl:attribute>
</xsl:if>
Application:
- <input name="service" type="text" value='<!--#echo var="service" -->'>
- <xsl:if test="not(res:content)">
- <xsl:attribute name="value">
- <xsl:value-of select="''"/>
- </xsl:attribute>
- </xsl:if>
- </input> 
+ <input name="service" type="text" value='<!--#echo var="service" -->'/> 
API Method Name Regex:
<input name="param" type="text" value='<!--#echo var="param" -->'>
<xsl:if test="'<!--#echo var="all" -->' = 'true'">
<xsl:value-of select="'true'"/>
</xsl:attribute>
</xsl:if>
- <xsl:if test="'<!--#echo var="param" -->' = '(none)'">
- <xsl:attribute name="value">
- <xsl:value-of select="''"/>
- </xsl:attribute>
- </xsl:if>
</input> 
- All Methods
+ All Methods (Use with care!)
<input
name="all"
type="checkbox"
</xsl:template>
<xsl:template match="res:api_name">
+ API Level: <xsl:value-of select="../res:api_level/text()"/> / Method:
<a>
<xsl:attribute name="href">#<xsl:value-of select="./text()"/></xsl:attribute>
<xsl:value-of select="./text()"/>
</xsl:template>
<xsl:template match="res:response">
- <xsl:if test="count(//res:api_name) > 1">
- <h1>Method Index</h1>
- <xsl:apply-templates select="//res:api_name"/>
-
- <h1>Method Definitions</h1>
- </xsl:if>
-
- <xsl:apply-templates select="res:hash/res:pair[res:key/text()='payload']/res:value/res:array/res:datum/res:Object"/>
+ <xsl:choose>
+ <xsl:when test="count(//res:api_name) > 1">
+ <h1>Matching Methods</h1>
+ <xsl:apply-templates select="//res:api_name">
+ <xsl:sort select="text()"/>
+ </xsl:apply-templates>
+
+ <h1>Method Definitions</h1>
+ </xsl:when>
+ <xsl:when test="count(//res:api_name) = 0">
+ <h1><i>No Matching Methods Found</i></h1>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:apply-templates select="res:hash/res:pair[res:key/text()='payload']/res:value/res:array/res:datum/res:Object">
+ <xsl:sort select="res:api_name/text()"/>
+ </xsl:apply-templates>
</xsl:template>
<tr>
<td>
<table class="params">
+ <tr>
+ <td class="label params">Position:</td>
+ <td class="value params"><xsl:value-of select="position()"/></td>
+ </tr>
<xsl:apply-templates select="res:pair[res:key/text()='name']"/>
<xsl:apply-templates select="res:pair[res:key/text()='desc']"/>
<xsl:apply-templates select="res:pair[res:key/text()='type']"/>
Parameters:</td>
</tr>
</xsl:if>
- <xsl:apply-templates select="res:params/res:hash"/>
+ <xsl:apply-templates select="res:params/res:hash">
+ <xsl:sort select="position()"/>
+ </xsl:apply-templates>
<xsl:if test="res:return">
<tr>
<td class="label">Returns:</td>
<!--#if expr="$QUERY_STRING = /service=[^&]+/" -->
<!--#if expr="$QUERY_STRING = /param=%22[^&]+%22/" -->
<content xmlns="http://example.com/test">
- <!--#include virtual="/restgateway?${QUERY_STRING}"-->
+ <!--#include virtual="/restgateway?${QUERY_STRING}"-->
+ <!-- virtual='/restgateway?service=$service&method=$method¶m="$param"¶m=$limit¶m=$offset'-->
</content>
<!--#endif -->
<!--#if expr="$QUERY_STRING = /all=on/" -->
<content xmlns="http://example.com/test">
- <!--#include virtual="/restgateway?${QUERY_STRING}"-->
+ <!--#include virtual="/restgateway?${QUERY_STRING}"-->
+ <!-- virtual='/restgateway?service=$service&method=$method¶m=""¶m=$limit¶m=$offset' -->
</content>
<!--#endif -->
<!--#endif -->
my $self = shift;
my $client = shift;
my $method = shift;
+ my $limit = shift;
+ my $offset = shift;
$method = undef if ($self->api_name =~ /all$/o);
+ my ($seen,$returned) = (0,0);
for my $api_level ( reverse(1 .. $#_METHODS) ) {
for my $api_name ( sort keys %{$_METHODS[$api_level]} ) {
- if (!$_METHODS[$api_level]{$api_name}{remote}) {
- if (defined($method)) {
- if ($api_name =~ $method) {
- $client->respond( $_METHODS[$api_level]{$api_name} );
+ if (!$offset || $offset < $seen) {
+ if (!$_METHODS[$api_level]{$api_name}{remote}) {
+ if (defined($method)) {
+ if ($api_name =~ $method) {
+ if (!$limit || $returned < $limit) {
+ $client->respond( $_METHODS[$api_level]{$api_name} );
+ $returned++;
+ }
+ }
+ } else {
+ if (!$limit || $returned < $limit) {
+ $client->respond( $_METHODS[$api_level]{$api_name} );
+ $returned++;
+ }
}
- } else {
- $log->debug( "Returning definition for method [$api_name]", INTERNAL );
- $client->respond( $_METHODS[$api_level]{$api_name} );
- $log->debug( "responed with definition for method [$api_name]", INTERNAL );
}
}
+ $seen++;
}
}