Browse Source

Udpated Music App from Tocas to segmentic

Toby Chui 3 years ago
parent
commit
ae70b65f0c

BIN
web/Music/img/default.png


BIN
web/Music/img/default.psd


BIN
web/Music/img/default_legacy.png


+ 9 - 0
web/Music/img/fo.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="#FFFCFF" d="M7,40c-0.767,0-1.458-0.309-2.075-0.925S4,37.767,4,37V11c0-0.767,0.308-1.458,0.925-2.075S6.233,8,7,8
+	h14.05l3,3H41c0.767,0,1.459,0.308,2.075,0.925S44,13.233,44,14H7v23l5.1-20H47l-5.35,20.7c-0.2,0.8-0.566,1.384-1.101,1.75
+	C40.017,39.816,39.334,40,38.5,40H7z"/>
+</svg>

+ 9 - 0
web/Music/img/folder.svg

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="#FFFFFF" d="M7.05,40c-0.8,0-1.5-0.309-2.1-0.925c-0.6-0.616-0.9-1.309-0.9-2.075V11c0-0.767,0.3-1.458,0.9-2.075
+	C5.55,8.308,6.25,8,7.05,8h14l3,3h17c0.767,0,1.458,0.308,2.075,0.925S44.05,13.233,44.05,14v23c0,0.767-0.308,1.459-0.925,2.075
+	S41.816,40,41.05,40H7.05z"/>
+</svg>

+ 10 - 0
web/Music/img/list.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="圖層_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve">
+<path fill="#FFFFFC" d="M32,40c-1.633,0-3.033-0.559-4.2-1.675s-1.75-2.476-1.75-4.075s0.559-2.959,1.675-4.075
+	C28.842,29.059,30.2,28.5,31.8,28.5c0.534,0,1.059,0.05,1.575,0.15c0.517,0.1,1.025,0.266,1.525,0.5V12H44v3.55h-6.1V34.3
+	c0,1.567-0.575,2.909-1.726,4.025C35.025,39.441,33.633,40,32,40z M6,31.5v-3h15.3v3H6z M6,23.25v-3h23.65v3H6z M6,15v-3h23.65v3H6z
+	"/>
+</svg>

+ 154 - 144
web/Music/index.html

@@ -5,11 +5,12 @@
 	<meta name="apple-mobile-web-app-capable" content="yes" />
 	<meta name="apple-mobile-web-app-capable" content="yes" />
 	<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
 	<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1"/>
 	<meta name="theme-color" content="#4b75ff">
 	<meta name="theme-color" content="#4b75ff">
-	<link rel="stylesheet" href="../script/tocas/tocas.css">
+	<link rel="stylesheet" href="../script/semantic/semantic.min.css">
 	<link rel="stylesheet" href="./main.css">
 	<link rel="stylesheet" href="./main.css">
-	<script src="../script/tocas/tocas.js"></script>
 	<script src="../script/jquery.min.js"></script>
 	<script src="../script/jquery.min.js"></script>
 	<script src="../script/ao_module.js"></script>
 	<script src="../script/ao_module.js"></script>
+	<script src="../script/semantic/semantic.min.js"></script>
+	
 	<!-- Handle native playback on Chrome Andoird-->
 	<!-- Handle native playback on Chrome Andoird-->
 	<script src="native.js"></script>
 	<script src="native.js"></script>
 
 
@@ -17,24 +18,24 @@
 	<title>AirMusic</title>
 	<title>AirMusic</title>
 </head>
 </head>
 <body>
 <body>
-<div id="mainMenu" class="ts basic fluid AMmenu menu bottomBlue" style="z-index:80;position:fixed;position:top:0px;left:0px;width:100%;">
-    <button class="ts item icon noBorder AMmenu button" onClick="toggleLeftMenu();"><i class="content icon"></i></button>
+<div id="mainMenu" class="ui basic fluid AMmenu menu bottomBlue" style="z-index:80;position:fixed;position:top:0px;left:0px;width:100%;">
+    <button class="ui item icon noBorder AMmenu button" onClick="toggleLeftMenu();"><i class="content icon"></i></button>
 	<div class="item noBorder AMmenu" style="padding-right:0px;padding-top:12px;"><i id="AMmenuIcon" class="music icon large whiteFont"></i></div>
 	<div class="item noBorder AMmenu" style="padding-right:0px;padding-top:12px;"><i id="AMmenuIcon" class="music icon large whiteFont"></i></div>
 	<div class="item noBorder AMmenu" style="padding-left:3px;padding-top:3px;padding-bottom:5px;min-width:50%;">
 	<div class="item noBorder AMmenu" style="padding-left:3px;padding-top:3px;padding-bottom:5px;min-width:50%;">
-		<div class="ts header whiteFont">
-			<div id="interfaceTitle" style="display:inline;">Music</div>
-			<div id="interfaceDetails" class="sub header" style="font-size:80%;line-height:1em;">[0 songs]</div>
+		<div class="ui header whiteFont">
+			<div id="interfaceTitle" style="display:inline; font-weight: lighter;">Music</div>
+			<div id="interfaceDetails" class="sub header" style="font-size:80%; line-height:1em; color: white;">[0 songs]</div>
 		</div>
 		</div>
 	</div>
 	</div>
-	<button class="ts right item icon AMmenu noBorder button" onClick="enterSearchMode();"><i class="search icon"></i></button>
-	<!-- <button class="ts right item icon AMmenu noBorder button"><i class="ellipsis vertical icon"></i></button> -->
+	<button class="ui right item icon AMmenu noBorder button" onClick="enterSearchMode();"><i class="search icon"></i></button>
+	<!-- <button class="ui right item icon AMmenu noBorder button"><i class="ellipsis vertical icon"></i></button> -->
 </div>
 </div>
-<div id="searchModeMenu" class="ts basic fluid AMmenu menu bottomBlue" style="z-index:85;position:fixed;top:0px;left:0px;width:100%;height:51px;display:none;">
-    <button class="ts item icon noBorder AMmenu button" onClick="exitSearchMode();"><i class="arrow left icon"></i></button>
-	<div class="ts fluid input" >
+<div id="searchModeMenu" class="ui basic fluid AMmenu menu bottomBlue" style="z-index:85;position:fixed;top:0px;left:0px;width:100%;height:51px;display:none;">
+    <button class="ui item icon noBorder AMmenu button" onClick="exitSearchMode();"><i class="arrow left icon"></i></button>
+	<div class="ui fluid input" >
 		<input id="searchInputBar" onkeypress="//handleSearchInputEnter(event);" type="text" style="background-color:rgb(48, 48, 48);border:0px !important;border-bottom:2px solid rgb(60, 60, 60) !important;margin-bottom:3px;color:white;" placeholder="Search Music">
 		<input id="searchInputBar" onkeypress="//handleSearchInputEnter(event);" type="text" style="background-color:rgb(48, 48, 48);border:0px !important;border-bottom:2px solid rgb(60, 60, 60) !important;margin-bottom:3px;color:white;" placeholder="Search Music">
 	</div>
 	</div>
-	<button class="ts right item icon AMmenu noBorder button" onClick="searchSong();"><i class="search icon"></i></button>
+	<button class="ui right item icon AMmenu noBorder button" onClick="searchSong();"><i class="search icon"></i></button>
 </div>
 </div>
 <!-- The main list that display the current information-->
 <!-- The main list that display the current information-->
 <div id="mainList">
 <div id="mainList">
@@ -44,7 +45,7 @@
 <!-- Advance functions config menu-->
 <!-- Advance functions config menu-->
 <div id="showmoreUIcover" style="position:fixed;left:0px;top:0px;width:100%;height:100%;background:rgba(30,30,30,0.7);z-index:95;display:none;" onClick="hideShowMoreMenu();"></div>
 <div id="showmoreUIcover" style="position:fixed;left:0px;top:0px;width:100%;height:100%;background:rgba(30,30,30,0.7);z-index:95;display:none;" onClick="hideShowMoreMenu();"></div>
 <div id="showMoreUI" class="showMoreMenus" style="display:none;">
 <div id="showMoreUI" class="showMoreMenus" style="display:none;">
