chiark / gitweb /
Macro-ize (most) <A>-based buttons
[disorder] / templates / macros.tmpl
index af62b4c1b6613e6edbf2974956e336528b676a3d..5d33446c739945810a6080dc7a99330d37153472 100644 (file)
@@ -1,5 +1,3 @@
-@discard{
-
 This file is part of DisOrder.
 Copyright (C) 2008 Richard Kettlewell
 
@@ -18,19 +16,111 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 USA
 
+
+------------------------------------------------------------------------
+Standard macros
+
+
+This file is read before any other template.  Its output is discarded
+but side effects (definitions of macros) are retained.  To override it,
+create /etc/disorder/macros.tmpl that includes this file by absolute path
+and then redefines macros as desired.
+------------------------------------------------------------------------
+
+
 @# Standard width and height of an image
 @define {width} {} {16}
 @define {height} {} {16}
 
-@# Expand to @yes for the Manage page and @no for the playing page
-@define {ifmanage} {yes no}
-         {@if {@eq {@arg{action}}{manage}}
-              {@yes}
-              {@no}}
+@# Standard <head> text
+@#  @name is the name of this page, for the <title> element
+@define {stdhead} {name}
+        {@quiethead
+<title>@label{@name.title}</title>}
 
-@# Expand to &back=manage or to nothing
-@define {back} {}
-        {@ifmanage{&amp;back=manage}{}}
+@# Non-displaying <head> text
+@define {quiethead} {}
+        {  <link rel=stylesheet
+        type="text/css"
+        href="@label{url.static}/disorder.css">}
+
+@# Standard menu
+@#   @current is the name of the current page, e.g. choosealpha, login
+@define {stdmenu} {current}
+        {  <div class=top>
+   <p class=menubar>
+@menuitem{@current}{playing}{true}
+@menuitem{@current}{recent}{true}
+@menuitem{@current}{choose}{@right{play}}
+@menuitem{@current}{manage}{true}
+@menuitem{@current}{new}{true}
+@menuitem{@current}{login}{true}
+@menuitem{@current}{help}{true}
+   </p>
+   <div class=logo>
+@menuicon{@current}{about}{true}{logosmall}
+   </div>
+  <div style="clear:both"></div>
+  </div>
+}
+
+@define {menuurl} {name}
+        {@if{@eq{name}{playing}}
+           {@url}
+           {@url?action=@name}}
+
+@# Menu entry
+@#  Used by @stdmenu
+@#  @current is the name of the current page (not necessarily the action that
+@#           got there!)
+@#  @name is the name of the menu item
+@#  @available is true if the menu item is available, else false
+@#  
+@define {menuitem} {current name available}  
+        {@if{@available}
+            {    <a @if{@eq{@current}{@name}}
+                       {class=activemenu}
+                       {class=inactivemenu}
+       href="@menuurl{@name}"
+       title="@label{menu.@q{@name}verbose}">@label{menu.@name}</a>}
+            {    <span class=invalidmenu 
+          title="@label{menu.@q{@name}verbose}">@label{menu.@name}</span>}}
+
+@# Icon-based menu entry (very similar to @menuitem)
+@#  Used by @stdmenu
+@#  @current is the name of the current page
+@#  @name is the name of the menu item
+@#  @available is true if the menu item is available, else false
+@#  @icon is the name of the icon
+@#  
+@define {menuicon} {current name available icon}  
+        {@if{@available}
+            {    <a class=menuicon
+       href="@menuurl{@name}">
+     <img @if{@eq{@current}{@name}}
+             {class=activemenu}
+             {class=inactivemenu}
+          title="@label{menu.@q{@name}verbose}"
+          alt="@label{menu.@name}"
+          src="@image{@icon}">
+    </a>}
+            {    <span class=menuicon>
+     <img @if{@eq{@current}{@name}}
+             {class=activemenu}
+             {class=inactivemenu}
+          title="@label{menu.@q{@name}verbose}"
+          alt="@label{menu.@name}"
+          src="@image{@icon@_inactive}">
+    </a>}}
+
+@# Standard footer text
+@define {credits} {}
+        {<p class=credits>
+  <a href="http://www.greenend.org.uk/rjk/disorder/"
+     title="DisOrder web site">DisOrder
+     version @version</a>
+  &copy; 2003-2008 Richard Kettlewell et al
+</p>}
 
 @# Expand to the time that @id will be played
 @#  @what is the section
@@ -54,10 +144,10 @@ USA
 @define {martist} {what track}
         {@right{play}
                {<a class=directory
-                   href="@url?action=choose&amp;directory=@urlquote{@dirname{@dirname{@track}}}"
-                   title="@label{@what.artistverbose}">@part{@track}{short}{artist}</a>}
+                   href="@url?action=choose&amp;dir=@urlquote{@dirname{@dirname{@track}}}"
+                   title="@label{playing.artistverbose}">@part{@track}{artist}{short}</a>}
                {<span class=directory
-                      title="@part{@track}{artist}@">@part{@track}{short}{artist}</span>}}
+                      title="@part{@track}{artist}">@part{@track}{artist}{short}</span>}}
 
 @# Expand to the album for @track
 @#  @what is the section
