1<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1"%> 2<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 3 4<%--@elvariable id="model" type="java.util.Map"--%> 5 6<html><head> 7<%@ include file="head.jsp" %> 8<%@ include file="jquery.jsp" %> 9 10<c:if test="${not model.updateNowPlaying}"> 11 <meta http-equiv="refresh" content="180;URL=nowPlaying.view?"> 12</c:if> 13 <c:choose> 14 <c:when test="${model.customScrollbar}"> 15 <link href="<c:url value="/style/customScrollbar.css"/>" rel="stylesheet"> 16 <script type="text/javascript" src="<c:url value="/script/jquery.mousewheel.min.js"/>"></script> 17 <script type="text/javascript" src="<c:url value="/script/jquery.mCustomScrollbar.concat.min.js"/>"></script> 18 </c:when> 19 <c:otherwise> 20 <link href="<c:url value="/style/customScrollbarAuto.css"/>" rel="stylesheet"> 21 </c:otherwise> 22 </c:choose> 23 <script type="text/javascript" src="<c:url value="/script/scripts.js"/>"></script> 24 <script type="text/javascript" src="<c:url value="/dwr/engine.js"/>"></script> 25 <script type="text/javascript" src="<c:url value="/dwr/interface/starService.js"/>"></script> 26 <script type="text/javascript" src="<c:url value="/dwr/interface/lovedTrackService.js"/>"></script> 27 <script type="text/javascript" src="<c:url value="/dwr/interface/multiService.js"/>"></script> 28 <script type="text/javascript" src="<c:url value="/dwr/interface/playlistService.js"/>"></script> 29 30 <script type="text/javascript" src="<c:url value="/script/jquery-migrate-1.2.1.min.js"/>"></script> 31 <script type='text/javascript' src="<c:url value="/script/jquery.scrollTo-1.4.2.js"/>"></script> 32 <script type='text/javascript' src="<c:url value="/script/jquery.dropdownReplacement-0.5.3.js"/>"></script> 33 <script type="text/javascript" src="<c:url value="/script/fancyzoom/FancyZoom.js"/>"></script> 34 <script type="text/javascript" src="<c:url value="/script/fancyzoom/FancyZoomHTML.js"/>"></script> 35 <script type="text/javascript" src="<c:url value="/script/lightview/lightview.js"/>"></script> 36 <link rel="stylesheet" type="text/css" href="<c:url value="/style/lightview/lightview.css"/>"></script> 37 38 <style type="text/css"> 39 .coverart { float: left; padding-left:0px; padding-right:5px; padding-bottom:10px } 40 41 .maincontrol .fa { 42 padding: 2px; 43 } 44 45 </style> 46 <link rel="stylesheet" href="<c:url value="/style/jquery.dropdownReplacement.css"/>" type="text/css"> 47</head> 48<body class="mainframe bgcolor1" onload="init();" > 49 50<div id="content_main" class="content_main"> 51<!-- CONTENT --> 52 53<madsonic:url value="createShare.view" var="shareUrl"> 54 <madsonic:param name="id" value="${model.dir.id}"/> 55</madsonic:url> 56<madsonic:url value="download.view" var="downloadUrl"> 57 <madsonic:param name="id" value="${model.dir.id}"/> 58</madsonic:url> 59<madsonic:url value="appendPlaylist.view" var="appendPlaylistUrl"> 60 <madsonic:param name="id" value="${model.dir.id}"/> 61</madsonic:url> 62 63 64<c:if test="${model.dir.album}"> 65 <script type="text/javascript"> 66 $(document).ready(function() { 67 $("#moreActions").dropdownReplacement({selectCssWidth: 190, optionsDisplayNum: 10, onSelect : function(value, text, selectIndex){ actionSelected(value); }}); 68 }); 69 </script> 70</c:if> 71 72<script type="text/javascript" language="javascript"> 73 function init() { 74 75 setupZoom('<c:url value="/"/>'); 76 77 $("#dialog-select-playlist").dialog({resizable: true, width:450, height:400, modal: false, autoOpen: false, 78 buttons: { 79 "<fmt:message key="common.cancel"/>": function() { 80 $(this).dialog("close"); 81 } 82 }}); 83 84 RefreshMediaType(); 85 86 <c:if test="${model.dir.mediaType ne 'ALBUM'}"> 87 <c:if test="${model.showArtistInfo}"> 88 loadArtistInfo(); 89 </c:if> 90 </c:if> 91 92 <c:if test="${model.dir.mediaType eq 'ALBUM'}"> 93 <c:if test="${model.showArtistInfo}"> 94 loadAlbumInfo(); 95 </c:if> 96 </c:if> 97 98 loadArtistTopTracks(); 99 100 } 101 102 function loadArtistInfo() { 103 multiService.getMainArtistInfo('${model.dir.id}', 8, function (artistInfo) { 104 105 if (artistInfo.similarArtists.length > 0) { 106 var html = ""; 107 for (var i = 0; i < artistInfo.similarArtists.length; i++) { 108 html += "<a href='main.view?id=" + artistInfo.similarArtists[i].mediaFileId + "' target='main'>" + 109 escapeHtml(artistInfo.similarArtists[i].artistName) + "</a>"; 110 if (i < artistInfo.similarArtists.length - 1) { 111 html += " <span class='similar-artist-divider'><img src='icons/default/sep.png'></span> "; 112 } 113 } 114 $("#similarArtists").append(html); 115 $("#similarArtists").show(); 116 $("#similarArtistsTitle").show(); 117 $("#similarArtistsRadio").show(); 118 $("#placeholder").show(); 119 } 120 121 if (artistInfo.artistBio && artistInfo.artistBio.biography) { 122 $("#artistBio").append("<img src='<c:url value='/icons/default/artist.png'/>' style='width:16px;padding-right:4px'>"); 123 $("#artistBio").append(artistInfo.artistBio.biography); 124 $("#artistBio").show(); 125 126 if (artistInfo.artistBio.mediumImageUrl) { 127 $("#artistImage").attr("src", artistInfo.artistBio.largeImageUrl); 128 $("#artistImageZoom").attr("href", artistInfo.artistBio.largeImageUrl); 129 $("#artistImage").attr("src", artistInfo.artistBio.smallImageUrl); 130 $("#artistImage").show(); 131 } 132 } 133 }); 134 } 135 136 function loadAlbumInfo() { 137 138 multiService.getAlbumInfo('${model.dir.id}', 8, function (albumInfo) { 139 140 var artistInfo = albumInfo.artistInfo; 141 142 if (artistInfo.similarArtists.length > 0) { 143 var html = ""; 144 for (var i = 0; i < artistInfo.similarArtists.length; i++) { 145 html += "<a href='main.view?id=" + artistInfo.similarArtists[i].mediaFileId + "' target='main'>" + 146 escapeHtml(artistInfo.similarArtists[i].artistName) + "</a>"; 147 if (i < artistInfo.similarArtists.length - 1) { 148 html += " <span class='similar-artist-divider'><img src='icons/default/sep.png'></span> "; 149 } 150 } 151 $("#similarArtists").append(html); 152 $("#similarArtists").show(); 153 $("#similarArtistsTitle").show(); 154 $("#similarArtistsRadio").show(); 155 $("#placeholder").show(); 156 } 157 158 if (artistInfo.artistBio && artistInfo.artistBio.biography) { 159 $("#artistBio").append("<img src='<c:url value='/icons/default/artist.png'/>' style='width:16px;padding-right:4px'>"); 160 $("#artistBio").append(artistInfo.artistBio.biography); 161 $("#artistBio").show(); 162 163 if (artistInfo.artistBio.mediumImageUrl) { 164 $("#artistImage").attr("src", artistInfo.artistBio.largeImageUrl); 165 $("#artistImageZoom").attr("href", artistInfo.artistBio.largeImageUrl); 166 $("#artistImage").attr("src", artistInfo.artistBio.smallImageUrl); 167 $("#artistImage").show(); 168 } 169 } 170 171 if (albumInfo.notes) { 172 $("#albumBio").append("<img src='<c:url value='/icons/default/home.png'/>' style='width:16px;padding-right:4px'>"); 173 $("#albumBio").append(albumInfo.notes); 174 $("#albumBio").show(); 175 } 176 }); 177 } 178 179 function loadArtistTopTracks() { 180 multiService.getTopTrackInfo('${model.dir.id}', function (topTrackInfo) { 181 if (topTrackInfo != null) { 182 $("#topTrackResult").append("(" + topTrackInfo.topPlayedfound + "|" + topTrackInfo.toplastFMfound + ")"); 183 $("#playTopTrack").stop(1,1).fadeIn(500); 184 $("#addTopTrack").stop(1,1).fadeIn(500); 185 } 186 }); 187 } 188 189 function actionSelected(id) { 190 var selectedIndexes = getSelectedIndexes(); 191 192 if (id == "top") { 193 return; 194 } else if (id == "selectAll") { 195 selectAll(true); 196 } else if (id == "selectNone") { 197 selectAll(false); 198 } else if (id == "share" && selectedIndexes != "") { 199 parent.frames.main.location.href = "${shareUrl}&" + selectedIndexes; 200 } else if (id == "download" && selectedIndexes != "") { 201 location.href = "${downloadUrl}&" + getSelectedIndexes(); 202 } else if (id == "addNext" && selectedIndexes != "") { 203 onAddSelectedNext(); 204 } else if (id == "addLast" && selectedIndexes != "") { 205 onAddSelectedLast(); 206 } else if (id == "appendPlaylist" && selectedIndexes != "") { 207 onAppendPlaylist(); 208 } else if (id == "savePlaylist") { 209 onSavePlaylist(); 210 } else if (id == "savePlaylistNamed") { 211 onSavePlaylistNamed(); 212 } 213 $("#moreActions").prop("selectedIndex", 0); 214 } 215 216 function getSelectedIndexes() { 217 var result = ""; 218 for (var i = 0; i < ${fn:length(model.children)}; i++) { 219 var checkbox = $("#songIndex" + i); 220 if (checkbox != null && checkbox.is(":checked")) { 221 result += "i=" + i + "&"; 222 } 223 } 224 return result; 225 } 226 227 function selectAll(b) { 228 for (var i = 0; i < ${fn:length(model.children)}; i++) { 229 var checkbox = $("#songIndex" + i); 230 if (checkbox != null) { 231 if (b) { 232 checkbox.attr("checked", "checked"); 233 } else { 234 checkbox.removeAttr("checked"); 235 } 236 } 237 } 238 } 239 240 function toggleStar(mediaFileId, element) { 241 starService.star(mediaFileId, !$(element).hasClass("fa-star")); 242 $(element).toggleClass("fa-star fa-star-o starred"); 243 } 244 245 function toggleLoved(mediaFileId, element) { 246 lovedTrackService.love(mediaFileId, !$(element).hasClass("fa-heart")); 247 $(element).toggleClass("fa-heart fa-heart-o loved"); 248 } 249 250 function onAppendPlaylist() { 251 playlistService.getWritablePlaylists(playlistCallback); 252 } 253 254 function playlistCallback(playlists) { 255 $("#dialog-select-playlist-list").empty(); 256 for (var i = 0; i < playlists.length; i++) { 257 var playlist = playlists[i]; 258 $("<p class='dense'><b><a href='#' onclick='appendPlaylist(" + playlist.id + ")'>" + playlist.name + "</a></b></p>").appendTo("#dialog-select-playlist-list"); 259 } 260 $("#dialog-select-playlist").dialog("open"); 261 } 262 263 function appendPlaylist(playlistId) { 264 $("#dialog-select-playlist").dialog("close"); 265 266 var mediaFileIds = new Array(); 267 for (var i = 0; i < ${fn:length(model.children)}; i++) { 268 var checkbox = $("#songIndex" + i); 269 if (checkbox && checkbox.is(":checked")) { 270 mediaFileIds.push($("#songId" + i).html()); 271 } 272 } 273 playlistService.appendToPlaylist(playlistId, mediaFileIds, function (){}); 274 parent.main.location.href = "playlist.view?id=" + playlistId; 275 } 276 277 // -------------------------------------------- 278 function onSavePlaylist() { 279 selectAll(true); 280 var mediaFileIds = new Array(); 281 for (var i = 0; i < "${fn:length(model.children)}"; i++) { 282 var checkbox = $("#songIndex" + i); 283 if (checkbox && checkbox.is(":checked")) { 284 mediaFileIds.push($("#songId" + i).html()); 285 } 286 } 287 288 playlistService.createPlaylistForMain(mediaFileIds, null, function (playlistId) { 289 // parent.left.updatePlaylists(); 290 parent.main.location.href = "playlist.view?id=" + playlistId; 291 $().toastmessage("showSuccessToast", "<fmt:message key="playlist.toast.saveasplaylist"/>"); 292 }); 293 } 294 295 // -------------------------------------------- 296 function onSavePlaylistNamed() { 297 298 selectAll(true); 299 var mediaFileIds = new Array(); 300 var PlaylistName = "${model.artist} - ${model.album}"; 301 for (var i = 0; i < ${fn:length(model.children)}; i++) { 302 var checkbox = $("#songIndex" + i); 303 if (checkbox && checkbox.is(":checked")) { 304 mediaFileIds.push($("#songId" + i).html()); 305 } 306 } 307 308 playlistService.createPlaylistForMain(mediaFileIds, PlaylistName, function (playlistId) { 309 // parent.left.updatePlaylists(); 310 parent.main.location.href = "playlist.view?id=" + playlistId; 311 $().toastmessage("showSuccessToast", "<fmt:message key="playlist.toast.saveasplaylist"/>"); 312 }); 313 } 314 315 // -------------------------------------------- 316 function onAddSelectedNext() { 317 var mediaFileIds = new Array(); 318 for (var i = 0; i < ${fn:length(model.children)}; i++) { 319 var checkbox = $("#songIndex" + i); 320 if (checkbox && checkbox.is(":checked")) { 321 mediaFileIds.push($("#songId" + i).html()); 322 } 323 } 324 parent.playQueue.onAddSelectedNext(mediaFileIds); 325 $().toastmessage("showSuccessToast", "added next to PlayQueue"); 326 } 327 328 // -------------------------------------------- 329 function onAddSelectedLast() { 330 var mediaFileIds = new Array(); 331 for (var i = 0; i < ${fn:length(model.children)}; i++) { 332 var checkbox = $("#songIndex" + i); 333 if (checkbox && checkbox.is(":checked")) { 334 mediaFileIds.push($("#songId" + i).html()); 335 } 336 } 337 parent.playQueue.onAddSelectedLast(mediaFileIds); 338 $().toastmessage("showSuccessToast", "added last to PlayQueue"); 339 } 340 341 // -------------------------------------------- 342 function onPlayAll() { 343 344 var mediaFileIds = new Array(); 345 ${model.ids}.forEach(function(entry) { 346 mediaFileIds.push(entry); 347 }); 348 parent.playQueue.onPlayAll(mediaFileIds); 349 $().toastmessage("showSuccessToast", "Play all entries"); 350 } 351 352 // -------------------------------------------- 353 function onAddAll() { 354 355 var mediaFileIds = new Array(); 356 ${model.ids}.forEach(function(entry) { 357 mediaFileIds.push(entry); 358 }); 359 parent.playQueue.onAddAll(mediaFileIds); 360 $().toastmessage("showSuccessToast", "Add all entries"); 361 } 362 363 364 // -------------------------------------------- 365 function onPlayRandom() { 366 367 var mediaFileIds = new Array(); 368 ${model.ids}.forEach(function(entry) { 369 mediaFileIds.push(entry); 370 }); 371 372 // parent.playQueue.onAddAll(mediaFileIds); 373 parent.playQueue.onPlayRandomAll(mediaFileIds, 30); 374 $().toastmessage("showSuccessToast", "Play Random"); 375 } 376 377 // -------------------------------------------- 378 function PlayTopTrack() { 379 380 var mediaFileIds = new Array(); 381 ${model.ids}.forEach(function(entry) { 382 mediaFileIds.push(entry); 383 }); 384 parent.playQueue.onPlayTopTrack("${model.artist}"); 385 $().toastmessage("showSuccessToast", "Play ${model.topPlayedfound} Top-Tracks"); 386 } 387 388 // -------------------------------------------- 389 function AddTopTrack() { 390 391 var mediaFileIds = new Array(); 392 ${model.ids}.forEach(function(entry) { 393 mediaFileIds.push(entry); 394 }); 395 parent.playQueue.onAddTopTrack("${model.artist}"); 396 $().toastmessage("showSuccessToast", "Add ${model.topPlayedfound} Top-Tracks"); 397 } 398 399 400 function playSimilar() { 401 parent.playQueue.onPlaySimilar(${model.dir.id}, 50); 402 $().toastmessage("showSuccessToast", "Play Similar Artist"); 403 } 404 405 406 // -------------------------------------------- 407 function onToastmessage(type, text) { 408 $().toastmessage(type, text); 409 } 410 411 412 // -------------------------------------------- 413 function showAllAlbums() { 414 $("#showAllButton").hide(); 415 $(".coverart").show(); 416 } 417 418function RefreshMediaType() { 419 420// console.log("--RefreshGUI--"); 421 var mediatype = document.getElementsByName("mediatype"); 422 for (var i=0; i < mediatype.length; i++) { 423 if (mediatype[i].checked == true) { 424 // console.log("The " + (i + 1) + ". radio button is checked"); 425 } 426 } 427 if ("${model.dir.mediaType}" == "MULTIARTIST") { mediatype[0].checked=true; } 428 if ("${model.dir.mediaType}" == "ARTIST") { mediatype[1].checked=true; } 429 if ("${model.dir.mediaType}" == "DIRECTORY") { mediatype[2].checked=true; } 430 if ("${model.dir.mediaType}" == "VIDEOSET") { mediatype[3].checked=true; } 431 if ("${model.dir.mediaType}" == "ALBUMSET") { mediatype[4].checked=true; } 432 if ("${model.dir.mediaType}" == "ALBUM") { mediatype[5].checked=true; } 433 if ("${model.dir.mediaTypeOverride}"=="false") { mediatype[6].checked=true; } 434 } 435</script> 436 437<c:if test="${model.updateNowPlaying}"> 438 <script type="text/javascript" language="javascript"> 439 // Variable used by javascript in playlist.jsp 440 var updateNowPlaying = true; 441 </script> 442</c:if> 443 444 <h1> 445 446 <a id="artistImageZoom" rel="zoom" href="javascript:void(0)"> 447 <img id="artistImage" class="circle" alt="" src="<c:url value="/icons/default/default_artist_alpha.png"/>" style="max-width:48px; max-height:48px"> 448 </a> 449 450 451 <span class="icon-wrapper"> 452 <i class="fa ${not empty model.dir.starredDate ? 'fa-star starred' : 'fa-star-o'} clickable custom-icon-header" onclick="toggleStar(${param.id}, this)"title="<fmt:message key="common.star"/>"><span class="fix-editor"> </span></i></span> 453 454 <c:forEach items="${model.ancestors}" var="ancestor"> 455 <madsonic:url value="main.view" var="ancestorUrl"> 456 <madsonic:param name="id" value="${ancestor.id}"/> 457 </madsonic:url> 458 459 <c:choose> 460 <c:when test="${fn:startsWith(ancestor.name,'[')}"> 461 <a href="${ancestorUrl}">${fn:split(ancestor.name,']')[1]}</a> » 462 </c:when> 463 <c:otherwise> 464 <a href="${ancestorUrl}">${ancestor.name}</a> » 465 </c:otherwise> 466 </c:choose> 467 </c:forEach> 468 469 <c:choose> 470 <c:when test="${not empty model.dir.albumSetName}"> 471 ${model.dir.albumSetName} 472 </c:when> 473 <c:otherwise> 474 ${model.dir.name} 475 </c:otherwise> 476 </c:choose> 477 478 <c:if test="${model.dir.album and model.averageRating gt 0}"> 479 <div style="display:inline;"> 480 <span display="inline" class="detail" style="padding-left:1.5em;"}> 481 <c:import url="rating.jsp"> 482 <c:param name="id" value="${model.dir.id}"/> 483 <c:param name="path" value="${model.dir.path}"/> 484 <c:param name="readonly" value="true"/> 485 <c:param name="rating" value="${model.averageRating}"/> 486 </c:import> 487 </span> 488 </div> 489 </c:if> 490 </h1> 491 492<c:if test="${not model.partyMode}"> 493<h2> 494<div class="maincontrol"> 495 <c:if test="${model.navigateUpAllowed}"> 496 <madsonic:url value="main.view" var="upUrl"> 497 <madsonic:param name="id" value="${model.parent.id}"/> 498 </madsonic:url> 499 <a href="${upUrl}"> <i class="fa fa-arrow-up accent"></i> <fmt:message key="main.up"/></a> 500 <c:set var="needSep" value="true"/> 501 </c:if> 502 503 <c:if test="${model.user.streamRole}"> 504 <c:if test="${needSep}"> <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 505 506 <a href="#" onclick="onPlayAll();"> <i class="fa fa-play accent"></i> <fmt:message key="main.playall"/></a> 507 508 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 509 <a href="#" onclick="onPlayRandom()"> <i class="fa fa-random accent"></i> <fmt:message key="main.playrandom"/> </a> 510 511 <c:if test="${model.lastFMTopTrackSearch}"> 512 <c:if test="${model.user.lastFMRole}"> 513 <c:if test="${not model.dir.album}"> 514 <c:if test="${model.dir.mediaType ne 'VIDEOSET'}"> 515 <span id="playTopTrack" style="display:none;"> 516 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 517 <a href="#" onclick="PlayTopTrack()"> <i class="fa fa-play accent"></i> <fmt:message key="main.playtoptrack"/> 518 <span style="font-size:80% !important;" id="topTrackResult"></span> 519 </a> <a href="#" onclick="parent.playQueue.onUpdateTopTrack("${model.artist}",${model.dir.id});"><i class="fa fa-refresh accent"></i></a> 520 </span> 521 </c:if> 522 </c:if> 523 </c:if> 524 </c:if> 525 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 526 527 <a "similarArtistsRadio" href="javascript:playSimilar()"> <i class="fa fa-play accent"></i> <fmt:message key="main.playradio"/> <span style="font-size:75% !important;"></span></a> 528 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 529 <a href="#" onclick="onAddAll()"> <i class="fa fa-plus-circle accent"></i> <fmt:message key="main.addall"/></a> 530 531 <c:if test="${model.lastFMTopTrackSearch}"> 532 <c:if test="${model.user.lastFMRole}"> 533 <c:if test="${not model.dir.album}"> 534 <c:if test="${model.dir.mediaType ne 'VIDEOSET'}"> 535 <span id="addTopTrack" style="display:none;"> 536 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 537 <a href="#" onclick="AddTopTrack()"> <i class="fa fa-plus-circle accent"></i> <fmt:message key="main.addtoptrack"/></a> 538 </span> 539 </c:if> 540 </c:if> 541 </c:if> 542 </c:if> 543 <c:set var="needSep" value="true"/> 544 </c:if> 545 546 <c:if test="${model.dir.album}"> 547 548 <c:if test="${model.user.downloadRole}"> 549 <madsonic:url value="download.view" var="downloadUrl"> 550 <madsonic:param name="id" value="${model.dir.id}"/> 551 </madsonic:url> 552 <c:if test="${needSep}"> <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 553 <a href="${downloadUrl}"> <i class="fa fa-download accent"></i> <fmt:message key="common.download"/> </a> 554 <c:set var="needSep" value="true"/> 555 </c:if> 556 557 <c:if test="${model.user.coverArtRole}"> 558 <madsonic:url value="editTags.view" var="editTagsUrl"> 559 <madsonic:param name="id" value="${model.dir.id}"/> 560 </madsonic:url> 561 <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 562 <a href="${editTagsUrl}"> <i class="fa fa-code accent"></i> <fmt:message key="main.tags"/> </a> 563 <c:set var="needSep" value="true"/> 564 </c:if> 565 566 </c:if> 567 568 <c:if test="${model.user.commentRole}"> 569 <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 570 <a href="javascript:toggleComment()"> <i class="fa fa-pencil-square-o accent"></i> <fmt:message key="main.comment"/></a> 571 <c:set var="needSep" value="true"/> 572 </c:if> 573 574 <c:if test="${model.showCreateLink}"> 575 <c:if test="${model.user.adminRole}"> 576 <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 577 <a href="javascript:toggleCreateURL()"> <i class="fa fa-link accent"></i> <fmt:message key="main.createlink"/></a> 578 </c:if> 579 </c:if> 580 581 <c:if test="${model.showMediaType}"> 582 <c:if test="${model.user.coverArtRole}"> 583 <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 584 <a href="javascript:toggleMediaType()"> <i class="fa fa-bars accent"></i> <fmt:message key="main.mediatype"/></a> 585 </c:if> 586 </c:if> 587 588 <c:if test="${model.user.shareRole and model.dir.mediaType ne 'ALBUMSET'}"> 589 <c:if test="${needSep}"><img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"></c:if> 590 <a href="${shareUrl}"> <i class="fa fa-share accent"></i> <fmt:message key="main.sharealbum"/></a> 591 <c:set var="needSep" value="true"/> 592 593 </c:if> 594</div> 595</h2> 596 597</c:if> 598<c:if test="${not model.dir.album}"> 599<c:if test="${model.user.searchRole}"> 600 601 <div class="detail"> 602 <div class="maincontrol"> 603 <madsonic:url value="http://www.google.com/search" var="googleUrl" encoding="UTF-8"> 604 <madsonic:param name="q" value="\"${model.dir.name}\""/> 605 </madsonic:url> 606 <madsonic:url value="http://en.wikipedia.org/wiki/Special:Search" var="wikipediaUrl" encoding="UTF-8"> 607 <madsonic:param name="search" value="\"${model.dir.name}\""/> 608 <madsonic:param name="go" value="Go"/> 609 </madsonic:url> 610 <madsonic:url value="http://www.discogs.com/search" var="discogsUrl" encoding="UTF-8"> 611 <madsonic:param name="q" value="${model.dir.name}"/> 612 <madsonic:param name="type" value="artist"/> 613 </madsonic:url> 614 <madsonic:url value="http://www.allmusic.com/search/artists/${model.dir.name}" var="allmusicUrl"> 615 </madsonic:url> 616 <madsonic:url value="http://www.musik-sammler.de/search/${model.dir.name}/" var="MusiksammlerUrl" encoding="UTF-8"> 617 <madsonic:param name="type" value="artist"/> 618 </madsonic:url> 619 <madsonic:url value="http://www.laut.de/Suche" var="lautUrl" encoding="UTF-8"> 620 <madsonic:param name="q" value="${model.dir.name}"/> 621 </madsonic:url> 622 <madsonic:url value="http://www.last.fm/search" var="lastFmUrl" encoding="UTF-8"> 623 <madsonic:param name="q" value="\"${model.dir.name}\""/> 624 <madsonic:param name="type" value="artist"/> 625 </madsonic:url> 626 <madsonic:url value="http://musicbrainz.org/search" var="musicbrainzUrl" encoding="UTF-8"> 627 <madsonic:param name="query" value="${model.dir.name}"/> 628 <madsonic:param name="type" value="artist"/> 629 </madsonic:url> 630 <madsonic:url value="http://www.youtube.com/results" var="YoutubeUrl" encoding="UTF-8"> 631 <madsonic:param name="search_query" value="${model.dir.name}"/> 632 </madsonic:url> 633 634 <span display="inline" class="detailcolor" style="margin-left: 10px;"><fmt:message key="top.search"/></span> 635 636 <a target="_blank" href="${googleUrl}"> <i class="fa fa-google accent" title="Search with Google"></i> Google</a> 637 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 638 639 <a target="_blank" href="${wikipediaUrl}"> <i class="fa fa-wikipedia-w accent" title="Search with Wikipedia"></i> Wikipedia </a> 640 <img src="<spring:theme code="sepImage"/>" alt=""> 641 642 <a target="_blank" href="${discogsUrl}"> <i class="fa fa-dot-circle-o accent" title="Search with Discogs"></i> Discogs</a> 643 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 644 645 <a target="_blank" href="${musicbrainzUrl}"> <i class="fa fa-music accent" title="Search with MusicBrainz"></i> MusicBrainz</a> 646 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 647 648 <a target="_blank" href="${lastFmUrl}"> <i class="fa fa-lastfm accent" title="Search with Last.FM"></i> Last.FM</a> 649 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 650 651 <a target="_blank" href="${YoutubeUrl}"> <i class="fa fa-youtube-play accent" title="Search with Youtube"></i> Youtube</a> 652 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 653 654 <a target="_blank" href="${allmusicUrl}"><img src="<spring:theme code="allmusicImage"/>" alt="" title="Search with Allmusic"> Allmusic</a> 655 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 656 657 <a target="_blank" href="${MusiksammlerUrl}"> <i class="fa fa-search accent" title="Search with MusikSammler"></i> MusikSammler</a> 658 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 659 660 <a target="_blank" href="${lautUrl}"><img src="<spring:theme code="lautImage"/>" alt="" title="Search with Laut"> Laut</a> 661 </div> 662</div> 663</c:if> 664</c:if> 665 666<c:if test="${model.dir.album}"> 667 668 <c:if test="${model.user.searchRole}"> 669 670 <div class="detail"> 671 <div class="maincontrol" style="display:inline;padding-left:2px"> 672 673 <c:if test="${not empty model.artist or not empty model.album}"> 674 <madsonic:url value="http://www.google.com/search" var="googleUrl" encoding="UTF-8"> 675 <madsonic:param name="q" value="\"${model.artist}\" \"${model.album}\""/> 676 </madsonic:url> 677 <madsonic:url value="http://en.wikipedia.org/wiki/Special:Search" var="wikipediaUrl" encoding="UTF-8"> 678 <madsonic:param name="profile" value="default"/> 679 <madsonic:param name="search" value="album +${model.artist} +${model.album}"/> 680 <madsonic:param name="fulltext" value="Search"/> 681 <madsonic:param name="go" value="Go"/> 682 </madsonic:url> 683 <madsonic:url value="http://www.discogs.com/search" var="discogsUrl" encoding="UTF-8"> 684 <madsonic:param name="q" value="${model.album}"/> 685 <madsonic:param name="type" value="release"/> 686 </madsonic:url> 687 <madsonic:url value="http://www.allmusic.com/search/albums/${model.album}" var="allmusicUrl"> 688 </madsonic:url> 689 <madsonic:url value="http://www.musik-sammler.de/search/${model.album}/" var="MusiksammlerUrl" encoding="UTF-8"> 690 <madsonic:param name="type" value="album"/> 691 </madsonic:url> 692 <madsonic:url value="http://www.laut.de/Suche" var="lautUrl" encoding="UTF-8"> 693 <madsonic:param name="q" value="${model.artist} ${model.album}"/> 694 </madsonic:url> 695 <madsonic:url value="http://www.last.fm/search" var="lastFmUrl" encoding="UTF-8"> 696 <madsonic:param name="q" value="\"${model.artist}\" \"${model.album}\""/> 697 <madsonic:param name="type" value="album"/> 698 </madsonic:url> 699 <madsonic:url value="http://musicbrainz.org/search" var="musicbrainzUrl" encoding="UTF-8"> 700 <madsonic:param name="query" value="${model.album}"/> 701 <madsonic:param name="type" value="release"/> 702 </madsonic:url> 703 <madsonic:url value="http://www.youtube.com/results" var="YoutubeUrl" encoding="UTF-8"> 704 <madsonic:param name="search_query" value="${model.artist} ${model.album}"/> 705 </madsonic:url> 706 <span display="inline" class="detailcolor"><fmt:message key="top.search"/></span> 707 <a target="_blank" href="${googleUrl}"> <i class="fa fa-google accent" title="Search with Google"></i> Google</a> 708 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 709 710 <a target="_blank" href="${wikipediaUrl}"> <i class="fa fa-wikipedia-w accent" title="Search with Wikipedia"></i> Wikipedia </a> 711 <img src="<spring:theme code="sepImage"/>" alt=""> 712 713 <a target="_blank" href="${discogsUrl}"> <i class="fa fa-dot-circle-o accent" title="Search with Discogs"></i> Discogs</a> 714 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 715 716 <a target="_blank" href="${musicbrainzUrl}"> <i class="fa fa-music accent" title="Search with MusicBrainz"></i> MusicBrainz</a> 717 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 718 719 <a target="_blank" href="${lastFmUrl}"> <i class="fa fa-lastfm accent" title="Search with Last.FM"></i> Last.FM</a> 720 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 721 722 <a target="_blank" href="${YoutubeUrl}"> <i class="fa fa-youtube-play accent" title="Search with Youtube"></i> Youtube</a> 723 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 724 725 <a target="_blank" href="${allmusicUrl}"><img src="<spring:theme code="allmusicImage"/>" alt="" title="Search with Allmusic"> Allmusic</a> 726 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 727 728 <a target="_blank" href="${MusiksammlerUrl}"> <i class="fa fa-search accent" title="Search with MusikSammler"></i> MusikSammler</a> 729 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;"> 730 731 <a target="_blank" href="${lautUrl}"><img src="<spring:theme code="lautImage"/>" alt="" title="Search with Laut"> Laut</a> 732 733 </c:if> 734 </div> 735 <!-- 736 <c:if test="${model.user.shareRole and model.dir.mediaType ne 'ALBUMSET'}"> 737 <img src="<spring:theme code="sepImage"/>" style="margin-left: 5px;margin-right: 5px;"> 738 <a href="${shareUrl}"><span class="detailcolor" style="margin-right: 5px;"><fmt:message key="main.sharealbum"/></span></a> 739 <a href="${shareUrl}"><img src="<spring:theme code="shareTwitterImage"/>" alt=""></a> 740 <a href="${shareUrl}"><img src="<spring:theme code="shareFacebookImage"/>" alt=""></a> 741 <a href="${shareUrl}"><img src="<spring:theme code="shareGooglePlusImage"/>" alt=""></a> 742 </c:if> 743 --> 744 </div> 745 </c:if> 746 747<div style="padding-top:0.8em;padding-bottom:1.0em;"> 748 749 <select id="moreActions" name="moreActions" style="display:none"> 750 <option value="top" selected="selected"><fmt:message key="main.more"/></option> 751 <option value="savePlaylist">Save as Playlist (Date)</option> 752 <option value="savePlaylistNamed">Save as Playlist (Named)</option> 753 <option value="selectAll"><fmt:message key="playlist.more.selectall"/></option> 754 <option value="selectNone"><fmt:message key="playlist.more.selectnone"/></option> 755 <c:if test="${model.user.shareRole}"> 756 <option value="share"><fmt:message key="main.more.share"/></option> 757 </c:if> 758 <c:if test="${model.user.downloadRole}"> 759 <option value="download"><fmt:message key="common.download"/></option> 760 </c:if> 761 <option value="appendPlaylist"><fmt:message key="playlist.append"/></option> 762 <option value="addNext">Add Next to PlayQueue</option> 763 <option value="addLast">Add Last to PlayQueue</option> 764 </select> 765 766 <c:if test="${model.user.commentRole}"> 767 <span display="inline" class="detail" style="padding-left:1.5em;vertical-align: -webkit-baseline-middle;"> 768 <c:import url="rating.jsp"> 769 <c:param name="id" value="${model.dir.id}"/> 770 <c:param name="path" value="${model.dir.path}"/> 771 <c:param name="readonly" value="false"/> 772 <c:param name="rating" value="${model.userRating}"/> 773 </c:import> 774 </span> 775 </c:if> 776 777 <c:if test="${model.user.commentRole}"> 778 <span display="inline" class="detail" style="padding-left:1.5em;vertical-align: -webkit-baseline-middle;"> 779 <c:import url="hot.jsp"> 780 <c:param name="id" value="${model.dir.id}"/> 781 <c:param name="flag" value="${model.hotRating}"/> 782 </c:import> 783 </span> 784 </c:if> 785</div> 786 787<span display="inline" class="detailcolor" style="padding-left:2px;margin-top:20px"> 788 789<fmt:message key="main.playcount"><fmt:param value="${model.dir.playCount}"/></fmt:message> 790<c:if test="${not empty model.dir.lastPlayed}"> 791 <fmt:message key="main.lastplayed"> 792 <fmt:param><fmt:formatDate type="date" dateStyle="long" value="${model.dir.lastPlayed}"/></fmt:param> 793 </fmt:message> 794</c:if> 795</span> 796 797</c:if> 798 799<div id="createURLForm" display="inline" class="bgcolor2 detailcolor" style="display:none;margin-top:20px"> 800 <form method="post" action="createURL.view"> 801 <input type="hidden" name="action" value="create"> 802 <input type="hidden" name="id" value="${model.dir.id}"> 803 https://www.youtube.com/watch?v= 804 <input name="URL" size="15" value="mcixldqDIEQ"> 805 <input name="title" size="35" value="Example YouTube Video"> 806 <input type="submit" value="Create Link"> 807 </form> 808</div> 809 810<div id="MediaTypeSwitch" class="bgcolor2" style="display:none;margin-top: 20px;"> 811 <br> 812 <p class="info">Here you can override your current MediaFile-Type.</p> 813 <br> 814 <form method="post" action="setMediaFile.view"> 815 <input type="hidden" name="id" value="${model.dir.id}"> 816 <input type="hidden" name="action" value="setmediatype"> 817 <input type="radio" name="mediatype" value="MULTIARTIST"> MULTIARTIST (Sorting on Title)<br> 818 <input type="radio" name="mediatype" value="ARTIST"> ARTIST<br> 819 <br> 820 <input type="radio" name="mediatype" value="DIRECTORY"> DIRECTORY<br> 821 <input type="radio" name="mediatype" value="VIDEOSET"> VIDEOSET <br> 822 <input type="radio" name="mediatype" value="ALBUMSET"> ALBUMSET <br> 823 <input type="radio" name="mediatype" value="ALBUM"> ALBUM <br> 824 <br> 825 <input type="radio" name="mediatype" value="AUTO"> AUTO<br> 826 <br> 827 <input type="submit" value="Update"> 828 <br><br> 829 <span class="detailcolor">-- DEBUGINFO --</span><br><br> 830 <span class="detailcolordark">Media Id </span> 831 <span class="detailcolor">${model.dir.id} </span><br> 832 <span class="detailcolordark">Override </span> 833 <span class="detailcolor">${model.dir.mediaTypeOverride} </span><br> 834 <span class="detailcolordark">MediaType </span> 835 <span class="detailcolor">${model.dir.mediaType}</span> <br> 836 <br> 837 </form> 838</div> 839 840<div id="comment" class="albumComment"><madsonic:wiki text="${model.dir.comment}"/></div> 841 842<div id="commentForm" class="bgcolor2" style="display:none;margin-top:20px;padding-bottom:10px;"> 843 <form method="post" action="setMusicFileInfo.view"> 844 <input type="hidden" name="action" value="comment"> 845 <input type="hidden" name="id" value="${model.dir.id}"> 846 <textarea name="comment" rows="8" cols="100">${model.dir.comment}</textarea> 847 <input type="submit" value="<fmt:message key="common.save"/>"> 848 </form> 849 <fmt:message key="main.wiki"/> 850</div> 851 852<script type='text/javascript'> 853 function toggleComment() { 854 $("#commentForm").toggle(); 855 $("#comment").toggle(); 856 } 857 858 function toggleMediaType() { 859 $("#MediaTypeSwitch").toggle(); 860 } 861 862 function toggleCreateURL() { 863 $("#createURLForm").toggle(); 864 } 865 866</script> 867 868<c:if test="${model.user.adminRole}"> 869 <c:if test="${model.showQuickEdit}"> 870 <c:if test="${model.dir.mediaType eq 'ARTIST'} "> 871 <form method="post" action="setMediaFile.view"> 872 <input type="hidden" name="id" value="${model.dir.id}"> 873 <input type="hidden" name="action" value="setmediatype"> 874 <input type="hidden" name="mediatype" checked value="ALBUMSET"> 875 <input type="submit" value="Update to ALBUMSET"> 876 </c:if> 877 <c:if test="${model.dir.mediaType eq 'ARTIST'}"> 878 <form method="post" action="setMediaFile.view"> 879 <input type="hidden" name="id" value="${model.dir.id}"> 880 <input type="hidden" name="action" value="setmediatype"> 881 <input type="hidden" name="mediatype" checked value="MULTIARTIST"> 882 <input type="submit" value="Update to MULTIARTIST"> 883 </c:if> 884 <c:if test="${model.dir.mediaType eq 'VIDEOSET'}"> 885 <form method="post" action="setMediaFile.view"> 886 <input type="hidden" name="id" value="${model.dir.id}"> 887 <input type="hidden" name="action" value="setmediatype"> 888 <input type="hidden" name="mediatype" checked value="ALBUMSET"> 889 <input type="submit" value="Update to ALBUMSET"> 890 </c:if> 891 <c:if test="${model.dir.mediaType ne 'VIDEOSET'}"> 892 <form method="post" action="setMediaFile.view"> 893 <input type="hidden" name="id" value="${model.dir.id}"> 894 <input type="hidden" name="action" value="setmediatype"> 895 <input type="hidden" name="mediatype" checked value="VIDEOSET"> 896 <input type="submit" value="Update to VIDEOSET"> 897 </c:if> 898 <c:if test="${model.dir.mediaType eq 'ALBUMSET' || model.dir.mediaType eq 'ALBUM' }"> 899 <form method="post" action="setMediaFile.view"> 900 <input type="hidden" name="id" value="${model.dir.id}"> 901 <input type="hidden" name="action" value="setmediatype"> 902 <input type="hidden" name="mediatype" checked value="ARTIST"> 903 <input type="submit" value="Update to ARTIST"> 904 </c:if> 905 <c:if test="${model.dir.mediaType ne 'ALBUM'}"> 906 <form method="post" action="setMediaFile.view"> 907 <input type="hidden" name="id" value="${model.dir.id}"> 908 <input type="hidden" name="action" value="setmediatype"> 909 <input type="hidden" name="mediatype" checked value="ALBUM"> 910 <input type="submit" value="Update to ALBUM"> 911 </c:if> 912 <c:if test="${model.dir.mediaType eq 'ARTIST' || model.dir.mediaType eq 'MULTIARTIST' }"> 913 <form method="post" action="setMediaFile.view"> 914 <input type="hidden" name="id" value="${model.dir.id}"> 915 <input type="hidden" name="action" value="setmediatype"> 916 <input type="hidden" name="mediatype" checked value="DIRETORY"> 917 <input type="submit" value="Update to DIRETORY"> 918 </c:if> 919 <span class="detailcolor">now: ${model.dir.mediaType}</span> 920 </c:if> 921</c:if> 922 923 <div style="position: absolute;top:0;right:10px;padding-top:20px;z-index:1000"> 924 <Table> 925 <tr> 926 <td style="padding-left:0.2em; padding-bottom:0em;"> 927 <%@ include file="viewSelector.jsp" %> 928 </td> 929 </tr> 930 </table> 931 </div> 932 933<table cellpadding="10" style="width:100%"> 934<tr style="vertical-align:top;"> 935 936 <c:if test="${model.viewAs eq 'list' or model.viewAs eq 'mixed' or model.viewAs eq 'grid' and model.dir.mediaType eq 'ALBUM'}"> 937 938 <td style="vertical-align:top;min-width:360px;"> 939 <table class="content" width="100%" style="border-collapse:collapse;white-space:nowrap"> 940 <c:set var="cutoff" value="${model.visibility.captionCutoff}"/> 941 <c:forEach items="${model.children}" var="child" varStatus="loopStatus"> 942 <%--@elvariable id="child" type="org.madsonic.domain.MediaFile"--%> 943 <c:choose> 944 <c:when test="${loopStatus.count % 2 == 1}"> 945 <c:set var="htmlClass" value="class='bgcolor2'"/> 946 </c:when> 947 <c:otherwise> 948 <c:set var="htmlClass" value=""/> 949 </c:otherwise> 950 </c:choose> 951 <c:choose> 952 <c:when test="${model.dir.mediaType eq 'MULTIARTIST' or model.dir.mediaType eq 'VIDEOSET'}"> 953 <tr style="margin:0;padding:0;border:0;vertical-align: middle;"> 954 <td class="fit" > 955 <c:import url="playAddDownload.jsp"> 956 <c:param name="id" value="${child.id}"/> 957 <c:param name="video" value="true"/> 958 <c:param name="playEnabled" value="${ (model.dir.mediaType eq 'VIDEOSET') and not child.directory}"/> 959 <c:param name="playAddEnabled" value="false"/> 960 <c:param name="addEnabled" value="false"/> 961 <c:param name="downloadEnabled" value="false"/> 962 <c:param name="artist" value="${fn:escapeXml(child.artist)}"/> 963 <c:param name="title" value="${child.title}"/> 964 <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/> 965 <c:param name="starred" value="${not empty child.starredDate}"/> 966 <c:param name="asTable" value="false"/> 967 <c:param name="YoutubeEnabled" value="false"/> 968 </c:import> 969 </c:when> 970 <c:otherwise> 971 </td> 972 <tr style="margin:0;padding:0;border:0"> 973 974 <td class="fit"> 975 <c:if test="${child.bookmarkPosition > 0}"> 976 <div class="icon-wrapper"> 977 <i class="fa fa-bookmark custom-icon starred" id="bookmarkSong" onclick="onToogleBookmark(this.id.substring(12) - 1)" title="<fmt:message key="common.bookmark"/>"><span class="fix-editor"> </span></i></div> 978 </c:if> 979 </td> 980 981 <c:if test="${child.rank > 0}"> 982 <td class="fit"> 983 <c:if test="${model.buttonVisibility.rankVisible}"> 984 <div class="icon-wrapper"><i class="fa custom-icon"> 985 986 <span class="custom-icon-rank starred" > 987 <c:if test="${child.rank < 10}">0</c:if>${child.rank}<span class="fix-editor"> </span></i> 988 </span> 989 </div> 990 </c:if> 991 </td> 992 </c:if> 993 994 995 <c:if test="${child.rank == 0}"> 996 <td class="fit" style="padding-right:0.25em;"></td> 997 </c:if> 998 999 <td class="fit"> 1000 <c:import url="playAddDownload.jsp"> 1001 <c:param name="id" value="${child.id}"/> 1002 <c:param name="video" value="${child.video and model.player.web}"/> 1003 <c:param name="playEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playVisible}"/> 1004 <c:param name="playAddEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playAddVisible}"/> 1005 <c:param name="playMoreEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playMoreVisible}"/> 1006 <c:param name="addEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addContextVisible}"/> 1007 <c:param name="addNextEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addNextVisible}"/> 1008 <c:param name="addLastEnabled" value="${model.user.streamRole and (not model.partyMode or not child.directory) and model.buttonVisibility.addLastVisible}"/> 1009 <c:param name="downloadEnabled" value="${model.user.downloadRole and not model.partyMode and model.buttonVisibility.downloadVisible}"/> 1010 <c:param name="artist" value="${fn:escapeXml(child.artist)}"/> 1011 <c:param name="title" value="${child.title}"/> 1012 <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/> 1013 <c:param name="loveEnabled" value="${model.buttonVisibility.lovedVisible and model.dir.mediaType ne 'ARTIST' and model.dir.mediaType ne 'ALBUMSET'}"/> 1014 <c:param name="starred" value="${not empty child.starredDate}"/> 1015 <c:param name="loved" value="${not empty child.lovedDate}"/> 1016 <c:param name="asTable" value="false"/> 1017 <c:param name="YoutubeEnabled" value="${model.buttonVisibility.youtubeVisible}"/> 1018 <c:param name="LyricEnabled" value="${model.buttonVisibility.lyricVisible}"/> 1019 </c:import> 1020 </td> 1021 1022 </c:otherwise> 1023 1024 </c:choose> 1025 1026 <c:choose> 1027 <c:when test="${child.directory}"> 1028 <madsonic:url value="main.view" var="childUrl"> 1029 <madsonic:param name="id" value="${child.id}"/> 1030 </madsonic:url> 1031 1032 <td class="fit" colspan="1"> 1033 <c:if test="${child.mediaType eq 'ALBUMSET' and model.dir.mediaType ne 'VIDEOSET'}"> 1034 <div class="icon-wrapper" style="margin-top:0px;"> 1035 <i class="fa fa-dot-circle-o custom-icon" title="<fmt:message key="common.albumset"/>"></i> 1036 </div> 1037 </c:if> 1038 </td> 1039 1040 <c:choose> 1041 <c:when test="${model.showAlbumYear}"> 1042 <td class="fit" style="padding-left:1em;padding-right:1em"> 1043 <span class="detailyear"><c:if test="${not empty child.year}">[${child.year}]</c:if></span></td> 1044 </c:when> 1045 <c:otherwise> 1046 </c:otherwise> 1047 </c:choose> 1048 1049 <c:if test="${not empty child.year}"> 1050 <c:if test="${not empty child.albumSetName}"> 1051 <td class="fit" style="padding-left:0.5em;padding-right:1.5em" colspan="5"> 1052 <a href="${childUrl}" title="${child.albumSetName}"><span class="album" style="white-space:nowrap;vertical-align:bottom;"><str:truncateNicely upper="${cutoff}">${child.albumSetName}</str:truncateNicely></span></a> 1053 1054 <c:if test="${child.newAdded}"> 1055 <img id="newaddedImage" style="margin-left:5px;" src="<spring:theme code="newaddedImage"/>" width="14" height="14" title="new added"> 1056 </c:if> 1057 </td> 1058 1059 </c:if> 1060 <c:if test="${not empty child.albumName and empty child.albumSetName}"> 1061 <td class="fit" style="padding-left:0.5em;padding-right:1.5em" colspan="5"> 1062 <a href="${childUrl}" title="${child.albumName}"><span class="album" style="white-space:nowrap;vertical-align: bottom;"><str:truncateNicely upper="${cutoff}">${child.albumSetName}</str:truncateNicely></span></a> 1063 <img id="cdImage" src="<spring:theme code="CDImage"/>" alt="Albumset"> 1064 </td> 1065 </c:if> 1066 </c:if> 1067 1068 <c:if test="${empty child.year}"> 1069 <c:if test="${not empty child.name}"> 1070 <td class="fit" style="padding-left:0.5em;padding-right:0.5em" colspan="5"> 1071 <a href="${childUrl}" title="${child.albumSetName}"><span class="album" style="white-space:nowrap;"><str:truncateNicely upper="${cutoff}">${child.name}</str:truncateNicely></span></a> 1072 </td> 1073 </c:if> 1074 </c:if> 1075 </c:when> 1076 1077 <c:otherwise> 1078 1079 <c:if test="${model.dir.mediaType ne 'VIDEOSET'}"> 1080 <td class="fit" style="padding-left:0.5em;padding-right:0.5em;"><input type="checkbox" class="checkbox" id="songIndex${loopStatus.count - 1}"> 1081 <span id="songId${loopStatus.count - 1}" style="display: none">${child.id}</span></td> 1082 </c:if> 1083 1084 <c:if test="${model.visibility.discNumberVisible}"> 1085 <td class="fit" style="padding-right:1.5em;text-align:right"> 1086 <span class="detail">${child.discNumber}</span> 1087 </td> 1088 </c:if> 1089 1090 <c:if test="${model.visibility.trackNumberVisible}"> 1091 <td class="fit" style="padding-right:0.5em;text-align:right"> 1092 <span class="detail">${child.trackNumber}</span> 1093 </td> 1094 </c:if> 1095 1096 <td class="fit" style="padding-left:1.0em;padding-right:1.5em;white-space:nowrap"> 1097 <span class="songTitle" title="${child.title}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.title)}</str:truncateNicely></span> 1098 </td> 1099 1100 <c:if test="${model.visibility.albumVisible}"> 1101 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1102 <span class="detail" title="${child.albumName}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.albumName)}</str:truncateNicely></span> 1103 </td> 1104 </c:if> 1105 1106 <c:if test="${model.visibility.artistVisible and model.multipleArtists}"> 1107 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1108 <span class="detail" title="${child.artist}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.artist)}</str:truncateNicely></span> 1109 </td> 1110 </c:if> 1111 1112 <c:if test="${model.visibility.composerVisible}"> 1113 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1114 <span class="detail" title="${child.composer}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.composer)}</str:truncateNicely></span> 1115 </td> 1116 </c:if> 1117 1118 <c:if test="${model.visibility.moodVisible}"> 1119 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1120 <span class="detail">${child.mood}</span> 1121 </td> 1122 </c:if> 1123 1124 <c:if test="${model.visibility.genreVisible}"> 1125 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1126 <span class="detail">${child.genre}</span> 1127 </td> 1128 </c:if> 1129 1130 <c:if test="${model.visibility.yearVisible}"> 1131 <td class="fit" style="padding-right:1.5em"> 1132 <span class="detail">${child.year}</span> 1133 </td> 1134 </c:if> 1135 1136 <c:if test="${model.visibility.bpmVisible}"> 1137 <td class="fit" style="padding-right:1.5em;white-space:nowrap"> 1138 <span class="detail">${child.bpm}</span> 1139 </td> 1140 </c:if> 1141 1142 <c:if test="${model.visibility.formatVisible}"> 1143 <td class="fit" style="padding-right:1.5em"> 1144 <span class="detail">${fn:toLowerCase(child.format)}</span> 1145 </td> 1146 </c:if> 1147 1148 <c:if test="${model.visibility.fileSizeVisible}"> 1149 <td class="fit" style="padding-right:1.5em;text-align:right"> 1150 <span class="detail"><madsonic:formatBytes bytes="${child.fileSize}"/></span> 1151 </td> 1152 </c:if> 1153 1154 <c:if test="${model.visibility.durationVisible}"> 1155 <td class="fit" style="padding-right:1.5em;text-align:right"> 1156 <span class="detail">${child.durationString}</span> 1157 </td> 1158 </c:if> 1159 1160 <c:if test="${model.visibility.bitRateVisible}"> 1161 <td class="fit" style="padding-right:0em;text-align:right"> 1162 <span class="detail"> 1163 <c:if test="${not empty child.bitRate}"> 1164 ${child.bitRate} Kbps ${child.variableBitRate ? "vbr" : ""} 1165 </c:if> 1166 <c:if test="${child.video and not empty child.width and not empty child.height}"> 1167 (${child.width}x${child.height}) 1168 </c:if> 1169 </span> 1170 </td> 1171 </c:if> 1172 <td class="rightalign"> 1173 <span class="detail"> 1174 </span> 1175 </td> 1176 1177 </c:otherwise> 1178 </c:choose> 1179 </tr> 1180 </c:forEach> 1181 </table> 1182 </td> 1183 1184 </c:if> 1185 1186 <c:if test="${model.viewAs eq 'grid' or model.viewAs eq 'mixed'}"> 1187 1188 <td style="vertical-align:top;width:100%" rowspan="2"> 1189 1190 <c:set var="coverArtSize" value="${model.player.coverArtScheme.size}"/> 1191 <c:set var="captionLength" value="${model.player.coverArtScheme.captionLength}"/> 1192 1193 <c:if test="${model.showGenericArtistArt} and ${model.artist} eq null"> 1194 </c:if> 1195 1196 <c:if test="${model.showGenericArtistArt}"> 1197 <div class="artistbanner" style="padding-bottom:6px;float:left; "> 1198 <c:import url="coverArt.jsp"> 1199 <c:param name="albumId" value="${model.dir.id}"/> 1200 <c:param name="auth" value="${model.dir.hash}"/> 1201 <c:param name="artistName" value="${model.dir.name}"/> 1202 <c:param name="coverArtSize" value="${model.coverArtSize}"/> 1203 <c:param name="coverArtHQ" value="${model.coverArtHQ}"/> 1204 <c:param name="showChange" value="true"/> 1205 <c:param name="showLink" value="true"/> 1206 <c:param name="showZoom" value="false"/> 1207 <c:param name="showArtist" value="true"/> 1208 <c:param name="typArtist" value="true"/> 1209 <c:param name="showTopTrack" value="false"/> 1210 <c:param name="showPlayAlbum" value="false"/> 1211 <c:param name="showAddAlbum" value="false"/> 1212 <c:param name="appearAfter" value="15"/> 1213 <c:param name="showSmoother" value="true"/> 1214 </c:import> 1215 </div> 1216 1217 <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.artist}"> 1218 <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;display:none" > 1219 <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span> 1220 <span id="similarArtists"></span> 1221 </div> 1222 1223 <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1224 <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1225 1226 <div style="clear:both;"></div> 1227 </c:if> 1228 1229 </c:if> 1230 1231 <c:forEach items="${model.coverArts}" var="coverArt" varStatus="loopStatus"> 1232 1233 <div style="float:left; padding-bottom:6px; padding-right:12px;"> 1234 <c:import url="coverArt.jsp"> 1235 <c:param name="albumId" value="${coverArt.id}"/> 1236 <c:param name="auth" value="${coverArt.hash}"/> 1237 <c:param name="albumName" value="${coverArt.albumSetName}"/> 1238 <c:param name="artistName" value="${coverArt.artist}"/> 1239 <c:param name="typVideo" value="${model.dir.mediaType eq 'VIDEOSET'}"/> 1240 <c:param name="typArtist" value="${coverArt.mediaType eq 'ARTIST'}"/> 1241 <c:param name="coverArtSize" value="${model.coverArtSize}"/> 1242 <c:param name="coverArtHQ" value="${model.coverArtHQ}"/> 1243 <c:param name="showLink" value="${coverArt ne model.dir}"/> 1244 <c:param name="showZoom" value="${coverArt eq model.dir}"/> 1245 <c:param name="showArtist" value="${(coverArt eq model.dir) and model.user.lastFMRole}"/> 1246 <c:param name="showChange" value="${(coverArt eq model.dir) and (not model.isArtist)}"/> 1247 <c:param name="showCaption" value="true"/> 1248 <c:param name="showTopTrack" value="${coverArt eq model.dir and model.user.streamRole and model.dir.mediaType ne 'VIDEOSET'}"/> 1249 <c:param name="showPlayAlbum" value="${model.user.streamRole and not model.partyMode}"/> 1250 <c:param name="showAddAlbum" value="${model.user.streamRole and not model.partyMode}"/> 1251 <c:param name="captionLength" value="${captionLength}"/> 1252 <c:param name="appearAfter" value="${loopStatus.count * 15}"/> 1253 <c:param name="showSmoother" value="true"/> 1254 </c:import> 1255 1256 </div> 1257 <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.isArtist}"> 1258 <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;display:none;" > 1259 <img id="similarArtistsIcon" src="icons/default/artists.png" style="width:16px;padding-right:4px"> 1260 <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span> 1261 <span id="similarArtists"></span> 1262 </div> 1263 1264 <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1265 <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1266 1267 <div style="clear:both;"></div> 1268 </c:if> 1269 </c:forEach> 1270 1271 <c:if test="${model.multipleArtists}"> 1272 1273 </c:if> 1274 1275 <c:if test="${model.showGenericCoverArt}"> 1276 <div class="coverart" style="float:left;"> 1277 <c:import url="coverArt.jsp"> 1278 <c:param name="albumId" value="${model.dir.id}"/> 1279 <c:param name="auth" value="${model.dir.hash}"/> 1280 <c:param name="coverArtSize" value="${model.coverArtSize}"/> 1281 <c:param name="coverArtHQ" value="${model.coverArtHQ}"/> 1282 <c:param name="showLink" value="false"/> 1283 <c:param name="showZoom" value="false"/> 1284 <c:param name="showChange" value="${model.user.coverArtRole}"/> 1285 <c:param name="appearAfter" value="5"/> 1286 <c:param name="showSmoother" value="true"/> 1287 </c:import> 1288 </div> 1289 1290 <c:if test="${coverArt eq model.dir or coverArt eq model.album or coverArt eq model.artist}"> 1291 <div id="placeholder" style="padding-right:0.5em; margin-left:${model.coverArtSize + 20}px;" > 1292 <span id="similarArtistsTitle" style="padding-right:0.5em; display:none;"><fmt:message key="main.similarartists"/></span> 1293 <span id="similarArtists"></span> 1294 </div> 1295 1296 <div id="artistBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1297 <div id="albumBio" style="max-width: 95%;padding-bottom:1em; margin-left:${model.coverArtSize + 20}px;display:none;"></div> 1298 1299 <div style="clear:both;"></div> 1300 </c:if> 1301 1302 </c:if> 1303 </td> 1304 1305 <td style="vertical-align:top;"> 1306 1307 <c:forEach items="${model.sieblingAlbums}" var="sieblingAlbum" varStatus="loopStatus"> 1308 <div class="coverart" style="display:${loopStatus.count < 5 ? 'inline-block' : 'none'}"> 1309 <c:import url="coverArt.jsp"> 1310 <c:param name="albumId" value="${sieblingAlbum.id}"/> 1311 <c:param name="auth" value="${sieblingAlbum.hash}"/> 1312 <c:param name="albumName" value="${sieblingAlbum.name}"/> 1313 <c:param name="coverArtSize" value="${model.sieblingCoverArtScheme.size}"/> 1314 <c:param name="coverArtHQ" value="${model.coverArtHQ}"/> 1315 <c:param name="showLink" value="true"/> 1316 <c:param name="showZoom" value="false"/> 1317 <c:param name="showChange" value="false"/> 1318 <c:param name="showCaption" value="true"/> 1319 <c:param name="captionLength" value="${model.sieblingCoverArtScheme.captionLength}"/> 1320 <c:param name="showPlayAlbum" value="${model.user.streamRole and not model.partyMode}"/> 1321 <c:param name="showAddAlbum" value="${model.user.streamRole and not model.partyMode}"/> 1322 <c:param name="appearAfter" value="${loopStatus.count * 15}"/> 1323 <c:param name="showSmoother" value="true"/> 1324 </c:import> 1325 </div> 1326 </c:forEach> 1327 <c:if test="${fn:length(model.sieblingAlbums) >= 5}"> 1328 <input id="showAllButton" class="albumOverflowButton" type="button" value="<fmt:message key="main.showall"/>" onclick="showAllAlbums()"> 1329 </c:if> 1330 </td> 1331 1332 </c:if> 1333 1334 <c:if test="${model.showAd}"> 1335 <td class="ad" style="vertical-align:top;min-width:160px" rowspan="2"> 1336 <h2 style="padding-bottom: 1em">Madsonic Premium</h2> 1337 <p style="font-size: 90%"> 1338 Upgrade to Madsonic Premium and get: 1339 </p> 1340 <div style="font-size: 80%;padding-bottom: 0.5em"> 1341 1342 <p>Your personal<br> 1343 server address: <em>you</em>.madsonic.org</p> 1344 <p>Advanced LDAP support.</p> 1345 <p>Advanced user management.</p> 1346 <p>Advanced folder management.</p> 1347 <p>Sonos & Chromecast support.</p> 1348 <p>DLNA/UPnP device support.</p> 1349 <p>Audio conversion support.</p> 1350 <p>Video conversion support.</p> 1351 <p>Share with Social media.</p> 1352 <p>Logon with Signup service.</p> 1353 <p>Node management.</p> 1354 <p>No ads.</p> 1355 </div> 1356 <p class="forward" style="white-space: nowrap"><a href="http://beta.madsonic.org/pages/premium.jsp" target="_blank">Get Premium</a></p> 1357 </td> 1358 <td style="vertical-align:top;width:10px" rowspan="2"> 1359 </td> 1360 </c:if> 1361 1362 </tr> 1363 1364 1365</table> 1366 1367<c:choose> 1368 <c:when test="${model.viewAs eq 'list'}"> 1369 <table class="music indent" style="margin-left:23px; width: 97.5%;"> 1370 <c:forEach items="${model.sieblingAlbums}" var="subDir"> 1371 <tr> 1372 <td class="fit"> 1373 <c:import url="playAddDownload.jsp"> 1374 <c:param name="id" value="${subDir.id}"/> 1375 <c:param name="playEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playVisible}"/> 1376 <c:param name="playAddEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playAddVisible}"/> 1377 <c:param name="playMoreEnabled" value="${model.user.streamRole and not model.partyMode and model.buttonVisibility.playMoreVisible}"/> 1378 <c:param name="addEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addContextVisible}"/> 1379 <c:param name="addNextEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addNextVisible}"/> 1380 <c:param name="addLastEnabled" value="${model.user.streamRole and (not model.partyMode or not subDir.directory) and model.buttonVisibility.addLastVisible}"/> 1381 <c:param name="downloadEnabled" value="${model.user.downloadRole and not model.partyMode and model.buttonVisibility.downloadVisible}"/> 1382 <c:param name="starEnabled" value="${model.buttonVisibility.starredVisible}"/> 1383 <c:param name="starred" value="${not empty subDir.starredDate}"/> 1384 <c:param name="asTable" value="false"/> 1385 </c:import> 1386 </td> 1387 <td class="fit rightalign detailyear" style="padding-left:1em;padding-right:0.5em">[${subDir.year}]</td> 1388 <td class="truncate"><a href="main.view?id=${subDir.id}" class="album" title="${fn:escapeXml(subDir.albumName)}">${fn:escapeXml(subDir.albumName)}</a></td> 1389 1390 </tr> 1391 </c:forEach> 1392 </table> 1393 </c:when> 1394</c:choose> 1395 1396<!-- 1397<div style="padding-bottom: 1em"> 1398 <c:if test="${not empty model.previousAlbum}"> 1399 <madsonic:url value="main.view" var="previousUrl"> 1400 <madsonic:param name="id" value="${model.previousAlbum.id}"/> 1401 </madsonic:url> 1402 <div class="back" style="float:left;padding-right:10pt"><a href="${previousUrl}" title="${model.previousAlbum.name}"> 1403 <str:truncateNicely upper="55">${fn:escapeXml(model.previousAlbum.name)}</str:truncateNicely> 1404 </a></div> 1405 </c:if> 1406 <c:if test="${not empty model.nextAlbum}"> 1407 <madsonic:url value="main.view" var="nextUrl"> 1408 <madsonic:param name="id" value="${model.nextAlbum.id}"/> 1409 </madsonic:url> 1410 <div class="forwardright" style="float:left"><a href="${nextUrl}" title="${model.nextAlbum.name}"> 1411 <str:truncateNicely upper="55">${fn:escapeXml(model.nextAlbum.name)}</str:truncateNicely> 1412 </a></div> 1413 </c:if> 1414</div>--> 1415 1416<div id="dialog-select-playlist" title="<fmt:message key="main.addtoplaylist.title"/>" style="display: none;"> 1417 <p><fmt:message key="main.addtoplaylist.text"/></p> 1418 <div id="dialog-select-playlist-list"></div> 1419</div> 1420 1421<!-- CONTENT --> 1422</div> 1423 1424<c:if test="${model.customScrollbar}"> 1425<script type="text/javascript"> 1426 (function($){ 1427 $(window).load(function(){ 1428 1429 $("#content_main").mCustomScrollbar({ 1430 axis:"y", 1431 scrollInertia:800, /*scrolling inertia: integer (milliseconds)*/ 1432 mouseWheel:true, /*mousewheel support: boolean*/ 1433 mouseWheelPixels:"auto", /*mousewheel pixels amount: integer, "auto"*/ 1434 autoDraggerLength:true, /*auto-adjust scrollbar dragger length: boolean*/ 1435 autoHideScrollbar:false, /*auto-hide scrollbar when idle*/ 1436 alwaysShowScrollbar:true, 1437 advanced:{ updateOnBrowserResize:true, /*update scrollbars on browser resize (for layouts based on percentages): boolean*/ 1438 updateOnContentResize:true, /*auto-update scrollbars on content resize (for dynamic content): boolean*/ 1439 autoExpandHorizontalScroll:false }, /*auto expand width for horizontal scrolling: boolean*/ 1440 scrollButtons:{ enable:true, /*scroll buttons support: boolean*/ 1441 scrollType:"continuous", /*scroll buttons scrolling type: "continuous", "pixels"*/ 1442 scrollSpeed:"auto", /*scroll buttons continuous scrolling speed: integer, "auto"*/ 1443 scrollAmount:40 }, /*scroll buttons pixels scroll amount: integer (pixels)*/ 1444 theme:"${model.customScrollbarTheme}", 1445 scrollbarPosition:"inside" 1446 }); 1447 }); 1448 })(jQuery); 1449 </script> 1450</c:if> 1451 1452</body> 1453</html> 1454