-    <div class="ts large header whiteFont songTitle">N/A</div>
+    <div class="ui large header whiteFont songTitle">N/A</div>
     <div class="showMoreMenuItem" onClick="playFromShowMoreMenu();">Play</div>
     <div class="showMoreMenuItem" onClick="playFromShowMoreMenu();">Play</div>
     <div class="showMoreMenuItem" onclick='addToPlaylistFromMoreMenu();'>Add to Playlist</div>
     <div class="showMoreMenuItem" onclick='addToPlaylistFromMoreMenu();'>Add to Playlist</div>
     <div class="showMoreMenuItem playlistonly" onclick="removeFromPlylistFromMoreMenu();">Remove from current Playlist</div>
     <div class="showMoreMenuItem playlistonly" onclick="removeFromPlylistFromMoreMenu();">Remove from current Playlist</div>
@@ -57,11 +58,11 @@
     <div class="topRightCorner songID" align="center" style="margin-top:10px !important;padding-top:3px !important;">-1</div>
     <div class="topRightCorner songID" align="center" style="margin-top:10px !important;padding-top:3px !important;">-1</div>
 </div>
 </div>
 <div id="showFileInfo" class="showMoreMenus" style="display:none;">
 <div id="showFileInfo" class="showMoreMenus" style="display:none;">
-    <div class="ts large header">
+    <div class="ui large header">
 		<span class="filename whiteFont">Title</span>
 		<span class="filename whiteFont">Title</span>
 		<div class="sub header rawname whiteFont" style="word-break: break-all !important; font-size:80%;">Storage Name</div>
 		<div class="sub header rawname whiteFont" style="word-break: break-all !important; font-size:80%;">Storage Name</div>
 	</div>
 	</div>
-	<div class="ts list whiteFont">
+	<div class="ui list whiteFont">
 		<div class="item whiteFont">Storage Location:   <span class="filepath" style="word-break:break-all;">N/A</span></div>
 		<div class="item whiteFont">Storage Location:   <span class="filepath" style="word-break:break-all;">N/A</span></div>
 		<div class="item whiteFont">File Size:   <span class="filesize">N/A</span></div>
 		<div class="item whiteFont">File Size:   <span class="filesize">N/A</span></div>
 		<div class="item whiteFont">Last Modification Date:   <span class="filedate">N/A</span></div>
 		<div class="item whiteFont">Last Modification Date:   <span class="filedate">N/A</span></div>
@@ -72,10 +73,10 @@
 <div id="sideBarCover" style="position:fixed;left:0px;top:0px;width:100%;height:100%;background:rgba(30,30,30,0.7);z-index:50;display:none;" onClick="toggleLeftMenu();"></div>
 <div id="sideBarCover" style="position:fixed;left:0px;top:0px;width:100%;height:100%;background:rgba(30,30,30,0.7);z-index:50;display:none;" onClick="toggleLeftMenu();"></div>
 <div id="leftSideBar" class="leftsb" style="max-width:60%;height:100%;z-index:90;display:none;">
 <div id="leftSideBar" class="leftsb" style="max-width:60%;height:100%;z-index:90;display:none;">
 	<div class="leftsbObject sidebarBanner">
 	<div class="leftsbObject sidebarBanner">
-		<img class="ts tiny middle aligned image" src="img/main_icon.png" style="max-width: 50px;"><h5 class="whiteFont" style="display:inline;padding-left:8px;">AirMusic</h5>
+		<img class="ui tiny middle aligned image" src="img/main_icon.png" style="max-width: 50px;"><h5 class="whiteFont" style="display:inline;padding-left:8px;">AirMusic</h5>
 	</div>
 	</div>
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadSongList();setStorage('viewingTab','music');">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadSongList();setStorage('viewingTab','music');">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="music tiny icon whiteFont"></i>
 			<i class="music tiny icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Music
 				Music
@@ -83,7 +84,7 @@
 		</div>
 		</div>
 	</div>
 	</div>
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadFolderView();setStorage('viewingTab','folder');">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadFolderView();setStorage('viewingTab','folder');">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="folder tiny icon whiteFont"></i>
 			<i class="folder tiny icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Folder
 				Folder
@@ -91,7 +92,7 @@
 		</div>
 		</div>
 	</div>
 	</div>
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadPlaylistView(); setStorage('viewingTab','playlist');">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadPlaylistView(); setStorage('viewingTab','playlist');">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="align justify tiny icon whiteFont"></i>
 			<i class="align justify tiny icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Playlists
 				Playlists
@@ -99,7 +100,7 @@
 		</div>
 		</div>
 	</div>
 	</div>
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadNetworkView(); setStorage('viewingTab','network');">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="loadNetworkView(); setStorage('viewingTab','network');">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="world tiny icon whiteFont"></i>
 			<i class="world tiny icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Network
 				Network
@@ -108,7 +109,7 @@
 	</div>
 	</div>
 	<!-- 
 	<!-- 
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;" onClick="">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="upload icon whiteFont"></i>
 			<i class="upload icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Upload
 				Upload
@@ -117,7 +118,7 @@
 	</div>
 	</div>
 	-->
 	-->
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;border-top: 2px solid #4a4a4a;">
 	<div class="leftsbObject sbSelectable sbPaddingIn" style="font-size:80%;border-top: 2px solid #4a4a4a;">
-		<div class="ts header">
+		<div class="ui header">
 			<i class="setting tiny icon whiteFont"></i>
 			<i class="setting tiny icon whiteFont"></i>
 			<div class="content whiteFont">
 			<div class="content whiteFont">
 				Settings
 				Settings
@@ -129,8 +130,8 @@
 <!-- Mini player controller put on the bottom side of the list interface-->
 <!-- Mini player controller put on the bottom side of the list interface-->
 <div id="miniPlayer" class="hidden">
 <div id="miniPlayer" class="hidden">
     <div style="padding-left:20px;padding-top:5px;" >
     <div style="padding-left:20px;padding-top:5px;" >
-        <div class="ts header selectable" style="margin:0px !important;width:300px;cursor:pointer;" onClick="showMainPlayerInterface();">
-            <i class="music icon whiteFont" style="overflow:hidden;"></i>
+        <div class="ui header selectable" style="margin:0px !important;width:300px;cursor:pointer;" onClick="showMainPlayerInterface();">
+            <img id="smallPlayerThumb" class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>
             <div class="content whiteFont" style="padding-top:5px;line-height:1em;">
             <div class="content whiteFont" style="padding-top:5px;line-height:1em;">
                 <div id="miniPlayerDisplayName" style="text-overflow: ellipsis;overflow: hidden;max-width:200px; white-space: nowrap;">N/A</div>
                 <div id="miniPlayerDisplayName" style="text-overflow: ellipsis;overflow: hidden;max-width:200px; white-space: nowrap;">N/A</div>
                 <div id="miniPlayerInformation" class="sub header" style="color: #c7c7c7;size:95%;">No information</div>
                 <div id="miniPlayerInformation" class="sub header" style="color: #c7c7c7;size:95%;">No information</div>
@@ -141,9 +142,9 @@
         0/0
         0/0
     </div>
     </div>
     <div class="miniPlayerControls">
     <div class="miniPlayerControls">
-        <button class="miniPlayer selectable" style="font-size:90%;" onClick="previousSong();"><i class="step backward icon whiteFont"></i></button>
-        <button class="miniPlayer selectable" style="font-size:120%;" onClick="togglePlayMode();"><i class="play icon whiteFont PlayButton"></i></button>
-        <button class="miniPlayer selectable" style="font-size:90%;" onClick="nextSong();"><i class="step forward icon whiteFont "></i></button>
+        <button class="miniPlayer selectable" style="font-size:90%; font-weight: lighter;" onClick="previousSong();"><i class="step backward icon whiteFont"></i></button>
+        <button class="miniPlayer selectable" style="font-size:120%; font-weight: lighter;" onClick="togglePlayMode();"><i class="play icon whiteFont PlayButton"></i></button>
+        <button class="miniPlayer selectable" style="font-size:90%; font-weight: lighter;" onClick="nextSong();"><i class="step forward icon whiteFont "></i></button>
     </div>
     </div>
 </div>
 </div>
 <!-- Main interface for player and audio controller-->
 <!-- Main interface for player and audio controller-->
