From 337c0124d7839ba49a64f0077b59cc02dd2d591f Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Thu, 4 Aug 2016 14:24:04 -0400 Subject: [PATCH] x/tools/cmd/heapview: add a heading to the page This CL's purpose is to introduce the dependency on the HTML Custom Elements polyfill. Like we've done so far, I'm trying to keep dependencies light by using current or polyfilling future webcomponents standards. Change-Id: I11d14db367b697cdd527fb66b9d7d160ac244b78 Reviewed-on: https://go-review.googlesource.com/25494 Reviewed-by: Brad Fitzpatrick --- cmd/heapview/client/main.ts | 43 ++ cmd/heapview/client/main_test.ts | 7 +- cmd/heapview/client/package.json | 3 +- cmd/heapview/client/testing/karma.conf.js | 1 + cmd/heapview/client/testing/test_main.js | 3 + cmd/heapview/main.go | 5 + third_party/webcomponents/LICENSE | 27 + third_party/webcomponents/customelements.js | 597 ++++++++++++++++++++ 8 files changed, 684 insertions(+), 2 deletions(-) create mode 100644 third_party/webcomponents/LICENSE create mode 100644 third_party/webcomponents/customelements.js diff --git a/cmd/heapview/client/main.ts b/cmd/heapview/client/main.ts index 146eda1b..787c569e 100644 --- a/cmd/heapview/client/main.ts +++ b/cmd/heapview/client/main.ts @@ -2,6 +2,49 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +/** + * A hamburger menu element. + */ +class HamburgerElement extends HTMLElement { + connectedCallback() { + this.innerHTML = '☰'; // Unicode character for hamburger menu. + } +} +window.customElements.define('heap-hamburger', HamburgerElement); + +/** + * A heading for the page with a hamburger menu and a title. + */ +export class HeadingElement extends HTMLElement { + connectedCallback() { + this.style.display = 'block'; + this.style.backgroundColor = '#2196F3'; + this.style.webkitUserSelect = 'none'; + this.style.cursor = 'default'; + this.style.color = '#FFFFFF'; + this.style.padding = '10px'; + this.innerHTML = ` +
Go Heap Viewer
+ `; + } +} +window.customElements.define('heap-heading', HeadingElement); + + +/** + * Reset body's margin and padding, and set font. + */ +function clearStyle() { + document.head.innerHTML += ` + + `; +} + export function main() { document.title = 'Go Heap Viewer'; + clearStyle(); + document.body.appendChild(new HeadingElement()); } diff --git a/cmd/heapview/client/main_test.ts b/cmd/heapview/client/main_test.ts index 1aa8807d..93da4e5c 100644 --- a/cmd/heapview/client/main_test.ts +++ b/cmd/heapview/client/main_test.ts @@ -4,9 +4,14 @@ import {main} from './main'; -describe("main", () => { +describe('main', () => { it('sets the document\'s title', () => { main(); expect(document.title).toBe('Go Heap Viewer'); }); + + it('has a heading', () => { + main(); + expect(document.querySelector('heap-heading')).toBeDefined(); + }); }); \ No newline at end of file diff --git a/cmd/heapview/client/package.json b/cmd/heapview/client/package.json index 25b7cc7f..b2febe88 100644 --- a/cmd/heapview/client/package.json +++ b/cmd/heapview/client/package.json @@ -29,6 +29,7 @@ }, "scripts": { "test": "karma start testing/karma.conf.js", - "format": "find . | grep '\\(test_main\\.js\\|\\.ts\\)$' | xargs clang-format -i" + "format": "find . | grep '\\(test_main\\.js\\|\\.ts\\)$' | xargs clang-format -i", + "lint": "tslint --project ." } } diff --git a/cmd/heapview/client/testing/karma.conf.js b/cmd/heapview/client/testing/karma.conf.js index 545c624d..acaf9d5b 100644 --- a/cmd/heapview/client/testing/karma.conf.js +++ b/cmd/heapview/client/testing/karma.conf.js @@ -7,6 +7,7 @@ module.exports = config => { frameworks: ['jasmine'], basePath: '../../../..', files: [ + 'third_party/webcomponents/customelements.js', 'third_party/typescript/typescript.js', 'third_party/moduleloader/moduleloader.js', 'cmd/heapview/client/testing/test_main.js', diff --git a/cmd/heapview/client/testing/test_main.js b/cmd/heapview/client/testing/test_main.js index 79a49ff2..6c2afd73 100644 --- a/cmd/heapview/client/testing/test_main.js +++ b/cmd/heapview/client/testing/test_main.js @@ -4,6 +4,9 @@ // Configure module loader. System.transpiler = 'typescript' +System.typescriptOptions = { + target: ts.ScriptTarget.ES2015 +}; System.locate = (load) => load.name + '.ts'; // Determine set of test files. diff --git a/cmd/heapview/main.go b/cmd/heapview/main.go index fee5999d..8d519c2f 100644 --- a/cmd/heapview/main.go +++ b/cmd/heapview/main.go @@ -18,10 +18,12 @@ import ( var port = flag.Int("port", 8080, "service port") var index = ` +