+@# 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}
+ {<button class=button name=submit type=submit>@text</button>}
+
+@# 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}
+ {<form method=POST class=button action="@url">
+ <input type=hidden name=action value="@action">
+ <input type=submit name=submit value="@text" title="@long">
+@formback@#
+ </form>}
+
+@# Used for inserting back= elements
+@define {back} {} {}
+@define {formback} {} {}
+