@@ -162,29 +163,29 @@
             <i class="large content icon"></i>
             <i class="large content icon"></i>
         </div>
         </div>
     </div>
     </div>
-    <div style="padding-left:20px; padding-right:20px;padding-bottom:5px;" align="center">
+    <div style="padding-left:20px; padding-right:20px;padding-bottom:5px; position: relative;" align="center">
         <!-- Function Menu Bar-->
         <!-- Function Menu Bar-->
-        <div class="ts grid">
-            <div class="two wide column"><button style="cursor: pointer;" onclick="showPlaylistInterface();"><i class="large plus icon whiteFont"></i></button></div>
-            <div class="two wide column"><button id="downloadBtn" style="cursor: pointer;" onClick="downloadPlayingSong();"><i class="large download icon whiteFont"></i></button></div>
-            <div class="two wide column"><button style="cursor: pointer;" onClick="openInFileExplorer();"><i class="large folder open icon whiteFont"></i></button></div>
-            <div class="two wide column desktopOnly"><button style="cursor: pointer;" onClick="mute();" ><i class="large volume off icon whiteFont"></i></button></div>
-            <div class="two wide column desktopOnly"><button style="cursor: pointer;" onClick="addAudioVolume(-0.05);"><i class="large volume down icon whiteFont"></i></button></div>
-            <div class="two wide column desktopOnly"><button style="cursor: pointer;" onClick="addAudioVolume(0.05);"><i class="large volume up icon whiteFont"></i></button></div>
-            <div class="two wide column"><button style="cursor: pointer;" onClick="showTimerInterface();"><i class="large clock icon whiteFont"></i></button></div>
-            <div class="two wide column"><button style="cursor: pointer;" onClick="showSettingInterface();"><i class="large setting icon whiteFont"></i></button></div>
+        <div class="ui grid">
+            <div class="two wide column"><button class="topPanelButtons" style="cursor: pointer;" onclick="showPlaylistInterface();"><i class="large plus icon whiteFont"></i></button></div>
+            <div class="two wide column"><button class="topPanelButtons" id="downloadBtn" style="cursor: pointer;" onClick="downloadPlayingSong();"><i class="large download icon whiteFont"></i></button></div>
+            <div class="two wide column"><button class="topPanelButtons" style="cursor: pointer;" onClick="openInFileExplorer();"><i class="large folder open icon whiteFont"></i></button></div>
+            <div class="two wide column desktopOnly" style="margin-top: -4px;"><button class="topPanelButtons" style="cursor: pointer; opacity: 0.6;" onClick="mute(this);" ><i class="icons"><i class="big red dont icon"></i><i style="margin-left: -3px;" class="large volume off icon whiteFont"></i></i></button></div>
+            <div class="two wide column desktopOnly"><button class="topPanelButtons" id="voldownBtn" style="cursor: pointer;" onClick="addAudioVolume(-0.05);"><i class="large volume down icon whiteFont"></i></button></div>
+            <div class="two wide column desktopOnly"><button class="topPanelButtons" id="volupBtn" style="cursor: pointer;" onClick="addAudioVolume(0.05);"><i class="large volume up icon whiteFont"></i></button></div>
+            <div class="two wide column"><button class="topPanelButtons" style="cursor: pointer;" onClick="showTimerInterface();"><i class="large clock icon whiteFont"></i></button></div>
+            <div class="two wide column"><button class="topPanelButtons" style="cursor: pointer;" onClick="showSettingInterface();"><i class="large setting icon whiteFont"></i></button></div>
         </div>
         </div>
-        <div id="volumeGUI">
-            <i class="volume off large icon whiteFont" style="position:absolute;left:12%;top:10px;"></i>
-            <div class="ts tiny progress">
-                <div id="volBar" class="bar" style="width: 40%"></div>
+        <div id="volumeGUI" align="center">
+            <i class="volume off large icon whiteFont" style="position:absolute;left:2em;top:1em;"></i>
+            <div class="ui tiny progress" style=" margin-top: calc(2em - 5px); margin-bottom: 0; background-color: rgba(255,255,255,0.2);" align="left">
+                <div id="volBar" class="bar" style="min-width: 0px; width: 40%; height: 10px; background-color: #4b75ff;"></div>
             </div>
             </div>
-           <i class="volume up large icon whiteFont" style="position:absolute;right:12%;top:10px;"></i>
+           <i class="volume up large icon whiteFont" style="position:absolute;right:2em;top:1em;"></i>
         </div>
         </div>
     </div>
     </div>
 	<!-- Download progress bar-->
 	<!-- Download progress bar-->
-	<div id="downloadProgressBar" class="ts attached fluid tiny progress" style="background-color:rgba(20, 20, 20, 0.9);display:none;">
-		<div class="bar" style="width: 0%;background-color:rgb(75, 117, 255) !important;"></div>
+	<div id="downloadProgressBar" class="ui attached fluid tiny progress" style="background-color:rgba(20, 20, 20, 0.9);display:none;">
+		<div class="bar" style="min-width: 0px; width: 0%;background-color:rgb(75, 117, 255) !important;"></div>
 	</div>
 	</div>
 
 
     <div id="albumnArt" align="center">
     <div id="albumnArt" align="center">
@@ -206,14 +207,14 @@
         
         
         <div style="position:absolute;width:100%;left:0px;bottom:0px;">
         <div style="position:absolute;width:100%;left:0px;bottom:0px;">
             <div style="padding-left:10px;padding-right:10px;">
             <div style="padding-left:10px;padding-right:10px;">
-                <div class="ts small primary progress">
-                    <div id="audioProgressBar" class="bar" style="width: 100%; background: #4b75ff;"></div>
+                <div class="ui small primary progress" style="background-color: rgba(255,255,255,0.4);">
+                    <div id="audioProgressBar" class="bar" style="min-width: 0px; width: 100%; background: #4b75ff;"></div>
                 </div>
                 </div>
             </div>
             </div>
             <div class="mainControlButtons">
             <div class="mainControlButtons">
-                <button style="font-size:90%;padding:15px;" onClick="previousSong();"><i class="step backward icon whiteFont"></i></button>
-                <button style="font-size:130%;" onClick="togglePlayMode();"><i class="play icon whiteFont PlayButton"></i></button>
-                <button style="font-size:90%;padding:15px;" onClick="nextSong();"><i class="step forward icon whiteFont "></i></button>
+                <button class="panelButtons" style="font-size:90%;padding:15px;" onClick="previousSong();"><i class="step backward icon whiteFont"></i></button>
+                <button class="panelButtons" style="font-size:130%;" onClick="togglePlayMode();"><i class="play icon whiteFont PlayButton"></i></button>
+                <button class="panelButtons" style="font-size:90%;padding:15px;" onClick="nextSong();"><i class="step forward icon whiteFont "></i></button>
             </div>
             </div>
             <div id="randomModeButton" style="position: absolute; left:30px;bottom:20px;" onClick="toggleRandomMode(this);">
             <div id="randomModeButton" style="position: absolute; left:30px;bottom:20px;" onClick="toggleRandomMode(this);">
                 <i class="large random icon disabled"></i>
                 <i class="large random icon disabled"></i>
@@ -253,63 +254,63 @@
 	<br>
 	<br>
 	<div id="timerSettingInterface" style="width:100%;" align="center">
 	<div id="timerSettingInterface" style="width:100%;" align="center">
 		<div>
 		<div>
