diff --git a/src/components/LinkItems/Item.vue b/src/components/LinkItems/Item.vue index 39ed64ff..ed0928a0 100644 --- a/src/components/LinkItems/Item.vue +++ b/src/components/LinkItems/Item.vue @@ -3,18 +3,18 @@ :href="target !== 'iframe' ? url : '#'" :target="target === 'newtab' ? '_blank' : ''" :class="`item ${!icon? 'short': ''} size-${itemSize}`" - :id="`link-${id}`" v-tooltip="getTooltipOptions()" - rel="noopener noreferrer" - tabindex="0" + v-bind:style="customStyles" + rel="noopener noreferrer" tabindex="0" + :id="`link-${id}`" > <!-- Item Text --> - <div class="tile-title" :id="`tile-${id}`"> + <div class="tile-title" :id="`tile-${id}`" > <span class="text">{{ title }}</span> <div class="overflow-dots">...</div> </div> <!-- Item Icon --> - <Icon :icon="icon" :url="url" :size="itemSize" /> + <Icon :icon="icon" :url="url" :size="itemSize" :color="color" v-bind:style="customStyles" /> <!-- Small icon, showing opening method on hover --> <ItemOpenMethodIcon class="opening-method-icon" :isSmall="!icon" :openingMethod="target" :position="itemSize === 'medium'? 'bottom right' : 'top right'"/> @@ -33,7 +33,8 @@ export default { subtitle: String, // Optional sub-text description: String, // Optional tooltip hover text icon: String, // Optional path to icon, within public/img/tile-icons - color: String, // Optional background color, specified in hex code + color: String, // Optional text and icon color, specified in hex code + backgroundColor: String, // Optional item background color url: String, // URL to the resource, optional but recommended target: { // Where resource will open, either 'newtab', 'sametab' or 'iframe' type: String, @@ -45,6 +46,10 @@ export default { data() { return { getId: this.id, + customStyles: { + color: this.color, + background: this.backgroundColor, + }, }; }, components: { @@ -132,7 +137,6 @@ export default { padding: 0; z-index: 2; span.text { - position: absolute; white-space: nowrap; transition: 1s; float: left; diff --git a/src/components/LinkItems/ItemGroup.vue b/src/components/LinkItems/ItemGroup.vue index d372cc62..681171f8 100644 --- a/src/components/LinkItems/ItemGroup.vue +++ b/src/components/LinkItems/ItemGroup.vue @@ -21,6 +21,8 @@ :description="item.description" :icon="item.icon" :target="item.target" + :color="item.color" + :backgroundColor="item.backgroundColor" :itemSize="newItemSize" @itemClicked="$emit('itemClicked')" @triggerModal="triggerModal" diff --git a/src/components/LinkItems/ItemIcon.vue b/src/components/LinkItems/ItemIcon.vue index 8fc49596..b3d7409c 100644 --- a/src/components/LinkItems/ItemIcon.vue +++ b/src/components/LinkItems/ItemIcon.vue @@ -1,5 +1,5 @@ <template> - <i v-if="determineImageType(icon) === 'font-awesome'" :class="`${icon} ${size}`"></i> + <i v-if="determineImageType(icon) === 'font-awesome'" :class="`${icon} ${size}`" ></i> <img v-else-if="icon" :src="getIconPath(icon, url)" :class="`tile-icon ${size}`" /> </template> diff --git a/src/components/PageStrcture/Header.vue b/src/components/PageStrcture/Header.vue index 5180f5d4..f154676f 100644 --- a/src/components/PageStrcture/Header.vue +++ b/src/components/PageStrcture/Header.vue @@ -31,6 +31,8 @@ export default { <style scoped lang="scss"> +@import '@/styles/media-queries.scss'; + header { margin: 0; padding: 0.5rem; @@ -39,7 +41,7 @@ export default { background: var(--background-darker); align-items: center; align-content: flex-start; - @media screen and (max-width: 600px) { + @include phone { flex-direction: column-reverse; } } diff --git a/src/components/PageStrcture/PageTitle.vue b/src/components/PageStrcture/PageTitle.vue index 88ad2a59..73383cbe 100644 --- a/src/components/PageStrcture/PageTitle.vue +++ b/src/components/PageStrcture/PageTitle.vue @@ -16,16 +16,13 @@ export default { </script> <style scoped lang="scss"> +@import '@/styles/media-queries.scss'; .page-titles { display: flex; flex-direction: column; h1 { color: var(--primary); - // background: -webkit-linear-gradient(to left top, #9F86FF, #1CA8DD, #007AE1); - // background: linear-gradient(to left top, #9F86FF, #1CA8DD, #007AE1); - // -webkit-background-clip: text; - // -webkit-text-fill-color: transparent; font-size: 2.5rem; margin: 0; } @@ -35,7 +32,7 @@ export default { text-shadow: 1px 1px 2px #130f23; opacity: var(--dimming-factor); } - @media screen and (max-width: 600px) { + @include phone { text-align: center; padding: 0.25rem 0; } diff --git a/src/components/Settings/KeyboardShortcutInfo.vue b/src/components/Settings/KeyboardShortcutInfo.vue index 226f6c17..1c4f2294 100644 --- a/src/components/Settings/KeyboardShortcutInfo.vue +++ b/src/components/Settings/KeyboardShortcutInfo.vue @@ -65,6 +65,8 @@ export default { <style scoped lang="scss"> +@import '@/styles/media-queries.scss'; + .kb-sc-info { position: fixed; width: 30em; @@ -82,7 +84,7 @@ export default { background: var(--background-darker); cursor: default; opacity: 0.94; - @media screen and (max-width: 600px) { + @include phone { display: none; } h5 { /* The dialog title */ diff --git a/src/components/Settings/SettingsContainer.vue b/src/components/Settings/SettingsContainer.vue index 25f96589..2b846a01 100644 --- a/src/components/Settings/SettingsContainer.vue +++ b/src/components/Settings/SettingsContainer.vue @@ -50,8 +50,11 @@ export default { getInitialTheme() { return this.appConfig.theme || ''; }, + /* Gets user themes if available */ getUserThemes() { - return this.appConfig.cssThemes || []; + const userThemes = this.appConfig.cssThemes || []; + if (typeof userThemes === 'string') return [userThemes]; + return userThemes; }, }, data() { diff --git a/src/components/Settings/ThemeSelector.vue b/src/components/Settings/ThemeSelector.vue index 9f1e28a6..5167ef7b 100644 --- a/src/components/Settings/ThemeSelector.vue +++ b/src/components/Settings/ThemeSelector.vue @@ -30,7 +30,7 @@ export default { selectedTheme: this.getInitialTheme(), themeHelper: new ThemeHelper(), loading: true, - builtInThemes: Defaults.builtInThemes.concat(this.userThemes), + builtInThemes: this.userThemes.concat(Defaults.builtInThemes), }; }, computed: {