<!DOCTYPE html> <html class="zg-html"> <head> <meta charset="utf-8"> <title>ZingGrid: Blank Grid</title> <link rel="preconnect" href="https://fonts.gstatic.com"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet"> <script nonce="undefined" src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script> <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> <script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script> <style> * { --md-red: #f44336; --md-orange: #ff9800; --md-yellow: #ffeb3b; --md-green: #4caf50; --md-blue: #2196f3; --md-purple: #673ab7; --md-indigo: #3f51b5; --md-black: #000; --md-white: #FFF; font-family: 'Roboto', sans-serif; /* BOOTSTRAP COLORS*/ /* Bootstrap 4 has some css variables exposes, mostly colors. */ /* RE-USABLE ZINGGRID VARS ----------------------------------------------------- */ /* BACKGROUND */ --theme-background-color: var(--mdc-theme-background); --theme-background-zebra: var(--light); /* BORDER */ --theme-border-color_alt: var(--light); --theme-border-color_alt2: var(--secondary); --zg-button-focus: var(--light); /* COLOR */ --theme-color-primary: var(--md-indigo); /* FONT */ --zg-caption-color: var(--md-black); --theme-font-family: initial; --theme-padding_x: 2rem; --theme-padding_y: 0.75rem; /* -------------------------------------------------- */ /* ZG-GRID ----------------------------------------------------- */ /* padding: var(--theme-padding_x) var(--theme-padding_y); */ /* box-sizing: border-box; */ --zing-grid-box-shadow: 0 15px 35px rgba(50, 50, 93, .1), 0 5px 15px rgba(0, 0, 0, .07); /* ZG-BODY ----------------------------------------------------- */ --zg-body-background: var(--white); --zg-body-card-background: transparent; /* Hover */ --zg-row-body-color_even_hover: var(--zg-row-body-color); --zg-row-body-color_odd_hover: var(--zg-row-body-color); /* ZG-BUTTON ----------------------------------------------------- */ --zg-button-opacity_disabled: .5; /* ZG-BUTTON-CUSTOM ----------------------------------------------------- */ --zg-button-background_custom: var(--theme-color-primary); --zg-button-color: var(--white); --zg-button-border_custom: none; --zg-button-box-shadow_custom: none; --zg-button-border_custom_hover: none; --zg-button-background_custom_hover: #0069d9; /* ZG-CAPTION ----------------------------------------------------- */ --zg-caption-background: var(--md-white); --zg-caption-border-bottom: 0; --zg-caption-color: var(--md-black); --zg-caption-icon-color: var(--md-black); /* ZG-CELL ----------------------------------------------------- */ --zg-cell-background_sorted: rgba(62, 117, 167, .2); /* ZG-CONTROL-BAR ----------------------------------------------------- */ --zg-control-bar-background: var(--md-white); --zg-control-bar-border-bottom: 0; /* ZG-EDITOR_ROW ----------------------------------------------------- */ --zg-editor-row-input-background: var(--md-white); --zg-editor-row-input-color: var(--md-white); --zg-editor-row-input-background_focus: #00203d; --zg-editor-row-input-box-shadow_focus: none; /* ZG-FILTER ----------------------------------------------------- */ --zg-filter-background: var(--light); --zg-filter-background_sorted: rgba(62, 117, 167, .2); --zg-filter-border: none; /* Input */ --zg-filter-input-height: calc(1.5em + .75rem + 2px); --zg-filter-input-padding: .375rem .75rem .375rem .375rem; --zg-filter-input-border-radius: .25rem; --zg-filter-input-border: 1px solid #ced4da; --zg-filter-input-background: var(--md-white); --zg-filter-input-border-width: 1px; --zg-filter-input-margin: .375rem; /* ZG-FOCUS ----------------------------------------------------- */ --zg-focus-border: 1px solid #80bdff; --zg-focus-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); --zg-focus-outline: 0; --zg-focus-bottom-transform: translateY(1px); --zg-focus-right-transform: translateX(1px); /* ZG-HEAD ----------------------------------------------------- */ --zg-head-background: var(--md-white); /* ZG-MENUITEM ----------------------------------------------------- */ --zg-menu-background: var(--md-black); /* ZG-INPUT ----------------------------------------------------- */ --zg-input-color: #00549c; ; --zg-input-border-bottom: 1px solid var(--theme-border-color_alt); --zg-input-border-left: 1px solid var(--theme-border-color_alt); --zg-input-border-right: 1px solid var(--theme-border-color_alt); --zg-input-border-top: 1px solid var(--theme-border-color_alt); /* ZG-PAGER ----------------------------------------------------- */ --zg-pager-background: transparent; --zg-pager-border-top: 0; --zg-pager-card-nonmobile-border-top: 1px solid var(--theme-background-color); --zg-pager-color: var(--zg-head-cell-color); /* ZG-ROW ----------------------------------------------------- */ --zg-row-border: 1px solid var(--grey); /* Card */ --zg-row-card-background: var(--zg-body-background); /* ZG-SOURCE ----------------------------------------------------- */ --zg-source-background: #fbfbfb; --zg-source-border-bottom_top: 1px solid #f4f4f4; --zg-source-border-top_top: 1px solid #f4f4f4; --zg-source-border-top_bottom: 1px solid #f4f4f4; --zg-source-color: var(--theme-color-primary); /* ZG-WATERMARK ----------------------------------------------------- */ --zg-watermark-background: transparent; --zg-watermark-border-bottom: 0; --zg-watermark-border-left: 0; --zg-watermark-border-right: 0; --zg-watermark-border-top: 0; --zg-watermark-font-size: 10px; --zg-watermark-padding: 0 var(--theme-padding_x); } .chip-primary { background: var(--md-indigo); } .chip-secondary { background: var(--md-gray); } .chip-success { background: var(--md-green); } .chip-danger { background: var(--md-red); } .chip-warning { background: var(--md-yellow); } .progress-wrapper { width: 200px; } .mdc-linear-progress__buffer-bar { height: 3px; } .mdc-linear-progress__buffer-dots { height: 3px; } zing-grid[loading] { height: 472px; } </style> </head> <body class="zg-body"> <!-- Most features can be toggled on the toplevel zing-grid tag --> <zing-grid caption="Users" theme="zg-bootstrap.css" search pager sorting data='[ { "first": "Mark", "last": "Otto", "username": "@ZTfer", "category": "primary", "progress": "12" }, { "first": "Jacob", "last": "Thorton", "username": "@jacobthorton", "category": "secondary", "progress": "62" }, { "first": "Duncan", "last": "Mattheson", "username": "@dmattheson", "category": "danger", "progress": "84" }, { "first": "David", "last": "Jose Perez", "username": "@djp", "category": "info", "progress": "45" }, { "first": "Dave", "last": "Phillipson", "username": "@phillipson", "category": "warning", "progress": "30" } ]'> <zg-colgroup> <zg-column index="first">[[index.first]]</zg-column> <zg-column index="last">[[index.last]]</zg-column> <zg-column index="username">[[index.username]]</zg-column> <zg-column index="category"> <div class="mdc-chip chip-[[index.category]]" role="row"> <div class="mdc-chip__ripple"></div> <span role="gridcell"> <span role="button" tabindex="0" class="mdc-chip__primary-action"> <span class="mdc-chip__text">[[index.category]]</span> </span> </span> </div> </zg-column> <zg-column index="progress" renderer="progressBar"> <div class="progress-wrapper"> <div role="progressbar" class="mdc-linear-progress" aria-valuemin="0" aria-valuemax="1"> <div class="mdc-linear-progress__buffer"> <div class="mdc-linear-progress__buffer-bar"></div> <div class="mdc-linear-progress__buffer-dots">[[index.progress]]</div> </div> </div> </div> </zg-column> </zg-colgroup> </zing-grid> <script> ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']); const primaryBar = 'linear-gradient(45deg, #4452B8, #65C7F7, #9CECFB)'; const primaryDot = '#9CECFB'; const secondaryBar = 'linear-gradient( 45deg, #edf6fa, #F6F6F6)'; const secondaryDot = '#F6F6F6'; const dangerBar = 'linear-gradient(45deg, #EA402F, #E25C4E, #E3928A, #E4B0AB)'; const dangerDot = '#E4B0AB'; const infoBar = 'linear-gradient(45deg, #777777, #9E9E9E, #CDCACA)'; const infoDot = '#CDCACA'; const warningBar = 'linear-gradient(45deg, #FCEA1B, #FFF688, #FFF9BA)'; const warningDot = '#FFF9BA'; window.progressBar = function(customIndex, domCell) { const bar = domCell.querySelector('.mdc-linear-progress__buffer-bar'); const dots = domCell.querySelector('.mdc-linear-progress__buffer-dots'); dots.style.width = `${dots.innerHTML}%`; const value = dots.innerHTML; if (value >= 80) { bar.style.background = dangerBar; dots.style.backgroundColor = dangerDot; } else if (value >= 60) { bar.style.background = secondaryBar; dots.style.backgroundColor = secondaryDot; } else if (value >= 40) { bar.style.background = infoBar; dots.style.backgroundColor = infoDot; } else if (value >= 20) { bar.style.background = warningBar; dots.style.backgroundColor = warningDot; } else { bar.style.background = primaryBar; dots.style.backgroundColor = primaryDot; } }; </script> </body> </html>
<!DOCTYPE html> <html class="zg-html"> <head> <meta charset="utf-8"> <title>ZingGrid: Blank Grid</title> <link rel="preconnect" href="https://fonts.gstatic.com"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet"> <script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script> <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet"> <script src="https://cdn.zinggrid.com/zinggrid.min.js"></script> </head> <body class="zg-body"> <!-- Most features can be toggled on the toplevel zing-grid tag --> <zing-grid caption="Users" theme="zg-bootstrap.css" search pager sorting data='[ { "first": "Mark", "last": "Otto", "username": "@ZTfer", "category": "primary", "progress": "12" }, { "first": "Jacob", "last": "Thorton", "username": "@jacobthorton", "category": "secondary", "progress": "62" }, { "first": "Duncan", "last": "Mattheson", "username": "@dmattheson", "category": "danger", "progress": "84" }, { "first": "David", "last": "Jose Perez", "username": "@djp", "category": "info", "progress": "45" }, { "first": "Dave", "last": "Phillipson", "username": "@phillipson", "category": "warning", "progress": "30" } ]'> <zg-colgroup> <zg-column index="first">[[index.first]]</zg-column> <zg-column index="last">[[index.last]]</zg-column> <zg-column index="username">[[index.username]]</zg-column> <zg-column index="category"> <div class="mdc-chip chip-[[index.category]]" role="row"> <div class="mdc-chip__ripple"></div> <span role="gridcell"> <span role="button" tabindex="0" class="mdc-chip__primary-action"> <span class="mdc-chip__text">[[index.category]]</span> </span> </span> </div> </zg-column> <zg-column index="progress" renderer="progressBar"> <div class="progress-wrapper"> <div role="progressbar" class="mdc-linear-progress" aria-valuemin="0" aria-valuemax="1"> <div class="mdc-linear-progress__buffer"> <div class="mdc-linear-progress__buffer-bar"></div> <div class="mdc-linear-progress__buffer-dots">[[index.progress]]</div> </div> </div> </div> </zg-column> </zg-colgroup> </zing-grid> </body> </html>
* { --md-red: #f44336; --md-orange: #ff9800; --md-yellow: #ffeb3b; --md-green: #4caf50; --md-blue: #2196f3; --md-purple: #673ab7; --md-indigo: #3f51b5; --md-black: #000; --md-white: #FFF; font-family: 'Roboto', sans-serif; /* BOOTSTRAP COLORS*/ /* Bootstrap 4 has some css variables exposes, mostly colors. */ /* RE-USABLE ZINGGRID VARS ----------------------------------------------------- */ /* BACKGROUND */ --theme-background-color: var(--mdc-theme-background); --theme-background-zebra: var(--light); /* BORDER */ --theme-border-color_alt: var(--light); --theme-border-color_alt2: var(--secondary); --zg-button-focus: var(--light); /* COLOR */ --theme-color-primary: var(--md-indigo); /* FONT */ --zg-caption-color: var(--md-black); --theme-font-family: initial; --theme-padding_x: 2rem; --theme-padding_y: 0.75rem; /* -------------------------------------------------- */ /* ZG-GRID ----------------------------------------------------- */ /* padding: var(--theme-padding_x) var(--theme-padding_y); */ /* box-sizing: border-box; */ --zing-grid-box-shadow: 0 15px 35px rgba(50, 50, 93, .1), 0 5px 15px rgba(0, 0, 0, .07); /* ZG-BODY ----------------------------------------------------- */ --zg-body-background: var(--white); --zg-body-card-background: transparent; /* Hover */ --zg-row-body-color_even_hover: var(--zg-row-body-color); --zg-row-body-color_odd_hover: var(--zg-row-body-color); /* ZG-BUTTON ----------------------------------------------------- */ --zg-button-opacity_disabled: .5; /* ZG-BUTTON-CUSTOM ----------------------------------------------------- */ --zg-button-background_custom: var(--theme-color-primary); --zg-button-color: var(--white); --zg-button-border_custom: none; --zg-button-box-shadow_custom: none; --zg-button-border_custom_hover: none; --zg-button-background_custom_hover: #0069d9; /* ZG-CAPTION ----------------------------------------------------- */ --zg-caption-background: var(--md-white); --zg-caption-border-bottom: 0; --zg-caption-color: var(--md-black); --zg-caption-icon-color: var(--md-black); /* ZG-CELL ----------------------------------------------------- */ --zg-cell-background_sorted: rgba(62, 117, 167, .2); /* ZG-CONTROL-BAR ----------------------------------------------------- */ --zg-control-bar-background: var(--md-white); --zg-control-bar-border-bottom: 0; /* ZG-EDITOR_ROW ----------------------------------------------------- */ --zg-editor-row-input-background: var(--md-white); --zg-editor-row-input-color: var(--md-white); --zg-editor-row-input-background_focus: #00203d; --zg-editor-row-input-box-shadow_focus: none; /* ZG-FILTER ----------------------------------------------------- */ --zg-filter-background: var(--light); --zg-filter-background_sorted: rgba(62, 117, 167, .2); --zg-filter-border: none; /* Input */ --zg-filter-input-height: calc(1.5em + .75rem + 2px); --zg-filter-input-padding: .375rem .75rem .375rem .375rem; --zg-filter-input-border-radius: .25rem; --zg-filter-input-border: 1px solid #ced4da; --zg-filter-input-background: var(--md-white); --zg-filter-input-border-width: 1px; --zg-filter-input-margin: .375rem; /* ZG-FOCUS ----------------------------------------------------- */ --zg-focus-border: 1px solid #80bdff; --zg-focus-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); --zg-focus-outline: 0; --zg-focus-bottom-transform: translateY(1px); --zg-focus-right-transform: translateX(1px); /* ZG-HEAD ----------------------------------------------------- */ --zg-head-background: var(--md-white); /* ZG-MENUITEM ----------------------------------------------------- */ --zg-menu-background: var(--md-black); /* ZG-INPUT ----------------------------------------------------- */ --zg-input-color: #00549c; ; --zg-input-border-bottom: 1px solid var(--theme-border-color_alt); --zg-input-border-left: 1px solid var(--theme-border-color_alt); --zg-input-border-right: 1px solid var(--theme-border-color_alt); --zg-input-border-top: 1px solid var(--theme-border-color_alt); /* ZG-PAGER ----------------------------------------------------- */ --zg-pager-background: transparent; --zg-pager-border-top: 0; --zg-pager-card-nonmobile-border-top: 1px solid var(--theme-background-color); --zg-pager-color: var(--zg-head-cell-color); /* ZG-ROW ----------------------------------------------------- */ --zg-row-border: 1px solid var(--grey); /* Card */ --zg-row-card-background: var(--zg-body-background); /* ZG-SOURCE ----------------------------------------------------- */ --zg-source-background: #fbfbfb; --zg-source-border-bottom_top: 1px solid #f4f4f4; --zg-source-border-top_top: 1px solid #f4f4f4; --zg-source-border-top_bottom: 1px solid #f4f4f4; --zg-source-color: var(--theme-color-primary); /* ZG-WATERMARK ----------------------------------------------------- */ --zg-watermark-background: transparent; --zg-watermark-border-bottom: 0; --zg-watermark-border-left: 0; --zg-watermark-border-right: 0; --zg-watermark-border-top: 0; --zg-watermark-font-size: 10px; --zg-watermark-padding: 0 var(--theme-padding_x); } .chip-primary { background: var(--md-indigo); } .chip-secondary { background: var(--md-gray); } .chip-success { background: var(--md-green); } .chip-danger { background: var(--md-red); } .chip-warning { background: var(--md-yellow); } .progress-wrapper { width: 200px; } .mdc-linear-progress__buffer-bar { height: 3px; } .mdc-linear-progress__buffer-dots { height: 3px; }
const primaryBar = 'linear-gradient(45deg, #4452B8, #65C7F7, #9CECFB)'; const primaryDot = '#9CECFB'; const secondaryBar = 'linear-gradient( 45deg, #edf6fa, #F6F6F6)'; const secondaryDot = '#F6F6F6'; const dangerBar = 'linear-gradient(45deg, #EA402F, #E25C4E, #E3928A, #E4B0AB)'; const dangerDot = '#E4B0AB'; const infoBar = 'linear-gradient(45deg, #777777, #9E9E9E, #CDCACA)'; const infoDot = '#CDCACA'; const warningBar = 'linear-gradient(45deg, #FCEA1B, #FFF688, #FFF9BA)'; const warningDot = '#FFF9BA'; window.progressBar = function(customIndex, domCell) { const bar = domCell.querySelector('.mdc-linear-progress__buffer-bar'); const dots = domCell.querySelector('.mdc-linear-progress__buffer-dots'); dots.style.width = `${dots.innerHTML}%`; const value = dots.innerHTML; if (value >= 80) { bar.style.background = dangerBar; dots.style.backgroundColor = dangerDot; } else if (value >= 60) { bar.style.background = secondaryBar; dots.style.backgroundColor = secondaryDot; } else if (value >= 40) { bar.style.background = infoBar; dots.style.backgroundColor = infoDot; } else if (value >= 20) { bar.style.background = warningBar; dots.style.backgroundColor = warningDot; } else { bar.style.background = primaryBar; dots.style.backgroundColor = primaryDot; } };