-			<div class="ts statistic">
+			<div class="ui statistic">
 				<div class="label whiteFont">hours</div>
 				<div class="label whiteFont">hours</div>
 				<div id="timerHour" class="value whiteFont">0</div>
 				<div id="timerHour" class="value whiteFont">0</div>
 			</div>
 			</div>
-			 <div class="ts statistic">
+			 <div class="ui statistic">
 				<div class="label whiteFont">minutes</div>
 				<div class="label whiteFont">minutes</div>
 				<div id="timerMinute" class="value whiteFont">0</div>
 				<div id="timerMinute" class="value whiteFont">0</div>
 			</div>
 			</div>
 		</div>
 		</div>
 		<div>
 		<div>
-			<div class="ts icon mini buttons">
-				<button class="ts inverted button" onClick="addTimer('h',1);"><i class="add icon"></i></button>
-				<button class="ts inverted button" onClick="addTimer('h','r');"><i class="refresh icon"></i></button>
-				<button class="ts inverted button" onClick="addTimer('h',-1);"><i class="minus icon"></i></button>
+			<div class="ui icon mini buttons">
+				<button class="ui secondary button" onClick="addTimer('h',1);"><i class="add icon"></i></button>
+				<button class="ui secondary button" onClick="addTimer('h','r');"><i class="refresh icon"></i></button>
+				<button class="ui secondary button" onClick="addTimer('h',-1);"><i class="minus icon"></i></button>
 			 </div>
 			 </div>
-			 <div class="ts icon mini buttons">
-				<button class="ts inverted button" onClick="addTimer('m',10);"><i class="add icon"></i></button>
-				<button class="ts inverted button" onClick="addTimer('m','r');"><i class="refresh icon"></i></button>
-				<button class="ts inverted button" onClick="addTimer('m',-1);"><i class="minus icon"></i></button>
+			 <div class="ui icon mini buttons">
+				<button class="ui secondary button" onClick="addTimer('m',10);"><i class="add icon"></i></button>
+				<button class="ui secondary button" onClick="addTimer('m','r');"><i class="refresh icon"></i></button>
+				<button class="ui secondary button" onClick="addTimer('m',-1);"><i class="minus icon"></i></button>
 			 </div>
 			 </div>
 		</div>
 		</div>
 	</div>
 	</div>
 	<div id="timerCountingInterface" style="width:100%; display:none;" align="center">
 	<div id="timerCountingInterface" style="width:100%; display:none;" align="center">
-		<div class="ts statistic">
+		<div class="ui statistic">
 			<div id="remainingUI" class="value whiteFont">0:00:00</div>
 			<div id="remainingUI" class="value whiteFont">0:00:00</div>
 			<div class="label whiteFont">Remaining</div>
 			<div class="label whiteFont">Remaining</div>
 		</div>
 		</div>
 	</div>
 	</div>
-	<div class="ts divider"></div>
+	<div class="ui divider"></div>
 	<div>
 	<div>
-		<div class="ts grid">
+		<div class="ui grid">
 			<div class="eight wide column">
 			<div class="eight wide column">
 				Times up action
 				Times up action
 			</div>
 			</div>
 			<div class="eight wide column">
 			<div class="eight wide column">
-				<select id="stopMode" class="ts basic inverted mini dropdown">
+				<select id="stopMode" class="ui selection mini fluid dropdown">
 					<option>Fade Out & Stop</option>
 					<option>Fade Out & Stop</option>
 					<option>Stop Playing</option>
 					<option>Stop Playing</option>
 				</select>
 				</select>
 			</div>
 			</div>
 		</div>
 		</div>
 	</div>
 	</div>
-	<div style="width:100%;position:absolute;left:0px;bottom:0px; margin-bottom: 10px;;" align="center">
-		<div class="ts grid" >
-			<div class="eight wide column" style="padding-right: 0px;" align="center"><button class="greenBtn" onClick='hideAllquickMenu();'>Close</button></div>
-			<div class="eight wide column"  style="padding-left: 0px;" align="center"><button class="greenBtn" onClick="toggleCountDown(this);">Start</button></div>
+	<div style="width:100%;position:absolute;left:0px;bottom:20px;" align="right">
+		<div class="ui grid" >
+			<div class="eight wide column" style="padding-right: 0px;" align="center"><button class="greenBtn fluid" onClick='hideAllquickMenu();'>Close</button></div>
+			<div class="eight wide column"  style="padding-left: 0px;" align="center"><button class="greenBtn fluid" onClick="toggleCountDown(this);">Start</button></div>
 		</div> 
 		</div> 
 	</div>
 	</div>
 </div>
 </div>
 
 
 <!-- File properties interface-->
 <!-- File properties interface-->
 <div id="filepropInterface" class="quickMenu">
 <div id="filepropInterface" class="quickMenu">
-	<div class="ts header">
+	<div class="ui header">
 		<span class="filename whiteFont">Title</span>
 		<span class="filename whiteFont">Title</span>
 		<div class="sub header rawname whiteFont"  style="word-break:break-all;">Storage Name</div>
 		<div class="sub header rawname whiteFont"  style="word-break:break-all;">Storage Name</div>
 	</div>
 	</div>
-	<div class="ts list whiteFont">
+	<div class="ui list whiteFont">
 		<div class="item whiteFont">Storage Location:   <span class="filepath"  style="word-break:break-all;">N/A</span></div>
 		<div class="item whiteFont">Storage Location:   <span class="filepath"  style="word-break:break-all;">N/A</span></div>
 		<div class="item whiteFont">File Size:   <span class="filesize">N/A</span></div>
 		<div class="item whiteFont">File Size:   <span class="filesize">N/A</span></div>
 		<div class="item whiteFont">Last Modification Date:   <span class="filedate">N/A</span></div>
 		<div class="item whiteFont">Last Modification Date:   <span class="filedate">N/A</span></div>
@@ -318,13 +319,13 @@
 <!-- Setting interface-->
 <!-- Setting interface-->
 <div id="settingInterface" class="quickMenu">
 <div id="settingInterface" class="quickMenu">
 	<div style="">
 	<div style="">
-		<div class="ts relaxed list" style="padding:0px !important;">
+		<div class="ui relaxed list" style="padding:0px !important;">
 			<div id="settingMenuTitle" class="item whiteFont" style="">N/A</div>
 			<div id="settingMenuTitle" class="item whiteFont" style="">N/A</div>
 			<div class="item selectable whiteFont" onclick="showPlaylistInterface(); $('#settingInterface').fadeOut('fast');"><i class="add icon" style="margin-right:5px;"></i> Add to playlist</div>
 			<div class="item selectable whiteFont" onclick="showPlaylistInterface(); $('#settingInterface').fadeOut('fast');"><i class="add icon" style="margin-right:5px;"></i> Add to playlist</div>
 			<div class="item selectable whiteFont" onClick="openInFileExplorer(); hideAllquickMenu();"><i class="folder open icon" style="margin-right:5px;"></i> Open in File Explorer</div>
 			<div class="item selectable whiteFont" onClick="openInFileExplorer(); hideAllquickMenu();"><i class="folder open icon" style="margin-right:5px;"></i> Open in File Explorer</div>
 			<div class="item selectable whiteFont" onClick="searchOnYoutube(); hideAllquickMenu();"><i class="youtube play icon" style="margin-right:5px;"></i>Search on Youtube</div>
 			<div class="item selectable whiteFont" onClick="searchOnYoutube(); hideAllquickMenu();"><i class="youtube play icon" style="margin-right:5px;"></i>Search on Youtube</div>
 			<div class="item selectable whiteFont" onClick="showFileInformation();"><i class="file icon" style="margin-right:5px;"></i> File Information</div>
 			<div class="item selectable whiteFont" onClick="showFileInformation();"><i class="file icon" style="margin-right:5px;"></i> File Information</div>
-			<div class="ts divider"></div>
+			<div class="ui divider"></div>
 			<div id="closeWebAppButton" class="item selectable whiteFont"  onClick="ao_module_close();"><i class="remove icon" style="margin-right:5px;"></i> Exit Application</div>
 			<div id="closeWebAppButton" class="item selectable whiteFont"  onClick="ao_module_close();"><i class="remove icon" style="margin-right:5px;"></i> Exit Application</div>
 		</div>
 		</div>
 	</div>
 	</div>