@@ -65,16 +155,22 @@ USA
 @define {malbum} {what track}
         {@right{play}
                {<a class=directory
-                   href="@url?action=choose&amp;directory=@urlquote{@dirname{@track}}"
-                   title="@label{@what.albumverbose}">@part{@track}{short}{album}</a>}
+                   href="@url?action=choose&amp;dir=@urlquote{@dirname{@track}}"
+                   title="@label{playing.albumverbose}">@part{@track}{album}{short}</a>}
                {<span class=directory
-                      title="@part{@track}{album}@">@part{@track}{short}{album}</span>}}
+                      title="@part{@track}{album}">@part{@track}{album}{short}</span>}}
 
 @# Expand to the title for @track
 @#  @what is the section
 @#  @track is the track name
 @define {mtitle} {what track}
-        {<span title="@part{@track}{title}">@part{@track}{short}{title}</span>}
+        {<span title="@part{@track}{title}">@part{@track}{title}{short}</span>}
+
+@# As @mtitle but make a link to play the track
+@#  @what is the section
+@#  @track is the track name
+@define {mtitleplay} {what track}
+        {<a title="@part{@track}{title}" href="@url?action=play&#38;track=@urlquote{@track}&#38;back=@urlquote{@thisurl}">@part{@track}{title}{short}</a>}
 
 @# Expand to the remove/scratch entry for @id
 @#  @what is the section
@@ -84,10 +180,12 @@ USA
             {<a class=imgbutton
                 href="@url?action=remove&#38;id=@id@back">
                <img class=button src="@image{remove}"
+                    width=@width height=@height
                     title="@label{@what.removeverbose}"
                     alt="@label{@what.scratch}">
              </a>}
             {<img class=button src="@image{noremove}"
+                  width=@width height=@height
                   title="@label{@what.removeverbose}"
                   alt="@label{@what.scratch}">}}
 
@@ -101,10 +199,107 @@ USA
             {<a class=imgbutton
                 href="@url?action=move&#38;id=@id&#38;delta=@delta@back">
                <img class=button src="@image{@dir}"
+                    width=@width height=@height
                     title="@label{playing.@q{@dir}verbose}"
                     alt="@label{playing.@dir}">
              </a>}
             {<img class=button src="@image{no@dir}"
-                    title="@label{playing.@q{@dir}verbose}"
-                    alt="@label{playing.@dir}">}}
-}@#
+                  width=@width height=@height
+                  title="@label{playing.@q{@dir}verbose}"
+                  alt="@label{playing.@dir}">}}
+
+@# Size of input box for preferences forms
+@define{prefsize}{}{40}
+
+@# Expand to the weight of a track.  This macro knows the default weight,
+@# and does two lookups, which is rather inelegant.
+@#  @track is the track name.
+@define{weight}{track}{@if{@eq{@pref{@track}{weight}}{}} 
+                          {90000}
+                          {@pref{@track}{weight}}}
+
+@# Expand to preference form section for a track
+@#  @index is the track number
+@#  @track is the track name
+@define {mprefs} {index track}
+        {
+   <p class="prefs_head">Preferences for <span class="prefs_track">@quote{@resolve{@track}}</span>:</p>
+   <input type=hidden name="@index@__track" value="@quote{@resolve{@track}}">
+   <table class=prefs>
+    <tr class=headings>
+     <th class="prefs_name">@label{prefs.name}</th>
+     <th class="prefs_value">@label{prefs.value}</th>
+    </tr>
+    <tr class=even>
+     <td class="prefs_name">@label{heading.title}</td>
+     <td class="prefs_value">
+      <input size=@prefsize type=text name="@index@__title"
+             value="@part{@track}{title}{display}">
+     </td>
+    </tr>
+    <tr class=odd>
+     <td class="prefs_name">@label{heading.album}</td>
+     <td class="prefs_value">
+      <input size=@prefsize type=text name="@index@__album"
+             value="@part{@track}{album}{display}">
+     </td>
+    </tr>
+    <tr class=even>
+     <td class="prefs_name">@label{heading.artist}</td>
+     <td class="prefs_value">
+      <input size=@prefsize type=text name="@index@__artist"
+             value="@part{@track}{artist}{display}">
+     </td>
+    </tr>
+    <tr class=odd>
+     <td class="prefs_name">@label{prefs.tags}</td>
+     <td class="prefs_value">
+      <input size=@prefsize type=text name="@index@__tags"
+             value="@pref{@track}{tags}">
+     </td>
+    </tr>
+    <tr class=even>
+     <td class="prefs_name">@label{prefs.weight}</td>
+     <td class="prefs_value">
+      <input size=@prefsize type=text name="@index@__weight"
+             value="@weight{@track}">
+     </td>
+    </tr>
+    <tr class=odd>
+     <td class="prefs_name">@label{prefs.random}</td>
+     <td class="prefs_value">
+      <input type=checkbox value=true
+             name="@index@__random" 
+             @if{@ne{@pref{@track}{pick_at_random}}{0}}
+                {checked}>
+      </td>
+    </tr>
+   </table>
+}
+
+@# Expand to a submit button
+@#  @text is the text to put inside the button
+@define {submit} {text}
+        {<span class=buttonouter><button class=button name=submit type=submit><span class=buttoninner>@text</span></button></span>}
+
+@# Expand to an action button
+@#  @text is the text to put inside the button
+@#  @long is the text to put in the caption
+@#  @action is the target action
+@define {actbutton} {text long action}
+        {<a class=button
+              href="@url?action=@action@back"
+              title="@long">@text</a>}
+
+@# Expands to &back=manage or to nothing depending on context;
+@# see playing.tmpl.
+@define {back} {} {}
+
+Local variables:
+mode:sgml
+sgml-always-quote-attributes:nil
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+fill-column:79
+End: