Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/recipe-fiddle.git
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:r="http://www.whitemagicsoftware.com/software/recipe"
  xmlns:string="http://symphony-cms.com/functions"
  xmlns:str="http://exslt.org/strings"
  exclude-result-prefixes="r str string">

<xsl:import href="../../common/xsl/main.xsl"/>

<xsl:param name="editable">false</xsl:param>
<xsl:param name="account-id">0</xsl:param>
<xsl:param name="account-label"><xsl:value-of select="$DEFAULT_USER_NAME" /></xsl:param>
<xsl:param name="cookie"></xsl:param>

<xsl:template match="//recipe-books">
  <form name="recipe-book"
    id="recipe-book" method="post"
    enctype="multipart/form-data"
    class="input-book">
    <input type="hidden" id="downloadToken" name="downloadToken" value="0" />

    <!-- Values are filled in during StripeCheckout's token callback. -->
    <input type="hidden" id="purchaseId" name="purchaseId" value="" />
    <input type="hidden" id="purchaseEmail" name="purchaseEmail" value="" />
    <input type="hidden" id="purchaseAmount" name="purchaseAmount" value="" />

    <!-- Value is changed to "purchase-book" during purchase. -->
    <input type="hidden" id="command" name="command" value="create-book" />

    <xsl:if test="$editable">
      <xsl:apply-templates select="recipes" />
      <xsl:apply-templates select="books" />
    </xsl:if>
  </form>
</xsl:template>

<xsl:template name="page-title">Book</xsl:template>

<xsl:template match="recipes">
  <div id="book-recipe-list">
    <fieldset>
      <legend>
        <span class="enumeration-numeral">1</span><xsl:text> </xsl:text>
        <span class="enumeration-text">Choose Recipes</span>
      </legend>
      <select name="recipe-list[]" id="recipes" class="recipe-select"
              multiple="multiple" size="15" tabindex="1">
        <xsl:apply-templates />
      </select>

      <p class="tip">
      <b>Tip:</b> Use ctrl+click to deselect a recipe.
      </p>
    </fieldset>
  </div>
</xsl:template>

<xsl:template match="recipe">
<!-- Ignore recipes entitled 'Recipe Name': they are incomplete. -->
<xsl:if test="title!='Recipe Name'">
  <option value="{@id}" title="{title}" selected="selected"><xsl:apply-templates select="title" /></option>
</xsl:if>
</xsl:template>

<xsl:template match="books">
  <div id="book-settings">
    <fieldset>
      <legend>
        <span class="enumeration-numeral">2</span>
        <xsl:text> </xsl:text>
        <span class="enumeration-text">Apply Features</span>
      </legend>

      <label>
      <span class="enumeration-text">Author</span><br />
      <input type="text" name="book-author" value=""
             autofocus="autofocus" autocomplete="on" tabindex="2" />
      </label>
      <br />

      <label>
      <span class="enumeration-text">Title</span><br />
      <input type="text" name="book-title" value=""
             autocomplete="on" tabindex="3" />
      </label>
      <br />

      <xsl:apply-templates select="/recipe-books/themes" />
      <br />

      <label>
      <span class="enumeration-text">Cover (optional)</span><br />
      <input type="file" name="cover-image" id="cover-image"
             size="25" tabindex="4" />
      </label>

    </fieldset>
  </div>

  <div id="book-create">
    <fieldset>
      <legend>
        <span class="enumeration-numeral">3</span>
        <xsl:text> </xsl:text>
        <span class="enumeration-text">Preview Book</span>
      </legend>

      <button title="Preview Book" type="submit"
        id="create-book" class="create-button"><img
        alt="Preview Book" width="60" height="60"
        src="{$BASE_ICON}book/create.png" /></button>
    </fieldset>
  </div>
  <div id="book-purchase">
    <fieldset>
      <legend>
        <span class="enumeration-numeral">4</span>
        <xsl:text> </xsl:text>
        <span class="enumeration-text">Purchase Book</span>
      </legend>

      <button title="Purchase Book" type="submit"
        id="purchase-book" class="purchase-button"><img
        alt="Purchase Book" width="60" height="60"
        src="{$BASE_ICON}book/create.png" /></button>
    </fieldset>
  </div>
</xsl:template>

<xsl:template match="book">
  <option value="{@id}">
    <xsl:attribute name="value"><xsl:value-of select="@id" /></xsl:attribute>
    <xsl:apply-templates select="title" />
  </option>
</xsl:template>

<!--
 | Truncates the title to avoid pushing steps 3 and 4 to the bottom.
 +-->
<xsl:template match="title">
<xsl:variable name="title">
  <xsl:choose>
    <xsl:when test="string-length(.) &gt; 35">
      <xsl:value-of select="substring(.,1,35)" />...
    </xsl:when>
    <xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
  </xsl:choose>
</xsl:variable>
<xsl:value-of select="normalize-space($title)" />
</xsl:template>

<xsl:template match="themes">
  <label><span class="enumeration-text">Theme</span><br />
  <select name="book-theme" id="book-theme" tabindex="5">
    <xsl:apply-templates />
  </select>
  </label>
</xsl:template>

<xsl:template match="theme">
  <option value="{@id}"><xsl:apply-templates /></option>
</xsl:template>

<xsl:template name="purchase">
  <script>
  function purchaseBook( e ) {
    var handler = StripeCheckout.configure({
      key: '<xsl:value-of select="$PURCHASE_KEY_PUBLIC" />',
      image: '',
      name: 'Recipe Fiddle',
      description: 'Electronic Recipe Book',
      billingAddress: false,
      shippingAddress: false,
      allowRememberMe: false,
      email: '<xsl:value-of select="//recipe-books/contact/email" />',
      token: function(token, args) {

        $('#purchaseId').val( token.id );
        $('#purchaseEmail').val( token.email );
        $('#purchaseAmount').val( amountCalculate() );
        $('#command').val( 'purchase-book' );
        createDownloadToken();

        $('#recipe-book').submit();
        createBook();
      },
      closed: function() {
        // Allow payment after closing the payment dialog.
        attachBookHandlers();
      },
    });

    handler.open({
      name: 'Recipe Fiddle',
      description: 'Recipe Book',
      panelLabel: 'Purchase for {{amount}}',
      amount: amountCalculate(),
    });

    e.preventDefault();
  }
  </script>
</xsl:template>

<xsl:template name="html-head">
  <link rel="stylesheet" type="text/css" href="{$BASE_CSS_APP}book.css" />
</xsl:template>

<xsl:template name="body-app-footer">
  <xsl:call-template name="include-client-framework" />
  <script type="text/javascript" src="{$BASE_JAVASCRIPT}rz.book.min.js" charset="utf-8"></script>
  <script src="//checkout.stripe.com/checkout.js"></script>
  <xsl:call-template name="purchase" />
</xsl:template>

</xsl:stylesheet>