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 = `
+