From 34fc3925d74034b34efbb259bea2449b70b4536f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elo=C3=ADzio=20Salgado?= Date: Mon, 31 Oct 2016 19:36:51 -0200 Subject: [PATCH] LT 281: Users shall be able to switch between themes (#45) * LT-281: Users shall be able to switch between themes * Avoiding compatibility issues * Typo fixing --- LesionTracker/client/components/app/app.html | 1 + Packages/ohif-design/app.styl | 1 + Packages/ohif-design/assets/theme-icons.png | Bin 0 -> 39672 bytes Packages/ohif-design/package.js | 12 ++- .../styles/imports/theme-icons.styl | 47 ++++++++++++ .../styles/imports/themes/theme-crickets.styl | 35 +++++++++ .../imports/themes/theme-honeycomb.styl | 35 +++++++++ .../styles/imports/themes/theme-mint.styl | 35 +++++++++ .../styles/imports/themes/theme-overcast.styl | 35 +++++++++ .../styles/imports/themes/theme-quartz.styl | 35 +++++++++ .../imports/{ => themes}/theme-tide.styl | 11 +-- .../theme-tigerlily.styl} | 13 ++-- .../ohif-design/styles/imports/theming.styl | 9 ++- .../client/components/index.js | 1 + .../studylistResult/studylistResult.styl | 4 +- .../client/components/themeSelector/index.js | 3 + .../themeSelectorModal.html | 28 +++++++ .../themeSelectorModal/themeSelectorModal.js | 69 ++++++++++++++++++ .../themeSelectorModal.styl | 36 +++++++++ .../userAccountMenu/userAccountMenu.html | 6 ++ .../userAccountMenu/userAccountMenu.js | 3 + 21 files changed, 402 insertions(+), 17 deletions(-) create mode 100644 Packages/ohif-design/assets/theme-icons.png create mode 100644 Packages/ohif-design/styles/imports/theme-icons.styl create mode 100644 Packages/ohif-design/styles/imports/themes/theme-crickets.styl create mode 100644 Packages/ohif-design/styles/imports/themes/theme-honeycomb.styl create mode 100644 Packages/ohif-design/styles/imports/themes/theme-mint.styl create mode 100644 Packages/ohif-design/styles/imports/themes/theme-overcast.styl create mode 100644 Packages/ohif-design/styles/imports/themes/theme-quartz.styl rename Packages/ohif-design/styles/imports/{ => themes}/theme-tide.styl (78%) rename Packages/ohif-design/styles/imports/{theme-tigerlilly.styl => themes/theme-tigerlily.styl} (75%) create mode 100644 Packages/ohif-study-list/client/components/themeSelector/index.js create mode 100644 Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.html create mode 100644 Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.js create mode 100644 Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.styl diff --git a/LesionTracker/client/components/app/app.html b/LesionTracker/client/components/app/app.html index 9669c60fb2e..56540f83119 100644 --- a/LesionTracker/client/components/app/app.html +++ b/LesionTracker/client/components/app/app.html @@ -37,4 +37,5 @@ {{ >lastLoginModal }} {{ >progressDialog }} {{ >viewSeriesDetailsModal }} + {{ >themeSelectorModal }} diff --git a/Packages/ohif-design/app.styl b/Packages/ohif-design/app.styl index 47040a535d2..86acfae54d7 100644 --- a/Packages/ohif-design/app.styl +++ b/Packages/ohif-design/app.styl @@ -2,3 +2,4 @@ @import "{design}/styles/imports/mixins" @import "{design}/styles/imports/spacings" @import "{design}/styles/imports/variables" +@import "{design}/styles/imports/theme-icons" diff --git a/Packages/ohif-design/assets/theme-icons.png b/Packages/ohif-design/assets/theme-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..098f7ed5201bfc4a97a2b7bd8f04e7d7e16de991 GIT binary patch literal 39672 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 Qg8%>k07*qoM6N<$g7y#1AOHXW literal 0 HcmV?d00001 diff --git a/Packages/ohif-design/package.js b/Packages/ohif-design/package.js index 71f3051735a..d0b29c3f72a 100644 --- a/Packages/ohif-design/package.js +++ b/Packages/ohif-design/package.js @@ -12,6 +12,8 @@ Package.onUse(function(api) { api.use('jquery'); api.use('stylus'); + api.addAssets('assets/theme-icons.png', 'client'); + // Importable colors / typography settings api.addFiles([ 'app.styl', @@ -19,8 +21,14 @@ Package.onUse(function(api) { 'styles/imports/spacings.styl', 'styles/imports/variables.styl', 'styles/imports/theming.styl', - 'styles/imports/theme-tide.styl', - 'styles/imports/theme-tigerlilly.styl' + 'styles/imports/theme-icons.styl', + 'styles/imports/themes/theme-tide.styl', + 'styles/imports/themes/theme-tigerlily.styl', + 'styles/imports/themes/theme-crickets.styl', + 'styles/imports/themes/theme-honeycomb.styl', + 'styles/imports/themes/theme-mint.styl', + 'styles/imports/themes/theme-overcast.styl', + 'styles/imports/themes/theme-quartz.styl' ], 'client', { isImport: true }); diff --git a/Packages/ohif-design/styles/imports/theme-icons.styl b/Packages/ohif-design/styles/imports/theme-icons.styl new file mode 100644 index 00000000000..853638f52ef --- /dev/null +++ b/Packages/ohif-design/styles/imports/theme-icons.styl @@ -0,0 +1,47 @@ +.theme-icon-crickets +.theme-icon-tide +.theme-icon-tigerlily +.theme-icon-quartz +.theme-icon-overcast +.theme-icon-mint +.theme-icon-honeycomb + display: inline-block + background: url('/packages/design/assets/theme-icons.png') no-repeat + overflow: hidden + text-indent: -9999px + text-align: left + +.theme-icon-crickets + background-position: -0px -0px + width: 64px + height: 56px + +.theme-icon-tide + background-position: -0px -56px + width: 64px + height: 54px + +.theme-icon-tigerlily + background-position: -0px -110px + width: 62px + height: 61px + +.theme-icon-quartz + background-position: -0px -171px + width: 59px + height: 64px + +.theme-icon-overcast + background-position: -0px -235px + width: 58px + height: 37px + +.theme-icon-mint + background-position: -0px -272px + width: 57px + height: 61px + +.theme-icon-honeycomb + background-position: -0px -333px + width: 50px + height: 58px diff --git a/Packages/ohif-design/styles/imports/themes/theme-crickets.styl b/Packages/ohif-design/styles/imports/themes/theme-crickets.styl new file mode 100644 index 00000000000..2ff8f593383 --- /dev/null +++ b/Packages/ohif-design/styles/imports/themes/theme-crickets.styl @@ -0,0 +1,35 @@ +$themes['crickets'] = { + // Common pallete + $uiYellow: #E29E4A + $uiSkyBlue: #6FBDE2 + + // State pallete + $uiStateError: #FFCCCC + $uiStateErrorBorder: #993333 + $uiStateErrorText: #661111 + + $uiGrayLight: #516873 + $uiGray: #263340 + $uiGrayDark: #2B141B + $uiGrayDarker: #231C1E + $uiGrayDarkest: #14191E + + // Interface UI Colors + $defaultColor: #92C2DA + $hoverColor: #ffffff + $activeColor: #D4C3C1 + $uiBorderColor: #537B76 + $uiBorderColorDark: #3C5D80 + $uiBorderColorActive: #d4aaa5 + $primaryBackgroundColor: #000000 + $boxBackgroundColor: #344a61 + + // Text Colors + $textColorActive: black + $textPrimaryColor: #ffffff + $textSecondaryColor: #8BE7B5 + $largeNumbersColor: #D47C66 + + // Other Colors + $imageSliderColor: #163239 +} diff --git a/Packages/ohif-design/styles/imports/themes/theme-honeycomb.styl b/Packages/ohif-design/styles/imports/themes/theme-honeycomb.styl new file mode 100644 index 00000000000..c2099d1341b --- /dev/null +++ b/Packages/ohif-design/styles/imports/themes/theme-honeycomb.styl @@ -0,0 +1,35 @@ +$themes['honeycomb'] = { + // Common pallete + $uiYellow: #E29E4A + $uiSkyBlue: #6FBDE2 + + // State pallete + $uiStateError: #FFCCCC + $uiStateErrorBorder: #993333 + $uiStateErrorText: #661111 + + $uiGrayLight: #516873 + $uiGray: #263340 + $uiGrayDark: #252228 + $uiGrayDarker: #18161A + $uiGrayDarkest: #14191E + + // Interface UI Colors + $defaultColor: #B5B5B5 + $hoverColor: #ffffff + $activeColor: #CDA56B + $uiBorderColor: #623337 + $uiBorderColorDark: #3C5D80 + $uiBorderColorActive: #ce9e59 + $primaryBackgroundColor: #000000 + $boxBackgroundColor: #344a61 + + // Text Colors + $textColorActive: black + $textPrimaryColor: #ffffff + $textSecondaryColor: #FAB797 + $largeNumbersColor: #D47C66 + + // Other Colors + $imageSliderColor: #163239 +} diff --git a/Packages/ohif-design/styles/imports/themes/theme-mint.styl b/Packages/ohif-design/styles/imports/themes/theme-mint.styl new file mode 100644 index 00000000000..450f01bf338 --- /dev/null +++ b/Packages/ohif-design/styles/imports/themes/theme-mint.styl @@ -0,0 +1,35 @@ +$themes['mint'] = { + // Common pallete + $uiYellow: #E29E4A + $uiSkyBlue: #6FBDE2 + + // State pallete + $uiStateError: #FFCCCC + $uiStateErrorBorder: #993333 + $uiStateErrorText: #661111 + + $uiGrayLight: #516873 + $uiGray: #263340 + $uiGrayDark: #1D232A + $uiGrayDarker: #15191E + $uiGrayDarkest: #14191E + + // Interface UI Colors + $defaultColor: #A7E9B3 + $hoverColor: #ffffff + $activeColor: #31B166 + $uiBorderColor: #214529 + $uiBorderColorDark: #3C5D80 + $uiBorderColorActive: #23b15d + $primaryBackgroundColor: #000000 + $boxBackgroundColor: #344a61 + + // Text Colors + $textColorActive: black + $textPrimaryColor: #ffffff + $textSecondaryColor: #A7E9B3 + $largeNumbersColor: #76D27D + + // Other Colors + $imageSliderColor: #163239 +} diff --git a/Packages/ohif-design/styles/imports/themes/theme-overcast.styl b/Packages/ohif-design/styles/imports/themes/theme-overcast.styl new file mode 100644 index 00000000000..3f9fc6e74e0 --- /dev/null +++ b/Packages/ohif-design/styles/imports/themes/theme-overcast.styl @@ -0,0 +1,35 @@ +$themes['overcast'] = { + // Common pallete + $uiYellow: #E29E4A + $uiSkyBlue: #6FBDE2 + + // State pallete + $uiStateError: #FFCCCC + $uiStateErrorBorder: #993333 + $uiStateErrorText: #661111 + + $uiGrayLight: #516873 + $uiGray: #263340 + $uiGrayDark: #252228 + $uiGrayDarker: #15191E + $uiGrayDarkest: #14191E + + // Interface UI Colors + $defaultColor: #9CBECF + $hoverColor: #ffffff + $activeColor: #507D80 + $uiBorderColor: #404040 + $uiBorderColorDark: #3C5D80 + $uiBorderColorActive: #467c80 + $primaryBackgroundColor: #000000 + $boxBackgroundColor: #344a61 + + // Text Colors + $textColorActive: black + $textPrimaryColor: #ffffff + $textSecondaryColor: #73F2FC + $largeNumbersColor: #74F1FA + + // Other Colors + $imageSliderColor: #163239 +} diff --git a/Packages/ohif-design/styles/imports/themes/theme-quartz.styl b/Packages/ohif-design/styles/imports/themes/theme-quartz.styl new file mode 100644 index 00000000000..92db4c1681a --- /dev/null +++ b/Packages/ohif-design/styles/imports/themes/theme-quartz.styl @@ -0,0 +1,35 @@ +$themes['quartz'] = { + // Common pallete + $uiYellow: #E29E4A + $uiSkyBlue: #6FBDE2 + + // State pallete + $uiStateError: #FFCCCC + $uiStateErrorBorder: #993333 + $uiStateErrorText: #661111 + + $uiGrayLight: #516873 + $uiGray: #263340 + $uiGrayDark: #2B2E3F + $uiGrayDarker: #151A1F + $uiGrayDarkest: #14191E + + // Interface UI Colors + $defaultColor: #8EA2A4 + $hoverColor: #ffffff + $activeColor: #7858CE + $uiBorderColor: #885B86 + $uiBorderColorDark: #3C5D80 + $uiBorderColorActive: #6843cc + $primaryBackgroundColor: #000000 + $boxBackgroundColor: #344a61 + + // Text Colors + $textColorActive: black + $textPrimaryColor: #ffffff + $textSecondaryColor: #D7E8FE + $largeNumbersColor: #ABCDF6 + + // Other Colors + $imageSliderColor: #163239 +} diff --git a/Packages/ohif-design/styles/imports/theme-tide.styl b/Packages/ohif-design/styles/imports/themes/theme-tide.styl similarity index 78% rename from Packages/ohif-design/styles/imports/theme-tide.styl rename to Packages/ohif-design/styles/imports/themes/theme-tide.styl index 98fc157dc4c..61ee1312498 100644 --- a/Packages/ohif-design/styles/imports/theme-tide.styl +++ b/Packages/ohif-design/styles/imports/themes/theme-tide.styl @@ -15,19 +15,20 @@ $themes['tide'] = { $uiGrayDarkest: #14191E // Interface UI Colors - $defaultColor: #9cd0fe + $defaultColor: #9CCEF9 $hoverColor: #ffffff - $activeColor: #00a4d9 - $uiBorderColor: #436270 + $activeColor: #20A5D6 + $uiBorderColor: #44626F $uiBorderColorDark: #3C5D80 $uiBorderColorActive: #00a4d9 $primaryBackgroundColor: #000000 $boxBackgroundColor: #344a61 // Text Colors - $textColorActive: black //#89bae5 + $textColorActive: black $textPrimaryColor: #ffffff - $textSecondaryColor: #6a8fb1 + $textSecondaryColor: #91B9CD + $largeNumbersColor: #6FBDE2 // Other Colors $imageSliderColor: #163239 diff --git a/Packages/ohif-design/styles/imports/theme-tigerlilly.styl b/Packages/ohif-design/styles/imports/themes/theme-tigerlily.styl similarity index 75% rename from Packages/ohif-design/styles/imports/theme-tigerlilly.styl rename to Packages/ohif-design/styles/imports/themes/theme-tigerlily.styl index 34ca407f1db..90b9291d4c5 100644 --- a/Packages/ohif-design/styles/imports/theme-tigerlilly.styl +++ b/Packages/ohif-design/styles/imports/themes/theme-tigerlily.styl @@ -1,4 +1,4 @@ -$themes['tigerlilly'] = { +$themes['tigerlily'] = { // Common pallete $uiYellow: #E29E4A $uiSkyBlue: #6FBDE2 @@ -10,15 +10,15 @@ $themes['tigerlilly'] = { $uiGrayLight: #516873 $uiGray: #263340 - $uiGrayDark: #16202B + $uiGrayDark: #26333F $uiGrayDarker: #151A1F $uiGrayDarkest: #14191E // Interface UI Colors - $defaultColor: #98ceff + $defaultColor: #9ACFFD $hoverColor: #ffffff - $activeColor: #ff8a3d - $uiBorderColor: #744b71 + $activeColor: #fa8947 + $uiBorderColor: #875a86 $uiBorderColorDark: #744b71 $uiBorderColorActive: #ff8a3d $primaryBackgroundColor: #000000 @@ -27,7 +27,8 @@ $themes['tigerlilly'] = { // Text Colors $textColorActive: black $textPrimaryColor: #ffffff - $textSecondaryColor: #6a8fb1 + $textSecondaryColor: #9CCDF8 + $largeNumbersColor: #D47C66 // Other Colors $imageSliderColor: #4b2c3c //#163239 diff --git a/Packages/ohif-design/styles/imports/theming.styl b/Packages/ohif-design/styles/imports/theming.styl index e3a3c083277..78abcf00bca 100644 --- a/Packages/ohif-design/styles/imports/theming.styl +++ b/Packages/ohif-design/styles/imports/theming.styl @@ -2,8 +2,13 @@ $themes = {} $defaultTheme = 'tide' // Import the theme variables -@import "./theme-tide.styl" -@import "./theme-tigerlilly.styl" +@import "./themes/theme-tide.styl" +@import "./themes/theme-tigerlily.styl" +@import "./themes/theme-crickets.styl" +@import "./themes/theme-honeycomb.styl" +@import "./themes/theme-mint.styl" +@import "./themes/theme-overcast.styl" +@import "./themes/theme-quartz.styl" /* * Process each theme variable in the given value, splitting it by space diff --git a/Packages/ohif-study-list/client/components/index.js b/Packages/ohif-study-list/client/components/index.js index 64dc284094f..414b454e64b 100644 --- a/Packages/ohif-study-list/client/components/index.js +++ b/Packages/ohif-study-list/client/components/index.js @@ -3,3 +3,4 @@ import './seriesDetailsModal'; import './serverInformation'; import './studyContextMenu'; import './studylist'; +import './themeSelector'; diff --git a/Packages/ohif-study-list/client/components/studylist/studylistResult/studylistResult.styl b/Packages/ohif-study-list/client/components/studylist/studylistResult/studylistResult.styl index c56b4cf2dc7..7cba1526a08 100644 --- a/Packages/ohif-study-list/client/components/studylist/studylistResult/studylistResult.styl +++ b/Packages/ohif-study-list/client/components/studylist/studylistResult/studylistResult.styl @@ -30,7 +30,7 @@ $bodyCellHeight = 40px line-height: $studyListToolbarHeight .studyCount - theme('color', '$uiSkyBlue') + theme('color', '$largeNumbersColor') font-size: 40px font-weight: 100 line-height: $studyListToolbarHeight @@ -54,7 +54,7 @@ $bodyCellHeight = 40px z-index: 1 &:after - theme('background-color', '$uiSkyBlue') + theme('background-color', '$largeNumbersColor') bottom: -1px height: 1px z-index: 3 diff --git a/Packages/ohif-study-list/client/components/themeSelector/index.js b/Packages/ohif-study-list/client/components/themeSelector/index.js new file mode 100644 index 00000000000..f4bd17197ec --- /dev/null +++ b/Packages/ohif-study-list/client/components/themeSelector/index.js @@ -0,0 +1,3 @@ +import './themeSelectorModal/themeSelectorModal.html'; +import './themeSelectorModal/themeSelectorModal.styl'; +import './themeSelectorModal/themeSelectorModal.js'; diff --git a/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.html b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.html new file mode 100644 index 00000000000..3d3886e66d5 --- /dev/null +++ b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.html @@ -0,0 +1,28 @@ + diff --git a/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.js b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.js new file mode 100644 index 00000000000..928d7ed7dda --- /dev/null +++ b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.js @@ -0,0 +1,69 @@ +const DEFAULT_THEME = 'tide'; + +const getActualTheme = () => sessionStorage.getItem('theme'); + +const setActualTheme = theme => sessionStorage.setItem('theme', theme); + +const addThemeToBody = theme => document.body.classList.add('theme-' + theme); + +const removeThemesFromBody = () => { + const classList = document.body.classList; + + for (let i = classList.length - 1; i >= 0; i--) { + if(classList[i].search('theme-') !== -1) { + document.body.classList.remove(classList[i]); + } + } +}; + +Template.themeSelectorModal.onCreated(() => { + const instance = Template.instance(); + let actualTheme = getActualTheme(); + if(!actualTheme) { + actualTheme = DEFAULT_THEME; + setActualTheme(actualTheme); + } + + instance.state = new ReactiveDict(); + instance.state.set('selectedTheme', actualTheme); + + addThemeToBody(actualTheme); + + instance.container = { + actualTheme, + previewTheme(theme, state) { + state.set('selectedTheme', theme); + removeThemesFromBody(); + addThemeToBody(theme); + }, + applyTheme(state) { + setActualTheme(state.get('selectedTheme')); + }, + resetState(state) { + const theme = getActualTheme(); + + state.set('selectedTheme', theme); + removeThemesFromBody(); + addThemeToBody(theme); + } + }; + +}); + +Template.themeSelectorModal.helpers({ + themes: [ 'crickets', 'honeycomb', 'mint', 'overcast', 'quartz', 'tide', 'tigerlily' ], + ucFirst(text) { + return text.charAt(0).toUpperCase() + text.slice(1); + }, + addClassIfSelected(theme) { + const instance = Template.instance(); + + return theme === instance.state.get('selectedTheme') ? 'selected' : ''; + } +}); + +Template.themeSelectorModal.events({ + 'click .js-cancel, click .close': (event, instance) => instance.container.resetState(instance.state), + 'click .js-apply': (event, instance) => instance.container.applyTheme(instance.state), + 'click .preview-theme': (event, instance) => instance.container.previewTheme(event.currentTarget.dataset.theme, instance.state) +}); diff --git a/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.styl b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.styl new file mode 100644 index 00000000000..a37c3f4f11e --- /dev/null +++ b/Packages/ohif-study-list/client/components/themeSelector/themeSelectorModal/themeSelectorModal.styl @@ -0,0 +1,36 @@ +@import "{design}/app.styl" + +#themeSelectorModal + .theme-list + list-style: none + padding: 0 + + li + display: inline-block + cursor: pointer + margin-right: 10px + margin-bottom: 10px + padding: 10px + width: 110px + theme('border', '1px solid $uiBorderColorDark') + + &:hover + background-color: rgba(21, 25, 30, 0.7) + + &:last-child + margin-right: 0 + + &.selected + theme('border', '3px solid $uiBorderColorActive') + padding: 7px; + + .icon-wrapper + height: 64px + width: 64px + margin: 0 auto + line-height: 6.5 + + .theme-title + font-weight: normal + font-size: 1.1em + margin-bottom: 0 \ No newline at end of file diff --git a/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.html b/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.html index 648bbb5b43f..5fc6684a8ff 100644 --- a/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.html +++ b/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.html @@ -22,6 +22,12 @@ {{/if}} +
  • + + Themes + +
  • +
  • Server Information diff --git a/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.js b/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.js index 6d75389fb3a..aea987bbd07 100644 --- a/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.js +++ b/Packages/ohif-user-management/client/components/userAccountMenu/userAccountMenu.js @@ -35,6 +35,9 @@ Template.userAccountMenu.events({ 'click #serverInformation': function() { $('#serverInformationModal').modal('show'); }, + 'click #themeSelector': function() { + $('#themeSelectorModal').modal('show'); + }, 'click #logoutButton': function() { Meteor.logout(function() { Router.go('/entrySignIn');