├── .gitattributes ├── .github └── workflows │ └── docker-publish-njsPC-linux.yml ├── .gitignore ├── .npmrc ├── Dockerfile ├── README.md ├── app.ts ├── compilerconfig.json ├── compilerconfig.json.defaults ├── defaultConfig.json ├── ecosystem.config.js ├── package-lock.json ├── package.json ├── pages ├── index.html └── messageManager.html ├── scripts ├── bodies.js ├── chemistry.js ├── circuits.js ├── config │ ├── bodies.js │ ├── chemistry.js │ ├── circuits.js │ ├── controller.js │ ├── general.js │ ├── heaters.js │ ├── pumps.js │ ├── schedules.js │ └── valves.js ├── configPage.js ├── controller.js ├── dashboard.js ├── lightGroups.js ├── messages │ ├── doc │ │ └── messageDoc.js │ ├── message.js │ ├── messageList.js │ ├── messageManager.js │ └── testModules │ │ └── sendValveMessages.js ├── pumps.js ├── schedules.js ├── uploader.js └── widgets.js ├── server ├── Constants.ts ├── Errors.ts ├── Server.ts ├── api │ ├── Config.ts │ └── Messages.ts ├── config │ ├── Config.ts │ └── VersionCheck.ts ├── logger │ └── Logger.ts ├── messages │ ├── docs │ │ ├── constants.json │ │ └── messageDoc.json │ └── messages.ts ├── queues │ └── outboundQueue.ts ├── relay │ └── relayRoute.ts └── upload │ └── upload.ts ├── themes ├── Images │ ├── DarkWaterBackground.jpg │ ├── MateriaChevron.jpg │ ├── PurpleForest.jpg │ ├── VanishingEdge.jpg │ ├── WaterBackground.jpg │ └── WaterDropBackground.jpg ├── bootstrap │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── intellibrite.css │ ├── intellibrite.css.map │ ├── intellibrite.min.css │ ├── intellibrite.scss │ ├── theme.css │ ├── theme.css.map │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ └── widgets.scss ├── configPage.css ├── configPage.css.map ├── configPage.min.css ├── configPage.scss ├── controller.css ├── controller.css.map ├── controller.scss ├── dashboard.css ├── dashboard.css.map ├── dashboard.min.css ├── dashboard.scss ├── default.css ├── default.css.map ├── default.scss ├── default │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── theme.css │ ├── theme.css.map │ ├── theme.min.css │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ ├── widgets.min.css │ └── widgets.scss ├── favicon.ico ├── icons │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── intellibrite.css ├── materia │ ├── background.jpg │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── theme.css │ ├── theme.css.map │ ├── theme.min.css │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ └── widgets.scss ├── messageManager.css ├── messageManager.css.map ├── messageManager.min.css ├── messageManager.scss ├── mixins │ ├── gradients.css │ ├── gradients.css.map │ └── gradients.scss ├── nurple │ ├── background.jpg │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── theme.css │ ├── theme.css.map │ ├── theme.min.css │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ └── widgets.scss ├── purple │ ├── background.jpg │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── theme.css │ ├── theme.css.map │ ├── theme.min.css │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ └── widgets.scss ├── sketchy │ ├── bodies.css │ ├── bodies.css.map │ ├── bodies.scss │ ├── colors.css │ ├── colors.css.map │ ├── colors.scss │ ├── fill-in-green.png │ ├── highlighter-gray.png │ ├── highlighter-green.png │ ├── highlighter-yellow.png │ ├── pencilshade-blue.png │ ├── pencilshade-gray.png │ ├── pencilshade-green.png │ ├── pencilshade-orange.png │ ├── pencilshade-red.png │ ├── pencilshade-yellow.png │ ├── pencilshade.png │ ├── poolsketch.png │ ├── scratchout.png │ ├── theme.css │ ├── theme.css.map │ ├── theme.min.css │ ├── theme.scss │ ├── widgets.css │ ├── widgets.css.map │ └── widgets.scss ├── solar.gif ├── vlist.css ├── vlist.css.map ├── vlist.min.css ├── vlist.scss └── widgets.css └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.github/workflows/docker-publish-njsPC-linux.yml: -------------------------------------------------------------------------------- 1 | name: Publish Docker Image - Ubuntu 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | tags: 8 | - "v*.*.*" 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build-and-push: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Docker meta 16 | id: meta 17 | uses: docker/metadata-action@v5 18 | with: 19 | # list of Docker images to use as base name for tags 20 | images: | 21 | tagyoureit/njspc-dashpanel 22 | # generate Docker tags based on the following events/attributes 23 | tags: | 24 | type=schedule 25 | type=ref,event=branch 26 | type=ref,event=pr 27 | type=semver,pattern={{version}} 28 | type=semver,pattern={{major}}.{{minor}} 29 | type=semver,pattern={{major}} 30 | type=sha 31 | 32 | - name: Set up QEMU 33 | uses: docker/setup-qemu-action@v3 34 | 35 | - name: Set up Docker Buildx 36 | uses: docker/setup-buildx-action@v3 37 | 38 | - name: Login to Docker Hub 39 | uses: docker/login-action@v3 40 | with: 41 | username: ${{ secrets.DOCKERHUB_USERNAME }} 42 | password: ${{ secrets.DOCKERHUB_TOKEN }} 43 | 44 | - name: Build and push combined Docker image 45 | uses: docker/build-push-action@v6 46 | with: 47 | push: true 48 | platforms: linux/amd64,linux/arm64,linux/arm/v7 49 | tags: ${{ steps.meta.outputs.tags }} 50 | labels: ${{ steps.meta.outputs.labels }} 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | *.sln 10 | *.njsproj 11 | config.json 12 | dist/ 13 | ./dist/ 14 | .vscode/ 15 | 16 | # User-specific files (MonoDevelop/Xamarin Studio) 17 | *.userprefs 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | bld/ 27 | [Bb]in/ 28 | [Oo]bj/ 29 | [Ll]og/ 30 | 31 | # Visual Studio 2015 cache/options directory 32 | .vs/ 33 | # Uncomment if you have tasks that create the project's static files in wwwroot 34 | #wwwroot/ 35 | 36 | # MSTest test Results 37 | [Tt]est[Rr]esult*/ 38 | [Bb]uild[Ll]og.* 39 | 40 | # NUNIT 41 | *.VisualState.xml 42 | TestResult.xml 43 | 44 | # Build Results of an ATL Project 45 | [Dd]ebugPS/ 46 | [Rr]eleasePS/ 47 | dlldata.c 48 | 49 | # DNX 50 | project.lock.json 51 | project.fragment.lock.json 52 | artifacts/ 53 | 54 | *_i.c 55 | *_p.c 56 | *_i.h 57 | *.ilk 58 | *.meta 59 | *.obj 60 | *.pch 61 | *.pdb 62 | *.pgc 63 | *.pgd 64 | *.rsp 65 | *.sbr 66 | *.tlb 67 | *.tli 68 | *.tlh 69 | *.tmp 70 | *.tmp_proj 71 | *.log 72 | *.vspscc 73 | *.vssscc 74 | .builds 75 | *.pidb 76 | *.svclog 77 | *.scc 78 | 79 | # Chutzpah Test files 80 | _Chutzpah* 81 | 82 | # Visual C++ cache files 83 | ipch/ 84 | *.aps 85 | *.ncb 86 | *.opendb 87 | *.opensdf 88 | *.sdf 89 | *.cachefile 90 | *.VC.db 91 | *.VC.VC.opendb 92 | 93 | # Visual Studio profiler 94 | *.psess 95 | *.vsp 96 | *.vspx 97 | *.sap 98 | 99 | # TFS 2012 Local Workspace 100 | $tf/ 101 | 102 | # Guidance Automation Toolkit 103 | *.gpState 104 | 105 | # ReSharper is a .NET coding add-in 106 | _ReSharper*/ 107 | *.[Rr]e[Ss]harper 108 | *.DotSettings.user 109 | 110 | # JustCode is a .NET coding add-in 111 | .JustCode 112 | 113 | # TeamCity is a build add-in 114 | _TeamCity* 115 | 116 | # DotCover is a Code Coverage Tool 117 | *.dotCover 118 | 119 | # NCrunch 120 | _NCrunch_* 121 | .*crunch*.local.xml 122 | nCrunchTemp_* 123 | 124 | # MightyMoose 125 | *.mm.* 126 | AutoTest.Net/ 127 | 128 | # Web workbench (sass) 129 | .sass-cache/ 130 | 131 | # Installshield output folder 132 | [Ee]xpress/ 133 | 134 | # DocProject is a documentation generator add-in 135 | DocProject/buildhelp/ 136 | DocProject/Help/*.HxT 137 | DocProject/Help/*.HxC 138 | DocProject/Help/*.hhc 139 | DocProject/Help/*.hhk 140 | DocProject/Help/*.hhp 141 | DocProject/Help/Html2 142 | DocProject/Help/html 143 | 144 | # Click-Once directory 145 | publish/ 146 | 147 | # Publish Web Output 148 | *.[Pp]ublish.xml 149 | *.azurePubxml 150 | # TODO: Comment the next line if you want to checkin your web deploy settings 151 | # but database connection strings (with potential passwords) will be unencrypted 152 | #*.pubxml 153 | *.publishproj 154 | 155 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 156 | # checkin your Azure Web App publish settings, but sensitive information contained 157 | # in these scripts will be unencrypted 158 | PublishScripts/ 159 | 160 | # NuGet Packages 161 | *.nupkg 162 | # The packages folder can be ignored because of Package Restore 163 | **/packages/* 164 | # except build/, which is used as an MSBuild target. 165 | !**/packages/build/ 166 | # Uncomment if necessary however generally it will be regenerated when needed 167 | #!**/packages/repositories.config 168 | # NuGet v3's project.json files produces more ignoreable files 169 | *.nuget.props 170 | *.nuget.targets 171 | 172 | # Microsoft Azure Build Output 173 | csx/ 174 | *.build.csdef 175 | 176 | # Microsoft Azure Emulator 177 | ecf/ 178 | rcf/ 179 | 180 | # Windows Store app package directories and files 181 | AppPackages/ 182 | BundleArtifacts/ 183 | Package.StoreAssociation.xml 184 | _pkginfo.txt 185 | 186 | # Visual Studio cache files 187 | # files ending in .cache can be ignored 188 | *.[Cc]ache 189 | # but keep track of directories ending in .cache 190 | !*.[Cc]ache/ 191 | 192 | # Others 193 | ClientBin/ 194 | ~$* 195 | *~ 196 | *.dbmdl 197 | *.dbproj.schemaview 198 | *.jfm 199 | *.pfx 200 | *.publishsettings 201 | node_modules/ 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | 223 | # Business Intelligence projects 224 | *.rdl.data 225 | *.bim.layout 226 | *.bim_*.settings 227 | 228 | # Microsoft Fakes 229 | FakesAssemblies/ 230 | 231 | # GhostDoc plugin setting file 232 | *.GhostDoc.xml 233 | 234 | # Node.js Tools for Visual Studio 235 | .ntvs_analysis.dat 236 | 237 | # Visual Studio 6 build log 238 | *.plg 239 | 240 | # Visual Studio 6 workspace options file 241 | *.opt 242 | 243 | # Visual Studio LightSwitch build output 244 | **/*.HTMLClient/GeneratedArtifacts 245 | **/*.DesktopClient/GeneratedArtifacts 246 | **/*.DesktopClient/ModelManifest.xml 247 | **/*.Server/GeneratedArtifacts 248 | **/*.Server/ModelManifest.xml 249 | _Pvt_Extensions 250 | 251 | # Paket dependency manager 252 | .paket/paket.exe 253 | paket-files/ 254 | 255 | # FAKE - F# Make 256 | .fake/ 257 | 258 | # JetBrains Rider 259 | .idea/ 260 | *.sln.iml 261 | 262 | # CodeRush 263 | .cr/ 264 | 265 | # Python Tools for Visual Studio (PTVS) 266 | __pycache__/ 267 | *.pyc 268 | # data files 269 | data/ 270 | # ignore dist, it is for production files created by npm scripts 271 | dist/ 272 | uploads/ 273 | 274 | /themes/Images/2022-06-24_10-42-18.png 275 | 276 | # SSL Certificates 277 | *.pem 278 | ssl/ -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # .npmrc 2 | engine-strict=true -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-alpine as build 2 | RUN apk add --no-cache make gcc g++ python3 linux-headers udev tzdata 3 | WORKDIR /app 4 | COPY package*.json ./ 5 | RUN npm ci 6 | COPY . . 7 | RUN npm run build 8 | RUN npm ci --production 9 | 10 | FROM node:18-alpine 11 | RUN apk add git 12 | RUN mkdir /app && chown node:node /app && mkdir /app/data && chown node:node /app/data 13 | WORKDIR /app 14 | COPY --chown=node:node --from=build /app . 15 | USER node 16 | ENV NODE_ENV=production 17 | EXPOSE 4200 18 | ENTRYPOINT ["node", "dist/app.js"] 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nodejs-poolController-dashPanel 2 | ## What is nodejs-poolController-dashPanel? 3 | dashPanel is a controller designed to operate using a [nodejs-poolController](https://github.com/tagyoureit/nodejs-poolController) server backend. You will need to set up your nodejs-poolController server and have it communicating with your pool equipment prior to setting up this server. Once you have done that you can set up the dashPanel to communicate with that server. 4 | 5 | While this project was originally developed using an IntelliCenter control panel it should operate equally well with an IntelliTouch or EasyTouch control panel. 6 | ![image](https://user-images.githubusercontent.com/47839015/83304160-38a86780-a1b3-11ea-8214-442db6c6bdc4.png) 7 | 8 | ## Configuring the dashPanel 9 | To configure the dashPanel you need to place the url for your [nodejs-poolController](https://github.com/tagyoureit/nodejs-poolController) server in the configuration. Click the bars menu on the top left of the screen and fill in the ip address and port. Then press the Apply button. If this button is grayed out you will need to edit the config.json file manually and enter the settings under the services menu. 10 | 11 | ## What is Message Manager? 12 | Message manager allows you to inspect your RS485 communication coming from and going to the [nodejs-poolController](https://github.com/tagyoureit/nodejs-poolController) server. This tool decodes the messages and displays them in a manner where important chatter on the RS485 connection can be decoded while eliminating the chatter that don't matter. Special filters can be applied to reduce the information to only the items you are interested in. 13 | ![image](https://user-images.githubusercontent.com/47839015/83314254-7a92d700-a1ce-11ea-8891-545db084624e.png) 14 | 15 | 16 | -------------------------------------------------------------------------------- /app.ts: -------------------------------------------------------------------------------- 1 | import { logger } from "./server/logger/Logger"; 2 | import { config } from "./server/config/Config"; 3 | import { webApp } from "./server/Server"; 4 | import { outQueues } from "./server/queues/outboundQueue"; 5 | import { njsPCRelay } from "./server/relay/relayRoute"; 6 | import * as readline from 'readline'; 7 | 8 | export function initAsync() { 9 | return Promise.resolve() 10 | .then(function () { config.init(); }) 11 | .then(function () { logger.init(); }) 12 | .then(function () { webApp.init(); }) 13 | .then(function () { outQueues.init(); }) 14 | } 15 | export function stopAsync(): Promise { 16 | return Promise.resolve() 17 | .then(function () { console.log('Shutting down open processes'); }) 18 | .then(function () { process.exit(); }); 19 | } 20 | if (process.platform === 'win32') { 21 | let rl = readline.createInterface({ input: process.stdin, output: process.stdout }); 22 | rl.on('SIGINT', function () { stopAsync(); }); 23 | } 24 | else { 25 | process.on('SIGINT', function () { return stopAsync(); }); 26 | } 27 | initAsync(); -------------------------------------------------------------------------------- /compilerconfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "outputFile": "themes/dashboard.css", 4 | "inputFile": "themes/dashboard.scss" 5 | }, 6 | { 7 | "outputFile": "themes/controller.css", 8 | "inputFile": "themes/controller.scss" 9 | }, 10 | { 11 | "outputFile": "themes/configPage.css", 12 | "inputFile": "themes/configPage.scss" 13 | }, 14 | { 15 | "outputFile": "themes/messageManager.css", 16 | "inputFile": "themes/messageManager.scss" 17 | }, 18 | { 19 | "outputFile": "themes/vlist.css", 20 | "inputFile": "themes/vlist.scss" 21 | }, 22 | { 23 | "outputFile": "themes/default/theme.css", 24 | "inputFile": "themes/default/theme.scss" 25 | }, 26 | { 27 | "outputFile": "themes/sketchy/theme.css", 28 | "inputFile": "themes/sketchy/theme.scss" 29 | }, 30 | { 31 | "outputFile": "themes/materia/theme.css", 32 | "inputFile": "themes/materia/theme.scss" 33 | }, 34 | { 35 | "outputFile": "themes/purple/theme.css", 36 | "inputFile": "themes/purple/theme.scss" 37 | }, 38 | { 39 | "outputFile": "themes/nurple/theme.css", 40 | "inputFile": "themes/nurple/theme.scss" 41 | }, 42 | { 43 | "outputFile": "themes/bootstrap/theme.css", 44 | "inputFile": "themes/bootstrap/theme.scss" 45 | }, 46 | { 47 | "outputFile": "themes/bootstrap/intellibrite.css", 48 | "inputFile": "themes/bootstrap/intellibrite.scss" 49 | }, 50 | { 51 | "outputFile": "themes/bootstrap/widgets.css", 52 | "inputFile": "themes/bootstrap/widgets.scss" 53 | }, 54 | { 55 | "outputFile": "themes/bootstrap/colors.css", 56 | "inputFile": "themes/bootstrap/colors.scss" 57 | }, 58 | { 59 | "outputFile": "themes/default/widgets.css", 60 | "inputFile": "themes/default/widgets.scss" 61 | }, 62 | { 63 | "outputFile": "themes/materia/colors.css", 64 | "inputFile": "themes/materia/colors.scss" 65 | }, 66 | { 67 | "outputFile": "themes/mixins/gradients.css", 68 | "inputFile": "themes/mixins/gradients.scss" 69 | }, 70 | { 71 | "outputFile": "themes/purple/colors.css", 72 | "inputFile": "themes/purple/colors.scss" 73 | }, 74 | { 75 | "outputFile": "themes/purple/widgets.css", 76 | "inputFile": "themes/purple/widgets.scss" 77 | }, 78 | { 79 | "outputFile": "themes/default/colors.css", 80 | "inputFile": "themes/default/colors.scss" 81 | }, 82 | { 83 | "outputFile": "themes/materia/widgets.css", 84 | "inputFile": "themes/materia/widgets.scss" 85 | }, 86 | { 87 | "outputFile": "themes/nurple/colors.css", 88 | "inputFile": "themes/nurple/colors.scss" 89 | }, 90 | { 91 | "outputFile": "themes/nurple/widgets.css", 92 | "inputFile": "themes/nurple/widgets.scss" 93 | }, 94 | { 95 | "outputFile": "themes/sketchy/widgets.css", 96 | "inputFile": "themes/sketchy/widgets.scss" 97 | }, 98 | { 99 | "outputFile": "themes/sketchy/colors.css", 100 | "inputFile": "themes/sketchy/colors.scss" 101 | }, 102 | { 103 | "outputFile": "themes/default.css", 104 | "inputFile": "themes/default.scss" 105 | } 106 | ] -------------------------------------------------------------------------------- /compilerconfig.json.defaults: -------------------------------------------------------------------------------- 1 | { 2 | "compilers": { 3 | "less": { 4 | "autoPrefix": "", 5 | "cssComb": "none", 6 | "ieCompat": true, 7 | "strictMath": false, 8 | "strictUnits": false, 9 | "relativeUrls": true, 10 | "rootPath": "", 11 | "sourceMapRoot": "", 12 | "sourceMapBasePath": "", 13 | "sourceMap": false 14 | }, 15 | "sass": { 16 | "autoPrefix": "", 17 | "includePath": "", 18 | "indentType": "space", 19 | "indentWidth": 2, 20 | "outputStyle": "nested", 21 | "Precision": 5, 22 | "relativeUrls": true, 23 | "sourceMapRoot": "", 24 | "lineFeed": "", 25 | "sourceMap": false 26 | }, 27 | "stylus": { 28 | "sourceMap": false 29 | }, 30 | "babel": { 31 | "sourceMap": false 32 | }, 33 | "coffeescript": { 34 | "bare": false, 35 | "runtimeMode": "node", 36 | "sourceMap": false 37 | }, 38 | "handlebars": { 39 | "root": "", 40 | "noBOM": false, 41 | "name": "", 42 | "namespace": "", 43 | "knownHelpersOnly": false, 44 | "forcePartial": false, 45 | "knownHelpers": [], 46 | "commonjs": "", 47 | "amd": false, 48 | "sourceMap": false 49 | } 50 | }, 51 | "minifiers": { 52 | "css": { 53 | "enabled": false, 54 | "termSemicolons": true, 55 | "gzip": false 56 | }, 57 | "javascript": { 58 | "enabled": true, 59 | "termSemicolons": true, 60 | "gzip": false 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /defaultConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "web": { 3 | "servers": { 4 | "http2": { "enabled": false }, 5 | "http": { 6 | "enabled": true, 7 | "ip": "0.0.0.0", 8 | "port": 5150, 9 | "httpsRedirect": false, 10 | "authentication": "none", 11 | "authFile": "/users.htpasswd" 12 | }, 13 | "https": { 14 | "enabled": false, 15 | "ip": "0.0.0.0", 16 | "port": 5151, 17 | "authentication": "none", 18 | "authFile": "/users.htpasswd", 19 | "sslKeyFile": "/ssl/privkey.pem", 20 | "sslCertFile": "/ssl/cert.pem" 21 | }, 22 | "mdns": { "enabled": false }, 23 | "sspd": { "enabled": false }, 24 | "services": {} 25 | }, 26 | "services": { 27 | "protocol": "http://", 28 | "ip": "127.0.0.1", 29 | "port": 4200, 30 | "useProxy": false, 31 | "options": {}, 32 | "socket": { 33 | "protocol": "ws://", 34 | "upgrade": false, 35 | "allowEIO3": true, 36 | "reconnectionDelay": 2000, 37 | "reconnection": true, 38 | "reconnectionDelayMax": 20000 39 | } 40 | }, 41 | "socket": { 42 | "sendLogMessages": false 43 | } 44 | }, 45 | "dashboard": { "startPage": "index.html" }, 46 | "log": { 47 | "app": { 48 | "enabled": true, 49 | "level": "info" 50 | } 51 | }, 52 | "uploads": { 53 | "logFile": { 54 | "path": "uploads/" 55 | } 56 | }, 57 | "appVersion": "1.0.0" 58 | } 59 | -------------------------------------------------------------------------------- /ecosystem.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | apps: [ 3 | { 4 | name: "dashPanel", 5 | script: "npm", 6 | args: ["start"], 7 | cwd: "/app/nodejs-poolcontroller-dashpanel", 8 | restart_delay: 10000, 9 | watch: ["pages", "scripts", "server", "package.json"], 10 | watch_delay: 5000, 11 | kill_timeout: 15000, 12 | }, 13 | ], 14 | }; 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs-poolcontroller-dashpanel", 3 | "version": "8.1.0", 4 | "description": "Dashboard Panel", 5 | "main": "dist/app.js", 6 | "author": { 7 | "name": "Robert Strouse" 8 | }, 9 | "license": "GPL-3.0", 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/rstrouse/nodejs-poolController-dashPanel.git" 13 | }, 14 | "scripts": { 15 | "start": "npm run build && node dist/app.js", 16 | "start:cached": "node dist/app.js", 17 | "build": "tsc", 18 | "watch": "tsc -w" 19 | }, 20 | "dependencies": { 21 | "@fortawesome/fontawesome-free": "^6.2.0", 22 | "express": "^4.18.1", 23 | "extend": "^3.0.2", 24 | "jquery": "^3.6.1", 25 | "jquery-ui": "^1.13.2", 26 | "jquery-ui-dist": "^1.13.1", 27 | "jquery-ui-touch-punch-c": "^1.4.0", 28 | "node-ssdp": "^4.0.1", 29 | "socket.io": "^4.5.2", 30 | "socket.io-client": "^4.5.2", 31 | "winston": "^3.7.2" 32 | }, 33 | "devDependencies": { 34 | "@types/express": "^4.17.13", 35 | "@types/extend": "^3.0.1", 36 | "@types/multer": "^1.4.7", 37 | "@types/node": "^12.20.52", 38 | "multer": "^1.4.5-lts.1", 39 | "ts-node": "^10.7.0", 40 | "typescript": "^4.6.4" 41 | }, 42 | "engines": { 43 | "npm": ">=8.0.0", 44 | "node": ">=16.0.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /pages/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | Pool Control Dashboard 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 72 | 73 | 74 | 75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | 93 |
94 |
95 |
96 |
97 | 98 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /pages/messageManager.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | Message Manager 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 33 | 34 | 35 | 36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | 51 | 66 | 67 | -------------------------------------------------------------------------------- /server/Errors.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | 3 | export class ApiError extends Error { 4 | constructor(message: string, code?: number, httpCode?: number) { 5 | super(message); 6 | this.name = 'ApiError'; 7 | this.code = code || 0; 8 | this.httpCode = httpCode || 400; 9 | let pos: any = {}; 10 | if (typeof this.stack !== 'undefined') { 11 | try { 12 | // Another weirdo decision by NodeJS to not include the line numbers and source. Only a text based stack trace. 13 | let lines = this.stack.split('\n'); 14 | for (let i = 0; i < lines.length; i++) { 15 | let line = lines[i]; 16 | if (line.trimLeft().startsWith('at ')) { 17 | let lastParen = line.lastIndexOf(')'); 18 | let firstParen = line.indexOf('('); 19 | if (lastParen >= 0 && firstParen >= 0) { 20 | let p = line.substring(firstParen + 1, lastParen); 21 | let m = /(\:\d+\:\d+)(?!.*\1)/g; 22 | let matches = p.match(m); 23 | let linecol = ''; 24 | let lastIndex = -1; 25 | if (matches.length > 0) { 26 | linecol = matches[matches.length - 1]; 27 | lastIndex = p.lastIndexOf(linecol); 28 | p = p.substring(0, lastIndex); 29 | if (linecol.startsWith(':')) linecol = linecol.substring(1); 30 | let lastcolon = linecol.lastIndexOf(':'); 31 | if (lastcolon !== -1) { 32 | pos.column = parseInt(linecol.substring(lastcolon + 1), 10); 33 | pos.line = parseInt(linecol.substring(0, lastcolon), 10); 34 | } 35 | } 36 | let po = path.parse(p); 37 | pos.dir = po.dir; 38 | pos.file = po.base; 39 | } 40 | break; 41 | } 42 | } 43 | } catch (e) { } 44 | } 45 | this.position = pos; 46 | } 47 | public code: number = 0; 48 | public httpCode: number = 500; 49 | public position: any = {} 50 | } -------------------------------------------------------------------------------- /server/api/Config.ts: -------------------------------------------------------------------------------- 1 | import * as express from "express"; 2 | import * as extend from 'extend'; 3 | import * as dns from 'dns'; 4 | import { ApiError } from '../Errors'; 5 | import { UploadRoute, BackgroundUpload } from "../upload/upload"; 6 | import { Client } from "node-ssdp"; 7 | import { config } from "../config/Config"; 8 | import { logger } from "../logger/Logger"; 9 | import { versionCheck } from '../config/VersionCheck'; 10 | import { njsPCRelay } from "../relay/relayRoute"; 11 | export class ConfigRoute { 12 | public static initRoutes(app: express.Application) { 13 | app.get('/config/serviceUri', (req, res, next) => { 14 | try { 15 | let srv = config.getSection('web.services'); 16 | if (srv.useProxy) { 17 | //console.log({ protocol: `${req.protocol}://`, ip: `${req.hostname}:${req.socket.localPort}`, useProxy: true }); 18 | } 19 | res.status(200).send(srv); 20 | } 21 | catch (err) { next(err); } 22 | }); 23 | app.put('/config/serviceUri', async (req, res, next) => { 24 | try { 25 | let srv = extend(true, {}, config.getSection('web.services'), req.body); 26 | config.setSection('web.services', srv); 27 | njsPCRelay.init(); 28 | return res.status(200).send(config.getSection(req.body.section)); 29 | } 30 | catch (err) { next(err); } 31 | }); 32 | app.get('/config/findPoolControllers', async (req, res, next) => { 33 | let prom = new Promise((resolve, reject) => { 34 | let ssdpClient = new Client({}); 35 | let servers = []; 36 | try { 37 | ssdpClient.on('response', (headers, statusCode, rinfo) => { 38 | if (statusCode === 200) { 39 | let url = new URL(headers.LOCATION); 40 | console.log(url); 41 | console.log(headers.LOCATION); 42 | if (typeof servers.find(elem => url.origin === elem.origin) === 'undefined') { 43 | let server = { origin: url.origin, username: url.username, password: url.password, protocol: url.protocol, host: url.host, hostname: url.hostname, port: url.port, hash: url.hash, hostnames: [] }; 44 | servers.push(server); 45 | (async () => { 46 | try { 47 | server.hostnames = await dns.promises.reverse(url.hostname); 48 | } catch (err) { logger.error(`Error resolving host names: ${err.message}`) } 49 | })(); 50 | } 51 | } 52 | }); 53 | ssdpClient.search('urn:schemas-tagyoureit-org:device:PoolController:1'); 54 | setTimeout(() => { 55 | resolve(); 56 | ssdpClient.stop(); console.log('done searching for poolController'); 57 | return res.status(200).send(servers); 58 | }, 5000); 59 | } 60 | catch (err) { reject(err); }; 61 | }); 62 | }); 63 | app.get('/config/findREMControllers', async (req, res, next) => { 64 | let prom = new Promise((resolve, reject) => { 65 | let ssdpClient = new Client({}); 66 | let servers = []; 67 | try { 68 | ssdpClient.on('response', (headers, statusCode, rinfo) => { 69 | if (statusCode === 200) { 70 | let url = new URL(headers.LOCATION); 71 | if (typeof servers.find(elem => url.origin === elem.origin) === 'undefined') { 72 | let server = { origin: url.origin, username: url.username, password: url.password, protocol: url.protocol, host: url.host, hostname: url.hostname, port: url.port, hash: url.hash, hostnames: [] }; 73 | servers.push(server); 74 | (async () => { 75 | try { 76 | server.hostnames = await dns.promises.reverse(url.hostname); 77 | } catch(err) { logger.error(`Error resolving host names: ${err.message}`)} 78 | })(); 79 | } 80 | } 81 | }); 82 | ssdpClient.search('urn:schemas-rstrouse-org:device:relayEquipmentManager:1'); 83 | setTimeout(() => { 84 | resolve(); 85 | ssdpClient.stop(); console.log('done searching for REM Controller'); 86 | return res.status(200).send(servers); 87 | }, 5000); 88 | } 89 | catch (err) { reject(err); }; 90 | }); 91 | }); 92 | app.get('/config/appVersion', (req, res) => { 93 | try { 94 | let v = versionCheck.checkGitRemote(); 95 | return res.status(200).send(v); 96 | } 97 | catch (err) { console.log(err); return res.status(500).send(err); } 98 | }); 99 | app.get('/config/:section', (req, res) => { return res.status(200).send(config.getSection(req.params.section)); }); 100 | app.put('/config/:section', (req, res) => { 101 | try { 102 | config.setSection(req.params.section, req.body); 103 | } 104 | catch (err) { return res.status(400).send(new Error(err)); } 105 | return res.status(200).send(config.getSection(req.params.section)); 106 | }); 107 | app.get('/options', (req, res) => { 108 | let opts = { 109 | web: config.getSection('web'), 110 | backgrounds: BackgroundUpload.getBackgrounds() 111 | } 112 | return res.status(200).send(opts); 113 | }); 114 | } 115 | } -------------------------------------------------------------------------------- /server/api/Messages.ts: -------------------------------------------------------------------------------- 1 | import * as express from "express"; 2 | import { ApiError } from '../Errors'; 3 | import { UploadRoute, BackgroundUpload } from "../upload/upload"; 4 | import { Client } from "node-ssdp"; 5 | import { config } from "../config/Config"; 6 | import { logger } from "../logger/Logger"; 7 | import { MessageDocs } from "../messages/messages"; 8 | import { outQueues } from "../queues/outboundQueue"; 9 | import * as extend from 'extend'; 10 | 11 | export class MessagesRoute { 12 | public static initRoutes(app: express.Application) { 13 | app.put('/messages/queue', async (req, res, next) => { 14 | try { 15 | console.log(`request: ${JSON.stringify(req.body)}...`); 16 | let queue = await outQueues.saveQueue(req.body); 17 | return res.status(200).send(queue); 18 | } 19 | catch (err) { 20 | next(err); 21 | } 22 | }); 23 | app.get('/messages/queue/:id', (req, res, next) => { 24 | try { 25 | console.log(`Getting Queue request: ${JSON.stringify(req.params)}...`); 26 | let id = parseInt(req.params.id, 10); 27 | let queue = outQueues.find(q => { return q.id === id }); 28 | if (typeof queue === 'undefined') next(new ApiError(`Outbound queue id:${id} not found.`, 100, 404)); 29 | let out = extend(true, {}, queue); 30 | out.messages = queue.loadMessages(); 31 | return res.status(200).send(out); 32 | } 33 | catch (err) { next(err); } 34 | }); 35 | app.get('/messages/queues', async (req, res, next) => { 36 | try { 37 | outQueues.loadDescriptors(); 38 | console.log(`request: ${JSON.stringify(req.body)}...`); 39 | return res.status(200).send(outQueues); 40 | } 41 | catch (err) { 42 | next(err); 43 | } 44 | }); 45 | app.get('/messages/docs/constants', (req, res, next) => { 46 | try { 47 | return res.status(200).send(MessageDocs.getConstants()); 48 | } 49 | catch (err) { 50 | next(err); 51 | } 52 | 53 | }); 54 | app.get('/messages/docs/keyBytes', (req, res, next) => { 55 | try { 56 | return res.status(200).send(MessageDocs.getKeyBytes()); 57 | } 58 | catch (err) { 59 | next(err); 60 | } 61 | }); 62 | app.get('/messages/docs/:key', (req, res, next) => { 63 | try { 64 | return res.status(200).send(MessageDocs.findMessageByKey(req.params.key) || { docKey: req.params.key }); 65 | } 66 | catch (err) { 67 | next(err); 68 | } 69 | }); 70 | } 71 | } -------------------------------------------------------------------------------- /server/config/Config.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as fs from 'fs'; 3 | import * as extend from 'extend'; 4 | import { logger } from '../logger/Logger'; 5 | class Config { 6 | private cfgPath: string; 7 | private _cfg: any; 8 | private _isInitialized: boolean = false; 9 | constructor() { 10 | this.cfgPath = path.posix.join(process.cwd(), "/config.json"); 11 | // RKS 05-18-20: This originally had multiple points of failure where it was not in the try/catch. 12 | try { 13 | this._cfg = fs.existsSync(this.cfgPath) ? JSON.parse(fs.readFileSync(this.cfgPath, "utf8")) : {}; 14 | const def = JSON.parse(fs.readFileSync(path.join(process.cwd(), "/defaultConfig.json"), "utf8").trim()); 15 | const packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), "/package.json"), "utf8").trim()); 16 | this._cfg = extend(true, {}, def, this._cfg, { appVersion: {installed: packageJson.version }}); 17 | this._isInitialized = true; 18 | this.getEnvVariables(); 19 | this.update(); 20 | } catch (err) { 21 | console.log(`Error reading configuration information. Aborting startup: ${err}`); 22 | // Rethrow this error so we exit the app with the appropriate pause in the console. 23 | throw err; 24 | } 25 | } 26 | public update() { 27 | // Don't overwrite the configuration if we failed during the initialization. 28 | try { 29 | if (!this._isInitialized) return; 30 | fs.writeFileSync( 31 | this.cfgPath, 32 | JSON.stringify(this._cfg, undefined, 2) 33 | ); 34 | console.log(`Updated configuration file`); 35 | } 36 | catch (err) { console.log(`Error writing configuration file ${err}`); } 37 | } 38 | public setSection(section: string, val) { 39 | let c = this._cfg; 40 | if (section.indexOf('.') !== -1) { 41 | let arr = section.split('.'); 42 | for (let i = 0; i < arr.length - 1; i++) { 43 | if (typeof c[arr[i]] === 'undefined') 44 | c[arr[i]] = {}; 45 | c = c[arr[i]]; 46 | } 47 | section = arr[arr.length - 1]; 48 | } 49 | if (JSON.stringify(c[section]) === JSON.stringify(val)){ 50 | logger.silly(`setSection: Config section and val are identical. Not updating.`) 51 | } 52 | else { 53 | c[section] = val; 54 | this.update(); 55 | } 56 | } 57 | 58 | public getSection(section?: string, opts?: any) : any { 59 | if (typeof (section) === 'undefined') return this._cfg; 60 | var c: any = this._cfg; 61 | if (section.indexOf('.') !== -1) { 62 | var arr = section.split('.'); 63 | for (let i = 0; i < arr.length; i++) { 64 | if (typeof (c[arr[i]]) === 'undefined') { 65 | c = null; 66 | break; 67 | } 68 | else 69 | c = c[arr[i]]; 70 | } 71 | } 72 | else 73 | c = c[section]; 74 | return extend(true, {}, opts || {}, c || {}); 75 | } 76 | public init() { 77 | let baseDir = process.cwd(); 78 | this.ensurePath(baseDir + '/data/'); 79 | this.ensurePath(baseDir + '/data/outQueues/'); 80 | } 81 | private ensurePath(dir: string) { 82 | if (!fs.existsSync(dir)) { 83 | fs.mkdir(dir, (err) => { 84 | // Logger will not be initialized by the time we reach here so we must 85 | // simply log these to the console. 86 | if (err) console.log(`Error creating directory: ${dir} - ${err}`); 87 | }); 88 | } 89 | } 90 | private getEnvVariables(){ 91 | // set docker env variables to config.json, if they are set 92 | let env = process.env; 93 | if (typeof env.POOL_HTTP_IP !== 'undefined' && env.POOL_HTTP_IP !== this._cfg.web.services.ip) { 94 | this._cfg.web.services.ip = env.POOL_HTTP_IP; 95 | } 96 | if (typeof env.POOL_HTTP_PORT !== 'undefined' && parseInt(env.POOL_HTTP_PORT,10) !== this._cfg.web.services.port) { 97 | this._cfg.web.services.port = parseInt(env.POOL_HTTP_PORT,10); 98 | } 99 | } 100 | } 101 | export var config:Config = new Config(); -------------------------------------------------------------------------------- /server/logger/Logger.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as fs from 'fs'; 3 | import * as winston from 'winston'; 4 | import * as os from 'os'; 5 | import { config } from '../config/Config'; 6 | class Logger { 7 | constructor() { 8 | this.cfg = config.getSection('log'); 9 | } 10 | private cfg; 11 | private _logger: winston.Logger; 12 | public init() { 13 | logger._logger = winston.createLogger({ 14 | level: logger.cfg.app.level, 15 | format: winston.format.combine(winston.format.colorize(), winston.format.splat(), winston.format.simple()), 16 | transports: [new winston.transports.Console()] 17 | }); 18 | } 19 | public info(...args: any[]) { logger._logger.info.apply(logger._logger, arguments); } 20 | public warn(...args: any[]) { logger._logger.warn.apply(logger._logger, arguments); } 21 | public verbose(...args: any[]) { logger._logger.verbose.apply(logger._logger, arguments); } 22 | public debug(...args: any[]) { logger._logger.debug.apply(logger._logger, arguments); } 23 | public error(...args: any[]) { logger._logger.error.apply(logger._logger, arguments); } 24 | public silly(...args: any[]) { logger._logger.silly.apply(logger._logger, arguments); } 25 | private isIncluded(byte: number, arr: number[]): boolean { 26 | if (typeof(arr) === 'undefined' || !arr || arr.length === 0) return true; 27 | if (arr.indexOf(byte) !== -1) return true; 28 | return false; 29 | } 30 | private isExcluded(byte: number, arr: number[]): boolean { 31 | if (typeof (arr) === 'undefined' || !arr) return false; 32 | if (arr && arr.length === 0) return false; 33 | if (arr.indexOf(byte) !== -1) return true; 34 | return false; 35 | } 36 | public flushLogs() { 37 | } 38 | } 39 | export var logger = new Logger(); -------------------------------------------------------------------------------- /themes/Images/DarkWaterBackground.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/DarkWaterBackground.jpg -------------------------------------------------------------------------------- /themes/Images/MateriaChevron.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/MateriaChevron.jpg -------------------------------------------------------------------------------- /themes/Images/PurpleForest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/PurpleForest.jpg -------------------------------------------------------------------------------- /themes/Images/VanishingEdge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/VanishingEdge.jpg -------------------------------------------------------------------------------- /themes/Images/WaterBackground.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/WaterBackground.jpg -------------------------------------------------------------------------------- /themes/Images/WaterDropBackground.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/Images/WaterDropBackground.jpg -------------------------------------------------------------------------------- /themes/bootstrap/colors.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | -------------------------------------------------------------------------------- /themes/bootstrap/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss"],"names":[],"mappings":"AAAS,6EAAA","file":"colors.css"} -------------------------------------------------------------------------------- /themes/bootstrap/colors.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | @import "../mixins/gradients.scss"; 3 | $border_radius: 3px; 4 | $outline_border: solid 1px silver; 5 | 6 | @mixin panel_background() { 7 | @include linear_gradient(0deg, rgba(255,255,255,1) 0%,rgba(255,255,255,1) 100%); 8 | } 9 | @mixin panel_header_background() { 10 | background: #007bff linear-gradient(180deg, #007bff, #007bff); 11 | // @include linear_gradient(0deg, #673ab7 0%, #673ab7 100%); 12 | } 13 | 14 | @mixin btn_shadow() { 15 | box-shadow: 0 3px 0 0 #082fa6, 0 -4px -4px -1px rgba(0, 0, 0, 0.6), 0 -4px -6px 1px rgba(0, 0, 0, 0.3), 0 -1px -2px 1px rgba(0, 0, 0, 0) inset, 0 18px 32px -2px rgba(255, 255, 255, 0.1) inset; 16 | } 17 | 18 | @mixin button_background() { 19 | //background: #2196F3 linear-gradient(180deg, #42a6f5, #2196F3) repeat-x; 20 | //@include linear_gradient(-45deg, #0B44EF 0%, #007dfa 100%); 21 | //@include btn_shadow(); 22 | transition: box-shadow ease-in 0.2s, transform ease-in 0.2s, color ease-in 0.2s; 23 | } 24 | @mixin fldbutton_background() { 25 | //background: #2196F3 linear-gradient(180deg, #42a6f5, #2196F3) repeat-x; 26 | //@include linear_gradient(-45deg, #0B44EF 0%, #007dfa 100%); 27 | //@include btn_shadow(); 28 | //transition: box-shadow 0.2s, transform 0.2s, color 0.2s; 29 | } 30 | 31 | @mixin header_background() { 32 | background: #7bff9d; 33 | background: linear-gradient(180deg, #7bff9d, #7bff9d); 34 | //@include linear_gradient(180deg, #D500F9 0%, #D500F9 100%); 35 | } 36 | 37 | @mixin hover_background() { 38 | background:#88acda; 39 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 40 | } 41 | @mixin active_background() { 42 | background: #2196F3; 43 | background: linear-gradient(180deg, #42a6f5, #2196F3); 44 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 45 | } 46 | @mixin selected_background() { 47 | background: #2196F3 linear-gradient(180deg, #42a6f5, #2196F3); 48 | //@include linear_gradient(180deg, #159FCF, #13647F); 49 | } 50 | -------------------------------------------------------------------------------- /themes/bootstrap/intellibrite.css: -------------------------------------------------------------------------------- 1 | div.picIBColor { 2 | border-radius: 5px; 3 | align-self: flex-end; 4 | } 5 | 6 | div.picFeature div.picIBColor { 7 | width: calc(100% - 3.75rem); 8 | } 9 | 10 | div.picDashboard[data-hidethemes=false] div.picLight[data-haslighttheme=true] > label, 11 | div.picDashboard[data-hidethemes=false] div.picLight[data-haslighttheme=true] > i, 12 | div.picLightGroup > label, 13 | div.picLightGroup > i { 14 | align-self: center; 15 | margin-top: -10px; 16 | } 17 | -------------------------------------------------------------------------------- /themes/bootstrap/intellibrite.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["intellibrite.scss","intellibrite.css"],"names":[],"mappings":"AAAA;EACI,kBAAA;EACA,oBAAA;ACCJ;;ADCA;EACI,2BAAA;ACEJ;;ADAA;;;;EAIE,kBAAA;EACA,iBAAA;ACGF","file":"intellibrite.css"} -------------------------------------------------------------------------------- /themes/bootstrap/intellibrite.min.css: -------------------------------------------------------------------------------- 1 | div.picIBColor{border-radius:5px;align-self:flex-end;border:solid 1px #00f;}div.picFeature div.picIBColor{width:6.25rem;} -------------------------------------------------------------------------------- /themes/bootstrap/intellibrite.scss: -------------------------------------------------------------------------------- 1 | div.picIBColor { 2 | border-radius: 5px; 3 | align-self: flex-end; 4 | } 5 | div.picFeature div.picIBColor { 6 | width: calc(100% - 3.75rem); 7 | } 8 | div.picDashboard[data-hidethemes=false] div.picLight[data-haslighttheme=true] > label, 9 | div.picDashboard[data-hidethemes=false] div.picLight[data-haslighttheme=true] > i, 10 | div.picLightGroup > label, 11 | div.picLightGroup > i { 12 | align-self: center; 13 | margin-top: -10px; 14 | } -------------------------------------------------------------------------------- /themes/bootstrap/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["theme.css","colors.scss","intellibrite.scss","widgets.scss","theme.scss","../mixins/gradients.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/bootstrap/widgets.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | label, 3 | span, 4 | div:not(.picIBColor) { 5 | line-height: 1; 6 | } 7 | 8 | div.picBody > div { 9 | padding-right: 0; 10 | } 11 | 12 | div.picTabs { 13 | background-color: white; 14 | border-top-left-radius: 3px; 15 | border-top-right-radius: 3px; 16 | border: none; 17 | border-top: solid 1px silver; 18 | border-left: solid 1px silver; 19 | border-right: solid 1px silver; 20 | } 21 | 22 | div.picTab { 23 | border: none; 24 | } 25 | 26 | div.picTab > .picTabText { 27 | margin-bottom: 0.4rem; 28 | } 29 | 30 | div.tab-contents { 31 | border-top: none; 32 | } 33 | 34 | div.picTab.picTabSelected > span.picTabText { 35 | border-bottom: solid 2px teal; 36 | } 37 | 38 | div.picTab:not(.picTabSelected) { 39 | border-color: silver; 40 | color: silver; 41 | } 42 | 43 | div.picConfigTabContents { 44 | background-color: white; 45 | } 46 | 47 | div.picConfigPage { 48 | margin-top: 0.4rem; 49 | } 50 | 51 | div.picController { 52 | padding: 0px; 53 | } 54 | 55 | /* div.picFeatureGrid { 56 | grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); 57 | display: grid; 58 | width: 100%; 59 | } */ 60 | div.picFeatures { 61 | display: block; 62 | } 63 | 64 | div.picSchedule, 65 | div.picPump, 66 | div.picChlorinator, 67 | div.chemControllerDiv, 68 | div.chemDoserDiv, 69 | div.picPumpCircuit, 70 | div.picBodyFilter, 71 | div.picLightThemes { 72 | display: flex; 73 | flex-wrap: wrap; 74 | } 75 | 76 | div.picIBColorSelector > div.picToggleButton > div.picIndicator { 77 | margin-left: 0.15em; 78 | margin-right: -0.19em; 79 | margin-top: -0.47em; 80 | } 81 | 82 | div.picSchedule > span, div.picSchedule > label, div.picChemistry label, div.picChemistry span { 83 | line-height: 2; 84 | } 85 | 86 | div.picChlorinator { 87 | justify-content: space-between; 88 | } 89 | 90 | div.picChemistry { 91 | width: 100%; 92 | } 93 | 94 | div.picIBColorSelector { 95 | display: flex; 96 | } 97 | 98 | div.picBodyFilter:not(:last-child), 99 | div.picBody:not(:last-child), 100 | div.picChlorinator:not(:last-child), 101 | div.picSchedule:not(:last-child), 102 | div.picPump:not(:last-child) { 103 | border-bottom: solid 1px rgba(0, 0, 0, 0.125); 104 | margin-bottom: 5px; 105 | } 106 | 107 | span.picFilterPercentage { 108 | text-align: right; 109 | } 110 | 111 | span.picPressureValue, 112 | span.picFilterPercent, 113 | span.picCurrentOutput, 114 | div.picEnergy, 115 | div.picBodySetpoints, 116 | label.picSchedDays, 117 | table.picSchedDays, 118 | label.picPumpPrograms, 119 | table.picPumpPrograms, 120 | span.saturationIndex, 121 | div.picRelay, 122 | div.picProgram, 123 | span.picFilterPercentage, 124 | label.picIBThemeLabel { 125 | margin-right: auto; 126 | } 127 | 128 | label.picIBThemeLabel { 129 | width: 100%; 130 | margin-left: 10px; 131 | } 132 | 133 | div.picChlorStatus, 134 | div.picSuperChlor { 135 | order: 20; 136 | } 137 | 138 | div.picFeature, 139 | div.picCircuit, 140 | div.picVirtualCircuit { 141 | display: flex; 142 | } 143 | 144 | div.picFeature > label, 145 | div.picCircuit > label, 146 | div.picVirtualCircuit > label { 147 | top: 6px; 148 | margin-right: auto; 149 | } 150 | 151 | div.picToggleButton { 152 | order: 10; 153 | margin-right: auto; 154 | } 155 | 156 | div.picPopoverHeader, 157 | div.picCircuitTitle { 158 | flex: 1 1 100%; 159 | } 160 | 161 | div.picAmbientTemp label { 162 | color: white; 163 | } 164 | 165 | div.picController > div.picControllerTitle { 166 | margin: 0px; 167 | } 168 | 169 | div.pover-icon:hover { 170 | color: orange; 171 | text-shadow: 3px 3px 16px #272634; 172 | } 173 | 174 | div.picSaltReqd { 175 | padding: 0.2rem; 176 | border-bottom: solid 1px gainsboro; 177 | margin-bottom: 0.4rem; 178 | } 179 | 180 | div.picBody[data-ison=false] div.picBodyTemp { 181 | color: silver; 182 | } 183 | 184 | span.picUnits { 185 | color: gray; 186 | } 187 | 188 | div.picAccordian-title { 189 | border: solid 1px gray; 190 | border-top-left-radius: 3px; 191 | border-top-right-radius: 3px; 192 | } 193 | 194 | div.pnl-scheduleDays { 195 | margin-top: 0.2rem; 196 | } 197 | 198 | div.pnl-scheduleDays > div.table { 199 | border-top-left-radius: 3px; 200 | border-top-right-radius: 3px; 201 | } 202 | 203 | div.pnl-scheduleDays div.table-caption { 204 | border-top-left-radius: 3px; 205 | border-top-right-radius: 3px; 206 | border: solid 1px gray; 207 | color: white; 208 | background: #7bff9d; 209 | background: linear-gradient(180deg, #7bff9d, #7bff9d); 210 | } 211 | 212 | div.pnl-scheduleDays div.table-row.dayheader { 213 | border-top-left-radius: 5px; 214 | border-top-right-radius: 5px; 215 | } 216 | 217 | div.pnl-scheduleDays div.table-cell.dayheader { 218 | text-align: center; 219 | width: 2.4rem; 220 | border: solid 1px gray; 221 | font-weight: bold; 222 | color: white; 223 | } 224 | 225 | div.pnl-scheduleDays div.table-row.dayheader { 226 | background: white; 227 | background: #007bff linear-gradient(180deg, #007bff, #007bff); 228 | color: black; 229 | font-weight: bold; 230 | } 231 | 232 | div.pnl-scheduleDays div.table-cell.day:hover { 233 | background: #88acda; 234 | } 235 | 236 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 237 | color: white; 238 | background: #2196F3; 239 | background: linear-gradient(180deg, #42a6f5, #2196F3); 240 | } 241 | 242 | div.pnl-scheduleDays div.table-cell.day { 243 | text-align: center; 244 | font-size: 2rem; 245 | border: solid 1px gainsboro; 246 | cursor: pointer; 247 | } 248 | 249 | div.pnl-scheduleDays div.table-cell.day { 250 | text-align: center; 251 | font-size: 2rem; 252 | cursor: pointer; 253 | font-family: "Font Awesome 5 Free"; 254 | } 255 | 256 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 257 | content: "\f057"; 258 | font-weight: 900; 259 | } 260 | 261 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 262 | content: "\f111"; 263 | font-weight: 400; 264 | } 265 | 266 | div.picSelector { 267 | display: flex; 268 | flex-direction: column; 269 | } 270 | 271 | div.picOption { 272 | width: 100%; 273 | margin-bottom: 10px; 274 | display: flex; 275 | align-items: center; 276 | } 277 | 278 | div.picOption > label { 279 | margin-right: auto; 280 | } 281 | 282 | div.picOption:first-child { 283 | margin-top: 10px; 284 | } 285 | 286 | i.picDropdownButton { 287 | margin-right: 10px; 288 | } 289 | 290 | div.picVirtualCircuit { 291 | padding-left: 0.5em; 292 | display: flex; 293 | } 294 | 295 | div.picBodyFilter > label.picFilterName, 296 | div.picChlorinator > label.picChlorinatorName, 297 | div.picChemController label.picControllerName { 298 | overflow-y: hidden; 299 | } 300 | 301 | div.picSpinner-up, div.picSpinner-down { 302 | line-height: 1.4rem !important; 303 | } 304 | 305 | div.picModules > table > tbody > tr:nth-child(n+1) > td { 306 | color: rgba(0, 0, 0, 0.125); 307 | } 308 | 309 | span.picCircuitEndTime { 310 | position: unset; 311 | right: unset; 312 | } 313 | 314 | span.picLightEndTime { 315 | margin-top: -10px; 316 | margin-right: 5px; 317 | position: unset; 318 | right: unset; 319 | } 320 | 321 | div.picBody[data-covered=true]:before { 322 | text-align: right; 323 | display: block; 324 | position: absolute; 325 | left: -3.25em; 326 | top: 2.5em; 327 | } 328 | 329 | span.picFilterPercentage, 330 | span.picFilterPressure { 331 | width: 5rem; 332 | text-align: right; 333 | } 334 | -------------------------------------------------------------------------------- /themes/bootstrap/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","widgets.css"],"names":[],"mappings":"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","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/bootstrap/widgets.scss: -------------------------------------------------------------------------------- 1 | @import "../mixins/gradients.scss"; 2 | @import "./colors.scss"; 3 | 4 | label, 5 | span, 6 | div:not(.picIBColor) { 7 | line-height: 1; 8 | } 9 | div.picBody > div { 10 | padding-right: 0; 11 | } 12 | div.picTabs { 13 | background-color:white; 14 | border-top-left-radius:$border_radius; 15 | border-top-right-radius:$border_radius; 16 | border:none; 17 | border-top:$outline_border; 18 | border-left:$outline_border; 19 | border-right:$outline_border; 20 | 21 | } 22 | div.picTab { 23 | border:none; 24 | } 25 | div.picTab > .picTabText { 26 | margin-bottom:.4rem; 27 | 28 | } 29 | div.tab-contents { 30 | border-top:none; 31 | } 32 | div.picTab.picTabSelected > span.picTabText { 33 | border-bottom: solid 2px teal; 34 | } 35 | div.picTab:not(.picTabSelected) { 36 | border-color:silver; 37 | color:silver; 38 | } 39 | div.picConfigTabContents { 40 | background-color:white; 41 | } 42 | div.picConfigPage { 43 | margin-top:.4rem; 44 | } 45 | div.picController { 46 | padding:0px; 47 | } 48 | /* div.picFeatureGrid { 49 | grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); 50 | display: grid; 51 | width: 100%; 52 | } */ 53 | div.picFeatures{ 54 | display: block; 55 | } 56 | div.picSchedule, 57 | div.picPump, 58 | div.picChlorinator, 59 | // div.picChemistry, 60 | div.chemControllerDiv, 61 | div.chemDoserDiv, 62 | div.picPumpCircuit, 63 | div.picBodyFilter, 64 | div.picLightThemes { 65 | // padding-bottom:.4rem; 66 | display: flex; 67 | flex-wrap: wrap; 68 | } 69 | div.picIBColorSelector > div.picToggleButton > div.picIndicator { 70 | margin-left:.15em; 71 | margin-right:-.19em; 72 | margin-top: -.47em; 73 | } 74 | div.picSchedule > span, div.picSchedule > label, div.picChemistry label, div.picChemistry span { 75 | line-height: 2; 76 | } 77 | div.picChlorinator { 78 | justify-content: space-between; 79 | } 80 | div.picChemistry { 81 | width: 100%; 82 | } 83 | div.picIBColorSelector{ 84 | display: flex; 85 | } 86 | div.picBodyFilter:not(:last-child), 87 | div.picBody:not(:last-child), 88 | div.picChlorinator:not(:last-child), 89 | div.picSchedule:not(:last-child), 90 | div.picPump:not(:last-child) { 91 | border-bottom: solid 1px rgba(0, 0, 0, 0.125); 92 | margin-bottom: 5px; 93 | } 94 | span.picFilterPercentage { 95 | text-align:right; 96 | } 97 | span.picPressureValue, 98 | span.picFilterPercent, 99 | span.picCurrentOutput, 100 | div.picEnergy, 101 | div.picBodySetpoints, 102 | label.picSchedDays, 103 | table.picSchedDays, 104 | label.picPumpPrograms, 105 | table.picPumpPrograms, 106 | span.saturationIndex, 107 | div.picRelay, 108 | div.picProgram, 109 | span.picFilterPercentage, 110 | label.picIBThemeLabel { 111 | margin-right: auto; 112 | } 113 | label.picIBThemeLabel { 114 | width: 100%; 115 | margin-left: 10px; 116 | } 117 | div.picChlorStatus, 118 | div.picSuperChlor { 119 | order: 20; 120 | } 121 | div.picFeature, 122 | div.picCircuit, 123 | div.picVirtualCircuit { 124 | display: flex; 125 | } 126 | div.picFeature > label, 127 | div.picCircuit > label, 128 | div.picVirtualCircuit > label { 129 | top: 6px; 130 | margin-right: auto; 131 | } 132 | div.picToggleButton{ 133 | order: 10; 134 | margin-right: auto; 135 | } 136 | div.picPopoverHeader, 137 | div.picCircuitTitle { 138 | flex: 1 1 100% 139 | } 140 | div.picAmbientTemp label { 141 | color:white; 142 | } 143 | div.picController > div.picControllerTitle { 144 | margin:0px; 145 | } 146 | div.pover-icon:hover { 147 | color: orange; 148 | text-shadow: 3px 3px 16px #272634; 149 | } 150 | div.picSaltReqd { 151 | padding: .2rem; 152 | border-bottom: solid 1px gainsboro; 153 | margin-bottom: .4rem; 154 | } 155 | div.picBody[data-ison=false] div.picBodyTemp { 156 | color: silver; 157 | } 158 | span.picUnits { 159 | color: gray; 160 | } 161 | div.picAccordian-title { 162 | border: solid 1px gray; 163 | border-top-left-radius: $border_radius; 164 | border-top-right-radius: $border_radius; 165 | } 166 | div.pnl-scheduleDays { 167 | margin-top:.2rem; 168 | } 169 | div.pnl-scheduleDays > div.table { 170 | border-top-left-radius: $border_radius; 171 | border-top-right-radius: $border_radius; 172 | } 173 | div.pnl-scheduleDays div.table-caption { 174 | border-top-left-radius: $border_radius; 175 | border-top-right-radius: $border_radius; 176 | border: solid 1px gray; 177 | color:white; 178 | @include header_background(); 179 | } 180 | div.pnl-scheduleDays div.table-row.dayheader { 181 | border-top-left-radius: 5px; 182 | border-top-right-radius: 5px; 183 | } 184 | div.pnl-scheduleDays div.table-cell.dayheader { 185 | text-align: center; 186 | width: 2.4rem; 187 | border: solid 1px gray; 188 | font-weight: bold; 189 | color: white; 190 | } 191 | div.pnl-scheduleDays div.table-row.dayheader { 192 | background: white; 193 | background: #007bff linear-gradient(180deg, #007bff, #007bff); 194 | color: black; 195 | font-weight: bold; 196 | } 197 | div.pnl-scheduleDays div.table-cell.day:hover { 198 | @include hover_background(); 199 | } 200 | 201 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 202 | color: white; 203 | @include active_background(); 204 | } 205 | div.pnl-scheduleDays div.table-cell.day { 206 | text-align: center; 207 | font-size: 2rem; 208 | border: solid 1px gainsboro; 209 | cursor: pointer; 210 | } 211 | div.pnl-scheduleDays div.table-cell.day { 212 | text-align: center; 213 | font-size: 2rem; 214 | cursor: pointer; 215 | font-family: 'Font Awesome 5 Free'; 216 | } 217 | 218 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 219 | content: "\f057"; 220 | font-weight: 900; 221 | } 222 | 223 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 224 | content: "\f111"; 225 | font-weight: 400; 226 | } 227 | div.picSelector { 228 | display: flex; 229 | flex-direction: column; 230 | } 231 | div.picOption { 232 | width: 100%; 233 | margin-bottom: 10px; 234 | display: flex; 235 | align-items: center; 236 | // line-height: unset !important; 237 | } 238 | div.picOption > label { 239 | margin-right: auto; 240 | } 241 | div.picOption:first-child { 242 | margin-top: 10px; 243 | } 244 | i.picDropdownButton { 245 | margin-right: 10px; 246 | } 247 | div.picVirtualCircuit { 248 | padding-left: .5em; 249 | display: flex; 250 | } 251 | 252 | div.picBodyFilter > label.picFilterName, 253 | div.picChlorinator > label.picChlorinatorName, 254 | div.picChemController label.picControllerName { 255 | overflow-y: hidden; 256 | } 257 | div.picSpinner-up, div.picSpinner-down { 258 | line-height: 1.4rem!important 259 | } 260 | div.picModules > table > tbody > tr:nth-child(n+1) > td { 261 | color:rgba(0, 0, 0, 0.125); 262 | } 263 | span.picCircuitEndTime { 264 | position: unset; 265 | right: unset; 266 | } 267 | span.picLightEndTime { 268 | margin-top: -10px; 269 | margin-right: 5px; 270 | position: unset; 271 | right: unset; 272 | } 273 | div.picBody[data-covered=true]:before { 274 | text-align:right; 275 | display:block; 276 | position:absolute; 277 | left:-3.25em; 278 | top:2.5em; 279 | } 280 | span.picFilterPercentage, 281 | span.picFilterPressure { 282 | width:5rem; 283 | text-align:right; 284 | } -------------------------------------------------------------------------------- /themes/configPage.css: -------------------------------------------------------------------------------- 1 | div.configContainer { 2 | min-width: 627px; 3 | } 4 | 5 | @media screen and (max-width: 540px) { 6 | div.configContainer { 7 | min-width: unset; 8 | } 9 | i.picAccordian-title-expand { 10 | width: unset; 11 | } 12 | .picCircuitsList-list { 13 | min-width: 100% !important; 14 | } 15 | .picCircuitOption > div > .picPickList-value { 16 | width: 7rem !important; 17 | } 18 | .picPickList[data-bind$="ph.phSupply"] > *, .picPickList[data-bind$="orp.phSupply"] > * { 19 | /* display: block !important; */ 20 | } 21 | } 22 | div.inline-line { 23 | display: inline-block; 24 | vertical-align: top; 25 | } 26 | 27 | div.picOptionField, div.picOptionDropdown, div.picOptionCheckbox { 28 | display: inline-block; 29 | line-height: 1.4rem; 30 | } 31 | 32 | div.picOptionLine > div { 33 | margin-right: 0.5rem; 34 | } 35 | 36 | div.picOptionLine { 37 | padding-bottom: 2px; 38 | } 39 | 40 | div.picOptionField > label, 41 | div.picOptionDropdown > label { 42 | padding-right: 0.25rem; 43 | margin-left: 0.4rem; 44 | } 45 | 46 | div.cfgGeneralDate > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picPickList > label, 47 | div.cfgGeneralPersonal > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picPickList > label, 48 | div.cfgGeneralPersonal > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picInputField > label { 49 | display: inline-block; 50 | width: 5.5rem; 51 | } 52 | 53 | div.picOptionField[data-bind$="owner.name"] > div > label, 54 | div.picOptionField[data-bind$=email] > div > label, 55 | div.picOptionField[data-bind$=email2] > div > label { 56 | display: inline-block; 57 | width: 4.25rem; 58 | } 59 | 60 | div.picCircuitsList { 61 | display: inline-block; 62 | } 63 | 64 | div.picCircuitsList, div.picCircuitsList-list, div.picCircuitsList-btnPanel { 65 | display: inline-block; 66 | text-align: left; 67 | vertical-align: top; 68 | border-collapse: collapse; 69 | } 70 | 71 | div.picCircuitsList-list { 72 | border-left: solid 3px gainsboro; 73 | } 74 | 75 | div.picCircuitOption { 76 | text-align: left; 77 | margin-top: 1px; 78 | margin-bottom: 1px; 79 | } 80 | 81 | div.picCircuitOption i.picRemoveOption { 82 | cursor: pointer; 83 | margin-left: 0.15rem; 84 | } 85 | 86 | div.picCircuitOption i.picRemoveOption:hover { 87 | color: orange; 88 | text-shadow: 3px 3px 16px #272634; 89 | } 90 | 91 | div.pnl-scheduleDays div.table { 92 | display: table; 93 | } 94 | 95 | div.pnl-scheduleDays div.table-body { 96 | display: table-row-group; 97 | } 98 | 99 | div.pnl-scheduleDays div.table-row { 100 | display: table-row; 101 | } 102 | 103 | div.pnl-scheduleDays div.table-cell { 104 | display: table-cell; 105 | } 106 | 107 | div.pnl-scheduleDays > div.table { 108 | border-collapse: collapse; 109 | display: inline-block; 110 | margin: 0px auto; 111 | } 112 | 113 | div.pnl-scheduleDays div.table-caption { 114 | display: table-caption; 115 | text-align: center; 116 | } 117 | 118 | div.pnl-scheduleDays div.table-cell.dayheader { 119 | text-align: center; 120 | width: 2.4rem; 121 | font-weight: bold; 122 | } 123 | -------------------------------------------------------------------------------- /themes/configPage.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["configPage.scss","configPage.css"],"names":[],"mappings":"AAAC;EACG,gBAAA;ACCJ;;ADCA;EACI;IACI,gBAAA;ECEN;EDAE;IACI,YAAA;ECEN;EDAE;IACI,0BAAA;ECEN;EDAE;IACI,sBAAA;ECEN;EDAE;IACI,+BAAA;ECEN;AACF;ADAA;EACI,qBAAA;EACA,mBAAA;ACEJ;;ADEA;EACI,qBAAA;EACA,mBAAA;ACCJ;;ADCA;EACI,oBAAA;ACEJ;;ADAA;EACI,mBAAA;ACGJ;;ADDA;;EAEI,sBAAA;EACA,mBAAA;ACIJ;;ADFA;;;EAGI,qBAAA;EACA,aAAA;ACKJ;;ADHA;;;EAGI,qBAAA;EACA,cAAA;ACMJ;;ADJA;EACI,qBAAA;ACOJ;;ADLA;EACI,qBAAA;EACA,gBAAA;EACA,mBAAA;EACA,yBAAA;ACQJ;;ADLA;EACI,gCAAA;ACQJ;;ADNA;EACI,gBAAA;EACA,eAAA;EACA,kBAAA;ACSJ;;ADNA;EACI,eAAA;EACA,oBAAA;ACSJ;;ADNA;EACI,aAAA;EACA,iCAAA;ACSJ;;ADJA;EACI,cAAA;ACOJ;;ADLA;EACI,wBAAA;ACQJ;;ADNA;EACI,kBAAA;ACSJ;;ADPA;EACI,mBAAA;ACUJ;;ADRA;EACI,yBAAA;EACA,qBAAA;EACA,gBAAA;ACWJ;;ADRA;EACI,sBAAA;EACA,kBAAA;ACWJ;;ADTA;EACI,kBAAA;EACA,aAAA;EACA,iBAAA;ACYJ","file":"configPage.css"} -------------------------------------------------------------------------------- /themes/configPage.min.css: -------------------------------------------------------------------------------- 1 | div.configContainer{min-width:627px;}@media screen and (max-width:540px){div.configContainer{min-width:unset;}i.picAccordian-title-expand{width:unset;}.picCircuitsList-list{min-width:100% !important;}.picCircuitOption>div>.picPickList-value{width:7rem !important;}}div.inline-line{display:inline-block;vertical-align:top;}div.picOptionField,div.picOptionDropdown,div.picOptionCheckbox{display:inline-block;line-height:1.4rem;}div.picOptionLine>div{margin-right:.5rem;}div.picOptionLine{padding-bottom:2px;}div.picOptionField>label,div.picOptionDropdown>label{padding-right:.25rem;margin-left:.4rem;}div.cfgGeneralDate>div.picAccordian-contents>div.picOptionLine>div:nth-child(1)>div.picPickList>label,div.cfgGeneralPersonal>div.picAccordian-contents>div.picOptionLine>div:nth-child(1)>div.picPickList>label,div.cfgGeneralPersonal>div.picAccordian-contents>div.picOptionLine>div:nth-child(1)>div.picInputField>label{display:inline-block;width:5.5rem;}div.picOptionField[data-bind$="owner.name"]>div>label,div.picOptionField[data-bind$=email]>div>label,div.picOptionField[data-bind$=email2]>div>label{display:inline-block;width:4.25rem;}div.picCircuitsList{display:inline-block;}div.picCircuitsList,div.picCircuitsList-list,div.picCircuitsList-btnPanel{display:inline-block;text-align:left;vertical-align:top;border-collapse:collapse;}div.picCircuitsList-list{border-left:solid 3px #dcdcdc;}div.picCircuitOption{text-align:left;margin-top:1px;margin-bottom:1px;}div.picCircuitOption i.picRemoveOption{cursor:pointer;margin-left:.15rem;}div.picCircuitOption i.picRemoveOption:hover{color:#ffa500;text-shadow:3px 3px 16px #272634;}div.pnl-scheduleDays div.table{display:table;}div.pnl-scheduleDays div.table-body{display:table-row-group;}div.pnl-scheduleDays div.table-row{display:table-row;}div.pnl-scheduleDays div.table-cell{display:table-cell;}div.pnl-scheduleDays>div.table{border-collapse:collapse;display:inline-block;margin:0 auto;}div.pnl-scheduleDays div.table-caption{display:table-caption;text-align:center;}div.pnl-scheduleDays div.table-cell.dayheader{text-align:center;width:2.4rem;font-weight:bold;} -------------------------------------------------------------------------------- /themes/configPage.scss: -------------------------------------------------------------------------------- 1 | div.configContainer { 2 | min-width:627px; 3 | } 4 | @media screen and (max-width: 540px) { 5 | div.configContainer { 6 | min-width:unset; 7 | } 8 | i.picAccordian-title-expand { 9 | width:unset; 10 | } 11 | .picCircuitsList-list { 12 | min-width: 100% !important; 13 | } 14 | .picCircuitOption > div > .picPickList-value { 15 | width: 7rem !important; 16 | } 17 | .picPickList[data-bind$="ph.phSupply"] > *, .picPickList[data-bind$="orp.phSupply"] > * { 18 | /* display: block !important; */ 19 | } 20 | } 21 | div.inline-line { 22 | display:inline-block; 23 | vertical-align:top; 24 | } 25 | div.picConfigTabContents { 26 | } 27 | div.picOptionField, div.picOptionDropdown, div.picOptionCheckbox { 28 | display: inline-block; 29 | line-height: 1.4rem; 30 | } 31 | div.picOptionLine > div { 32 | margin-right:.5rem; 33 | } 34 | div.picOptionLine { 35 | padding-bottom:2px; 36 | } 37 | div.picOptionField > label, 38 | div.picOptionDropdown > label { 39 | padding-right: .25rem; 40 | margin-left: .4rem; 41 | } 42 | div.cfgGeneralDate > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picPickList > label, 43 | div.cfgGeneralPersonal > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picPickList > label, 44 | div.cfgGeneralPersonal > div.picAccordian-contents > div.picOptionLine > div:nth-child(1) > div.picInputField > label { 45 | display: inline-block; 46 | width: 5.5rem; 47 | } 48 | div.picOptionField[data-bind$="owner.name"] > div > label, 49 | div.picOptionField[data-bind$=email] > div > label, 50 | div.picOptionField[data-bind$=email2] > div > label { 51 | display: inline-block; 52 | width: 4.25rem; 53 | } 54 | div.picCircuitsList { 55 | display: inline-block; 56 | } 57 | div.picCircuitsList, div.picCircuitsList-list, div.picCircuitsList-btnPanel { 58 | display: inline-block; 59 | text-align: left; 60 | vertical-align: top; 61 | border-collapse:collapse; 62 | } 63 | 64 | div.picCircuitsList-list { 65 | border-left: solid 3px gainsboro; 66 | } 67 | div.picCircuitOption { 68 | text-align: left; 69 | margin-top: 1px; 70 | margin-bottom: 1px; 71 | } 72 | 73 | div.picCircuitOption i.picRemoveOption { 74 | cursor: pointer; 75 | margin-left: .15rem; 76 | } 77 | 78 | div.picCircuitOption i.picRemoveOption:hover { 79 | color: orange; 80 | text-shadow: 3px 3px 16px #272634; 81 | } 82 | div.pnl-scheduleDays { 83 | 84 | } 85 | div.pnl-scheduleDays div.table { 86 | display:table; 87 | } 88 | div.pnl-scheduleDays div.table-body { 89 | display:table-row-group; 90 | } 91 | div.pnl-scheduleDays div.table-row { 92 | display:table-row; 93 | } 94 | div.pnl-scheduleDays div.table-cell { 95 | display:table-cell; 96 | } 97 | div.pnl-scheduleDays > div.table { 98 | border-collapse:collapse; 99 | display:inline-block; 100 | margin:0px auto; 101 | 102 | } 103 | div.pnl-scheduleDays div.table-caption { 104 | display: table-caption; 105 | text-align:center; 106 | } 107 | div.pnl-scheduleDays div.table-cell.dayheader { 108 | text-align: center; 109 | width: 2.4rem; 110 | font-weight: bold; 111 | } 112 | -------------------------------------------------------------------------------- /themes/controller.css: -------------------------------------------------------------------------------- 1 | span.picPercentData { 2 | padding-left: 2px; 3 | padding-right: 2px; 4 | } 5 | 6 | div.picControllerTitle { 7 | display: table; 8 | width: 100%; 9 | } 10 | 11 | input.picServerAddress { 12 | width: 10rem; 13 | } 14 | 15 | input.picServerPort { 16 | width: 4rem; 17 | } 18 | 19 | div.picOptionLine > label { 20 | width: 9rem; 21 | display: inline-block; 22 | } 23 | 24 | div.picPanelMode, 25 | div.picFreezeProtect { 26 | text-align: center; 27 | color: blue; 28 | } 29 | 30 | div.picSpaDrain { 31 | text-align: center; 32 | color: black; 33 | } 34 | 35 | div.picPanelMode[data-status=""], 36 | div.picPanelMode[data-status=auto], 37 | div.picFreezeProtect[data-status=off], 38 | div.picSpaDrain[data-status=off] { 39 | display: none; 40 | } 41 | 42 | div.picModel > i { 43 | cursor: pointer; 44 | padding-right: 0.2rem; 45 | } 46 | 47 | div.picModel > i:hover { 48 | cursor: pointer; 49 | padding-right: 0.2rem; 50 | color: orange; 51 | } 52 | 53 | div.picPanelMode > label, 54 | div.picFreezeProtect > label, 55 | div.picSpaDrain > label { 56 | font-weight: bold; 57 | color: red; 58 | font-size: 1.2rem; 59 | padding-left: 0.5rem; 60 | padding-right: 0.5rem; 61 | } 62 | 63 | div.picControllerTitle > div { 64 | display: table-cell; 65 | } 66 | 67 | div.picControllerTitle > div:nth-child(2) { 68 | text-align: center; 69 | } 70 | 71 | div.picControllerTitle > div:nth-child(1) { 72 | width: 20%; 73 | } 74 | 75 | div.picControllerTitle > div:nth-child(4) { 76 | width: 20%; 77 | text-align: right; 78 | } 79 | 80 | div.picAppLogging > label, 81 | div.picPacketLogging > label { 82 | min-width: 4rem; 83 | display: inline-block; 84 | } 85 | 86 | div.picBS { 87 | color: purple; 88 | } 89 | 90 | div.picFirmware { 91 | font-size: 0.8rem; 92 | display: block; 93 | /* vertical-align:top; */ 94 | } 95 | 96 | div.picFirmware > div.picOptionLine > label { 97 | width: 4.5rem; 98 | } 99 | 100 | div.picFirmware > div.picOptionLine > span { 101 | display: inline-block; 102 | width: 2rem; 103 | text-align: right; 104 | } 105 | 106 | div.picModules { 107 | display: inline-block; 108 | vertical-align: top; 109 | padding-left: 1em; 110 | padding-right: 1em; 111 | font-size: 0.8rem; 112 | } 113 | 114 | div.picModules > table > tbody > tr > td:nth-child(1) { 115 | width: 70px; 116 | text-align: left; 117 | } 118 | 119 | div.picModules > table > tbody > tr > td:nth-child(2) { 120 | width: 200px; 121 | text-align: left; 122 | } 123 | 124 | div.picModules > table { 125 | border-collapse: collapse; 126 | box-sizing: border-box; 127 | border-spacing: 0px; 128 | } 129 | 130 | div.picModules > table > tbody > tr:nth-child(1) { 131 | color: white; 132 | font-weight: bold; 133 | filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=#ffaf4b, EndColorStr=#ff920a); 134 | background-image: -ms-linear-gradient(top, #ffaf4b, #ff920a); 135 | background-image: -moz-linear-gradient(top, #ffaf4b, #ff920a); 136 | background-image: -webkit-linear-gradient(top, #ffaf4b, #ff920a); 137 | background-image: linear-gradient(to bottom, #ffaf4b, #ff920a); 138 | } 139 | 140 | div.picModules > table > tbody > tr:nth-child(n+2) { 141 | width: 100%; 142 | top: 0; 143 | margin: 0px; 144 | background-color: white; 145 | } 146 | 147 | div.picModules > table > tbody > tr:nth-child(n+1) > td { 148 | border: solid 1px teal; 149 | padding-left: 4px; 150 | padding-right: 4px; 151 | border-collapse: collapse; 152 | } 153 | 154 | div.picModules > table > tbody > tr:nth-child(1) > td { 155 | border: solid 1px black; 156 | padding-left: 4px; 157 | padding-right: 4px; 158 | border-collapse: collapse; 159 | } 160 | 161 | div.picConfigIcon, div.picStartLogs { 162 | display: inline-block; 163 | cursor: pointer; 164 | margin-left: 0.5rem; 165 | vertical-align: text-top; 166 | } 167 | 168 | div.picConfigIcon:hover, div.picStartLogs:hover { 169 | color: orange; 170 | text-shadow: 3px 3px 16px #272634; 171 | } 172 | 173 | div.picOptionField > label { 174 | display: inline-block; 175 | text-overflow: ellipsis; 176 | white-space: nowrap; 177 | vertical-align: middle; 178 | overflow: hidden; 179 | } 180 | 181 | div.picAmbientTemp > div { 182 | display: inline-block; 183 | } 184 | 185 | div.picAmbientTemp > div:nth-child(2) { 186 | float: right; 187 | } 188 | 189 | div.picAmbientTemp label { 190 | color: gray; 191 | } 192 | 193 | div.picBodyTemp > div:nth-child(2) { 194 | font-size: 2em; 195 | } 196 | 197 | div.ct-narrative { 198 | width: 100%; 199 | overflow: hidden; 200 | font-size: 0.8em; 201 | margin-top: 1em; 202 | max-width: 37rem; 203 | } 204 | 205 | div.ct-narrative > hr { 206 | margin: 1px; 207 | } 208 | 209 | div.anslq25-ct-narrative { 210 | width: 100%; 211 | overflow: hidden; 212 | font-size: 0.8em; 213 | margin-top: 1em; 214 | max-width: 37rem; 215 | } 216 | 217 | div.anslq25-ct-narrative-warning { 218 | font: bold; 219 | color: red; 220 | } 221 | 222 | div.sysmessage-button { 223 | display: inline-block; 224 | position: relative; 225 | width: 34px; 226 | } 227 | 228 | div.sysmessage-button > i { 229 | color: red; 230 | } 231 | 232 | div.sysmessage-badge { 233 | display: block; 234 | position: absolute; 235 | width: 20px; 236 | height: 12px; 237 | font-size: 7pt; 238 | border: solid 1px silver; 239 | background: yellow; 240 | text-align: center; 241 | font-weight: bold; 242 | top: -4px; 243 | left: 10px; 244 | border-radius: 3px; 245 | color: black; 246 | } 247 | 248 | div.sysmessage-button > div.dropdown-panel { 249 | position: absolute; 250 | color: black; 251 | padding: 4px; 252 | z-index: 500; 253 | } 254 | -------------------------------------------------------------------------------- /themes/controller.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["controller.scss","controller.css"],"names":[],"mappings":"AAAC;EACG,iBAAA;EACA,kBAAA;ACCJ;;ADCA;EACI,cAAA;EACA,WAAA;ACEJ;;ADAA;EACI,YAAA;ACGJ;;ADDA;EACI,WAAA;ACIJ;;ADFA;EACI,WAAA;EACA,qBAAA;ACKJ;;ADFA;;EAEI,kBAAA;EACA,WAAA;ACKJ;;ADHA;EACI,kBAAA;EACA,YAAA;ACMJ;;ADJA;;;;EAII,aAAA;ACOJ;;ADLA;EACI,eAAA;EACA,qBAAA;ACQJ;;ADLA;EACI,eAAA;EACA,qBAAA;EACA,aAAA;ACQJ;;ADLA;;;EAGI,iBAAA;EACA,UAAA;EACA,iBAAA;EACA,oBAAA;EACA,qBAAA;ACQJ;;ADLA;EACI,mBAAA;ACQJ;;ADLA;EACI,kBAAA;ACQJ;;ADLA;EACI,UAAA;ACQJ;;ADLA;EACI,UAAA;EACA,iBAAA;ACQJ;;ADNA;;EAEI,eAAA;EACA,qBAAA;ACSJ;;ADPA;EACI,aAAA;ACUJ;;ADRA;EACI,iBAAA;EACA,cAAA;EACA,wBAAA;ACWJ;;ADTA;EACI,aAAA;ACYJ;;ADVA;EACI,qBAAA;EACA,WAAA;EACA,iBAAA;ACaJ;;ADXA;EACI,qBAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;ACcJ;;ADZA;EACI,WAAA;EACA,gBAAA;ACeJ;;ADbA;EACI,YAAA;EACA,gBAAA;ACgBJ;;ADdA;EACI,yBAAA;EACA,sBAAA;EACA,mBAAA;ACiBJ;;ADfA;EACI,YAAA;EACA,iBAAA;EACA,8GAAA;EAIA,8DAAA;ACkBJ;;ADhBA;EACI,WAAA;EACA,MAAA;EACA,WAAA;EACA,uBAAA;ACmBJ;;ADhBA;EACI,sBAAA;EACA,iBAAA;EACA,kBAAA;EACA,yBAAA;ACmBJ;;ADjBA;EACI,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,yBAAA;ACoBJ;;ADlBA;EACI,qBAAA;EACA,eAAA;EACA,mBAAA;EACA,wBAAA;ACqBJ;;ADnBA;EACI,aAAA;EACA,iCAAA;ACsBJ;;ADpBA;EACI,qBAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;ACuBJ;;ADrBA;EACI,qBAAA;ACwBJ;;ADrBA;EACI,YAAA;ACwBJ;;ADrBA;EACI,WAAA;ACwBJ;;ADrBA;EACI,cAAA;ACwBJ;;ADtBA;EACI,WAAA;EACA,gBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;ACyBJ;;ADvBA;EACI,WAAA;AC0BJ;;ADxBA;EACI,WAAA;EACA,gBAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;AC2BJ;;ADzBA;EACI,UAAA;EACA,UAAA;AC4BJ","file":"controller.css"} -------------------------------------------------------------------------------- /themes/controller.scss: -------------------------------------------------------------------------------- 1 | span.picPercentData { 2 | padding-left: 2px; 3 | padding-right: 2px; 4 | } 5 | div.picControllerTitle { 6 | display: table; 7 | width: 100%; 8 | } 9 | input.picServerAddress { 10 | width:10rem; 11 | } 12 | input.picServerPort { 13 | width:4rem; 14 | } 15 | div.picOptionLine > label { 16 | width:9rem; 17 | display:inline-block; 18 | } 19 | 20 | div.picPanelMode, 21 | div.picFreezeProtect { 22 | text-align: center; 23 | color: blue; 24 | } 25 | div.picSpaDrain { 26 | text-align: center; 27 | color:black; 28 | } 29 | div.picPanelMode[data-status=""], 30 | div.picPanelMode[data-status=auto], 31 | div.picFreezeProtect[data-status=off], 32 | div.picSpaDrain[data-status=off] { 33 | display: none; 34 | } 35 | div.picModel > i { 36 | cursor: pointer; 37 | padding-right: .2rem; 38 | } 39 | 40 | div.picModel > i:hover { 41 | cursor: pointer; 42 | padding-right: .2rem; 43 | color: orange; 44 | } 45 | 46 | div.picPanelMode > label, 47 | div.picFreezeProtect > label, 48 | div.picSpaDrain > label { 49 | font-weight: bold; 50 | color: red; 51 | font-size: 1.2rem; 52 | padding-left: .5rem; 53 | padding-right: .5rem; 54 | } 55 | 56 | div.picControllerTitle > div { 57 | display: table-cell; 58 | } 59 | 60 | div.picControllerTitle > div:nth-child(2) { 61 | text-align: center; 62 | } 63 | 64 | div.picControllerTitle > div:nth-child(1) { 65 | width: 20%; 66 | } 67 | 68 | div.picControllerTitle > div:nth-child(4) { 69 | width: 20%; 70 | text-align: right; 71 | } 72 | div.picAppLogging > label, 73 | div.picPacketLogging > label { 74 | min-width:4rem; 75 | display:inline-block; 76 | } 77 | div.picBS { 78 | color:purple; 79 | } 80 | div.picFirmware { 81 | font-size:.8rem; 82 | display: block; 83 | /* vertical-align:top; */ 84 | } 85 | div.picFirmware > div.picOptionLine > label { 86 | width:4.5rem; 87 | } 88 | div.picFirmware > div.picOptionLine > span { 89 | display:inline-block; 90 | width: 2rem; 91 | text-align:right; 92 | } 93 | div.picModules { 94 | display:inline-block; 95 | vertical-align:top; 96 | padding-left:1em; 97 | padding-right:1em; 98 | font-size:.8rem; 99 | } 100 | div.picModules > table > tbody > tr > td:nth-child(1) { 101 | width: 70px; 102 | text-align:left; 103 | } 104 | div.picModules > table > tbody > tr > td:nth-child(2) { 105 | width: 200px; 106 | text-align: left; 107 | } 108 | div.picModules > table { 109 | border-collapse:collapse; 110 | box-sizing:border-box; 111 | border-spacing:0px; 112 | } 113 | div.picModules > table > tbody > tr:nth-child(1) { 114 | color: white; 115 | font-weight:bold; 116 | filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=#ffaf4b, EndColorStr=#ff920a); 117 | background-image: -ms-linear-gradient(top, #ffaf4b, #ff920a); 118 | background-image: -moz-linear-gradient(top, #ffaf4b, #ff920a); 119 | background-image: -webkit-linear-gradient(top, #ffaf4b, #ff920a); 120 | background-image: linear-gradient(to bottom, #ffaf4b, #ff920a); 121 | } 122 | div.picModules > table > tbody > tr:nth-child(n+2) { 123 | width: 100%; 124 | top: 0; 125 | margin: 0px; 126 | background-color:white; 127 | } 128 | 129 | div.picModules > table > tbody > tr:nth-child(n+1) > td { 130 | border: solid 1px teal; 131 | padding-left: 4px; 132 | padding-right: 4px; 133 | border-collapse: collapse; 134 | } 135 | div.picModules > table > tbody > tr:nth-child(1) > td { 136 | border: solid 1px black; 137 | padding-left: 4px; 138 | padding-right: 4px; 139 | border-collapse: collapse; 140 | } 141 | div.picConfigIcon, div.picStartLogs { 142 | display:inline-block; 143 | cursor:pointer; 144 | margin-left:.5rem; 145 | vertical-align:text-top; 146 | } 147 | div.picConfigIcon:hover, div.picStartLogs:hover { 148 | color: orange; 149 | text-shadow: 3px 3px 16px #272634; 150 | } 151 | div.picOptionField > label { 152 | display:inline-block; 153 | text-overflow:ellipsis; 154 | white-space:nowrap; 155 | vertical-align:middle; 156 | overflow:hidden; 157 | } 158 | div.picAmbientTemp > div { 159 | display: inline-block; 160 | } 161 | 162 | div.picAmbientTemp > div:nth-child(2) { 163 | float: right; 164 | } 165 | 166 | div.picAmbientTemp label { 167 | color: gray; 168 | } 169 | 170 | div.picBodyTemp > div:nth-child(2) { 171 | font-size: 2em; 172 | } 173 | div.ct-narrative { 174 | width:100%; 175 | overflow:hidden; 176 | font-size:.8em; 177 | margin-top:1em; 178 | max-width:37rem; 179 | } 180 | div.ct-narrative > hr { 181 | margin:1px; 182 | } 183 | div.anslq25-ct-narrative { 184 | width:100%; 185 | overflow:hidden; 186 | font-size:.8em; 187 | margin-top:1em; 188 | max-width:37rem; 189 | } 190 | div.anslq25-ct-narrative-warning { 191 | font:bold; 192 | color:red; 193 | } 194 | div.sysmessage-button { 195 | display:inline-block; 196 | position:relative; 197 | width:34px; 198 | } 199 | div.sysmessage-button > i { 200 | color:red; 201 | } 202 | div.sysmessage-badge { 203 | display:block; 204 | position:absolute; 205 | width:20px; 206 | height:12px; 207 | font-size:7pt; 208 | border: solid 1px silver; 209 | background:yellow; 210 | text-align:center; 211 | font-weight:bold; 212 | top: -4px; 213 | left:10px; 214 | border-radius:3px; 215 | color:black; 216 | } 217 | div.sysmessage-button > div.dropdown-panel { 218 | position:absolute; 219 | color:black; 220 | padding:4px; 221 | z-index:500; 222 | } 223 | -------------------------------------------------------------------------------- /themes/dashboard.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["default.scss","dashboard.css","controller.scss","dashboard.scss"],"names":[],"mappings":"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","file":"dashboard.css"} -------------------------------------------------------------------------------- /themes/dashboard.min.css: -------------------------------------------------------------------------------- 1 | html{width:100%;height:100%;margin:0;}*{box-sizing:border-box;}*{box-sizing:border-box;}body{width:100%;height:100%;margin:0;}.header{display:block;opacity:1;grid-area:header;background-color:#ffd800;border:solid 1px #008000;}[tabindex="-1"]:focus{outline:none !important;}.text-instructions{font-size:.8rem;font-style:italic;}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none;}.btn-panel{padding:.2rem;margin-top:.2rem;}.btn{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:pointer;}.btn>*{cursor:pointer;}.btn-stateonly{pointer-events:none;cursor:no-drop;}.btnarray{display:inline-block;}.btnarray>div{display:inline-block;}.btn-toggle{cursor:pointer;}span.picPercentData{padding-left:2px;padding-right:2px;}div.picControllerTitle{display:table;width:100%;}input.picServerAddress{width:10rem;}input.picServerPort{width:4rem;}div.picOptionLine>label{width:9rem;display:inline-block;}div.picPanelMode,div.picFreezeProtect{text-align:center;color:#00f;}div.picPanelMode[data-status=""],div.picPanelMode[data-status=auto],div.picFreezeProtect[data-status=off]{display:none;}div.picModel>i{cursor:pointer;padding-right:.2rem;}div.picModel>i:hover{cursor:pointer;padding-right:.2rem;color:#ffa500;}div.picPanelMode>label,div.picFreezeProtect>label{font-weight:bold;color:#f00;font-size:1.2rem;padding-left:.2rem;padding-right:.2rem;}div.picControllerTitle>div{display:table-cell;}div.picControllerTitle>div:nth-child(2){text-align:center;}div.picControllerTitle>div:nth-child(1){width:20%;}div.picControllerTitle>div:nth-child(3){width:20%;text-align:right;}div.picAppLogging>label,div.picPacketLogging>label{min-width:4rem;display:inline-block;}div.picBS{color:#800080;}div.picFirmware{font-size:.8rem;display:inline-block;vertical-align:top;}div.picFirmware>div.picOptionLine>label{width:4.5rem;}div.picFirmware>div.picOptionLine>span{display:inline-block;width:2rem;text-align:right;}div.picModules{display:inline-block;vertical-align:top;padding-left:1em;padding-right:1em;font-size:.8rem;}div.picModules>table>tbody>tr>td:nth-child(1){width:70px;text-align:left;}div.picModules>table>tbody>tr>td:nth-child(2){width:200px;text-align:left;}div.picModules>table{border-collapse:collapse;box-sizing:border-box;border-spacing:0;}div.picModules>table>tbody>tr:nth-child(1){color:#fff;font-weight:bold;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1,StartColorStr=#ffaf4b,EndColorStr=#ff920a);background-image:-ms-linear-gradient(top,#ffaf4b,#ff920a);background-image:-moz-linear-gradient(top,#ffaf4b,#ff920a);background-image:-webkit-linear-gradient(top,#ffaf4b,#ff920a);background-image:linear-gradient(top,#ffaf4b,#ff920a);}div.picModules>table>tbody>tr:nth-child(n+2){width:100%;top:0;margin:0;background-color:#fff;}div.picModules>table>tbody>tr:nth-child(n+1)>td{border:solid 1px #008080;padding-left:4px;padding-right:4px;border-collapse:collapse;}div.picModules>table>tbody>tr:nth-child(1)>td{border:solid 1px #000;padding-left:4px;padding-right:4px;border-collapse:collapse;}div.picConfigIcon,div.picStartLogs{display:inline-block;cursor:pointer;margin-left:.5rem;vertical-align:text-top;}div.picConfigIcon:hover,div.picStartLogs:hover{color:#ffa500;text-shadow:3px 3px 16px #272634;}div.picOptionField>label{display:inline-block;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;overflow:hidden;}div.picAmbientTemp>div{display:inline-block;}div.picAmbientTemp>div:nth-child(2){float:right;}div.picAmbientTemp label{color:#808080;}div.picBodyTemp>div:nth-child(2){font-size:2em;}div.ct-narrative{width:100%;overflow:hidden;font-size:.8em;margin-top:1em;max-width:37rem;}div.ct-narrative>hr{margin:1px;}div.dashOuter{display:grid;justify-content:center;box-sizing:border-box;grid-auto-rows:auto;grid-row-gap:0;margin:auto;max-width:1240px;}div.dashContainer{display:flex;flex-flow:row wrap;}div.dashContainer>div>div.control-panel{width:23.5rem;}div.dashOuter[data-panel="dashboard"]>div.configContainer{display:none;}div.dashOuter[data-panel="configuration"]>div.dashContainer{display:none;}div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] i.picDropdownButton.fa-palette,div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] div.picLight i.picDropdownButton.fa-palette,div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] div.picIBColor,div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] div.picLight div.picIBColor{display:none;}div.picDashboard span.picIntelliBriteIcon{display:none;}.control-panel{height:fit-content;vertical-align:top;display:inline-block;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;}.control-panel-title{white-space:nowrap;}div.picBodyTemp>div:nth-child(2){font-size:2.5em;min-width:2.25em;}.orderInstructions{margin-top:-7px;font-size:.7rem;}@media screen and (min-width:745px){div.lgOrderInstructions{display:block;}div.orderDiv{display:block;}}@media screen and (max-width:744px){div.picController{min-width:100%;max-width:100%;}div.picController div.picModel{min-width:0;width:auto;}div.dashOuter{justify-content:unset;}div.dashOuter:not([data-panel="configuration"]) div.dashContainer{display:contents !important;overflow-y:auto;}div.control-panel{margin-right:0;}div.picBodyTemp .picTempText,div.picBodyTemp .picTempUnits{display:none;}div.picBodies,div.picPumps,div.picChemistry,div.picSchedules,div.picCircuits{max-width:100%;}div.control-panel{width:100% !important;margin:0 !important;}}@media screen and (max-width:540px){div.picController span.picModelData{display:none;}div.picController div.picModel{min-width:0;width:auto;}}@media screen and (max-width:370px){div.dashOuter:not([data-panel="configuration"]) div.dashContainer{display:contents !important;overflow-x:auto;width:100%;}div.picBodies{min-width:100%;}div.picChlorinator>label.picChlorinatorName,div.picChemController>label.picControllerName{max-width:25%;}} -------------------------------------------------------------------------------- /themes/dashboard.scss: -------------------------------------------------------------------------------- 1 | @import "default.scss"; 2 | @import "controller.scss"; 3 | 4 | header.picHeader { 5 | } 6 | 7 | div.dashOuter { 8 | /* width: calc(var(--number-of-columns)*377)px; */ 9 | display: grid; 10 | justify-content: center; 11 | box-sizing: border-box; 12 | grid-auto-rows: auto; 13 | grid-row-gap: 0px; 14 | margin: auto; 15 | max-width: 1240px; 16 | } 17 | 18 | div.dashContainer { 19 | /* display: grid; 20 | grid-template-columns: repeat(auto-fill,minmax(377px, 1fr)); */ 21 | display: flex; 22 | flex-flow: row wrap; 23 | /* flex-flow: column wrap; */ 24 | } 25 | div.dashContainer > div > div.control-panel { 26 | width: 23.5rem; 27 | } 28 | 29 | div.dashOuter[data-panel="dashboard"] > div.configContainer { 30 | display: none; 31 | } 32 | 33 | div.dashOuter[data-panel="configuration"] > div.dashContainer { 34 | display: none; 35 | } 36 | 37 | div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] i.picDropdownButton.fa-palette, 38 | div.picDashboard[data-hidethemes="true"] 39 | div.picCircuit[data-type="circuit"] 40 | div.picLight 41 | i.picDropdownButton.fa-palette, 42 | div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] div.picIBColor, 43 | div.picDashboard[data-hidethemes="true"] div.picCircuit[data-type="circuit"] div.picLight div.picIBColor { 44 | display: none; 45 | } 46 | /* 47 | div.picDashboard[data-hidethemes=false] span.picIntelliBriteIcon { 48 | display: none; 49 | } 50 | */ 51 | div.picDashboard span.picIntelliBriteIcon { 52 | display: none; 53 | } 54 | .control-panel { 55 | height: fit-content; 56 | vertical-align: top; 57 | display: inline-block; 58 | user-select: none; 59 | -webkit-user-select: none; 60 | -moz-user-select: none; 61 | -ms-user-select: none; 62 | } 63 | 64 | .control-panel-title { 65 | white-space: nowrap; 66 | } 67 | div.picBodyTemp > div:nth-child(2) { 68 | font-size: 2.5em; 69 | min-width: 2.25em; 70 | } 71 | .orderInstructions { 72 | margin-top: -7px; 73 | font-size: 0.7rem; 74 | } 75 | 76 | @media screen and (min-width: 745px) { 77 | div.lgOrderInstructions { 78 | display: block; 79 | } 80 | div.orderDiv { 81 | display: block; 82 | } 83 | } 84 | 85 | @media screen and (max-width: 744px) { 86 | div.picController { 87 | // width: 100%; 88 | min-width: 100%; 89 | max-width: 100%; 90 | } 91 | 92 | div.picController div.picModel { 93 | min-width: 0px; 94 | width: auto; 95 | } 96 | div.dashOuter { 97 | justify-content: unset; 98 | } 99 | div.dashOuter:not([data-panel="configuration"]) div.dashContainer { 100 | display: contents !important; 101 | overflow-y: auto; 102 | } 103 | 104 | div.control-panel { 105 | margin-right: 0px; 106 | } 107 | 108 | div.picBodyTemp .picTempText, 109 | div.picBodyTemp .picTempUnits { 110 | display: none; 111 | } 112 | 113 | div.picBodies, 114 | div.picPumps, 115 | div.picChemistry, 116 | div.picSchedules, 117 | div.picCircuits { 118 | max-width: 100%; 119 | } 120 | div.control-panel { 121 | width: 100% !important; 122 | margin: 0px !important; 123 | } 124 | } 125 | 126 | @media screen and (max-width: 540px) { 127 | div.picController span.picModelData { 128 | display: none; 129 | } 130 | 131 | div.picController div.picModel { 132 | min-width: 0px; 133 | width: auto; 134 | } 135 | } 136 | 137 | @media screen and (max-width: 370px) { 138 | div.dashOuter:not([data-panel="configuration"]) div.dashContainer { 139 | display: contents !important; 140 | overflow-x: auto; 141 | width: 100%; 142 | } 143 | 144 | div.picBodies { 145 | min-width: 100%; 146 | } 147 | 148 | div.picBodyFilter > label.picFilterName, 149 | div.picChlorinator > label.picChlorinatorName, 150 | div.picChemController > label.picControllerName { 151 | max-width: 25%; 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /themes/default.css: -------------------------------------------------------------------------------- 1 | html { 2 | width: 100%; 3 | height: 100%; 4 | margin: 0px; 5 | } 6 | 7 | * { 8 | box-sizing: border-box; 9 | } 10 | 11 | * { 12 | box-sizing: border-box; 13 | } 14 | 15 | body { 16 | width: 100%; 17 | height: 100%; 18 | margin: 0px; 19 | } 20 | 21 | .header { 22 | display: block; 23 | opacity: 1; 24 | grid-area: header; 25 | background-color: #ffd800; 26 | border: solid 1px green; 27 | } 28 | 29 | [tabindex="-1"]:focus { 30 | outline: none !important; 31 | } 32 | 33 | .text-instructions { 34 | font-size: 0.8rem; 35 | font-style: italic; 36 | } 37 | 38 | a.btn.disabled, 39 | fieldset[disabled] a.btn { 40 | pointer-events: none; 41 | } 42 | 43 | div.picValueSpinner.disabled > div { 44 | opacity: 0.5; 45 | cursor: not-allowed; 46 | } 47 | 48 | .btn-panel { 49 | padding: 0.2rem; 50 | margin-top: 0.2rem; 51 | } 52 | 53 | .btn { 54 | user-select: none; 55 | -webkit-user-select: none; 56 | -moz-user-select: none; 57 | -ms-user-select: none; 58 | cursor: pointer; 59 | } 60 | 61 | .btn > * { 62 | cursor: pointer; 63 | } 64 | 65 | .btn-stateonly { 66 | pointer-events: none; 67 | cursor: no-drop; 68 | } 69 | 70 | .btnarray { 71 | display: inline-block; 72 | } 73 | 74 | .btnarray > div { 75 | display: inline-block; 76 | } 77 | 78 | .btn-toggle { 79 | cursor: pointer; 80 | } 81 | 82 | div.dashContainer, 83 | div.configContainer { 84 | position: relative; 85 | } 86 | -------------------------------------------------------------------------------- /themes/default.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["default.scss","default.css"],"names":[],"mappings":"AAAC;EACG,WAAA;EACA,YAAA;EACA,WAAA;ACCJ;;ADCA;EACI,sBAAA;ACEJ;;ADCA;EAAI,sBAAA;ACGJ;;ADFA;EACI,WAAA;EACA,YAAA;EACA,WAAA;ACKJ;;ADHA;EACI,cAAA;EACA,UAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;ACMJ;;ADJA;EACI,wBAAA;ACOJ;;ADLA;EACI,iBAAA;EACA,kBAAA;ACQJ;;ADNA;;EAEI,oBAAA;ACSJ;;ADPA;EACI,YAAA;EACA,mBAAA;ACUJ;;ADRA;EACI,eAAA;EACA,kBAAA;ACWJ;;ADTA;EACI,iBAAA;EACA,yBAAA;EACA,sBAAA;EACA,qBAAA;EACA,eAAA;ACYJ;;ADVA;EACI,eAAA;ACaJ;;ADXA;EACI,oBAAA;EACA,eAAA;ACcJ;;ADZA;EACI,qBAAA;ACeJ;;ADbA;EACI,qBAAA;ACgBJ;;ADdA;EACI,eAAA;ACiBJ;;ADfA;;EAEI,kBAAA;ACkBJ","file":"default.css"} -------------------------------------------------------------------------------- /themes/default.scss: -------------------------------------------------------------------------------- 1 | html { 2 | width: 100%; 3 | height: 100%; 4 | margin: 0px; 5 | } 6 | * { 7 | box-sizing: border-box; 8 | } 9 | 10 | * { box-sizing: border-box; } 11 | body { 12 | width: 100%; 13 | height: 100%; 14 | margin: 0px; 15 | } 16 | .header { 17 | display: block; 18 | opacity: 1; 19 | grid-area: header; 20 | background-color: #ffd800; 21 | border: solid 1px green; 22 | } 23 | [tabindex="-1"]:focus { 24 | outline: none !important; 25 | } 26 | .text-instructions { 27 | font-size: .8rem; 28 | font-style: italic; 29 | } 30 | a.btn.disabled, 31 | fieldset[disabled] a.btn { 32 | pointer-events: none; 33 | } 34 | div.picValueSpinner.disabled > div { 35 | opacity: .5; 36 | cursor:not-allowed; 37 | } 38 | .btn-panel { 39 | padding: .2rem; 40 | margin-top: .2rem; 41 | } 42 | .btn { 43 | user-select: none; 44 | -webkit-user-select: none; 45 | -moz-user-select: none; 46 | -ms-user-select: none; 47 | cursor: pointer; 48 | } 49 | .btn > * { 50 | cursor:pointer; 51 | } 52 | .btn-stateonly { 53 | pointer-events:none; 54 | cursor:no-drop; 55 | } 56 | .btnarray { 57 | display:inline-block; 58 | } 59 | .btnarray > div { 60 | display: inline-block; 61 | } 62 | .btn-toggle { 63 | cursor:pointer; 64 | } 65 | div.dashContainer, 66 | div.configContainer { 67 | position:relative; 68 | } -------------------------------------------------------------------------------- /themes/default/colors.css: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /themes/default/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"colors.css"} -------------------------------------------------------------------------------- /themes/default/colors.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | $border_radius: 5px; 3 | $outline_border: solid 1px gray; 4 | 5 | @mixin panel_background() { 6 | @include linear_gradient(0deg, rgba(240,240,240, 1) 0%, rgba(249,249,249,1) 15%, rgba(255,255,255,1) 24%, rgba(255,255,255,1) 82%, rgba(222,222,222,1) 100%); 7 | } 8 | @mixin button_background() { 9 | @include linear_gradient(180deg, rgba(238,238,238,1) 0%, rgba(204,204,204,1) 100%); 10 | } 11 | @mixin fldbutton_background() { 12 | @include linear_gradient(180deg, rgba(246,248,249,1) 0%, rgba(229,235,238,1) 50%, rgba(215,222,227,1) 51%, rgba(245,247,249,1) 100%); 13 | } 14 | @mixin header_background() { 15 | @include linear_gradient(180deg, rgba(246,248,249,1) 0%, rgba(229,235,238,1) 50%, rgba(215,222,227,1) 51%, rgba(245,247,249,1) 100%); 16 | } 17 | @mixin hover_background() { 18 | @include linear_gradient(180deg, #ffaf4b, #ff920a); 19 | } 20 | @mixin active_background() { 21 | @include linear_gradient(180deg, #159FCF, #13647F); 22 | } 23 | @mixin selected_background() { 24 | @include linear_gradient(180deg, #159FCF, #13647F); 25 | } 26 | -------------------------------------------------------------------------------- /themes/default/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["widgets.scss","../mixins/gradients.scss","theme.css","colors.scss","theme.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/default/widgets.css: -------------------------------------------------------------------------------- 1 | div.picConfigTabContents { 2 | background: rgb(240, 240, 240); 3 | background: -webkit-linear-gradient(90deg, rgb(240, 240, 240) 0%, rgb(249, 249, 249) 15%, rgb(255, 255, 255) 24%, rgb(255, 255, 255) 82%, rgb(222, 222, 222) 100%); 4 | background: linear-gradient(0deg, rgb(240, 240, 240) 0%, rgb(249, 249, 249) 15%, rgb(255, 255, 255) 24%, rgb(255, 255, 255) 82%, rgb(222, 222, 222) 100%); 5 | } 6 | 7 | div.picTab:not(.picTabSelected) { 8 | border-color: silver; 9 | color: slategray; 10 | text-shadow: 1px 1px 2px gainsboro; 11 | } 12 | 13 | div.picTab.picTabSelected { 14 | font-weight: bold; 15 | } 16 | 17 | div.pover-icon:hover { 18 | color: orange; 19 | text-shadow: 3px 3px 16px #272634; 20 | } 21 | 22 | div.picSaltReqd { 23 | padding: 0.2rem; 24 | border-bottom: solid 1px gainsboro; 25 | margin-bottom: 0.4rem; 26 | } 27 | 28 | div.picBody[data-ison=false] div.picBodyTemp { 29 | color: silver; 30 | } 31 | 32 | span.picUnits { 33 | color: gray; 34 | } 35 | 36 | div.picAccordian-title { 37 | border: solid 1px gray; 38 | border-top-left-radius: 5px; 39 | border-top-right-radius: 5px; 40 | } 41 | 42 | div.pnl-scheduleDays > div.table { 43 | border-top-left-radius: 5px; 44 | border-top-right-radius: 5px; 45 | } 46 | 47 | div.pnl-scheduleDays div.table-caption { 48 | border-top-left-radius: 5px; 49 | border-top-right-radius: 5px; 50 | border: solid 1px gray; 51 | background: rgb(246, 248, 249); 52 | background: -webkit-linear-gradient(-90deg, rgb(246, 248, 249) 0%, rgb(229, 235, 238) 50%, rgb(215, 222, 227) 51%, rgb(245, 247, 249) 100%); 53 | background: linear-gradient(180deg, rgb(246, 248, 249) 0%, rgb(229, 235, 238) 50%, rgb(215, 222, 227) 51%, rgb(245, 247, 249) 100%); 54 | } 55 | 56 | div.pnl-scheduleDays div.table-row.dayheader { 57 | border-top-left-radius: 5px; 58 | border-top-right-radius: 5px; 59 | } 60 | 61 | div.pnl-scheduleDays div.table-cell.dayheader { 62 | text-align: center; 63 | width: 2.4rem; 64 | border: solid 1px gray; 65 | font-weight: bold; 66 | color: white; 67 | } 68 | 69 | div.pnl-scheduleDays div.table-row.dayheader { 70 | background: #fde4be; 71 | background: #fde4be; 72 | background: -webkit-linear-gradient(-90deg, #fde4be 0%, #E78F08 65%); 73 | background: linear-gradient(180deg, #fde4be 0%, #E78F08 65%); 74 | color: black; 75 | font-weight: bold; 76 | } 77 | 78 | div.pnl-scheduleDays div.table-cell.day:hover { 79 | background: #ffaf4b; 80 | background: -webkit-linear-gradient(-90deg, #ffaf4b, #ff920a); 81 | background: linear-gradient(180deg, #ffaf4b, #ff920a); 82 | } 83 | 84 | .disabled { 85 | pointer-events: none; 86 | cursor: no-drop; 87 | opacity: 0.7; 88 | } 89 | 90 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 91 | color: white; 92 | background: #159FCF; 93 | background: -webkit-linear-gradient(-90deg, #159FCF, #13647F); 94 | background: linear-gradient(180deg, #159FCF, #13647F); 95 | } 96 | 97 | div.pnl-scheduleDays div.table-cell.day { 98 | text-align: center; 99 | font-size: 2rem; 100 | border: solid 1px gainsboro; 101 | cursor: pointer; 102 | } 103 | 104 | div.pnl-scheduleDays div.table-cell.day { 105 | text-align: center; 106 | font-size: 2rem; 107 | cursor: pointer; 108 | font-family: "Font Awesome 5 Free"; 109 | } 110 | 111 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 112 | content: "\f057"; 113 | font-weight: 900; 114 | } 115 | 116 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 117 | content: "\f111"; 118 | font-weight: 400; 119 | } 120 | 121 | .slist-caption, 122 | .crud-caption, 123 | .list-caption { 124 | background: #fde4be; 125 | background: -webkit-linear-gradient(-90deg, #fde4be 0%, #E78F08 65%); 126 | background: linear-gradient(180deg, #fde4be 0%, #E78F08 65%); 127 | } 128 | 129 | tr.slist-header, 130 | tr.crud-header { 131 | background: rgb(246, 248, 249); 132 | background: -webkit-linear-gradient(-90deg, rgb(246, 248, 249) 0%, rgb(229, 235, 238) 50%, rgb(215, 222, 227) 51%, rgb(245, 247, 249) 100%); 133 | background: linear-gradient(180deg, rgb(246, 248, 249) 0%, rgb(229, 235, 238) 50%, rgb(215, 222, 227) 51%, rgb(245, 247, 249) 100%); 134 | } 135 | -------------------------------------------------------------------------------- /themes/default/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["widgets.scss","../mixins/gradients.scss","widgets.css","colors.scss"],"names":[],"mappings":"AAGA;EC2CI,8BAAA;EAEA,yJAAA;AC5CJ;;AFEA;EACI,oBAAA;EACA,gBAAA;EACA,kCAAA;AECJ;;AFCA;EACI,iBAAA;AEEJ;;AFCA;EACI,aAAA;EACA,iCAAA;AEEJ;;AFAA;EACI,eAAA;EACA,kCAAA;EACA,qBAAA;AEGJ;;AFDA;EACI,aAAA;AEIJ;;AFFA;EACI,WAAA;AEKJ;;AFHA;EACI,sBAAA;EACA,2BG/BY;EHgCZ,4BGhCY;ADsChB;;AFJA;EACI,2BGnCY;EHoCZ,4BGpCY;AD2ChB;;AFLA;EACI,2BGvCY;EHwCZ,4BGxCY;EHyCZ,sBAAA;ECIA,8BAAA;EAEA,mIAAA;ACKJ;;AFRA;EACI,2BAAA;EACA,4BAAA;AEWJ;;AFTA;EACI,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;EACA,YAAA;AEYJ;;AFVA;EACI,mBAAA;ECXA,mBAAA;EAEA,4DAAA;EDWA,YAAA;EACA,iBAAA;AEeJ;;AFbA;EChBI,mBAAA;EAEA,qDAAA;ACiCJ;;AFhBA;EACI,oBAAA;EACA,eAAA;EACA,YAAA;AEmBJ;;AFjBA;EACI,YAAA;ECzBA,mBAAA;EAEA,qDAAA;AC8CJ;;AFpBA;EACI,kBAAA;EACA,eAAA;EACA,2BAAA;EACA,eAAA;AEuBJ;;AFrBA;EACI,kBAAA;EACA,eAAA;EACA,eAAA;EACA,kCAAA;AEwBJ;;AFrBA;EACI,gBAAA;EACA,gBAAA;AEwBJ;;AFrBA;EACI,gBAAA;EACA,gBAAA;AEwBJ;;AFtBA;;;EClDI,mBAAA;EAEA,4DAAA;AC8EJ;;AFzBA;;ECvDI,8BAAA;EAEA,mIAAA;ACqFJ","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/default/widgets.min.css: -------------------------------------------------------------------------------- 1 | .test{color:#ff0;}div.picConfigTabContents{background:#f0f0f0;background:-webkit-linear-gradient(90deg,#f0f0f0 0%,#f9f9f9 15%,#fff 24%,#fff 82%,#dedede 100%);background:linear-gradient(0deg,#f0f0f0 0%,#f9f9f9 15%,#fff 24%,#fff 82%,#dedede 100%);}div.picTab:not(.picTabSelected){border-color:#c0c0c0;color:#708090;text-shadow:1px 1px 2px gainsboro;}div.picTab.picTabSelected{font-weight:bold;}div.pover-icon:hover{color:#ffa500;text-shadow:3px 3px 16px #272634;}div.picSaltReqd{padding:.2rem;border-bottom:solid 1px #dcdcdc;margin-bottom:.4rem;}div.picBody[data-ison=false] div.picBodyTemp{color:#c0c0c0;}span.picUnits{color:#808080;}div.picAccordian-title{border:solid 1px #808080;border-top-left-radius:5px;border-top-right-radius:5px;}div.pnl-scheduleDays>div.table{border-top-left-radius:5px;border-top-right-radius:5px;}div.pnl-scheduleDays div.table-caption{border-top-left-radius:5px;border-top-right-radius:5px;border:solid 1px #808080;background:#f6f8f9;background:-webkit-linear-gradient(-90deg,#f6f8f9 0%,#e5ebee 50%,#d7dee3 51%,#f5f7f9 100%);background:linear-gradient(180deg,#f6f8f9 0%,#e5ebee 50%,#d7dee3 51%,#f5f7f9 100%);}div.pnl-scheduleDays div.table-row.dayheader{border-top-left-radius:5px;border-top-right-radius:5px;}div.pnl-scheduleDays div.table-cell.dayheader{text-align:center;width:2.4rem;border:solid 1px #808080;font-weight:bold;color:#fff;}div.pnl-scheduleDays div.table-row.dayheader{background:#fde4be;background:#fde4be;background:-webkit-linear-gradient(-90deg,#fde4be 0%,#e78f08 65%);background:linear-gradient(180deg,#fde4be 0%,#e78f08 65%);color:#000;font-weight:bold;}div.pnl-scheduleDays div.table-cell.day:hover{background:#ffaf4b;background:-webkit-linear-gradient(-90deg,#ffaf4b,#ff920a);background:linear-gradient(180deg,#ffaf4b,#ff920a);}.disabled{pointer-events:none;cursor:no-drop;opacity:.7;}div.pnl-scheduleDays div.table-cell.day:not(.disabled):active{color:#fff;background:#159fcf;background:-webkit-linear-gradient(-90deg,#159fcf,#13647f);background:linear-gradient(180deg,#159fcf,#13647f);}div.pnl-scheduleDays div.table-cell.day{text-align:center;font-size:2rem;border:solid 1px #dcdcdc;cursor:pointer;}div.pnl-scheduleDays div.table-cell.day{text-align:center;font-size:2rem;cursor:pointer;font-family:'Font Awesome 5 Free';}div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before{content:"";font-weight:900;}div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before{content:"";font-weight:400;} -------------------------------------------------------------------------------- /themes/default/widgets.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | @import './colors.scss'; 3 | 4 | div.picConfigTabContents { 5 | @include linear_gradient(0deg, rgba(240,240,240,1) 0%, rgba(249,249,249,1) 15%, rgba(255,255,255,1) 24%, rgba(255,255,255,1) 82%, rgba(222,222,222,1) 100%); 6 | } 7 | div.picTab:not(.picTabSelected) { 8 | border-color: silver; 9 | color: slategray; 10 | text-shadow: 1px 1px 2px gainsboro; 11 | } 12 | div.picTab.picTabSelected { 13 | font-weight:bold; 14 | } 15 | 16 | div.pover-icon:hover { 17 | color: orange; 18 | text-shadow: 3px 3px 16px #272634; 19 | } 20 | div.picSaltReqd { 21 | padding: .2rem; 22 | border-bottom: solid 1px gainsboro; 23 | margin-bottom: .4rem; 24 | } 25 | div.picBody[data-ison=false] div.picBodyTemp { 26 | color: silver; 27 | } 28 | span.picUnits { 29 | color: gray; 30 | } 31 | div.picAccordian-title { 32 | border: solid 1px gray; 33 | border-top-left-radius: $border_radius; 34 | border-top-right-radius: $border_radius; 35 | } 36 | div.pnl-scheduleDays > div.table { 37 | border-top-left-radius: $border_radius; 38 | border-top-right-radius: $border_radius; 39 | } 40 | div.pnl-scheduleDays div.table-caption { 41 | border-top-left-radius: $border_radius; 42 | border-top-right-radius: $border_radius; 43 | border: solid 1px gray; 44 | @include fldbutton_background(); 45 | } 46 | div.pnl-scheduleDays div.table-row.dayheader { 47 | border-top-left-radius: 5px; 48 | border-top-right-radius: 5px; 49 | } 50 | div.pnl-scheduleDays div.table-cell.dayheader { 51 | text-align: center; 52 | width: 2.4rem; 53 | border: solid 1px gray; 54 | font-weight: bold; 55 | color: white; 56 | } 57 | div.pnl-scheduleDays div.table-row.dayheader { 58 | background: #fde4be; 59 | @include linear_gradient(180deg, #fde4be 0%, #E78F08 65%); 60 | color: black; 61 | font-weight: bold; 62 | } 63 | div.pnl-scheduleDays div.table-cell.day:hover { 64 | @include hover_background(); 65 | } 66 | .disabled { 67 | pointer-events:none; 68 | cursor:no-drop; 69 | opacity:.7; 70 | } 71 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 72 | color: white; 73 | @include active_background(); 74 | } 75 | div.pnl-scheduleDays div.table-cell.day { 76 | text-align: center; 77 | font-size: 2rem; 78 | border: solid 1px gainsboro; 79 | cursor: pointer; 80 | } 81 | div.pnl-scheduleDays div.table-cell.day { 82 | text-align: center; 83 | font-size: 2rem; 84 | cursor: pointer; 85 | font-family: 'Font Awesome 5 Free'; 86 | } 87 | 88 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 89 | content: "\f057"; 90 | font-weight: 900; 91 | } 92 | 93 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 94 | content: "\f111"; 95 | font-weight: 400; 96 | } 97 | .slist-caption, 98 | .crud-caption, 99 | .list-caption { 100 | @include linear_gradient(180deg, #fde4be 0%, #E78F08 65%); 101 | } 102 | tr.slist-header, 103 | tr.crud-header { 104 | @include header_background(); 105 | } 106 | -------------------------------------------------------------------------------- /themes/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/favicon.ico -------------------------------------------------------------------------------- /themes/icons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-144x144.png -------------------------------------------------------------------------------- /themes/icons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-192x192.png -------------------------------------------------------------------------------- /themes/icons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-36x36.png -------------------------------------------------------------------------------- /themes/icons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-48x48.png -------------------------------------------------------------------------------- /themes/icons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-72x72.png -------------------------------------------------------------------------------- /themes/icons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/android-icon-96x96.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-114x114.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-144x144.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-57x57.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-60x60.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-72x72.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-76x76.png -------------------------------------------------------------------------------- /themes/icons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /themes/icons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/apple-icon.png -------------------------------------------------------------------------------- /themes/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/favicon-16x16.png -------------------------------------------------------------------------------- /themes/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/favicon-32x32.png -------------------------------------------------------------------------------- /themes/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/favicon-96x96.png -------------------------------------------------------------------------------- /themes/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/favicon.ico -------------------------------------------------------------------------------- /themes/icons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /themes/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /themes/icons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/ms-icon-150x150.png -------------------------------------------------------------------------------- /themes/icons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/ms-icon-310x310.png -------------------------------------------------------------------------------- /themes/icons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/icons/ms-icon-70x70.png -------------------------------------------------------------------------------- /themes/materia/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/materia/background.jpg -------------------------------------------------------------------------------- /themes/materia/colors.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | -------------------------------------------------------------------------------- /themes/materia/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss"],"names":[],"mappings":"AAAS,6EAAA","file":"colors.css"} -------------------------------------------------------------------------------- /themes/materia/colors.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | @import "../mixins/gradients.scss"; 3 | 4 | $border_radius: 3px; 5 | $outline_border: solid 1px silver; 6 | @mixin panel_background() { 7 | background:white; 8 | } 9 | @mixin panel_header_background() { 10 | background: #4CAF50; 11 | background: linear-gradient(180deg, #67bb6a, #4CAF50); 12 | // @include linear_gradient(0deg, #673ab7 0%, #673ab7 100%); 13 | } 14 | 15 | @mixin btn_shadow() { 16 | box-shadow: 0 3px 0 0 #082fa6, 0 -4px -4px -1px rgba(0, 0, 0, 0.6), 0 -4px -6px 1px rgba(0, 0, 0, 0.3), 0 -1px -2px 1px rgba(0, 0, 0, 0) inset, 0 18px 32px -2px rgba(255, 255, 255, 0.1) inset; 17 | } 18 | @mixin button_background() { 19 | background: #2196F3; 20 | //background: linear-gradient(180deg, #42a6f5, #2196F3); 21 | background-repeat: repeat-x; 22 | //@include linear_gradient(-45deg, #0B44EF 0%, #007dfa 100%); 23 | @include btn_shadow(); 24 | transition: box-shadow ease-in 0.2s, transform ease-in 0.2s, color ease-in 0.2s; 25 | } 26 | @mixin fldbutton_background() { 27 | //background: #2196F3 linear-gradient(180deg, #42a6f5, #2196F3) repeat-x; 28 | //@include linear_gradient(-45deg, #0B44EF 0%, #007dfa 100%); 29 | //@include btn_shadow(); 30 | //transition: box-shadow 0.2s, transform 0.2s, color 0.2s; 31 | } 32 | @mixin header_background() { 33 | background: #4caf50; 34 | background: linear-gradient(180deg, #91d293, #59b55d) 35 | //@include linear_gradient(180deg, #D500F9 0%, #D500F9 100%); 36 | } 37 | @mixin hover_background() { 38 | background:#4DB6AC; 39 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 40 | } 41 | @mixin active_background() { 42 | background: #2196F3; 43 | background: linear-gradient(180deg, #42a6f5, #2196F3); 44 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 45 | } 46 | 47 | @mixin selected_background() { 48 | background: #2196F3; 49 | background: linear-gradient(180deg, #42a6f5, #2196F3); 50 | //@include linear_gradient(180deg, #159FCF, #13647F); 51 | } 52 | -------------------------------------------------------------------------------- /themes/materia/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","theme.css","theme.scss","../mixins/gradients.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/materia/widgets.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | div.picTabs { 3 | background-color: white; 4 | border-top-left-radius: 3px; 5 | border-top-right-radius: 3px; 6 | border: none; 7 | border-top: solid 1px silver; 8 | border-left: solid 1px silver; 9 | border-right: solid 1px silver; 10 | } 11 | 12 | div.picTab { 13 | border: none; 14 | } 15 | 16 | div.picTab > .picTabText { 17 | margin-bottom: 0.4rem; 18 | } 19 | 20 | div.tab-contents { 21 | border-top: none; 22 | } 23 | 24 | div.picTab.picTabSelected > span.picTabText { 25 | border-bottom: solid 2px teal; 26 | } 27 | 28 | div.picTab:not(.picTabSelected) { 29 | border-color: silver; 30 | color: silver; 31 | } 32 | 33 | div.picConfigTabContents { 34 | background-color: white; 35 | } 36 | 37 | div.picConfigPage { 38 | margin-top: 0.4rem; 39 | } 40 | 41 | div.picController { 42 | padding: 0px; 43 | } 44 | 45 | div.picAmbientTemp label { 46 | color: white; 47 | } 48 | 49 | div.picController > div.picControllerTitle { 50 | margin: 0px; 51 | } 52 | 53 | div.pover-icon:hover { 54 | color: orange; 55 | text-shadow: 3px 3px 16px #272634; 56 | } 57 | 58 | div.picSaltReqd { 59 | padding: 0.2rem; 60 | border-bottom: solid 1px gainsboro; 61 | margin-bottom: 0.4rem; 62 | } 63 | 64 | div.picBody[data-ison=false] div.picBodyTemp { 65 | color: silver; 66 | } 67 | 68 | span.picUnits { 69 | color: gray; 70 | } 71 | 72 | div.picAccordian-title { 73 | border: solid 1px gray; 74 | border-top-left-radius: 3px; 75 | border-top-right-radius: 3px; 76 | } 77 | 78 | div.pnl-scheduleDays { 79 | margin-top: 0.2rem; 80 | } 81 | 82 | div.pnl-scheduleDays > div.table { 83 | border-top-left-radius: 3px; 84 | border-top-right-radius: 3px; 85 | } 86 | 87 | div.pnl-scheduleDays div.table-caption { 88 | border-top-left-radius: 3px; 89 | border-top-right-radius: 3px; 90 | border: solid 1px gray; 91 | color: white; 92 | background: #4caf50; 93 | background: linear-gradient(180deg, #91d293, #59b55d); 94 | } 95 | 96 | div.pnl-scheduleDays div.table-row.dayheader { 97 | border-top-left-radius: 5px; 98 | border-top-right-radius: 5px; 99 | } 100 | 101 | div.pnl-scheduleDays div.table-cell.dayheader { 102 | text-align: center; 103 | width: 2.4rem; 104 | border: solid 1px gray; 105 | font-weight: bold; 106 | color: white; 107 | } 108 | 109 | div.pnl-scheduleDays div.table-row.dayheader { 110 | background: white; 111 | background: linear-gradient(180deg, #91d293, #59b55d); 112 | color: black; 113 | font-weight: bold; 114 | } 115 | 116 | div.pnl-scheduleDays div.table-cell.day:hover { 117 | background: #4DB6AC; 118 | } 119 | 120 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 121 | color: white; 122 | background: #2196F3; 123 | background: linear-gradient(180deg, #42a6f5, #2196F3); 124 | } 125 | 126 | div.pnl-scheduleDays div.table-cell.day { 127 | text-align: center; 128 | font-size: 2rem; 129 | border: solid 1px gainsboro; 130 | cursor: pointer; 131 | } 132 | 133 | div.pnl-scheduleDays div.table-cell.day { 134 | text-align: center; 135 | font-size: 2rem; 136 | cursor: pointer; 137 | font-family: "Font Awesome 5 Free"; 138 | } 139 | 140 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 141 | content: "\f057"; 142 | font-weight: 900; 143 | } 144 | 145 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 146 | content: "\f111"; 147 | font-weight: 400; 148 | } 149 | -------------------------------------------------------------------------------- /themes/materia/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","widgets.css"],"names":[],"mappings":"AAAS,6EAAA;ACET;EACI,uBAAA;EACA,2BDDY;ECEZ,4BDFY;ECGZ,YAAA;EACA,4BDHa;ECIb,6BDJa;ECKb,8BDLa;AEKjB;;ADGA;EACI,YAAA;ACAJ;;ADEA;EACI,qBAAA;ACCJ;;ADEA;EACI,gBAAA;ACCJ;;ADCA;EACI,6BAAA;ACEJ;;ADAA;EACI,oBAAA;EACA,aAAA;ACGJ;;ADDA;EACI,uBAAA;ACIJ;;ADFA;EACI,kBAAA;ACKJ;;ADHA;EACI,YAAA;ACMJ;;ADHA;EACI,YAAA;ACMJ;;ADJA;EACI,WAAA;ACOJ;;ADLA;EACI,aAAA;EACA,iCAAA;ACQJ;;ADNA;EACI,eAAA;EACA,kCAAA;EACA,qBAAA;ACSJ;;ADPA;EACI,aAAA;ACUJ;;ADRA;EACI,WAAA;ACWJ;;ADTA;EACI,sBAAA;EACA,2BD3DY;EC4DZ,4BD5DY;AEwEhB;;ADVA;EACI,kBAAA;ACaJ;;ADXA;EACI,2BDlEY;ECmEZ,4BDnEY;AEiFhB;;ADZA;EACI,2BDtEY;ECuEZ,4BDvEY;ECwEZ,sBAAA;EACA,YAAA;ED5CA,mBAAA;EACA,qDAAA;AE4DJ;;ADdA;EACI,2BAAA;EACA,4BAAA;ACiBJ;;ADfA;EACI,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;EACA,YAAA;ACkBJ;;ADhBA;EACI,iBAAA;EACA,qDAAA;EACA,YAAA;EACA,iBAAA;ACmBJ;;ADjBA;ED3DI,mBAAA;AEgFJ;;ADjBA;EACI,YAAA;ED5DA,mBAAA;EACA,qDAAA;AEiFJ;;ADnBA;EACI,kBAAA;EACA,eAAA;EACA,2BAAA;EACA,eAAA;ACsBJ;;ADpBA;EACI,kBAAA;EACA,eAAA;EACA,eAAA;EACA,kCAAA;ACuBJ;;ADpBA;EACI,gBAAA;EACA,gBAAA;ACuBJ;;ADpBA;EACI,gBAAA;EACA,gBAAA;ACuBJ","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/materia/widgets.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | @import 'colors.scss'; 3 | div.picTabs { 4 | background-color:white; 5 | border-top-left-radius:$border_radius; 6 | border-top-right-radius:$border_radius; 7 | border:none; 8 | border-top:$outline_border; 9 | border-left:$outline_border; 10 | border-right:$outline_border; 11 | 12 | } 13 | div.picTab { 14 | border:none; 15 | } 16 | div.picTab > .picTabText { 17 | margin-bottom:.4rem; 18 | 19 | } 20 | div.tab-contents { 21 | border-top:none; 22 | } 23 | div.picTab.picTabSelected > span.picTabText { 24 | border-bottom: solid 2px teal; 25 | } 26 | div.picTab:not(.picTabSelected) { 27 | border-color:silver; 28 | color:silver; 29 | } 30 | div.picConfigTabContents { 31 | background-color:white; 32 | } 33 | div.picConfigPage { 34 | margin-top:.4rem; 35 | } 36 | div.picController { 37 | padding:0px; 38 | } 39 | div.picFeatures {} 40 | div.picAmbientTemp label { 41 | color:white; 42 | } 43 | div.picController > div.picControllerTitle { 44 | margin:0px; 45 | } 46 | div.pover-icon:hover { 47 | color: orange; 48 | text-shadow: 3px 3px 16px #272634; 49 | } 50 | div.picSaltReqd { 51 | padding: .2rem; 52 | border-bottom: solid 1px gainsboro; 53 | margin-bottom: .4rem; 54 | } 55 | div.picBody[data-ison=false] div.picBodyTemp { 56 | color: silver; 57 | } 58 | span.picUnits { 59 | color: gray; 60 | } 61 | div.picAccordian-title { 62 | border: solid 1px gray; 63 | border-top-left-radius: $border_radius; 64 | border-top-right-radius: $border_radius; 65 | } 66 | div.pnl-scheduleDays { 67 | margin-top:.2rem; 68 | } 69 | div.pnl-scheduleDays > div.table { 70 | border-top-left-radius: $border_radius; 71 | border-top-right-radius: $border_radius; 72 | } 73 | div.pnl-scheduleDays div.table-caption { 74 | border-top-left-radius: $border_radius; 75 | border-top-right-radius: $border_radius; 76 | border: solid 1px gray; 77 | color:white; 78 | @include header_background(); 79 | } 80 | div.pnl-scheduleDays div.table-row.dayheader { 81 | border-top-left-radius: 5px; 82 | border-top-right-radius: 5px; 83 | } 84 | div.pnl-scheduleDays div.table-cell.dayheader { 85 | text-align: center; 86 | width: 2.4rem; 87 | border: solid 1px gray; 88 | font-weight: bold; 89 | color: white; 90 | } 91 | div.pnl-scheduleDays div.table-row.dayheader { 92 | background: white; 93 | background: linear-gradient(180deg, #91d293, #59b55d); 94 | color: black; 95 | font-weight: bold; 96 | } 97 | div.pnl-scheduleDays div.table-cell.day:hover { 98 | @include hover_background(); 99 | } 100 | 101 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 102 | color: white; 103 | @include active_background(); 104 | } 105 | div.pnl-scheduleDays div.table-cell.day { 106 | text-align: center; 107 | font-size: 2rem; 108 | border: solid 1px gainsboro; 109 | cursor: pointer; 110 | } 111 | div.pnl-scheduleDays div.table-cell.day { 112 | text-align: center; 113 | font-size: 2rem; 114 | cursor: pointer; 115 | font-family: 'Font Awesome 5 Free'; 116 | } 117 | 118 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 119 | content: "\f057"; 120 | font-weight: 900; 121 | } 122 | 123 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 124 | content: "\f111"; 125 | font-weight: 400; 126 | } 127 | -------------------------------------------------------------------------------- /themes/messageManager.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["default.scss","messageManager.css","messageManager.scss","controller.scss"],"names":[],"mappings":"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","file":"messageManager.css"} -------------------------------------------------------------------------------- /themes/mixins/gradients.css: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /themes/mixins/gradients.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"gradients.css"} -------------------------------------------------------------------------------- /themes/mixins/gradients.scss: -------------------------------------------------------------------------------- 1 | @function convert-angle($value, $unit) { 2 | $convertable-units: deg grad turn rad; 3 | $conversion-factors: 1 (10grad/9deg) (1turn/360deg) (3.1415926rad/180deg); 4 | 5 | @if index($convertable-units, unit($value)) and index($convertable-units, $unit) { 6 | @return $value / nth($conversion-factors, index($convertable-units, unit($value))) * nth($conversion-factors, index($convertable-units, $unit)); 7 | } 8 | @warn "Cannot convert `#{unit($value)}` to `#{$unit}`."; 9 | } 10 | 11 | /// Test if '$value' is an angle 12 | /// @param {*} $value - Value to test 13 | /// @return {Bool} 14 | @function is-direction($value) { 15 | $is-direction: index((to top, to top right, to right top, to right, to bottom right, to right bottom, to bottom, to bottom left, to left bottom, to left, to left top, to top left), $value); 16 | $is-angle: type-of($value) == 'number' and index('deg' 'grad' 'turn' 'rad', unit($value)); 17 | @return $is-direction or $is-angle; 18 | } 19 | 20 | /// Convert a direction to legacy syntax 21 | /// @param {Keyword | Angle} $value - Value to convert 22 | /// @require {function} is-direction 23 | /// @require {function} convert-angle 24 | @function legacy-direction($value) { 25 | @if is-direction($value) == false { 26 | @warn "Cannot convert `#{$value}` to legacy syntax because it doesn't seem to be an angle or a direction"; 27 | } 28 | $conversion-map: ( "to top" : "bottom", "to top right" : "bottom left", "to right top" : "left bottom", "to right" : "left", "to bottom right" : "top left", "to right bottom" : "left top", "to bottom" : "top", "to bottom left" : "top right", "to left bottom" : "right top", "to left" : right, "to left top" : "right bottom", "to top left" : "bottom right" ); 29 | 30 | @if map-has-key($conversion-map, $value) { 31 | @return map-get($conversion-map, $value); 32 | } 33 | @return 90deg - convert-angle($value, 'deg'); 34 | } 35 | 36 | /// Mixin printing a linear-gradient 37 | /// as well as a plain color fallback 38 | /// and the `-webkit-` prefixed declaration 39 | /// @access public 40 | /// @param {String | List | Angle} $direction - Linear gradient direction 41 | /// @param {Arglist} $color-stops - List of color-stops composing the gradient 42 | @mixin linear_gradient($direction, $color-stops...) { 43 | @if is-direction($direction) == false { 44 | $color-stops: ($direction, $color-stops); 45 | $direction: 180deg; 46 | } 47 | background: nth(nth($color-stops, 1), 1); 48 | background: -webkit-linear-gradient(legacy-direction($direction), $color-stops); 49 | background: linear-gradient($direction, $color-stops); 50 | } 51 | @mixin radial_gradient($position: center, $shape: circle, $extent: farthest-corner, $color-stops...) { 52 | background: -moz-radial-gradient($position, $shape cover, $color-stops); 53 | background: -webkit-radial-gradient(center, $shape cover, $color-stops); 54 | background: -o-radial-gradient($position, $shape cover, $color-stops); 55 | background: -ms-radial-gradient($position, $shape cover, $color-stops); 56 | background: radial-gradient($shape $extent at $position, $color-stops); 57 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='nth(nth($color-stops, 1), 1)', endColorstr='nth(nth($color-stops, 2), 1)', GradientType=1); 58 | } 59 | @mixin box_shadow($thickness, $shadowcolor, $msequivcolor) { 60 | box-shadow: $thickness $shadowcolor; 61 | -webkit-box-shadow: $thickness $shadowcolor; 62 | -moz-box-shadow: $thickness $shadowcolor; 63 | // filter: progid:DXImageTransform.Microsoft.Shadow(direction=135,color='#{$msequivcolor}',strength=nth($thickness, 1)); 64 | } 65 | -------------------------------------------------------------------------------- /themes/nurple/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/nurple/background.jpg -------------------------------------------------------------------------------- /themes/nurple/colors.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | -------------------------------------------------------------------------------- /themes/nurple/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss"],"names":[],"mappings":"AAAS,6EAAA","file":"colors.css"} -------------------------------------------------------------------------------- /themes/nurple/colors.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | @import '../mixins/gradients.scss'; 3 | $border_radius: 5px; 4 | $outline_border: solid 2px white; 5 | 6 | @mixin panel_background() { 7 | background: #63727A !important; 8 | //@include linear_gradient(0deg, rgba(255,255,255,1) 0%,rgba(255,255,255,1) 100%); 9 | } 10 | @mixin panel_header_background() { 11 | background: #5A2D81; 12 | //@include linear_gradient(0deg, #673ab7 0%, #673ab7 100%); 13 | } 14 | 15 | @mixin button_background() { 16 | background: #000000; 17 | //@include linear_gradient(180deg, rgba(2, 150, 155, 1) 0%, rgba(2, 150, 155, 1) 100%); 18 | } 19 | @mixin fldbutton_background() { 20 | background: #000000; 21 | //@include linear_gradient(180deg, rgba(2, 150, 155, 1) 0%, rgba(2, 150, 155, 1) 100%); 22 | } 23 | @mixin header_background() { 24 | background: #673ab7; 25 | //@include linear_gradient(180deg, #D500F9 0%, #D500F9 100%); 26 | } 27 | @mixin hover_background() { 28 | background: #4b555a; 29 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 30 | } 31 | @mixin active_background() { 32 | @include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 33 | } 34 | @mixin selected_background() { 35 | background: #a64dff; 36 | //@include linear_gradient(180deg, #159FCF, #13647F); 37 | } -------------------------------------------------------------------------------- /themes/nurple/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","theme.css","../mixins/gradients.scss","theme.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/nurple/widgets.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | div.dashContainer { 3 | grid-template-columns: 377px calc(22.4rem + 4px); 4 | } 5 | 6 | div.picTab:not(.picTabSelected) { 7 | border-color: silver; 8 | color: silver; 9 | } 10 | 11 | div.picModules > table { 12 | background: white; 13 | color: black; 14 | } 15 | 16 | div.picModules > table > tbody > td:nth-child(1) { 17 | background: #701c7c !important; 18 | } 19 | 20 | div.picTab { 21 | background: #63727A !important; 22 | color: white; 23 | } 24 | 25 | div.picOptionButton { 26 | border-color: white; 27 | } 28 | 29 | div.picConfigTabContents { 30 | background: #63727A !important; 31 | color: white; 32 | } 33 | 34 | div.picConfigPage { 35 | margin-top: 0.4rem; 36 | } 37 | 38 | div.picController { 39 | padding: 0px; 40 | } 41 | 42 | div.picAmbientTemp label { 43 | color: white; 44 | } 45 | 46 | div.picController > div.picControllerTitle { 47 | margin: 0px; 48 | } 49 | 50 | div.pover-icon:hover { 51 | color: orange; 52 | text-shadow: 3px 3px 16px #272634; 53 | } 54 | 55 | div.picSaltReqd { 56 | padding: 0.2rem; 57 | border-bottom: solid 1px gainsboro; 58 | margin-bottom: 0.4rem; 59 | } 60 | 61 | div.picBody[data-ison=false] div.picBodyTemp { 62 | color: silver; 63 | } 64 | 65 | span.picUnits { 66 | color: silver; 67 | } 68 | 69 | div.picAccordian-title { 70 | border: solid 1px white; 71 | background: #5A2D81; 72 | border-top-left-radius: 5px; 73 | border-top-right-radius: 5px; 74 | } 75 | 76 | div.pnl-scheduleDays > div.table { 77 | margin-top: 0.4rem; 78 | border-top-left-radius: 5px; 79 | border-top-right-radius: 5px; 80 | } 81 | 82 | div.pnl-scheduleDays div.table-caption { 83 | border-top-left-radius: 5px; 84 | border-top-right-radius: 5px; 85 | border: solid 1px white; 86 | background: #673ab7; 87 | border-bottom: none; 88 | } 89 | 90 | div.pnl-scheduleDays div.table-row.dayheader { 91 | border-top-left-radius: 5px; 92 | border-top-right-radius: 5px; 93 | } 94 | 95 | div.pnl-scheduleDays div.table-cell.dayheader { 96 | text-align: center; 97 | width: 2.4rem; 98 | border: solid 1px white; 99 | font-weight: bold; 100 | color: white; 101 | } 102 | 103 | div.pnl-scheduleDays div.table-row.dayheader { 104 | background: #701c7c; 105 | color: black; 106 | font-weight: bold; 107 | } 108 | 109 | div.pnl-scheduleDays div.table-cell.day:hover { 110 | background: #4b555a; 111 | } 112 | 113 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 114 | color: white; 115 | background: rgb(123, 31, 162); 116 | background: -webkit-linear-gradient(-90deg, rgb(123, 31, 162) 0%, rgb(123, 31, 162) 100%); 117 | background: linear-gradient(180deg, rgb(123, 31, 162) 0%, rgb(123, 31, 162) 100%); 118 | } 119 | 120 | div.pnl-scheduleDays div.table-cell.day { 121 | text-align: center; 122 | font-size: 2rem; 123 | border: solid 1px gainsboro; 124 | cursor: pointer; 125 | } 126 | 127 | div.pnl-scheduleDays div.table-cell.day { 128 | text-align: center; 129 | font-size: 2rem; 130 | cursor: pointer; 131 | font-family: "Font Awesome 5 Free"; 132 | background-color: black; 133 | } 134 | 135 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 136 | content: "\f057"; 137 | font-weight: 900; 138 | } 139 | 140 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 141 | content: "\f111"; 142 | font-weight: 400; 143 | } 144 | 145 | div.picLightThemes { 146 | width: 22rem; 147 | } 148 | 149 | table.picPumpPrograms > tbody > tr:nth-child(1), 150 | table.picSchedDays > tbody > tr:nth-child(1) { 151 | background-color: #701c7c !important; 152 | background-image: none; 153 | } 154 | 155 | table.picPumpPrograms > tbody > tr:nth-child(1) > td, 156 | table.picSchedDays > tbody > tr:nth-child(1) > td { 157 | border-top: solid 1px white; 158 | } 159 | 160 | table.picPumpPrograms > tbody > tr:nth-child(1) > td:nth-child(1) table.picSchedDays > tbody > tr:nth-child(1) > td:nth-child(1) { 161 | border-left: solid 1px white; 162 | } 163 | 164 | table.picPumpPrograms > tbody > tr:nth-child(1) > td:last-child, 165 | table.picSchedDays > tbody > tr:nth-child(1) > td:last-child { 166 | border-right: solid 1px white; 167 | } 168 | 169 | table.picPumpPrograms > tbody > tr:nth-child(2) > td, 170 | table.picSchedDays > tbody > tr:nth-child(2) > td { 171 | border: solid 1px white; 172 | background-color: black; 173 | } 174 | 175 | div.overlay-message > div > div.pic-waiticon > div.wait-roller div:after { 176 | background: darkmagenta; 177 | transform: scale(1.3); 178 | box-shadow: 0px 0px 8px magenta; 179 | } 180 | 181 | div.overlay-message { 182 | border: solid 3px white; 183 | background: lightgray; 184 | } 185 | -------------------------------------------------------------------------------- /themes/nurple/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","widgets.css","../mixins/gradients.scss"],"names":[],"mappings":"AAAS,6EAAA;ACGT;EACI,gDAAA;ACDJ;;ADGA;EACI,oBAAA;EACA,aAAA;ACAJ;;ADEA;EACI,iBAAA;EACA,YAAA;ACCJ;;ADCA;EACI,8BAAA;ACEJ;;ADAA;EDXI,8BAAA;ECaA,YAAA;ACGJ;;ADDA;EACI,mBAAA;ACIJ;;ADFA;EDlBI,8BAAA;ECoBA,YAAA;ACKJ;;ADHA;EACI,kBAAA;ACMJ;;ADJA;EACI,YAAA;ACOJ;;ADJA;EACI,YAAA;ACOJ;;ADLA;EACI,WAAA;ACQJ;;ADNA;EACI,aAAA;EACA,iCAAA;ACSJ;;ADPA;EACI,eAAA;EACA,kCAAA;EACA,qBAAA;ACUJ;;ADRA;EACI,aAAA;ACWJ;;ADTA;EACI,aAAA;ACYJ;;ADVA;EACI,uBAAA;ED/CA,mBAAA;ECiDA,2BDzDY;EC0DZ,4BD1DY;AEuEhB;;ADXA;EACI,kBAAA;EACA,2BD9DY;EC+DZ,4BD/DY;AE6EhB;;ADZA;EACI,2BDlEY;ECmEZ,4BDnEY;ECoEZ,uBAAA;ED/CA,mBAAA;ECiDA,mBAAA;ACeJ;;ADbA;EACI,2BAAA;EACA,4BAAA;ACgBJ;;ADdA;EACI,kBAAA;EACA,aAAA;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;ACiBJ;;ADfA;EACI,mBAAA;EACA,YAAA;EACA,iBAAA;ACkBJ;;ADhBA;ED/DI,mBAAA;AEmFJ;;ADhBA;EACI,YAAA;EEjDA,6BAAA;EAEA,iFAAA;ADqEJ;;ADnBA;EACI,kBAAA;EACA,eAAA;EACA,2BAAA;EACA,eAAA;ACsBJ;;ADpBA;EACI,kBAAA;EACA,eAAA;EACA,eAAA;EACA,kCAAA;EACA,uBAAA;ACuBJ;;ADpBA;EACI,gBAAA;EACA,gBAAA;ACuBJ;;ADpBA;EACI,gBAAA;EACA,gBAAA;ACuBJ;;ADrBA;EACI,YAAA;ACwBJ;;ADnBA;;EAEI,oCAAA;EACA,sBAAA;ACsBJ;;ADpBA;;EAEI,2BAAA;ACuBJ;;ADrBA;EAEI,4BAAA;ACuBJ;;ADrBA;;EAEI,6BAAA;ACwBJ;;ADtBA;;EAEI,uBAAA;EACA,uBAAA;ACyBJ;;ADvBA;EACI,uBAAA;EACA,qBAAA;EACA,+BAAA;AC0BJ;;ADxBA;EACI,uBAAA;EACA,qBAAA;AC2BJ","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/nurple/widgets.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | @import 'colors.scss'; 3 | 4 | div.dashContainer { 5 | grid-template-columns: 377px calc(22.4rem + 4px); 6 | } 7 | div.picTab:not(.picTabSelected) { 8 | border-color:silver; 9 | color:silver; 10 | } 11 | div.picModules > table { 12 | background:white; 13 | color:black; 14 | } 15 | div.picModules > table > tbody > td:nth-child(1) { 16 | background: #701c7c !important; 17 | } 18 | div.picTab { 19 | @include panel_background(); 20 | color:white; 21 | } 22 | div.picOptionButton { 23 | border-color:white; 24 | } 25 | div.picConfigTabContents { 26 | @include panel_background(); 27 | color:white; 28 | } 29 | div.picConfigPage { 30 | margin-top:.4rem; 31 | } 32 | div.picController { 33 | padding:0px; 34 | } 35 | div.picFeatures {} 36 | div.picAmbientTemp label { 37 | color:white; 38 | } 39 | div.picController > div.picControllerTitle { 40 | margin:0px; 41 | } 42 | div.pover-icon:hover { 43 | color: orange; 44 | text-shadow: 3px 3px 16px #272634; 45 | } 46 | div.picSaltReqd { 47 | padding: .2rem; 48 | border-bottom: solid 1px gainsboro; 49 | margin-bottom: .4rem; 50 | } 51 | div.picBody[data-ison=false] div.picBodyTemp { 52 | color: silver; 53 | } 54 | span.picUnits { 55 | color: silver; 56 | } 57 | div.picAccordian-title { 58 | border: solid 1px white; 59 | @include panel_header_background(); 60 | border-top-left-radius: $border_radius; 61 | border-top-right-radius: $border_radius; 62 | } 63 | div.pnl-scheduleDays > div.table { 64 | margin-top:.4rem; 65 | border-top-left-radius: $border_radius; 66 | border-top-right-radius: $border_radius; 67 | } 68 | div.pnl-scheduleDays div.table-caption { 69 | border-top-left-radius: $border_radius; 70 | border-top-right-radius: $border_radius; 71 | border: solid 1px white; 72 | @include header_background(); 73 | border-bottom: none; 74 | } 75 | div.pnl-scheduleDays div.table-row.dayheader { 76 | border-top-left-radius: 5px; 77 | border-top-right-radius: 5px; 78 | } 79 | div.pnl-scheduleDays div.table-cell.dayheader { 80 | text-align: center; 81 | width: 2.4rem; 82 | border: solid 1px white; 83 | font-weight: bold; 84 | color: white; 85 | } 86 | div.pnl-scheduleDays div.table-row.dayheader { 87 | background: #701c7c; 88 | color: black; 89 | font-weight: bold; 90 | } 91 | div.pnl-scheduleDays div.table-cell.day:hover { 92 | @include hover_background(); 93 | } 94 | 95 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 96 | color: white; 97 | @include active_background(); 98 | } 99 | div.pnl-scheduleDays div.table-cell.day { 100 | text-align: center; 101 | font-size: 2rem; 102 | border: solid 1px gainsboro; 103 | cursor: pointer; 104 | } 105 | div.pnl-scheduleDays div.table-cell.day { 106 | text-align: center; 107 | font-size: 2rem; 108 | cursor: pointer; 109 | font-family: 'Font Awesome 5 Free'; 110 | background-color:black; 111 | } 112 | 113 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 114 | content: "\f057"; 115 | font-weight: 900; 116 | } 117 | 118 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 119 | content: "\f111"; 120 | font-weight: 400; 121 | } 122 | div.picLightThemes { 123 | width:22rem; 124 | } 125 | table.picPumpPrograms, 126 | table.picSchedDays { 127 | } 128 | table.picPumpPrograms > tbody > tr:nth-child(1), 129 | table.picSchedDays > tbody > tr:nth-child(1) { 130 | background-color: #701c7c !important; 131 | background-image: none; 132 | } 133 | table.picPumpPrograms > tbody > tr:nth-child(1) > td, 134 | table.picSchedDays > tbody > tr:nth-child(1) > td { 135 | border-top: solid 1px white; 136 | } 137 | table.picPumpPrograms > tbody > tr:nth-child(1) > td:nth-child(1) 138 | table.picSchedDays > tbody > tr:nth-child(1) > td:nth-child(1) { 139 | border-left: solid 1px white; 140 | } 141 | table.picPumpPrograms > tbody > tr:nth-child(1) > td:last-child, 142 | table.picSchedDays > tbody > tr:nth-child(1) > td:last-child { 143 | border-right: solid 1px white; 144 | } 145 | table.picPumpPrograms > tbody > tr:nth-child(2) > td, 146 | table.picSchedDays > tbody > tr:nth-child(2) > td { 147 | border: solid 1px white; 148 | background-color: black; 149 | } 150 | div.overlay-message > div > div.pic-waiticon > div.wait-roller div:after { 151 | background: darkmagenta; 152 | transform: scale(1.3); 153 | box-shadow: 0px 0px 8px magenta; 154 | } 155 | div.overlay-message { 156 | border:solid 3px white; 157 | background:lightgray; 158 | } 159 | -------------------------------------------------------------------------------- /themes/purple/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/purple/background.jpg -------------------------------------------------------------------------------- /themes/purple/colors.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | -------------------------------------------------------------------------------- /themes/purple/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss"],"names":[],"mappings":"AAAS,6EAAA","file":"colors.css"} -------------------------------------------------------------------------------- /themes/purple/colors.scss: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | @import '../mixins/gradients.scss'; 3 | $border_radius: 3px; 4 | $outline_border: solid 1px silver; 5 | 6 | @mixin panel_background() { 7 | @include linear_gradient(0deg, rgba(255,255,255,1) 0%,rgba(255,255,255,1) 100%); 8 | } 9 | @mixin panel_header_background() { 10 | @include linear_gradient(0deg, #673ab7 0%, #673ab7 100%); 11 | } 12 | 13 | @mixin button_background() { 14 | @include linear_gradient(180deg, rgba(2, 150, 155, 1) 0%, rgba(2, 150, 155, 1) 100%); 15 | } 16 | @mixin fldbutton_background() { 17 | @include linear_gradient(180deg, rgba(2, 150, 155, 1) 0%, rgba(2, 150, 155, 1) 100%); 18 | } 19 | @mixin header_background() { 20 | background: #673ab7; 21 | //@include linear_gradient(180deg, #D500F9 0%, #D500F9 100%); 22 | } 23 | @mixin hover_background() { 24 | background:#4DB6AC; 25 | //@include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 26 | } 27 | @mixin active_background() { 28 | @include linear_gradient(180deg, rgba(123,31,162,1) 0%,rgba(123,31,162,1) 100%); 29 | } 30 | @mixin selected_background() { 31 | background: #a64dff; 32 | //@include linear_gradient(180deg, #159FCF, #13647F); 33 | } -------------------------------------------------------------------------------- /themes/purple/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","theme.css","../mixins/gradients.scss","theme.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/purple/widgets.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700"); 2 | div.picTab:not(.picTabSelected) { 3 | border-color: silver; 4 | color: silver; 5 | } 6 | 7 | div.picConfigTabContents { 8 | background-color: white; 9 | } 10 | 11 | div.picConfigPage { 12 | margin-top: 0.4rem; 13 | } 14 | 15 | div.picController { 16 | padding: 0px; 17 | } 18 | 19 | div.picAmbientTemp label { 20 | color: white; 21 | } 22 | 23 | div.picController > div.picControllerTitle { 24 | margin: 0px; 25 | } 26 | 27 | div.pover-icon:hover { 28 | color: orange; 29 | text-shadow: 3px 3px 16px #272634; 30 | } 31 | 32 | div.picSaltReqd { 33 | padding: 0.2rem; 34 | border-bottom: solid 1px gainsboro; 35 | margin-bottom: 0.4rem; 36 | } 37 | 38 | div.picBody[data-ison=false] div.picBodyTemp { 39 | color: silver; 40 | } 41 | 42 | span.picUnits { 43 | color: gray; 44 | } 45 | 46 | div.picAccordian-title { 47 | border: solid 1px gray; 48 | border-top-left-radius: 3px; 49 | border-top-right-radius: 3px; 50 | } 51 | 52 | div.pnl-scheduleDays > div.table { 53 | border-top-left-radius: 3px; 54 | border-top-right-radius: 3px; 55 | } 56 | 57 | div.pnl-scheduleDays div.table-caption { 58 | border-top-left-radius: 3px; 59 | border-top-right-radius: 3px; 60 | border: solid 1px gray; 61 | color: white; 62 | background: rgb(2, 150, 155); 63 | background: -webkit-linear-gradient(-90deg, rgb(2, 150, 155) 0%, rgb(2, 150, 155) 100%); 64 | background: linear-gradient(180deg, rgb(2, 150, 155) 0%, rgb(2, 150, 155) 100%); 65 | } 66 | 67 | div.pnl-scheduleDays div.table-row.dayheader { 68 | border-top-left-radius: 5px; 69 | border-top-right-radius: 5px; 70 | } 71 | 72 | div.pnl-scheduleDays div.table-cell.dayheader { 73 | text-align: center; 74 | width: 2.4rem; 75 | border: solid 1px gray; 76 | font-weight: bold; 77 | color: white; 78 | } 79 | 80 | div.pnl-scheduleDays div.table-row.dayheader { 81 | background: #fde4be; 82 | background: #fde4be; 83 | background: -webkit-linear-gradient(-90deg, #fde4be 0%, #E78F08 65%); 84 | background: linear-gradient(180deg, #fde4be 0%, #E78F08 65%); 85 | color: black; 86 | font-weight: bold; 87 | } 88 | 89 | div.pnl-scheduleDays div.table-cell.day:hover { 90 | background: #4DB6AC; 91 | } 92 | 93 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 94 | color: white; 95 | background: rgb(123, 31, 162); 96 | background: -webkit-linear-gradient(-90deg, rgb(123, 31, 162) 0%, rgb(123, 31, 162) 100%); 97 | background: linear-gradient(180deg, rgb(123, 31, 162) 0%, rgb(123, 31, 162) 100%); 98 | } 99 | 100 | div.pnl-scheduleDays div.table-cell.day { 101 | text-align: center; 102 | font-size: 2rem; 103 | border: solid 1px gainsboro; 104 | cursor: pointer; 105 | } 106 | 107 | div.pnl-scheduleDays div.table-cell.day { 108 | text-align: center; 109 | font-size: 2rem; 110 | cursor: pointer; 111 | font-family: "Font Awesome 5 Free"; 112 | } 113 | 114 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 115 | content: "\f057"; 116 | font-weight: 900; 117 | } 118 | 119 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 120 | content: "\f111"; 121 | font-weight: 400; 122 | } 123 | 124 | .slist-caption, 125 | .crud-caption, 126 | .list-caption { 127 | border-top-left-radius: 3px; 128 | border-top-right-radius: 3px; 129 | border: solid 1px gray; 130 | color: white; 131 | background: rgb(2, 150, 155); 132 | background: -webkit-linear-gradient(-90deg, rgb(2, 150, 155) 0%, rgb(2, 150, 155) 100%); 133 | background: linear-gradient(180deg, rgb(2, 150, 155) 0%, rgb(2, 150, 155) 100%); 134 | } 135 | 136 | tr.slist-header, 137 | tr.crud-header { 138 | text-align: center; 139 | width: 2.4rem; 140 | border: solid 1px gray; 141 | color: white; 142 | background: #fde4be; 143 | background: #fde4be; 144 | background: -webkit-linear-gradient(-90deg, #fde4be 0%, #E78F08 65%); 145 | background: linear-gradient(180deg, #fde4be 0%, #E78F08 65%); 146 | color: black; 147 | } 148 | 149 | div.overlay-message > div > div.pic-waiticon > div.wait-roller div:after { 150 | background: white; 151 | transform: scale(1.3); 152 | box-shadow: 0px 0px 8px oldlace; 153 | } 154 | 155 | div.overlay-message { 156 | color: white; 157 | border: solid 3px white; 158 | background: cadetblue; 159 | box-shadow: 0px 0px 30px white; 160 | } 161 | -------------------------------------------------------------------------------- /themes/purple/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["colors.scss","widgets.scss","widgets.css","../mixins/gradients.scss"],"names":[],"mappings":"AAAS,6EAAA;ACGT;EACI,oBAAA;EACA,aAAA;ACDJ;;ADGA;EACI,uBAAA;ACAJ;;ADEA;EACI,kBAAA;ACCJ;;ADCA;EACI,YAAA;ACEJ;;ADCA;EACI,YAAA;ACEJ;;ADAA;EACI,WAAA;ACGJ;;ADDA;EACI,aAAA;EACA,iCAAA;ACIJ;;ADFA;EACI,eAAA;EACA,kCAAA;EACA,qBAAA;ACKJ;;ADHA;EACI,aAAA;ACMJ;;ADJA;EACI,WAAA;ACOJ;;ADLA;EACI,sBAAA;EACA,2BDtCY;ECuCZ,4BDvCY;AE+ChB;;ADNA;EACI,2BD1CY;EC2CZ,4BD3CY;AEoDhB;;ADPA;EACI,2BD9CY;EC+CZ,4BD/CY;ECgDZ,sBAAA;EACA,YAAA;EELA,4BAAA;EAEA,+EAAA;ADgBJ;;ADVA;EACI,2BAAA;EACA,4BAAA;ACaJ;;ADXA;EACI,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;EACA,YAAA;ACcJ;;ADZA;EACI,mBAAA;EEpBA,mBAAA;EAEA,4DAAA;EFoBA,YAAA;EACA,iBAAA;ACiBJ;;ADfA;EDhDI,mBAAA;AEmEJ;;ADfA;EACI,YAAA;EE9BA,6BAAA;EAEA,iFAAA;ADiDJ;;ADlBA;EACI,kBAAA;EACA,eAAA;EACA,2BAAA;EACA,eAAA;ACqBJ;;ADnBA;EACI,kBAAA;EACA,eAAA;EACA,eAAA;EACA,kCAAA;ACsBJ;;ADnBA;EACI,gBAAA;EACA,gBAAA;ACsBJ;;ADnBA;EACI,gBAAA;EACA,gBAAA;ACsBJ;;ADpBA;;;EAGI,2BDtGY;ECuGZ,4BDvGY;ECwGZ,sBAAA;EACA,YAAA;EE7DA,4BAAA;EAEA,+EAAA;ADqFJ;;ADtBA;;EAEI,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,YAAA;EACA,mBAAA;EEvEA,mBAAA;EAEA,4DAAA;EFuEA,YAAA;AC2BJ;;ADzBA;EACI,iBAAA;EACA,qBAAA;EACA,+BAAA;AC4BJ;;ADzBA;EACI,YAAA;EACA,uBAAA;EACA,qBAAA;EACA,8BAAA;AC4BJ","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/purple/widgets.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | @import 'colors.scss'; 3 | 4 | div.picTab:not(.picTabSelected) { 5 | border-color:silver; 6 | color:silver; 7 | } 8 | div.picConfigTabContents { 9 | background-color:white; 10 | } 11 | div.picConfigPage { 12 | margin-top:.4rem; 13 | } 14 | div.picController { 15 | padding:0px; 16 | } 17 | div.picFeatures {} 18 | div.picAmbientTemp label { 19 | color:white; 20 | } 21 | div.picController > div.picControllerTitle { 22 | margin:0px; 23 | } 24 | div.pover-icon:hover { 25 | color: orange; 26 | text-shadow: 3px 3px 16px #272634; 27 | } 28 | div.picSaltReqd { 29 | padding: .2rem; 30 | border-bottom: solid 1px gainsboro; 31 | margin-bottom: .4rem; 32 | } 33 | div.picBody[data-ison=false] div.picBodyTemp { 34 | color: silver; 35 | } 36 | span.picUnits { 37 | color: gray; 38 | } 39 | div.picAccordian-title { 40 | border: solid 1px gray; 41 | border-top-left-radius: $border_radius; 42 | border-top-right-radius: $border_radius; 43 | } 44 | div.pnl-scheduleDays > div.table { 45 | border-top-left-radius: $border_radius; 46 | border-top-right-radius: $border_radius; 47 | } 48 | div.pnl-scheduleDays div.table-caption { 49 | border-top-left-radius: $border_radius; 50 | border-top-right-radius: $border_radius; 51 | border: solid 1px gray; 52 | color:white; 53 | @include fldbutton_background(); 54 | } 55 | div.pnl-scheduleDays div.table-row.dayheader { 56 | border-top-left-radius: 5px; 57 | border-top-right-radius: 5px; 58 | } 59 | div.pnl-scheduleDays div.table-cell.dayheader { 60 | text-align: center; 61 | width: 2.4rem; 62 | border: solid 1px gray; 63 | font-weight: bold; 64 | color: white; 65 | } 66 | div.pnl-scheduleDays div.table-row.dayheader { 67 | background: #fde4be; 68 | @include linear_gradient(180deg, #fde4be 0%, #E78F08 65%); 69 | color: black; 70 | font-weight: bold; 71 | } 72 | div.pnl-scheduleDays div.table-cell.day:hover { 73 | @include hover_background(); 74 | } 75 | 76 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 77 | color: white; 78 | @include active_background(); 79 | } 80 | div.pnl-scheduleDays div.table-cell.day { 81 | text-align: center; 82 | font-size: 2rem; 83 | border: solid 1px gainsboro; 84 | cursor: pointer; 85 | } 86 | div.pnl-scheduleDays div.table-cell.day { 87 | text-align: center; 88 | font-size: 2rem; 89 | cursor: pointer; 90 | font-family: 'Font Awesome 5 Free'; 91 | } 92 | 93 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 94 | content: "\f057"; 95 | font-weight: 900; 96 | } 97 | 98 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 99 | content: "\f111"; 100 | font-weight: 400; 101 | } 102 | .slist-caption, 103 | .crud-caption, 104 | .list-caption { 105 | border-top-left-radius: $border_radius; 106 | border-top-right-radius: $border_radius; 107 | border: solid 1px gray; 108 | color: white; 109 | @include fldbutton_background(); 110 | } 111 | 112 | tr.slist-header, 113 | tr.crud-header { 114 | text-align: center; 115 | width: 2.4rem; 116 | border: solid 1px gray; 117 | color: white; 118 | background: #fde4be; 119 | @include linear_gradient(180deg, #fde4be 0%, #E78F08 65%); 120 | color: black; 121 | } 122 | div.overlay-message > div > div.pic-waiticon > div.wait-roller div:after { 123 | background: white; 124 | transform: scale(1.3); 125 | box-shadow: 0px 0px 8px oldlace; 126 | } 127 | 128 | div.overlay-message { 129 | color: white; 130 | border: solid 3px white; 131 | background: cadetblue; 132 | box-shadow: 0px 0px 30px white; 133 | } 134 | -------------------------------------------------------------------------------- /themes/sketchy/bodies.css: -------------------------------------------------------------------------------- 1 | /*# sourceMappingURL=bodies.css.map */ -------------------------------------------------------------------------------- /themes/sketchy/bodies.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"bodies.css"} -------------------------------------------------------------------------------- /themes/sketchy/bodies.scss: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /themes/sketchy/colors.css: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /themes/sketchy/colors.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"colors.css"} -------------------------------------------------------------------------------- /themes/sketchy/colors.scss: -------------------------------------------------------------------------------- 1 | @import '../mixins/gradients.scss'; 2 | 3 | $panel_background: ghostwhite, 1deg, rgba(240,240,240,1) 0%, rgba(249,249,249,1) 15%, rgba(255,255,255,1) 24%, rgba(255,255,255,1) 82%, rgba(222,222,222,1) 100%; 4 | $section_radius: 5px 25px 5px 25px/25px 5px 25px 5px; 5 | $btn_radius: 555px 55px 525px 55px/35px 225px 45px 125px; 6 | $fld_radius: 4px 15px 15px 5px/25px 5px 13px 5px; 7 | $tab_content_radius: 0px 5px 5px 3px/3px 2px 25px 5px; 8 | $title_font_family: "cabin sketch"; 9 | $text_font_family: "Neucha", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; 10 | -------------------------------------------------------------------------------- /themes/sketchy/fill-in-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/fill-in-green.png -------------------------------------------------------------------------------- /themes/sketchy/highlighter-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/highlighter-gray.png -------------------------------------------------------------------------------- /themes/sketchy/highlighter-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/highlighter-green.png -------------------------------------------------------------------------------- /themes/sketchy/highlighter-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/highlighter-yellow.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-blue.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-gray.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-green.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-orange.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-red.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade-yellow.png -------------------------------------------------------------------------------- /themes/sketchy/pencilshade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/pencilshade.png -------------------------------------------------------------------------------- /themes/sketchy/poolsketch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/poolsketch.png -------------------------------------------------------------------------------- /themes/sketchy/scratchout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/sketchy/scratchout.png -------------------------------------------------------------------------------- /themes/sketchy/theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["theme.scss","widgets.scss","theme.css","colors.scss","../mixins/gradients.scss"],"names":[],"mappings":"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","file":"theme.css"} -------------------------------------------------------------------------------- /themes/sketchy/widgets.css: -------------------------------------------------------------------------------- 1 | div.picTab:not(.picTabSelected) { 2 | border-color: silver; 3 | color: silver; 4 | } 5 | 6 | div.picConfigTabContents { 7 | background-color: white; 8 | } 9 | 10 | div.pover-icon:hover { 11 | color: orange; 12 | text-shadow: 3px 3px 16px #272634; 13 | } 14 | 15 | div.picSaltReqd { 16 | padding: 0.2rem; 17 | border-bottom: solid 1px gainsboro; 18 | margin-bottom: 0.4rem; 19 | } 20 | 21 | div.picBody[data-ison=false] div.picBodyTemp { 22 | color: silver; 23 | } 24 | 25 | div.picBodyTemp > div.body-temp { 26 | font-family: cabin sketch; 27 | font-weight: 400; 28 | } 29 | 30 | span.picUnits { 31 | color: gray; 32 | } 33 | 34 | div.picAccordian-title { 35 | border: solid 1px gray; 36 | border-radius: 4px 15px 15px 5px/25px 5px 13px 5px; 37 | } 38 | 39 | div.pnl-scheduleDays > div.table { 40 | border-top-left-radius: 25px 5px; 41 | border-top-right-radius: 5px 25px; 42 | border-collapse: separate; 43 | } 44 | 45 | div.pnl-scheduleDays div.table-caption { 46 | border-top-left-radius: 25px 5px; 47 | border-top-right-radius: 5px 25px; 48 | font-family: "cabin sketch"; 49 | border: solid 1px gray; 50 | background: url("pencilshade-gray.png"); 51 | } 52 | 53 | div.pnl-scheduleDays div.table-cell.dayheader { 54 | text-align: center; 55 | width: 2.4rem; 56 | border: solid 1px gray; 57 | font-weight: bold; 58 | color: white; 59 | } 60 | 61 | div.pnl-scheduleDays div.table-row.dayheader { 62 | background: url("pencilshade-orange.png"); 63 | color: black; 64 | font-weight: bold; 65 | } 66 | 67 | div.pnl-scheduleDays div.table-cell.day:hover { 68 | background: url("highlighter-yellow.png"); 69 | } 70 | 71 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 72 | color: white; 73 | background: url("pencilshade-blue.png"); 74 | } 75 | 76 | div.pnl-scheduleDays div.table-cell.day { 77 | text-align: center; 78 | font-size: 2rem; 79 | border: solid 1px gainsboro; 80 | cursor: pointer; 81 | } 82 | 83 | div.pnl-scheduleDays div.table-cell.day:first-child { 84 | border-bottom-left-radius: 25px 4px; 85 | } 86 | 87 | div.pnl-scheduleDays div.table-cell.day:last-child { 88 | border-bottom-right-radius: 25px 4px; 89 | } 90 | 91 | div.pnl-scheduleDays div.table-cell.day { 92 | text-align: center; 93 | font-size: 1.5rem; 94 | cursor: pointer; 95 | } 96 | 97 | div.pnl-scheduleDays div.table-row.days { 98 | height: 2rem; 99 | } 100 | 101 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 102 | content: " "; 103 | width: 1.5rem; 104 | height: 1.5rem; 105 | background: url("pencilshade-green.png"); 106 | display: inline-block; 107 | border-radius: 2px 25px 5px 15px/25px 5px 25px 2px !important; 108 | margin: 1px; 109 | vertical-align: middle; 110 | } 111 | 112 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 113 | content: " "; 114 | position: absolute; 115 | top: 0px; 116 | left: 0px; 117 | right: 0px; 118 | bottom: 0px; 119 | width: 1rem; 120 | height: 1rem; 121 | } 122 | -------------------------------------------------------------------------------- /themes/sketchy/widgets.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["widgets.scss","widgets.css"],"names":[],"mappings":"AAAC;EACG,oBAAA;EACA,aAAA;ACCJ;;ADEA;EACI,uBAAA;ACCJ;;ADCA;EACI,aAAA;EACA,iCAAA;ACEJ;;ADAA;EACI,eAAA;EACA,kCAAA;EACA,qBAAA;ACGJ;;ADDA;EACI,aAAA;ACIJ;;ADFA;EACI,yBAAA;EACA,gBAAA;ACKJ;;ADHA;EACI,WAAA;ACMJ;;ADJA;EACI,sBAAA;EACA,kDAAA;ACOJ;;ADLA;EACI,gCAAA;EACA,iCAAA;EACA,yBAAA;ACQJ;;ADLA;EACI,gCAAA;EACA,iCAAA;EACA,2BAAA;EACA,sBAAA;EACA,uCAAA;ACQJ;;ADLA;EACI,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,iBAAA;EACA,YAAA;ACQJ;;ADLA;EACI,yCAAA;EACA,YAAA;EACA,iBAAA;ACQJ;;ADLA;EACI,yCAAA;ACQJ;;ADLA;EACI,YAAA;EACA,uCAAA;ACQJ;;ADLA;EACI,kBAAA;EACA,eAAA;EACA,2BAAA;EACA,eAAA;ACQJ;;ADNA;EACI,mCAAA;ACSJ;;ADPA;EACI,oCAAA;ACUJ;;ADPI;EACI,kBAAA;EACA,iBAAA;EACA,eAAA;ACUR;;ADPI;EACI,YAAA;ACUR;;ADPI;EACI,YAAA;EACA,aAAA;EACA,cAAA;EACA,wCAAA;EACA,qBAAA;EACA,6DAAA;EACA,WAAA;EACA,sBAAA;ACUR;;ADPI;EACI,YAAA;EACA,kBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,WAAA;EACA,YAAA;ACUR","file":"widgets.css"} -------------------------------------------------------------------------------- /themes/sketchy/widgets.scss: -------------------------------------------------------------------------------- 1 | div.picTab:not(.picTabSelected) { 2 | border-color: silver; 3 | color: silver; 4 | } 5 | 6 | div.picConfigTabContents { 7 | background-color:white; 8 | } 9 | div.pover-icon:hover { 10 | color: orange; 11 | text-shadow: 3px 3px 16px #272634; 12 | } 13 | div.picSaltReqd { 14 | padding: .2rem; 15 | border-bottom: solid 1px gainsboro; 16 | margin-bottom: .4rem; 17 | } 18 | div.picBody[data-ison=false] div.picBodyTemp { 19 | color: silver; 20 | } 21 | div.picBodyTemp > div.body-temp { 22 | font-family: cabin sketch; 23 | font-weight: 400; 24 | } 25 | span.picUnits { 26 | color: gray; 27 | } 28 | div.picAccordian-title { 29 | border: solid 1px gray; 30 | border-radius: 4px 15px 15px 5px/25px 5px 13px 5px; 31 | } 32 | div.pnl-scheduleDays > div.table { 33 | border-top-left-radius: 25px 5px; 34 | border-top-right-radius: 5px 25px; 35 | border-collapse:separate; 36 | } 37 | 38 | div.pnl-scheduleDays div.table-caption { 39 | border-top-left-radius: 25px 5px; 40 | border-top-right-radius: 5px 25px; 41 | font-family:"cabin sketch"; 42 | border: solid 1px gray; 43 | background:url('pencilshade-gray.png'); 44 | } 45 | 46 | div.pnl-scheduleDays div.table-cell.dayheader { 47 | text-align: center; 48 | width: 2.4rem; 49 | border: solid 1px gray; 50 | font-weight: bold; 51 | color: white; 52 | } 53 | 54 | div.pnl-scheduleDays div.table-row.dayheader { 55 | background:url('pencilshade-orange.png'); 56 | color: black; 57 | font-weight: bold; 58 | } 59 | 60 | div.pnl-scheduleDays div.table-cell.day:hover { 61 | background: url('highlighter-yellow.png'); 62 | } 63 | 64 | div.pnl-scheduleDays div.table-cell.day:not(.disabled):active { 65 | color: white; 66 | background: url('pencilshade-blue.png'); 67 | } 68 | 69 | div.pnl-scheduleDays div.table-cell.day { 70 | text-align: center; 71 | font-size: 2rem; 72 | border: solid 1px gainsboro; 73 | cursor: pointer; 74 | } 75 | div.pnl-scheduleDays div.table-cell.day:first-child { 76 | border-bottom-left-radius:25px 4px; 77 | } 78 | div.pnl-scheduleDays div.table-cell.day:last-child { 79 | border-bottom-right-radius: 25px 4px; 80 | } 81 | 82 | div.pnl-scheduleDays div.table-cell.day { 83 | text-align: center; 84 | font-size: 1.5rem; 85 | cursor: pointer; 86 | } 87 | 88 | div.pnl-scheduleDays div.table-row.days { 89 | height: 2rem; 90 | } 91 | 92 | div.pnl-scheduleDays div.table-cell.day[data-selected=true]:before { 93 | content: " "; 94 | width: 1.5rem; 95 | height: 1.5rem; 96 | background: url('pencilshade-green.png'); 97 | display: inline-block; 98 | border-radius: 2px 25px 5px 15px/25px 5px 25px 2px !important; 99 | margin: 1px; 100 | vertical-align: middle; 101 | } 102 | 103 | div.pnl-scheduleDays div.table-cell.day:not([data-selected=true]):before { 104 | content: " "; 105 | position: absolute; 106 | top: 0px; 107 | left: 0px; 108 | right: 0px; 109 | bottom: 0px; 110 | width: 1rem; 111 | height: 1rem; 112 | } 113 | 114 | -------------------------------------------------------------------------------- /themes/solar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstrouse/nodejs-poolController-dashPanel/80122398874b161dee2f1ea16e6a63ef7adfa771/themes/solar.gif -------------------------------------------------------------------------------- /themes/vlist.css: -------------------------------------------------------------------------------- 1 | table.vlist-body { 2 | box-sizing: border-box; 3 | font-size: 8pt; 4 | width: 100%; 5 | table-layout: auto; 6 | border-spacing: 0px; 7 | border-collapse: collapse; 8 | margin: 0px; 9 | user-select: none; 10 | } 11 | 12 | table.vlist-outer { 13 | width: 100%; 14 | height: 100%; 15 | border-collapse: collapse; 16 | border-spacing: 0px; 17 | table-layout: auto; 18 | } 19 | 20 | table.vlist-header { 21 | box-sizing: border-box; 22 | font-size: 8pt; 23 | color: white; 24 | font-weight: bold; 25 | width: 100%; 26 | table-layout: auto; 27 | border-spacing: 0px; 28 | border-collapse: collapse; 29 | filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=#FF159FCF, EndColorStr=#FF13647F); 30 | background: -ms-linear-gradient(top, #159FCF, #13647F); 31 | background: -moz-linear-gradient(top, #159FCF, #13647F); 32 | background: -webkit-linear-gradient(top, #159FCF, #13647F); 33 | background: linear-gradient(to bottom, #159FCF, #13647F); 34 | } 35 | 36 | td.vlist-header { 37 | padding: 0px; 38 | } 39 | 40 | td.vlist-data { 41 | border: solid 1px gray; 42 | padding: 0px; 43 | } 44 | 45 | tr.vlist-body-outer { 46 | height: 100%; 47 | overflow: hidden; 48 | } 49 | 50 | td.vlist-body-outer { 51 | width: 100%; 52 | height: 100%; 53 | overflow: hidden; 54 | vertical-align: top; 55 | padding: 0px; 56 | } 57 | 58 | div.vlist-body-outer { 59 | position: relative; 60 | overflow: hidden; 61 | vertical-align: top; 62 | width: 100%; 63 | height: 100%; 64 | } 65 | 66 | div.vlist-body { 67 | position: absolute; 68 | overflow: auto; 69 | vertical-align: top; 70 | width: 100%; 71 | height: 100%; 72 | padding-right: 1px; 73 | } 74 | 75 | tr.msgRow, tr.msgApiRow { 76 | cursor: pointer; 77 | } 78 | -------------------------------------------------------------------------------- /themes/vlist.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["vlist.scss","vlist.css"],"names":[],"mappings":"AAGA;EACI,sBAAA;EACA,cAAA;EACA,WAAA;EACA,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,yBAAA;KAAA,sBAAA;MAAA,qBAAA;UAAA,iBAAA;ACFJ;;ADIA;EACI,WAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,kBAAA;ACDJ;;ADGA;EACI,sBAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,kHAAA;EAIA,wDAAA;ACAJ;;ADEA;EACI,YAAA;ACCJ;;ADCA;EACI,sBAAA;EACA,YAAA;ACEJ;;ADAA;EACI,YAAA;EACA,gBAAA;ACGJ;;ADDA;EACI,WAAA;EACA,YAAA;EACA,gBAAA;EACA,mBAAA;EACA,YAAA;ACIJ;;ADFA;EACI,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,WAAA;EACA,YAAA;ACKJ;;ADHA;EACI,kBAAA;EACA,cAAA;EACA,mBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ACMJ;;ADJA;EACI,eAAA;ACOJ","file":"vlist.css"} -------------------------------------------------------------------------------- /themes/vlist.min.css: -------------------------------------------------------------------------------- 1 | table.vlist-body{box-sizing:border-box;font-size:8pt;width:100%;table-layout:auto;border-spacing:0;border-collapse:collapse;margin:0;}table.vlist-outer{width:100%;height:100%;border-collapse:collapse;border-spacing:0;table-layout:auto;}table.vlist-header{box-sizing:border-box;font-size:8pt;color:#fff;font-weight:bold;width:100%;table-layout:auto;border-spacing:0;border-collapse:collapse;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=1,StartColorStr=#FF159FCF,EndColorStr=#FF13647F);background:-ms-linear-gradient(top,#159fcf,#13647f);background:-moz-linear-gradient(top,#159fcf,#13647f);background:-webkit-linear-gradient(top,#159fcf,#13647f);background:linear-gradient(top,#159fcf,#13647f);}td.vlist-header{padding:0;}td.vlist-data{border:solid 1px #808080;padding:0;}tr.vlist-body-outer{height:100%;overflow:hidden;}td.vlist-body-outer{width:100%;height:100%;overflow:hidden;vertical-align:top;padding:0;}div.vlist-body-outer{position:relative;overflow:hidden;vertical-align:top;width:100%;height:100%;}div.vlist-body{position:absolute;overflow:auto;vertical-align:top;width:100%;height:100%;padding-right:1px;}tr.msgRow,tr.msgApiRow{cursor:pointer;} -------------------------------------------------------------------------------- /themes/vlist.scss: -------------------------------------------------------------------------------- 1 | div.picVirtualList { 2 | 3 | } 4 | table.vlist-body { 5 | box-sizing: border-box; 6 | font-size: 8pt; 7 | width: 100%; 8 | table-layout: auto; 9 | border-spacing: 0px; 10 | border-collapse: collapse; 11 | margin:0px; 12 | user-select:none; 13 | } 14 | table.vlist-outer { 15 | width: 100%; 16 | height: 100%; 17 | border-collapse: collapse; 18 | border-spacing: 0px; 19 | table-layout: auto; 20 | } 21 | table.vlist-header { 22 | box-sizing: border-box; 23 | font-size: 8pt; 24 | color: white; 25 | font-weight: bold; 26 | width: 100%; 27 | table-layout: auto; 28 | border-spacing: 0px; 29 | border-collapse: collapse; 30 | filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=1, StartColorStr=#FF159FCF, EndColorStr=#FF13647F); 31 | background: -ms-linear-gradient(top, #159FCF, #13647F); 32 | background: -moz-linear-gradient(top, #159FCF, #13647F); 33 | background: -webkit-linear-gradient(top, #159FCF, #13647F); 34 | background: linear-gradient(to bottom, #159FCF, #13647F); 35 | } 36 | td.vlist-header { 37 | padding:0px; 38 | } 39 | td.vlist-data { 40 | border:solid 1px gray; 41 | padding:0px; 42 | } 43 | tr.vlist-body-outer { 44 | height:100%; 45 | overflow:hidden; 46 | } 47 | td.vlist-body-outer { 48 | width:100%; 49 | height:100%; 50 | overflow:hidden; 51 | vertical-align:top; 52 | padding:0px; 53 | } 54 | div.vlist-body-outer { 55 | position:relative; 56 | overflow:hidden; 57 | vertical-align:top; 58 | width:100%; 59 | height:100%; 60 | } 61 | div.vlist-body { 62 | position:absolute; 63 | overflow:auto; 64 | vertical-align:top; 65 | width:100%; 66 | height:100%; 67 | padding-right:1px; 68 | } 69 | tr.msgRow, tr.msgApiRow { 70 | cursor:pointer; 71 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noImplicitAny": false, 4 | "module": "commonjs", 5 | "noEmitOnError": true, 6 | "removeComments": false, 7 | "sourceMap": true, 8 | "target": "ESNext", 9 | "preserveConstEnums": true, 10 | "outDir": "dist" 11 | }, 12 | "exclude": [ 13 | "node_modules" 14 | ] 15 | } 16 | --------------------------------------------------------------------------------