@@ -333,7 +334,7 @@
 
 
 <!-- Playlist interface-->
 <!-- Playlist interface-->
 <div id="playlistInterface" class="quickMenu">
 <div id="playlistInterface" class="quickMenu">
-	<div class="ts header">
+	<div class="ui header">
 		<span class="whiteFont">Add to Playlist</span>
 		<span class="whiteFont">Add to Playlist</span>
 	</div>
 	</div>
 	<div class="playlist item selectable whiteFont" onclick="addToNewPlaylist();">
 	<div class="playlist item selectable whiteFont" onclick="addToNewPlaylist();">
@@ -346,10 +347,10 @@
 		</div>
 		</div>
 	</div>
 	</div>
 	<br>
 	<br>
-	<div style="width:100%;position:absolute;left:0px;bottom:0px; margin-bottom: 10px;;" align="center">
+	<div style="width:100%;position:absolute;left:0px;bottom:0px; margin-bottom: 10px;" align="center">
 	<button class="greenBtn" onClick='hideAllquickMenu();'>Close</button>
 	<button class="greenBtn" onClick='hideAllquickMenu();'>Close</button>
 	</div>
 	</div>
-	<div class="ts snackbar" id="succSnackBar">
+	<div class="ui snackbar" id="succSnackBar">
 		<div class="content">
 		<div class="content">
 			Action Completed
 			Action Completed
 		</div>
 		</div>
@@ -593,7 +594,7 @@
 		}
 		}
 		//Clear the mainList, replace with a dummy loading screen
 		//Clear the mainList, replace with a dummy loading screen
 		$("#mainList").html('<div class="mainList item whiteFont">\
 		$("#mainList").html('<div class="mainList item whiteFont">\
-			<div class="ts header" style="margin:0px !important;padding-bottom:15px;padding-top:5px;">\
+			<div class="ui header" style="margin:0px !important;padding-bottom:15px;padding-top:5px;">\
 			<i class="loading spinner icon whiteFont" style="overflow:hidden;margin-top:5px;"></i>\
 			<i class="loading spinner icon whiteFont" style="overflow:hidden;margin-top:5px;"></i>\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 					Searching...\
 					Searching...\
@@ -609,8 +610,8 @@
 		}, function(data){
 		}, function(data){
 			currentPath = "";
 			currentPath = "";
 			var template = '<div class="mainList item" filepath={filepath} id={id} rawname={rawname}>\
 			var template = '<div class="mainList item" filepath={filepath} id={id} rawname={rawname}>\
-			<div class="ts header selectable" style="margin:0px !important;" onClick="playSong(this);">\
-				<i class="music icon whiteFont" style="overflow:hidden;"></i>\
+			<div class="ui header selectable" style="margin:0px !important;" onClick="playSong(this);">\
+				<img class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 					{songtitle}\
 					{songtitle}\
 					<div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
 					<div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
@@ -634,7 +635,7 @@
 			//No search results.
 			//No search results.
 			$("#mainList").html("");
 			$("#mainList").html("");
 			$("#mainList").append('<div class="mainList item whiteFont">\
 			$("#mainList").append('<div class="mainList item whiteFont">\
-			<div class="ts header" style="margin:0px !important;padding-bottom:15px;padding-top:5px;">\
+			<div class="ui header" style="margin:0px !important;padding-bottom:15px;padding-top:5px;">\
 			<i class="remove icon whiteFont" style="overflow:hidden;margin-top:5px;"></i>\
 			<i class="remove icon whiteFont" style="overflow:hidden;margin-top:5px;"></i>\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
 					No result for keyword: ' + keyword + '.\
 					No result for keyword: ' + keyword + '.\
@@ -779,7 +780,13 @@
             timerMode = true;
             timerMode = true;
             $(button).text("Stop");
             $(button).text("Stop");
             timerRemaining = ((parseInt($("#timerHour").text()) * 60) + parseInt($("#timerMinute").text())) * 60; //in seconds
             timerRemaining = ((parseInt($("#timerHour").text()) * 60) + parseInt($("#timerMinute").text())) * 60; //in seconds
-            //Update the value on the remaining counter
+            if (timerRemaining <= 0){
+				//Start with 0
+				timerMode = false;
+				$(button).text("Start");
+				return;
+			}
+			//Update the value on the remaining counter
             $("#remainingUI").text(parseTimer(timerRemaining));
             $("#remainingUI").text(parseTimer(timerRemaining));
             $("#timerSettingInterface").slideUp('fast');
             $("#timerSettingInterface").slideUp('fast');
             $("#timerCountingInterface").slideDown('fast');
             $("#timerCountingInterface").slideDown('fast');
@@ -954,14 +961,20 @@
 	
 	
 	//Volume control related features
 	//Volume control related features
 	var previousAudioVolume = 0;
 	var previousAudioVolume = 0;
-	function mute(){
+	function mute(button){
 	    if (audioElement[0].volume != 0){
 	    if (audioElement[0].volume != 0){
 	        //Set to mute
 	        //Set to mute
 	        previousAudioVolume = audioElement[0].volume;
 	        previousAudioVolume = audioElement[0].volume;
 	        audioElement[0].volume = 0;
 	        audioElement[0].volume = 0;
+			$(button).css("opacity", "1");
+			$("#voldownBtn").addClass("disabled");
+			$("#volupBtn").addClass("disabled");
 	    }else{
 	    }else{
 	        //Restore from mute
 	        //Restore from mute
 	        audioElement[0].volume = previousAudioVolume;
 	        audioElement[0].volume = previousAudioVolume;
+			$(button).css("opacity", "0.6");
+			$("#voldownBtn").removeClass("disabled");
+			$("#volupBtn").removeClass("disabled");
 	    }
 	    }
 	    $("#volBar").css("width",audioElement[0].volume * 100 + "%");
 	    $("#volBar").css("width",audioElement[0].volume * 100 + "%");
 	}
 	}
@@ -1163,8 +1176,8 @@
 		highLightPlayingMusic();
 		highLightPlayingMusic();
 	}
 	}
 
 
