home to your local SPACEGIRL 💫 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

UI improvements

+146 -239
+2 -2
admin/components/release/release-list-item.html
··· 7 7 <h3 class="release-title"> 8 8 <a href="/admin/release/{{.ID}}">{{.Title}}</a> 9 9 <small> 10 - {{.GetReleaseYear}} 10 + <span title="{{.PrintReleaseDate}}">{{.GetReleaseYear}}</span> 11 11 {{if not .Visible}}(hidden){{end}} 12 12 </small> 13 13 </h3> ··· 16 16 (<a href="/admin/release/{{.ID}}#tracks">{{len .Tracks}} track{{if not (eq (len .Tracks) 1)}}s{{end}}</a>)</p> 17 17 <div class="release-actions"> 18 18 <a href="/admin/release/{{.ID}}">Edit</a> 19 - <a href="/music/{{.ID}}" target="_blank">Gateway</a> 19 + <a href="/music/{{.ID}}" target="_blank">Gateway <img class="icon" src="/img/external-link.svg"/></a> 20 20 </div> 21 21 </div> 22 22 </div>
+2 -3
admin/static/admin.css
··· 80 80 text-decoration: underline; 81 81 } 82 82 83 - a img { 84 - height: .9em; 85 - transform: translateY(.1em); 83 + a img.icon { 84 + height: .8em; 86 85 } 87 86 88 87 .card {
+4 -1
admin/static/edit-release.css
··· 50 50 border: 1px solid transparent; 51 51 background: transparent; 52 52 outline: none; 53 + cursor: pointer; 53 54 } 54 55 55 56 #title:hover { ··· 80 81 vertical-align: top; 81 82 opacity: .66; 82 83 } 83 - .release-info table tr td:not(:first-child):hover { 84 + .release-info table tr td:not(:first-child) select:hover, 85 + .release-info table tr td:not(:first-child) input:hover, 86 + .release-info table tr td:not(:first-child) textarea:hover { 84 87 background: #e8e8e8; 85 88 cursor: pointer; 86 89 }
+24 -118
admin/static/edit-track.css
··· 1 + @import url("/admin/static/release-list-item.css"); 2 + 1 3 h1 { 2 4 margin: 0 0 .5em 0; 3 5 } ··· 22 24 flex-direction: column; 23 25 } 24 26 25 - .track-title-header { 26 - margin: 0; 27 + .attribute-header { 28 + margin: 1em 0 .2em 0; 27 29 opacity: .5; 28 30 } 29 31 ··· 33 35 34 36 #title { 35 37 width: 100%; 36 - margin: -.1em -.2em; 37 38 padding: .1em .2em; 38 - font-weight: bold; 39 + } 40 + 41 + .track-info textarea { 42 + width: calc(100% - 1em); 43 + padding: .5em; 44 + resize: vertical; 45 + } 46 + 47 + .track-info input[type="text"], 48 + .track-info textarea { 49 + font-weight: inherit; 50 + font-family: inherit; 39 51 font-size: inherit; 52 + border: 1px solid transparent; 40 53 border-radius: 4px; 41 - border: 1px solid transparent; 42 - background: transparent; 43 54 outline: none; 55 + color: inherit; 44 56 } 45 57 46 - #title:hover { 47 - background: #ffffff; 58 + .track-info input[type="text"]:hover, 59 + .track-info textarea:hover { 48 60 border-color: #80808080; 49 61 } 50 62 51 - #title:active, 52 - #title:focus { 53 - background: #ffffff; 63 + .track-info input[type="text"]:active, 64 + .track-info textarea:active, 65 + .track-info input[type="text"]:focus, 66 + .track-info textarea:focus { 54 67 border-color: #808080; 55 68 } 56 69 57 - .track-title small { 58 - opacity: .75; 59 - } 60 - 61 - .track-info h2 { 62 - margin-bottom: .4em; 63 - } 64 - 65 - .track-info textarea { 66 - width: 100%; 67 - padding: .5em; 68 - font-family: inherit; 69 - font-size: inherit; 70 - color: inherit; 71 - border: none; 72 - outline: none; 73 - resize: vertical; 74 - border-radius: 4px; 75 - } 76 - 77 70 button, .button { 78 71 padding: .5em .8em; 79 72 font-family: inherit; ··· 130 123 justify-content: right; 131 124 } 132 125 133 - .release { 134 - margin-bottom: 1em; 135 - padding: 1em; 136 - display: flex; 137 - flex-direction: row; 138 - gap: 1em; 139 - 140 - border-radius: .5em; 141 - background: #f8f8f8f8; 142 - border: 1px solid #808080; 143 - } 144 - 145 - .release h3, 146 - .release p { 147 - margin: 0; 148 - } 149 - 150 - .release-artwork { 151 - width: 96px; 152 - 153 - display: flex; 154 - justify-content: center; 155 - align-items: center; 156 - } 157 - 158 - .release-artwork img { 159 - width: 100%; 160 - aspect-ratio: 1; 161 - } 162 - 163 - .release-title small { 164 - opacity: .75; 165 - } 166 - 167 - .release-links { 168 - margin: .5em 0; 169 - padding: 0; 170 - display: flex; 171 - flex-direction: row; 172 - list-style: none; 173 - flex-wrap: wrap; 174 - gap: .5em; 175 - } 176 - 177 - .release-links li { 178 - flex-grow: 1; 179 - } 180 - 181 - .release-links a { 182 - padding: .5em; 183 - display: block; 184 - 185 - border-radius: .5em; 186 - text-decoration: none; 187 - color: #f0f0f0; 188 - background: #303030; 189 - text-align: center; 190 - 191 - transition: color .1s, background .1s; 192 - } 193 - 194 - .release-links a:hover { 195 - color: #303030; 196 - background: #f0f0f0; 197 - } 198 - 199 - .release-actions { 200 - margin-top: .5em; 201 - } 202 - 203 - .release-actions a { 204 - margin-right: .3em; 205 - padding: .3em .5em; 206 - display: inline-block; 207 - 208 - border-radius: .3em; 209 - background: #e0e0e0; 210 - 211 - transition: color .1s, background .1s; 212 - } 213 - 214 - .release-actions a:hover { 215 - color: #303030; 216 - background: #f0f0f0; 217 - 218 - text-decoration: none; 219 - }
+2 -93
admin/static/index.css
··· 1 + @import url("/admin/static/release-list-item.css"); 2 + 1 3 .create-btn { 2 4 background: #c4ff6a; 3 5 padding: .5em .8em; ··· 14 16 background: #d0d0d0; 15 17 border-color: #808080; 16 18 text-decoration: inherit; 17 - } 18 - 19 - .release { 20 - margin-bottom: 1em; 21 - padding: 1em; 22 - display: flex; 23 - flex-direction: row; 24 - gap: 1em; 25 - 26 - border-radius: .5em; 27 - background: #f8f8f8f8; 28 - border: 1px solid #808080; 29 - } 30 - 31 - .release h3, 32 - .release p { 33 - margin: 0; 34 - } 35 - 36 - .release-artwork { 37 - width: 96px; 38 - 39 - display: flex; 40 - justify-content: center; 41 - align-items: center; 42 - } 43 - 44 - .release-artwork img { 45 - width: 100%; 46 - aspect-ratio: 1; 47 - } 48 - 49 - .latest-release .release-info { 50 - width: 300px; 51 - flex-direction: column; 52 - } 53 - 54 - .release-title small { 55 - opacity: .75; 56 - } 57 - 58 - .release-links { 59 - margin: .5em 0; 60 - padding: 0; 61 - display: flex; 62 - flex-direction: row; 63 - list-style: none; 64 - flex-wrap: wrap; 65 - gap: .5em; 66 - } 67 - 68 - .release-links li { 69 - flex-grow: 1; 70 - } 71 - 72 - .release-links a { 73 - padding: .5em; 74 - display: block; 75 - 76 - border-radius: .5em; 77 - text-decoration: none; 78 - color: #f0f0f0; 79 - background: #303030; 80 - text-align: center; 81 - 82 - transition: color .1s, background .1s; 83 - } 84 - 85 - .release-links a:hover { 86 - color: #303030; 87 - background: #f0f0f0; 88 - } 89 - 90 - .release-actions { 91 - margin-top: .5em; 92 - } 93 - 94 - .release-actions a { 95 - margin-right: .3em; 96 - padding: .3em .5em; 97 - display: inline-block; 98 - 99 - border-radius: .3em; 100 - background: #e0e0e0; 101 - 102 - transition: color .1s, background .1s; 103 - } 104 - 105 - .release-actions a:hover { 106 - color: #303030; 107 - background: #f0f0f0; 108 - 109 - text-decoration: none; 110 19 } 111 20 112 21 .artist {
+87
admin/static/release-list-item.css
··· 1 + .release { 2 + margin-bottom: 1em; 3 + padding: 1em; 4 + display: flex; 5 + flex-direction: row; 6 + gap: 1em; 7 + 8 + border-radius: .5em; 9 + background: #f8f8f8f8; 10 + border: 1px solid #808080; 11 + } 12 + 13 + .release h3, 14 + .release p { 15 + margin: 0; 16 + } 17 + 18 + .release-artwork { 19 + width: 96px; 20 + 21 + display: flex; 22 + justify-content: center; 23 + align-items: center; 24 + } 25 + 26 + .release-artwork img { 27 + width: 100%; 28 + aspect-ratio: 1; 29 + } 30 + 31 + .release-title small { 32 + opacity: .75; 33 + } 34 + 35 + .release-links { 36 + margin: .5em 0; 37 + padding: 0; 38 + display: flex; 39 + flex-direction: row; 40 + list-style: none; 41 + flex-wrap: wrap; 42 + gap: .5em; 43 + } 44 + 45 + .release-links li { 46 + flex-grow: 1; 47 + } 48 + 49 + .release-links a { 50 + padding: .5em; 51 + display: block; 52 + 53 + border-radius: .5em; 54 + text-decoration: none; 55 + color: #f0f0f0; 56 + background: #303030; 57 + text-align: center; 58 + 59 + transition: color .1s, background .1s; 60 + } 61 + 62 + .release-links a:hover { 63 + color: #303030; 64 + background: #f0f0f0; 65 + } 66 + 67 + .release-actions { 68 + margin-top: .5em; 69 + } 70 + 71 + .release-actions a { 72 + margin-right: .3em; 73 + padding: .3em .5em; 74 + display: inline-block; 75 + 76 + border-radius: .3em; 77 + background: #e0e0e0; 78 + 79 + transition: color .1s, background .1s; 80 + } 81 + 82 + .release-actions a:hover { 83 + color: #303030; 84 + background: #f0f0f0; 85 + 86 + text-decoration: none; 87 + }
+2 -2
admin/templates.go
··· 44 44 45 45 "editlinks": template.Must(template.ParseFiles(filepath.Join("admin", "components", "links", "editlinks.html"))), 46 46 47 - "edittracks": template.Must(template.ParseFiles(filepath.Join("admin", "components", "tracks", "addtrack.html"))), 47 + "edittracks": template.Must(template.ParseFiles(filepath.Join("admin", "components", "tracks", "edittracks.html"))), 48 48 "addtrack": template.Must(template.ParseFiles(filepath.Join("admin", "components", "tracks", "addtrack.html"))), 49 - "newtrack": template.Must(template.ParseFiles(filepath.Join("admin", "components", "tracks", "addtrack.html"))), 49 + "newtrack": template.Must(template.ParseFiles(filepath.Join("admin", "components", "tracks", "newtrack.html"))), 50 50 }
+3 -3
admin/views/edit-release.html
··· 45 45 name="Description" 46 46 value="{{.Description}}" 47 47 placeholder="No description provided." 48 - rows="1" 48 + rows="3" 49 49 id="description" 50 50 >{{.Description}}</textarea> 51 51 </td> ··· 79 79 </tr> 80 80 </table> 81 81 <div class="release-actions"> 82 - <a href="/music/{{.ID}}" class="button" target="_blank">Gateway <img src="/img/external-link.svg"/></a> 82 + <a href="/music/{{.ID}}" class="button" target="_blank">Gateway <img class="icon" src="/img/external-link.svg"/></a> 83 83 <button type="submit" class="save" id="save" disabled>Save</button> 84 84 </div> 85 85 </div> ··· 125 125 </div> 126 126 <div class="card links"> 127 127 {{range .Links}} 128 - <a href="{{.URL}}" target="_blank" class="button" data-name="{{.Name}}">{{.Name}} <img src="/img/external-link.svg"/></a> 128 + <a href="{{.URL}}" target="_blank" class="button" data-name="{{.Name}}">{{.Name}} <img class="icon" src="/img/external-link.svg"/></a> 129 129 {{end}} 130 130 </div> 131 131
+4 -4
admin/views/edit-track.html
··· 6 6 7 7 {{define "content"}} 8 8 <main> 9 - <h1>Editing Track "{{.Title}}"</h1> 9 + <h1>Editing Track</h1> 10 10 11 11 <div id="track" data-id="{{.ID}}"> 12 12 <div class="track-info"> 13 - <p class="track-title-header">Title</p> 13 + <p class="attribute-header">Title</p> 14 14 <h2 class="track-title"> 15 15 <input type="text" id="title" name="Title" value="{{.Title}}"> 16 16 </h2> 17 17 18 - <h2>Description</h2> 18 + <p class="attribute-header">Description</p> 19 19 <textarea 20 20 name="Description" 21 21 value="{{.Description}}" ··· 24 24 id="description" 25 25 >{{.Description}}</textarea> 26 26 27 - <h2>Lyrics</h2> 27 + <p class="attribute-header">Lyrics</p> 28 28 <textarea 29 29 name="Lyrics" 30 30 value="{{.Lyrics}}"
-1
api/release.go
··· 256 256 fmt.Printf("WARN: Error while cleaning up artwork files: %s\n", err) 257 257 } 258 258 259 - fmt.Printf("Artwork for %s updated.\n", update.ID) 260 259 update.Artwork = fmt.Sprintf("/uploads/musicart/%s.%s", update.ID, ext) 261 260 } else { 262 261 update.Artwork = *data.Artwork
+2 -3
public/style/main.css
··· 55 55 box-shadow: 0 0 1em var(--links); 56 56 } 57 57 58 - a img { 59 - height: .9em; 60 - transform: translateY(.1em); 58 + a img.icon { 59 + height: .8em; 61 60 } 62 61 63 62 small {
+7
public/style/music-gateway.css
··· 390 390 animation: share-after 2s cubic-bezier(.5,0,1,.5) forwards 391 391 } 392 392 393 + h2 { 394 + width: fit-content; 395 + padding: .3em 1em; 396 + font-size: 1em; 397 + background: #101010; 398 + } 399 + 393 400 div#extras ul { 394 401 height: 100%; 395 402 display: flex;
+7 -9
views/music-gateway.html
··· 80 80 </ul> 81 81 {{end}} 82 82 83 - {{if .IsSingle}} 83 + {{if .Description}} 84 + 85 + <p id="description">{{.Description}}</p> 86 + 87 + {{else if .IsSingle}} 84 88 85 89 {{$Track := index .Tracks 0}} 86 90 {{if $Track.Description}} 87 91 <p id="description">{{$Track.Description}}</p> 88 92 {{end}} 89 93 90 - {{else}} 91 - 92 - {{if .Description}}<p id="description">{{.Description}} 93 - </p> 94 - {{end}} 95 - 96 94 {{end}} 97 95 98 96 <button id="share">share</button> ··· 102 100 103 101 {{if .Credits}} 104 102 <div id="credits"> 105 - <h2>credits:</h2> 103 + <h2>CREDITS</h2> 106 104 <ul> 107 105 {{range .Credits}} 108 106 {{$Artist := .Artist}} ··· 132 130 133 131 {{else if .Tracks}} 134 132 <div id="tracks"> 135 - <h2>tracks:</h2> 133 + <h2>TRACKS</h2> 136 134 {{range $i, $track := .Tracks}} 137 135 <details> 138 136 <summary class="album-track-title">{{$track.Number}}. {{$track.Title}}</summary>