3
<title>SmartPlaylist generator</title>
5
<script language="JavaScript">
14
var limitval = document.spling.limitval.value;
15
var limititem =document.spling.limititem.value;
16
var limitsort =document.spling.limitsort.value;
17
var name = document.spling.name.value;
20
var checkrule = 'both';
22
if(document.spling.anymatch.checked) {
26
if(document.spling.spl_match.checked == false) {
27
document.spling.do_limit.checked = true; /*Force user */
30
else if(document.spling.do_limit.checked == false) {
35
var splLine = "<smartplaylist name=\""+name+"\" checkrule=\""+checkrule+"\" liveupdate=\""+liveupdate+"\" limititem=\""+
36
limititem+"\" limitval=\""+limitval+"\" limitsort=\""+limitsort+"\" matchany=\""+anymatch+"\" >\n";
42
for(var i=1;i<=counter;i++) {
43
var action_field = getField(getChangedTo(i));
44
var value_field = getvalueField(getChangedTo(i));
45
evalme = "spl_field = document.spling.field_"+i+".value;";
46
evalme += "spl_action = document.spling."+action_field+"_"+i+".value;";
47
evalme += "spl_value = document.spling."+value_field+"_"+i+".value;";
49
spl_field = spl_field.substr(1);
50
splLine += " <spl action=\""+spl_action+"\" field=\""+spl_field+"\" string=\""+spl_value+"\" />\n";
52
splLine += "</smartplaylist>";
53
document.spling.FINISH.value = splLine;
57
/* Handle a change of the FIELD item
58
- Set the current ACTION
59
- Set the current value vield */
60
function xChange(init_fID, xn) {
64
if(xn) { /* We got a this. */
65
fID = xn.name.substr((xn.name.length)-1,1);
67
else { /* No this.. primitive forced */
72
eval("document.spling.INTaction_"+fID+".style.display = 'none'");
73
eval("document.spling.STRaction_"+fID+".style.display = 'none'");
74
eval("document.spling.BOOLaction_"+fID+".style.display = 'none'");
75
eval("document.spling.RATINGaction_"+fID+".style.display = 'none'");
77
eval("document.spling.RATINGvalue_"+fID+".style.display = 'none'");
78
eval("document.spling.value_"+fID+".style.display = 'none'");
80
var changedto = getChangedTo(fID);
81
var a_field = getField(changedto);
82
var v_field = getvalueField(changedto);
85
eval("document.spling."+a_field+"_"+fID+".style.display = 'inline'");
88
eval("document.spling."+v_field+"_"+fID+".style.display = 'inline'");
90
if(changedto == 'B') {
91
eval("document.spling.value_"+fID+".style.display = 'none'");
98
function getChangedTo(ID) {
100
eval("returnme = document.spling.field_"+ID+".value.substr(0,1)");
105
function getField(ChangedTo) {
106
if(ChangedTo == "S") {
109
else if(ChangedTo == "I") {
112
else if(ChangedTo == "B") {
115
else if(ChangedTo == "R") {
116
return "RATINGaction";
119
alert("Sorry, i can't handle this type ATM.. somebody would have to write code ;)\nkey: "+ChangedTo);
124
function getvalueField(ChangedTo) {
125
if(ChangedTo == "R") {
126
return "RATINGvalue";
135
/* Add a new mode.. 'Stolen' from www.quirksmode.org */
137
function moreFields()
139
counter++; /* Inc counter */
140
var newFields = document.getElementById('splmatcher').cloneNode(true);
142
newFields.style.display = 'block';
143
var newField = newFields.childNodes;
144
/* Change the name */
145
for (var i=0;i<newField.length;i++) {
146
var theName = newField[i].name
148
newField[i].name = theName + counter;
151
var insertHere = document.getElementById('writeroot');
152
insertHere.parentNode.insertBefore(newFields,insertHere);
153
xChange(counter); /* Force Change Event */
160
<body onLoad="javascript:moreFields()" bgcolor="#DEDBD6">
165
<input type="text" name="name" value="SmartPlaylist Name"><br>
170
<input type="checkbox" name="spl_match" value=1> Match
171
<input type="checkbox" name="anymatch" value=1> any
173
<div id="splmatcher" style="display: none">
174
<select name="field_" onChange="javascript:xChange(0,this)">
175
<option value="Stitle">Title</option>
176
<option value="Salbum">Album</option>
177
<option value="Sartist">Artist</option>
178
<option value="Sgenre">Genre</option>
179
<option value="Sfdesc">Description</option>
180
<option value="Scomment">Comment</option>
181
<option value="Scomposer">Composer</option>
182
<option value="Sgroup">Group</option>
183
<option value="Ibitrate">Bitrate</option>
184
<option value="Israte">Sampling Rate</option>
185
<option value="Iyear">Year</option>
186
<option value="Dchangetime">Changetime</option>
187
<option value="Itracknum">Tracknumber</option>
188
<option value="Isize">Size</option>
189
<option value="Itime">Playtime</option>
190
<option value="Daddtime">Addtime</option>
191
<option value="Iplaycount">Playcount</option>
192
<option value="Dlastplay">Last played</option>
193
<option value="Icdnum">CD Number</option>
194
<option value="Rrating">Rating</option>
195
<option value="Bcompilation">Compilation</option>
196
<option value="Ibpm">BPM</option>
199
<select name="INTaction_">
200
<option value="eq">==</option>
201
<option value="!eq">!=</option>
202
<option value="gt">></option>
203
<option value="lt"><</option>
204
<option value="range">Range (use from:to)</option>
205
<option value="!range">not Range (use from:to)</option>
208
<select name="STRaction_">
209
<option value="IS">is</option>
210
<option value="NOT_IS">is not</option>
211
<option value="CONTAINS">contains</option>
212
<option value="NOT_CONTAINS">doesn't contain</option>
213
<option value="STARTWITH">starts with</option>
214
<option value="NOT_STARTWITH">doesn't start with</option>
215
<option value="ENDWITH">ends with</option>
216
<option value="NOT_ENDWITH">doesn't end with</option>
219
<select name="BOOLaction_">
220
<option value="eq">set</option>
221
<option value="!eq">not set</option>
224
<select name="RATINGaction_">
225
<option value="eq">is</option>
226
<option value="!eq">is not</option>
227
<option value="gt">more than</option>
228
<option value="lt">less than</option>
229
<option value="range">Range (use from:to) FIXME</option>
230
<option value="!range">not Range (use from:to) FIXME</option>
233
<select name="RATINGvalue_">
234
<option value="0">no rating</option>
235
<option value="20">* star</option>
236
<option value="40">** stars</option>
237
<option value="60">*** stars</option>
238
<option value="80">**** stars</option>
239
<option value="100">***** stars</option>
242
<input name="value_">
248
<span id="writeroot"></span>
250
<a href="#" onClick="javascript:moreFields()">ADD</a>
256
<input type="checkbox" name="do_limit"> Limit to <input type=text name=limitval>
258
<select name="limititem">
259
<option value="minute">Minutes</option>
260
<option value="hour">Hours</option>
261
<option value="song">Songs</option>
262
<option value="megabyte">Mb.</option>
263
<option value="gigabyte">Gb.</option>
267
<select name="limitsort">
268
<option value="random">Random</option>
269
<option value="title">Title</option>
270
<option value="album">Album</option>
271
<option value="artist">Artist</option>
272
<option value="genre">Genre</option>
273
<option value="addtime_high">Added recent</option>
274
<option value="addtime_low">Added long ago</option>
275
<option value="playcount_high">Played often</option>
276
<option value="playcount_low">Seldom played</option>
277
<option value="lastplay_high">Played recent</option>
278
<option value="lastplay_low">Played long ago</option>
279
<option value="rating_high">Highest rating</option>
280
<option value="rating_low">Lowest rating</option>
285
<a href="#" onClick="mkspl()">Create SPL</a>
289
<textarea rows=12 cols=120 name=FINISH></textarea>