-	function loadThumbnailToMusicList(){
-		$(".mainList.file.item").each(function(){
+	function loadThumbnailToMusicList(selector = ".mainList.file.item"){
+		$(selector).each(function(){
 			let filepath = JSON.parse(decodeURIComponent($(this).attr("filepath")));
 			let filepath = JSON.parse(decodeURIComponent($(this).attr("filepath")));
 			let thisFileItemID = $(this).attr("id");
 			let thisFileItemID = $(this).attr("id");
 			let rawname = JSON.parse(decodeURIComponent($(this).attr("rawname")));
 			let rawname = JSON.parse(decodeURIComponent($(this).attr("rawname")));
@@ -1173,7 +1186,7 @@
 			let realVpath = filepath.split("=");
 			let realVpath = filepath.split("=");
 			realVpath.shift();
 			realVpath.shift();
 			realVpath = realVpath.join("=");
 			realVpath = realVpath.join("=");
-			console.log(thisFileItemID, realVpath, rawname);
+			//console.log(thisFileItemID, realVpath, rawname);
 			//Load the thumbnail for this item in list
 			//Load the thumbnail for this item in list
 			ao_module_agirun("Music/functions/getThumbnail.js", {
 			ao_module_agirun("Music/functions/getThumbnail.js", {
 				file: realVpath,
 				file: realVpath,
@@ -1198,6 +1211,7 @@
 			if (data.error !== undefined){
 			if (data.error !== undefined){
 				console.log(data.error)
 				console.log(data.error)
 				$("#albumnArtImage").attr("src","img/default.png");
 				$("#albumnArtImage").attr("src","img/default.png");
+				$("#smallPlayerThumb").attr("src","img/default.png");
 				if (navigator.mediaSession.metadata){
 				if (navigator.mediaSession.metadata){
 					navigator.mediaSession.metadata.artwork = [
 					navigator.mediaSession.metadata.artwork = [
 						{ src: "img/default.png",   sizes: '512x512',   type: 'image/png' }
 						{ src: "img/default.png",   sizes: '512x512',   type: 'image/png' }
@@ -1205,6 +1219,7 @@
 				}
 				}
 			}else{
 			}else{
 				$("#albumnArtImage").attr("src","data:image/jpg;base64," + data);
 				$("#albumnArtImage").attr("src","data:image/jpg;base64," + data);
+				$("#smallPlayerThumb").attr("src","data:image/jpg;base64," + data);
 				if (isAndroid && navigator.mediaSession.metadata){
 				if (isAndroid && navigator.mediaSession.metadata){
 					//Android
 					//Android
 					navigator.mediaSession.metadata.artwork = [
 					navigator.mediaSession.metadata.artwork = [
@@ -1443,7 +1458,7 @@
 				currentPath = listname;
 				currentPath = listname;
 				//Add the back btn for back to playlist view
 				//Add the back btn for back to playlist view
 				$("#mainList").append(`<div class="mainList item extrapadding" onClick="loadPlaylistView();">
 				$("#mainList").append(`<div class="mainList item extrapadding" onClick="loadPlaylistView();">
-					<div class="ts header selectable" style="margin:0px !important;">
+					<div class="ui header selectable" style="margin:0px !important;">
 						<i class="angle left icon whiteFont" style="overflow:hidden;"></i>
 						<i class="angle left icon whiteFont" style="overflow:hidden;"></i>
 						<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
 						<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
 							../
 							../
@@ -1456,10 +1471,10 @@
 				for (var i = 0; i < data.length; i++){
 				for (var i = 0; i < data.length; i++){
 					var songInfo = data[i];
 					var songInfo = data[i];
 					
 					
-					$("#mainList").append(`<div class="mainList item" filepath=${ao_module_utils.objectToAttr(songInfo[0])} id=${i+1} rawname=${ao_module_utils.objectToAttr(songInfo[1])}>
-						<div class="ts header selectable" style="margin:0px !important;" onClick="playSong(this);">
-							<i class="music icon whiteFont" style="overflow:hidden;"></i>
-							<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
+					$("#mainList").append(`<div class="mainList file item" filepath=${ao_module_utils.objectToAttr(songInfo[0])} id=${i+1} rawname=${ao_module_utils.objectToAttr(songInfo[1])}>
+						<div class="ui header selectable" style="margin:0px !important;" onClick="playSong(this);">
+							<img class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>
+							<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%; font-weight: lighter;">
 								${songInfo[1]}
 								${songInfo[1]}
 								<div class="sub header fileinfo" style="color: #c7c7c7;">${songInfo[2]} / ${songInfo[3]}</div>
 								<div class="sub header fileinfo" style="color: #c7c7c7;">${songInfo[2]} / ${songInfo[3]}</div>
 							</div>
 							</div>
@@ -1475,6 +1490,9 @@
 					//Update the interface Detail
 					//Update the interface Detail
 					$("#interfaceDetails").text("[" + data.length + " files]");
 					$("#interfaceDetails").text("[" + data.length + " files]");
 				};
 				};
+
+
+				loadThumbnailToMusicList();
 				//Fix some legacy css isseus
 				//Fix some legacy css isseus
 				$("#mainList").append("<br><br><br><br><br><br><br>");
 				$("#mainList").append("<br><br><br><br><br><br><br>");
 			}
 			}
@@ -1572,8 +1590,8 @@
 			//Render the elements
 			//Render the elements
 			data.forEach(playlist => {
 			data.forEach(playlist => {
 				$("#mainList").append(`<div class="mainList item" listname="${playlist.name}" tag="playlist" onClick="openPlaylist(this);">
 				$("#mainList").append(`<div class="mainList item" listname="${playlist.name}" tag="playlist" onClick="openPlaylist(this);">
-					<div class="ts header selectable" style="margin:0px !important;" >
-						<i class="folder open icon whiteFont" style="overflow:hidden;"></i>
+					<div class="ui header selectable" style="margin:0px !important;" >
+						<img class="ui small image" src="img/list.svg" style="margin-right: 0.2em;"></img>
 						<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
 						<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
 							${playlist.name}
 							${playlist.name}
 							<div class="sub header fileinfo" style="color: #c7c7c7;">[${playlist.count} files]</div>
 							<div class="sub header fileinfo" style="color: #c7c7c7;">[${playlist.count} files]</div>
@@ -1598,9 +1616,9 @@
 		currentMode = "folder";
 		currentMode = "folder";
 	    currentPath = "";
 	    currentPath = "";
 	    var tempalte = '<div class="mainList item" filepath={filepath} id={id} tag="folder" onClick="openFolder(this);">\
 	    var tempalte = '<div class="mainList item" filepath={filepath} id={id} tag="folder" onClick="openFolder(this);">\
-        <div class="ts header selectable" style="margin:0px !important;" >\
-            <i class="folder open icon whiteFont" style="overflow:hidden;"></i>\
-            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
+        <div class="ui header selectable" style="margin:0px !important;" >\
+            <img class="ui small image" src="img/fo.svg" style="margin-right: 0.2em;"></img>\
+            <div class="content whiteFont" style="padding-top: 2px; line-height:1em;width : 80%; font-weight: lighter;">\
                 {foldername}\
                 {foldername}\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{fileinfo}</div>\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{fileinfo}</div>\
             </div>\
             </div>\
@@ -1696,18 +1714,18 @@
 			startPaused = playParameters.startPaused;
 			startPaused = playParameters.startPaused;
 		}
 		}
 	    var backbtnTemplate = '<div class="mainList item extrapadding" filepath={filepath} id={id} onClick="openFolder(this);">\
 	    var backbtnTemplate = '<div class="mainList item extrapadding" filepath={filepath} id={id} onClick="openFolder(this);">\
-        <div class="ts header selectable" style="margin:0px !important;">\
+        <div class="ui header selectable" style="margin:0px !important;">\
             <i class="angle left icon whiteFont" style="overflow:hidden;"></i>\
             <i class="angle left icon whiteFont" style="overflow:hidden;"></i>\
-            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
+            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%; font-weight: lighter;">\
                 ../\
                 ../\
             </div>\
             </div>\
         </div>\
         </div>\
     </div>';
     </div>';
 	    
 	    
 	    var folderTemplate = '<div class="mainList item" filepath={filepath} tag="folder" id={id} onClick="openFolder(this);">\
 	    var folderTemplate = '<div class="mainList item" filepath={filepath} tag="folder" id={id} onClick="openFolder(this);">\
-        <div class="ts header selectable" style="margin:0px !important;">\
-            <i class="folder open icon whiteFont" style="overflow:hidden;"></i>\
-            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
+        <div class="ui header selectable" style="margin:0px !important;">\
+            <img class="ui small image" src="img/fo.svg" style="margin-right: 0.2em;"></img>\
+            <div class="content whiteFont" style="padding-top:2px;line-height:1em; width:80%; font-weight: lighter;">\
                 {foldername}\
                 {foldername}\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{fileinfo}</div>\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{fileinfo}</div>\
             </div>\
             </div>\
@@ -1717,10 +1735,10 @@
         </div>\
         </div>\
     </div>';
     </div>';
     var fileTemplate = `<div class="mainList file item" filepath={filepath} id={id} rawname={rawname}>\
     var fileTemplate = `<div class="mainList file item" filepath={filepath} id={id} rawname={rawname}>\
-        <div class="ts header selectable" style="margin:0px !important;" onClick="playSong(this);">\
+        <div class="ui header selectable" style="margin:0px !important;" onClick="playSong(this);">\
             <img class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>
             <img class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>
 			<!-- <i class="music icon whiteFont" style="overflow:hidden;"></i> -->\
 			<!-- <i class="music icon whiteFont" style="overflow:hidden;"></i> -->\
-            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
+            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%; font-weight: lighter;">\
                 {songtitle}\
                 {songtitle}\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
                 <div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
             </div>\
             </div>\
@@ -2024,30 +2042,11 @@
 
 
 	//Move the playing song list into the dropdown song list. This list might not be the same as the one in the main list.
 	//Move the playing song list into the dropdown song list. This list might not be the same as the one in the main list.
 	function parsePlayingSongList(){
 	function parsePlayingSongList(){
-		var template = '<div class="dropdownList item" filepath={filepath} listid={id} rawname={rawname}>\
-			<div class="ts header selectable" style="margin:0px !important;" onClick="playSongFromDropdownList(this);">\
-				<i class="music icon whiteFont" style="overflow:hidden;"></i>\
-				<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
-					{songtitle}\
-					<div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
-				</div>\
-			</div>\
-			<div class="topRightCorner" align="center">\
-				{id}\
-			</div>\
-		</div>';
 		$("#currentPlayingMainList").html("");
 		$("#currentPlayingMainList").html("");
 		var counter = playingList.length;
 		var counter = playingList.length;
 		var totalSize = 0.0;
 		var totalSize = 0.0;
 		for (var i = 0; i < playingList.length; i++){
 		for (var i = 0; i < playingList.length; i++){
 			var displayname = ao_module_codec.decodeUmFilename(playingList[i][1]);
 			var displayname = ao_module_codec.decodeUmFilename(playingList[i][1]);
-			var box = template;
-			box = replaceAll("{filepath}",ao_module_utils.objectToAttr(playingList[i][0]),box);
-			box = replaceAll("{id}",i + 1,box); //User count from 1
-			box = replaceAll("{rawname}",ao_module_utils.objectToAttr(playingList[i][1]),box);
-			box = replaceAll("{songtitle}",displayname,box);
-			box = replaceAll("{ext}",playingList[i][2],box);
-			box = replaceAll("{size}",playingList[i][3],box);
 			if (playingList[i][3].includes("MB")){
 			if (playingList[i][3].includes("MB")){
 				totalSize += parseFloat(playingList[i][3].split(" ")[0]);
 				totalSize += parseFloat(playingList[i][3].split(" ")[0]);
 			}else if (playingList[i][3].includes("KB")){
 			}else if (playingList[i][3].includes("KB")){
@@ -2055,7 +2054,22 @@
 			}else if (playingList[i][3].includes("GB")){
 			}else if (playingList[i][3].includes("GB")){
 				totalSize += parseFloat(playingList[i][3].split(" ")[0]) * 1000;
 				totalSize += parseFloat(playingList[i][3].split(" ")[0]) * 1000;
 			}
 			}
-			$("#currentPlayingMainList").append(box);
+
+			//Get thumbnail from the current list to prevent re-loading form remote
+			let targetThumbnail = $("#" + (i + 1)).find("img").attr("src");
+
+			$("#currentPlayingMainList").append(`<div class="dropdownList file item" filepath="${ao_module_utils.objectToAttr(playingList[i][0])}" listid="${i + 1}" rawname="${ao_module_utils.objectToAttr(playingList[i][1])}">
+				<div class="ui header selectable" style="margin:0px !important;" onClick="playSongFromDropdownList(this);">
+					<img class="ui small image" src="${targetThumbnail}" style="margin-right: 0.2em;"></img>
+					<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">
+						<span style="font-weight: lighter;">${displayname}</span>
+						<div class="sub header fileinfo" style="color: #c7c7c7;">${playingList[i][2]} / ${playingList[i][3]}</div>
+					</div>
+				</div>
+				<div class="topRightCorner" align="center">
+					${i + 1}
+				</div>
+			</div>`);
 			$("#dropdownListSongCount").text(counter);
 			$("#dropdownListSongCount").text(counter);
 			$("#dropdownListIDCount").text(parseInt(totalSize) + "");
 			$("#dropdownListIDCount").text(parseInt(totalSize) + "");
 		}
 		}
@@ -2070,21 +2084,6 @@
 	function loadSongList(type = "all"){
 	function loadSongList(type = "all"){
 		currentPath = "";
 		currentPath = "";
 		currentMode = "music";
 		currentMode = "music";
-	    var template = '<div class="mainList item" filepath={filepath} id={id} rawname={rawname}>\
-        <div class="ts header selectable" style="margin:0px !important;" onClick="playSong(this);">\
-            <i class="music icon whiteFont" style="overflow:hidden;"></i>\
-            <div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%;">\
-                {songtitle}\
-                <div class="sub header fileinfo" style="color: #c7c7c7;">{ext} / {size}</div>\
-            </div>\
-        </div>\
-        <div class="topRightCorner" align="center">\
-            {id}\
-        </div>\
-        <div class="mainList rightFunctionBar" align="center" onClick="showMore(this);">\
-            <i class="ellipsis vertical icon" style="top:30%;"></i>\
-        </div>\
-    </div>';
     
     
         $("#interfaceTitle").text("Music");
         $("#interfaceTitle").text("Music");
 		$("#AMmenuIcon").attr("class","music icon large whiteFont")
 		$("#AMmenuIcon").attr("class","music icon large whiteFont")
@@ -2117,19 +2116,30 @@
 	            var displayname = ao_module_codec.decodeUmFilename(songInfo[1]);
 	            var displayname = ao_module_codec.decodeUmFilename(songInfo[1]);
 	            var ext = songInfo[2];
 	            var ext = songInfo[2];
 	            var size = songInfo[3];
 	            var size = songInfo[3];
-	            var box = template;
-	            box = replaceAll("{filepath}",ao_module_utils.objectToAttr(path),box);
-	            box = replaceAll("{id}",i + 1,box); //User count from 1
-	            box = replaceAll("{rawname}",ao_module_utils.objectToAttr(songInfo[1]),box);
-	            box = replaceAll("{songtitle}",displayname,box);
-	            box = replaceAll("{ext}",ext,box);
-	            box = replaceAll("{size}",size,box);
-	            $("#mainList").append(box);
+				$("#mainList").append(`<div class="mainList file item" filepath="${ao_module_utils.objectToAttr(path)}" id="${i + 1}" rawname="${ao_module_utils.objectToAttr(songInfo[1])}">
+					<div class="ui header selectable" style="margin:0px !important;" onClick="playSong(this);">
+						<img class="ui small image" src="img/eq.svg" style="margin-right: 0.2em;"></img>
+						<div class="content whiteFont" style="padding-top:5px;line-height:1em;width : 80%; font-weight: lighter;">
+							${displayname}
+							<div class="sub header fileinfo" style="color: #c7c7c7;">${ext} / ${size}</div>
+						</div>
+					</div>
+					<div class="topRightCorner" align="center">
+						${i + 1}
+					</div>
+					<div class="mainList rightFunctionBar" align="center" onClick="showMore(this);">
+						<i class="ellipsis vertical icon" style="top:30%;"></i>\
+					</div>
+				</div>`);
 	        }
 	        }
 	        totalMusicCount = displayList.length;
 	        totalMusicCount = displayList.length;
 	        $("#mainList").append("<br><br><br><br><br><br><br>");
 	        $("#mainList").append("<br><br><br><br><br><br><br>");
 	        $("#interfaceDetails").text("[" + i + " songs]");
 	        $("#interfaceDetails").text("[" + i + " songs]");
 	        highLightPlayingMusic();
 	        highLightPlayingMusic();
+
+			//Load thumbnail for song in list
+			loadThumbnailToMusicList();
+
 	    }, function(){
 	    }, function(){
 			alert("Failed to access listSong API with type: " + type)
 			alert("Failed to access listSong API with type: " + type)
 		});
 		});

+ 34 - 11
web/Music/main.css

@@ -115,14 +115,14 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
      padding-left:3px;
      padding-left:3px;
      padding-right:3px;
      padding-right:3px;
      color:white;
      color:white;
-     right:120px;
+     right:136px;
      bottom:5px;
      bottom:5px;
      text-overflow: ellipsis;
      text-overflow: ellipsis;
      overflow: hidden; 
      overflow: hidden; 
 }
 }
 .miniPlayerControls{
 .miniPlayerControls{
     position:absolute;
     position:absolute;
-    top:18px;
+    bottom:0.5em;
     right:5px;
     right:5px;
     color: white;
     color: white;
     font-size: 1.6em;
     font-size: 1.6em;
@@ -152,7 +152,7 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
     width:80%;
     width:80%;
     font-size:200%;
     font-size:200%;
     text-align: center;
     text-align: center;
-    padding-top:25px;
+    margin-top: 0px;
 }
 }
 .enabled.icon{
 .enabled.icon{
     color:white;
     color:white;
@@ -190,13 +190,13 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
 #progressTime{
 #progressTime{
     color:white;
     color:white;
     position:absolute;
     position:absolute;
-    left:0px;
+    left:2em;
     top:0px;
     top:0px;
 }
 }
 #remainTime{
 #remainTime{
     color:white;
     color:white;
     position:absolute;
     position:absolute;
-    right:0px;
+    right:2em;
     top:0px;
     top:0px;
 }
 }
 #volumeGUI{
 #volumeGUI{
@@ -204,8 +204,9 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
     top:50px;
     top:50px;
     left:0px;
     left:0px;
     width:100%;
     width:100%;
-    padding-left:20%;
-    padding-right:20%;
+    height: 4em;
+    padding-left:6em;
+    padding-right:6em;
     padding-top:5px;
     padding-top:5px;
     padding-bottom:5px;
     padding-bottom:5px;
     background-color:rgba(12, 12, 12, 0.8);
     background-color:rgba(12, 12, 12, 0.8);
@@ -215,19 +216,20 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
 }
 }
 .quickMenu{
 .quickMenu{
     position:fixed;
     position:fixed;
-    top:25%;
+    top:10em;
     left:10%;
     left:10%;
     right:10%;
     right:10%;
-    bottom:25%;
+    bottom:10em;
     border-radius: 5px;
     border-radius: 5px;
     background-color:rgba(12, 12, 12, 0.8);
     background-color:rgba(12, 12, 12, 0.8);
     backdrop-filter: saturate(180%) blur(5px);
     backdrop-filter: saturate(180%) blur(5px);
-    padding:20px;
+    padding:2em;
     color:white;
     color:white;
     overflow-y:auto;
     overflow-y:auto;
     overflow-x:hidden;
     overflow-x:hidden;
     display:none;
     display:none;
     z-index:120;
     z-index:120;
+    border-radius: 20px;
 }
 }
 
 
 #fadeReturnScreen{
 #fadeReturnScreen{
@@ -261,9 +263,16 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
     padding:.5em;
     padding:.5em;
     padding-left:3em;
     padding-left:3em;
     padding-right:3em;
     padding-right:3em;
-    width: 100%;
     cursor:pointer;
     cursor:pointer;
+    background-color: rgba(255,255,255,0.2);
+    border-radius: 20px;
 }
 }
+
+button{
+    background: none;
+    border: none;
+}
+
 .greenBtn:hover{
 .greenBtn:hover{
     background-color:#6b6b6b;
     background-color:#6b6b6b;
 }
 }
@@ -370,4 +379,18 @@ p,span,h1,h2,h3,h4,h5,h6,div,a,button{
     padding-top:4px;
     padding-top:4px;
     padding-bottom:4px;
     padding-bottom:4px;
     font-size: 100%;
     font-size: 100%;
+}
+
+/*
+    patches for Tocas UI to Sementic transitions
+*/
+
+.topPanelButtons{
+    background: none !important;
+    border: none !important;
+}
+
+.panelButtons{
+    background: none !important;
+    border: none !important;
 }
 }

+ 0 - 114
web/SystemAO/file_system/newFolder.html.disabled

@@ -1,114 +0,0 @@
-<html>
-    <head>
-        <title>New Folder Creation Utility</title>
-        <meta charset="UTF-8">
-        <meta name="viewport" content="width=device-width, initial-scale=1.0 user-scalable=no">
-        <link rel="stylesheet" href="../../script/tocas/tocas.css">
-        <link rel="stylesheet" href="../../script/ao.css">
-        <script type="text/javascript" src="../../script/tocas/tocas.js"></script>
-        <script type="text/javascript" src="../../script/jquery.min.js"></script>
-        <script type="text/javascript" src="../../script/ao_module.js"></script>
-        <style>
-            body{
-                background-color:#fafafa;
-            }
-            .themebackground{
-                background-color:#f2f2f2 !important;
-                color:#2e2e2e !important;
-            }
-            .toolicon{
-                position:absolute;
-                top:30px;
-                left:30px;
-                height:60px;
-            }
-        </style>
-    </head>
-    <body>
-        <div class="ts heading fluid slate themebackground" style="padding-left:120px; margin-bottom:12px;">
-            <span class="header">New Folder</span>
-            <span class="description">Create a new folder with the given name.</span>
-        </div>
-        <img class="toolicon" src="img/new folder.png"></img>
-        <div class="ts container">
-            <div class="ts horizontal form">
-                <div class="field">
-                    <label>Folder Name</label>
-                    <input id="fname" type="text" onkeyup="checkvalid(event);">
-                    <small id="tips"></small>
-                </div>
-            </div><br><br>
-            <div align="right" style="width:100%;">
-                <button class="ts button" onclick="ao_module_close();">Cancel</button>
-                <button id="createBtn" class="ts primary button" onclick="createFolder();">Create</button>
-            </div>
-        </div>
-        <script>
-            var existingFilelist = ao_module_loadInputFiles();
-            var filenameList = [];
-            var pathInfo = existingFilelist[0].filepath.split("/");
-            pathInfo.pop();
-            var vsrc = pathInfo.join("/") + "/";
-            var format = /[`!@#$%^&*_+\-=\[\]{};':"\\|,.<>\/?~]/;
-            for (var i =0; i < existingFilelist.length; i++){
-                filenameList.push(existingFilelist[i].filename);
-            }
-            ao_module_setFixedWindowSize();
-            //Generate a default new folder name for this
-            var newFolderName = "New Folder";
-            var counter = 1;
-            while (filenameList.includes(newFolderName)){
-                newFolderName = `New Folder (${counter})`;
-                counter++;
-            }
-
-            //Update the default value
-            $("#fname").val(newFolderName);
-
-            function checkvalid(event){
-                var fname = $("#fname").val();
-                if (filenameList.includes(fname)){
-                    $("#fname").parent().addClass("error");
-                    $("#fname").parent().removeClass("warning");
-                    $("#tips").text("A folder with the same name already exists.");
-                    $("#createBtn").addClass('disabled');
-                }else if (format.test(fname)){
-                    $("#fname").parent().addClass("warning");
-                    $("#fname").parent().removeClass("error");
-                    $("#tips").text("Do not use special characters like & # * [ ] / or \\ in the folder name.");
-                    $("#createBtn").addClass('disabled');
-                }else if (fname.trim() == ""){
-                    $("#fname").parent().removeClass("error");
-                    $("#fname").parent().removeClass("warning");
-                    $("#createBtn").addClass('disabled');
-                }else{
-                    $("#fname").parent().removeClass("warning");
-                    $("#fname").parent().removeClass("error");
-                    $("#createBtn").removeClass('disabled');
-                }
-
-                if (event.which == 13){
-                    //Enter key
-                    createFolder();
-                }
-            }
-
-            function createFolder(){
-                var foldername = $("#fname").val().trim();
-                //Create a folder via file system api
-                requestCSRFToken(function(token){
-                    $.post("../../system/file_system/newItem",{type: "folder", src: vsrc, filename: foldername, csrft: token}).done(function(data){
-                        if (data.error !== undefined){
-                            console.log(data.error);
-                        }else{
-                            parent.refresh();
-                            ao_module_close();
-                        }
-                    });
-                });
-                
-            }
-
-        </script>
-    </body>
-</html>