From 3c83731082b28c727c54e2997f28124c61856cb7 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Fri, 26 Jul 2019 17:27:37 -0700 Subject: [PATCH 01/25] prettier: check in .prettierrc.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Justifications: - We use `singleQuote: true` is for consistency with Google’s JavaScript style guide. - We don’t use `trailingComma: "all"` because that’s incompatible with some compilers in our toolchain; `trailingComma: "es5"` gets us most of the way there. - Other options are due to prevalence/preference. Test Plan: Running Prettier on the `.prettierrc.json` file itself succeeds, so the file is syntactically and semantically valid. wchargin-branch: prettierrc --- .prettierrc.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .prettierrc.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000..77ed90c0a1 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "bracketSpacing": false, + "arrowParens": "always" +} From 6262972ac532c1dc02430487af8cb7cfeaffcc8f Mon Sep 17 00:00:00 2001 From: William Chargin Date: Sat, 3 Aug 2019 15:28:09 -0700 Subject: [PATCH 02/25] package: add `prettier` pinned to 1.18.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Pinned to an exact version because Prettier’s semver does not extend to stylistic changes (by design). Test Plan: Running `yarn && yarn prettier --version` now prints `1.18.2`. wchargin-branch: deps-prettier --- package.json | 1 + yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/package.json b/package.json index d208a4fc53..85986726e2 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@bazel/ibazel": "^0.10.3", "@bazel/typescript": "^0.34.0", "@types/node": "^12.6.8", + "prettier": "1.18.2", "typescript": "~3.4.5" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index a49aeaaaf0..2d78c92884 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2364,6 +2364,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prettier@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" From f172cc57d4fb03b8025b87b2b2a99a58a09c27fe Mon Sep 17 00:00:00 2001 From: William Chargin Date: Sat, 3 Aug 2019 15:29:50 -0700 Subject: [PATCH 03/25] package: add scripts to check and apply Prettier Test Plan: Running `yarn lint` currently fails with a long list of bad files and a nice, human-readable message. Running `yarn fix-lint` effects a large diff, after which `yarn lint` passes. wchargin-branch: package-prettier --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 85986726e2..28a6bfae56 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "scripts": { "postinstall": "ngc -p angular-metadata.tsconfig.json", "build": "bazel build //...", - "test": "ibazel test //..." + "test": "ibazel test //...", + "lint": "prettier --check 'tensorboard/**/*.'{css,html,js,ts}", + "fix-lint": "prettier --write 'tensorboard/**/*.'{css,html,js,ts}" }, "repository": { "type": "git", From b6c639f6f3caf1d471e8ee9dc5ca64009de1ea49 Mon Sep 17 00:00:00 2001 From: TensorBoard Gardener Date: Mon, 5 Aug 2019 11:54:33 -0700 Subject: [PATCH 04/25] prettier: reformat directory tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js --- .../notebook/jupyter/js/lib/extension.js | 16 +-- .../notebook/jupyter/js/lib/labplugin.js | 13 +- .../witwidget/notebook/jupyter/js/lib/wit.js | 54 +++++--- .../notebook/jupyter/js/webpack.config.js | 126 +++++++++--------- 4 files changed, 111 insertions(+), 98 deletions(-) diff --git a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/extension.js b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/extension.js index 26d604e496..c9f33d9873 100644 --- a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/extension.js +++ b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/extension.js @@ -18,16 +18,16 @@ limitations under the License. // which is required for any notebook extension. // Configure requirejs if (window.require) { - window.require.config({ - map: { - "*" : { - "wit-widget": "nbextensions/wit-widget/index", - } - } - }); + window.require.config({ + map: { + '*': { + 'wit-widget': 'nbextensions/wit-widget/index', + }, + }, + }); } // Export the required load_ipython_extension module.exports = { - load_ipython_extension: function() {} + load_ipython_extension: function() {}, }; diff --git a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/labplugin.js b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/labplugin.js index 5549a5187a..55056f987e 100644 --- a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/labplugin.js +++ b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/labplugin.js @@ -20,12 +20,11 @@ module.exports = { id: 'wit-widget', requires: [base.IJupyterWidgetRegistry], activate: function(app, widgets) { - widgets.registerWidget({ - name: 'wit-widget', - version: '0.1.0', - exports: witwidget - }); + widgets.registerWidget({ + name: 'wit-widget', + version: '0.1.0', + exports: witwidget, + }); }, - autoStart: true + autoStart: true, }; - diff --git a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/wit.js b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/wit.js index fe414590b2..962e97a0cd 100644 --- a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/wit.js +++ b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/lib/wit.js @@ -28,8 +28,11 @@ var WITView = widgets.DOMWidgetView.extend({ this.model.on('change:examples', this.examplesChanged, this); this.model.on('change:config', this.configChanged, this); this.model.on('change:inferences', this.inferencesChanged, this); - this.model.on('change:eligible_features', - this.eligibleFeaturesChanged, this); + this.model.on( + 'change:eligible_features', + this.eligibleFeaturesChanged, + this + ); this.model.on('change:mutant_charts', this.mutantChartsChanged, this); this.model.on('change:sprite', this.spriteChanged, this); this.model.on('change:error', this.backendError, this); @@ -39,8 +42,8 @@ var WITView = widgets.DOMWidgetView.extend({ * Loads up the WIT element. */ loadAndCreateWhatIfToolElement: function() { - const height = parseInt( - this.model.attributes.layout.attributes.height, 10) - 20; + const height = + parseInt(this.model.attributes.layout.attributes.height, 10) - 20; const iframe = document.createElement('iframe'); // Adjust WIT html location if running in a jupyter notebook @@ -76,9 +79,11 @@ var WITView = widgets.DOMWidgetView.extend({ isViewReady: function() { // Checks if the iframe has been created, WIT has been created in the iframe // and WIT has completed setup and its methods are created. - return this.iframe.contentDocument && + return ( + this.iframe.contentDocument && this.iframe.contentDocument.getElementById('wit') && - this.iframe.contentDocument.getElementById('wit').updateExampleContents; + this.iframe.contentDocument.getElementById('wit').updateExampleContents + ); }, /** @@ -88,32 +93,34 @@ var WITView = widgets.DOMWidgetView.extend({ this.view_ = this.iframe.contentDocument.getElementById('wit'); // Add listeners for changes from WIT Polymer element. Passes changes // along to python. - this.view_.addEventListener('infer-examples', e => { + this.view_.addEventListener('infer-examples', (e) => { let i = this.model.get('infer') + 1; this.model.set('infer', i); this.touch(); }); - this.view_.addEventListener('delete-example', e => { - this.model.set('delete_example', {'index': e.detail.index}); + this.view_.addEventListener('delete-example', (e) => { + this.model.set('delete_example', {index: e.detail.index}); this.touch(); }); - this.view_.addEventListener('duplicate-example', e => { - this.model.set('duplicate_example', {'index': e.detail.index}); + this.view_.addEventListener('duplicate-example', (e) => { + this.model.set('duplicate_example', {index: e.detail.index}); this.touch(); }); - this.view_.addEventListener('update-example', e => { - this.model.set('update_example', - {'index': e.detail.index, 'example': e.detail.example}); + this.view_.addEventListener('update-example', (e) => { + this.model.set('update_example', { + index: e.detail.index, + example: e.detail.example, + }); this.touch(); }); - this.view_.addEventListener('get-eligible-features', e => { + this.view_.addEventListener('get-eligible-features', (e) => { let i = this.model.get('get_eligible_features') + 1; this.model.set('get_eligible_features', i); this.touch(); }); this.inferMutantsCounter = 0; - this.view_.addEventListener('infer-mutants', e => { + this.view_.addEventListener('infer-mutants', (e) => { e.detail['infer_mutants_counter'] = this.inferMutantsCounter++; this.model.set('infer_mutants', e.detail); this.mutantFeature = e.detail.feature_name; @@ -148,8 +155,10 @@ var WITView = widgets.DOMWidgetView.extend({ const inferences = this.model.get('inferences'); this.view_.labelVocab = inferences['label_vocab']; this.view_.inferences = inferences['inferences']; - this.view_.attributions = {indices: this.view_.inferences.indices, - attributions: inferences['attributions']} + this.view_.attributions = { + indices: this.view_.inferences.indices, + attributions: inferences['attributions'], + }; }, eligibleFeaturesChanged: function() { if (!this.setupComplete) { @@ -171,8 +180,11 @@ var WITView = widgets.DOMWidgetView.extend({ return; } const chartInfo = this.model.get('mutant_charts'); - this.view_.makeChartForFeature(chartInfo.chartType, this.mutantFeature, - chartInfo.data); + this.view_.makeChartForFeature( + chartInfo.chartType, + this.mutantFeature, + chartInfo.data + ); }, configChanged: function() { if (!this.setupComplete) { @@ -237,5 +249,5 @@ var WITView = widgets.DOMWidgetView.extend({ }); module.exports = { - WITView : WITView + WITView: WITView, }; diff --git a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/webpack.config.js b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/webpack.config.js index 4cb4af5f6f..c0f763a8ac 100644 --- a/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/webpack.config.js +++ b/tensorboard/plugins/interactive_inference/witwidget/notebook/jupyter/js/webpack.config.js @@ -19,70 +19,72 @@ var version = require('./package.json').version; // Custom webpack rules are generally the same for all webpack bundles, hence // stored in a separate local variable. var rules = [ - { test: /\.css$/, use: ['style-loader', 'css-loader']}, - { test: /\.(html)$/, use: [{loader: 'file-loader', options: {}}]}, -] - + {test: /\.css$/, use: ['style-loader', 'css-loader']}, + {test: /\.(html)$/, use: [{loader: 'file-loader', options: {}}]}, +]; module.exports = [ - {// Notebook extension - // - // This bundle only contains the part of the JavaScript that is run on - // load of the notebook. This section generally only performs - // some configuration for requirejs, and provides the legacy - // "load_ipython_extension" function which is required for any notebook - // extension. - // - entry: './lib/extension.js', - output: { - filename: 'extension.js', - path: path.resolve(__dirname, 'static'), - libraryTarget: 'amd' - } + { + // Notebook extension + // + // This bundle only contains the part of the JavaScript that is run on + // load of the notebook. This section generally only performs + // some configuration for requirejs, and provides the legacy + // "load_ipython_extension" function which is required for any notebook + // extension. + // + entry: './lib/extension.js', + output: { + filename: 'extension.js', + path: path.resolve(__dirname, 'static'), + libraryTarget: 'amd', + }, + }, + { + // Bundle for the notebook containing the custom widget views and models + // + // This bundle contains the implementation for the custom widget views and + // custom widget. + // It must be an amd module + // + entry: './lib/index.js', + output: { + filename: 'index.js', + path: path.resolve(__dirname, 'static'), + libraryTarget: 'amd', + }, + devtool: 'source-map', + module: { + rules: rules, + }, + externals: ['@jupyter-widgets/base'], + }, + { + // Embeddable wit-widget bundle + // + // This bundle is generally almost identical to the notebook bundle + // containing the custom widget views and models. + // + // The only difference is in the configuration of the webpack public path + // for the static assets. + // + // It will be automatically distributed by unpkg to work with the static + // widget embedder. + // + // The target bundle is always `dist/index.js`, which is the path required + // by the custom widget embedder. + // + entry: './lib/embed.js', + output: { + filename: 'index.js', + path: path.resolve(__dirname, 'dist'), + libraryTarget: 'amd', + publicPath: 'https://unpkg.com/wit-widget@' + version + '/dist/', }, - {// Bundle for the notebook containing the custom widget views and models - // - // This bundle contains the implementation for the custom widget views and - // custom widget. - // It must be an amd module - // - entry: './lib/index.js', - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'static'), - libraryTarget: 'amd' - }, - devtool: 'source-map', - module: { - rules: rules - }, - externals: ['@jupyter-widgets/base'] + devtool: 'source-map', + module: { + rules: rules, }, - {// Embeddable wit-widget bundle - // - // This bundle is generally almost identical to the notebook bundle - // containing the custom widget views and models. - // - // The only difference is in the configuration of the webpack public path - // for the static assets. - // - // It will be automatically distributed by unpkg to work with the static - // widget embedder. - // - // The target bundle is always `dist/index.js`, which is the path required - // by the custom widget embedder. - // - entry: './lib/embed.js', - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'dist'), - libraryTarget: 'amd', - publicPath: 'https://unpkg.com/wit-widget@' + version + '/dist/' - }, - devtool: 'source-map', - module: { - rules: rules - }, - externals: ['@jupyter-widgets/base'] - } + externals: ['@jupyter-widgets/base'], + }, ]; From c13b31ed78157653d47cc7a784af98b4f0de3398 Mon Sep 17 00:00:00 2001 From: TensorBoard Gardener Date: Mon, 5 Aug 2019 11:54:33 -0700 Subject: [PATCH 05/25] prettier: reformat directory tensorboard/plugins/example/tensorboard_plugin_example --- .../static/index.js | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/tensorboard/plugins/example/tensorboard_plugin_example/static/index.js b/tensorboard/plugins/example/tensorboard_plugin_example/static/index.js index 89ef8483a1..4ac1a561b7 100644 --- a/tensorboard/plugins/example/tensorboard_plugin_example/static/index.js +++ b/tensorboard/plugins/example/tensorboard_plugin_example/static/index.js @@ -14,14 +14,14 @@ // ============================================================================== export async function render() { - const msg = createElement("p", "Fetching data…"); + const msg = createElement('p', 'Fetching data…'); document.body.appendChild(msg); - const runToTags = await fetch("./tags").then((response) => response.json()); + const runToTags = await fetch('./tags').then((response) => response.json()); const data = await Promise.all( Object.entries(runToTags).flatMap(([run, tagToDescription]) => Object.keys(tagToDescription).map((tag) => - fetch("./greetings?" + new URLSearchParams({run, tag})) + fetch('./greetings?' + new URLSearchParams({run, tag})) .then((response) => response.json()) .then((greetings) => ({ run, @@ -33,7 +33,7 @@ export async function render() { ); const style = createElement( - "style", + 'style', ` thead { border-bottom: 1px black solid; @@ -54,36 +54,36 @@ export async function render() { style.innerText = style.textContent; document.head.appendChild(style); - const table = createElement("table", [ + const table = createElement('table', [ createElement( - "thead", - createElement("tr", [ - createElement("th", "Run"), - createElement("th", "Tag"), - createElement("th", "Greetings"), + 'thead', + createElement('tr', [ + createElement('th', 'Run'), + createElement('th', 'Tag'), + createElement('th', 'Greetings'), ]) ), createElement( - "tbody", + 'tbody', data.flatMap(({run, tag, greetings}) => greetings.map((guest, i) => - createElement("tr", [ - createElement("td", i === 0 ? run : null), - createElement("td", i === 0 ? tag : null), - createElement("td", guest), + createElement('tr', [ + createElement('td', i === 0 ? run : null), + createElement('td', i === 0 ? tag : null), + createElement('td', guest), ]) ) ) ), ]); - msg.textContent = "Data loaded."; + msg.textContent = 'Data loaded.'; document.body.appendChild(table); } function createElement(tag, children) { const result = document.createElement(tag); if (children != null) { - if (typeof children === "string") { + if (typeof children === 'string') { result.textContent = children; } else if (Array.isArray(children)) { for (const child of children) { From ab16e913413f0dea1d382088ea5cbc770680e6c1 Mon Sep 17 00:00:00 2001 From: TensorBoard Gardener Date: Mon, 5 Aug 2019 11:54:34 -0700 Subject: [PATCH 06/25] prettier: reformat directory tensorboard/plugins/interactive_inference --- .../demo/age_index.html | 14 +- .../demo/image_index.html | 14 +- .../demo/index.html | 17 +- .../demo/iris_index.html | 16 +- .../demo/multi_index.html | 17 +- .../tf-interactive-inference-age-demo.html | 453 +- .../demo/tf-interactive-inference-demo.html | 452 +- .../tf-interactive-inference-image-demo.html | 120 +- .../tf-interactive-inference-iris-demo.html | 183 +- .../tf-interactive-inference-multi-demo.html | 487 +- .../tf-confusion-matrix.html | 111 +- .../tf-inference-panel.html | 419 +- .../tf-inference-viewer.html | 117 +- .../tf-interactive-inference-dashboard.html | 10061 +++++++++------- .../wit.html | 4 +- 15 files changed, 7437 insertions(+), 5048 deletions(-) diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/age_index.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/age_index.html index b9ea05d1fc..f6210fb711 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/age_index.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/age_index.html @@ -1,4 +1,4 @@ - + - - + + What-If Tool UCI Census Regression Demo
-
What-If Tool demo - regression model for predicting age - UCI census income dataset
+
+ What-If Tool demo - regression model for predicting age - UCI census income + dataset +
diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/image_index.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/image_index.html index 344abb0f2f..f40f400249 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/image_index.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/image_index.html @@ -1,4 +1,4 @@ - + - - + + What-If Tool Smile Detector Demo
-
What-If Tool demo - binary classifier for smile detection in images - CelebA dataset
+
+ What-If Tool demo - binary classifier for smile detection in images - CelebA + dataset +
diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/index.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/index.html index b87064c8c0..9cc77317a2 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/index.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/index.html @@ -1,4 +1,4 @@ - + - - + + What-If Tool UCI Census Demo
-
What-If Tool demo - binary classifier for predicting salary of over $50k - UCI census income dataset
+
+ What-If Tool demo - binary classifier for predicting salary of over $50k - + UCI census income dataset +
- - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/iris_index.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/iris_index.html index 32b973bf60..ca04500c4d 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/iris_index.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/iris_index.html @@ -1,4 +1,4 @@ - + - - + + What-If Tool Iris Demo
-
What-If Tool demo - multi-class flower classifier - UCI iris dataset
+
+ What-If Tool demo - multi-class flower classifier - UCI iris dataset +
- - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/multi_index.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/multi_index.html index 6c72ba5624..a381528592 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/multi_index.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/multi_index.html @@ -1,4 +1,4 @@ - + - - + + What-If Tool UCI Census 2 Model Demo
-
What-If Tool demo - two binary classifiers for predicting salary of over $50k - UCI census income dataset
+
+ What-If Tool demo - two binary classifiers for predicting salary of over + $50k - UCI census income dataset +
- - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-age-demo.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-age-demo.html index ce5ba90485..99afac1b5d 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-age-demo.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-age-demo.html @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + + - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-demo.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-demo.html index e74702876f..f0f8c1700e 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-demo.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-demo.html @@ -15,10 +15,10 @@ limitations under the License. --> - - + + - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-image-demo.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-image-demo.html index 71c9da304f..552ce58d7c 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-image-demo.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/demo/tf-interactive-inference-image-demo.html @@ -14,10 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. --> - - + + - + - + - + diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-confusion-matrix.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-confusion-matrix.html index 27a542df13..5f27a980a0 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-confusion-matrix.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-confusion-matrix.html @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - + @@ -26,7 +26,8 @@ td { text-align: right; } - th, td { + th, + td { font-size: 14px; padding: 3px; font-weight: normal; @@ -40,12 +41,12 @@ font-size: 10px; } .total-label { - color: #5F6368; + color: #5f6368; font-size: 10px; text-align: left; } .total-cell { - color: #5F6368; + color: #5f6368; } .actual-label { text-align: right; @@ -69,7 +70,7 @@ diff --git a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-inference-panel.html b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-inference-panel.html index 655c644dd5..e683c16ad3 100644 --- a/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-inference-panel.html +++ b/tensorboard/plugins/interactive_inference/tf_interactive_inference_dashboard/tf-inference-panel.html @@ -15,12 +15,11 @@ limitations under the License. --> - - - - - - + + + + + - - + + @@ -33,15 +33,15 @@ } .row { display: flex; - color: #3C4043; + color: #3c4043; font-size: 12px; } .header { - color: #80868B; + color: #80868b; font-size: 12px; padding: 4px 0; - border-bottom: solid 1px #DADCE0; - border-top: solid 1px #DADCE0; + border-bottom: solid 1px #dadce0; + border-top: solid 1px #dadce0; } .dark-row-one { background: #cbf0f8; @@ -57,7 +57,7 @@ margin-right: 5px; } .marker.mark-one { - background: #007B83; + background: #007b83; padding-left: 1px; } .marker.mark-two { @@ -110,12 +110,27 @@
Delta
-