A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

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

Closes #419

+3 -42
+3 -7
src/Css/Application.css
··· 109 109 opacity: 1; 110 110 } 111 111 112 - input:invalid, 113 - textarea:invalid { 112 + input:user-invalid, 113 + textarea:user-invalid { 114 + @apply border-base08; 114 115 box-shadow: none; 115 116 outline: none; 116 - } 117 - 118 - input[changed]:invalid, 119 - textarea[changed]:invalid { 120 - @apply border-base08; 121 117 } 122 118 123 119 select:-moz-focusring {
-35
src/Javascript/UI/misc.ts
··· 38 38 39 39 40 40 41 - // Forms 42 - // ----- 43 - // Adds a `changed` attribute to form fields, if the form was "changed". 44 - // This is to help with styling, we don't want to show an error immediately. 45 - 46 - const FIELD_SELECTOR = "input, textarea" 47 - 48 - 49 - document.addEventListener("keyup", e => { 50 - const field = e.target && (<HTMLElement>e.target).closest(FIELD_SELECTOR) 51 - if (field) field.setAttribute("changed", "") 52 - }) 53 - 54 - 55 - document.addEventListener("click", e => { 56 - if (!e.target || (<HTMLElement>e.target).tagName !== "BUTTON") return; 57 - const form = (<HTMLElement>e.target).closest("form") 58 - if (form) markAllFormFieldsAsChanged(form) 59 - }) 60 - 61 - 62 - document.addEventListener("submit", e => { 63 - const form = e.target && (<HTMLElement>e.target).closest("form") 64 - if (form) markAllFormFieldsAsChanged(form) 65 - }) 66 - 67 - 68 - function markAllFormFieldsAsChanged(form) { 69 - [].slice.call(form.querySelectorAll(FIELD_SELECTOR)).forEach(field => { 70 - field.setAttribute("changed", "") 71 - }) 72 - } 73 - 74 - 75 - 76 41 // Internet Connection 77 42 // ------------------- 78 43