Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 Help.ReleaseNoteManager = class { | |
|
einbinder
2017/02/15 20:10:45
This doesn't look like it needs to be a class, jus
chenwilliam
2017/02/16 21:32:42
Done.
| |
| 6 constructor() { | |
| 7 this._versionSetting = Common.settings.createSetting('releaseNoteVersionSeen ', 0, false); | |
| 8 this._browserVersion = this._getBrowserVersion(); | |
| 9 this._releaseNote = this._getReleaseNoteByVersion(this._browserVersion); | |
| 10 if (!Host.isUnderTest()) | |
| 11 this._init(); | |
|
luoe
2017/02/15 22:32:29
We could inline the _init function here.
chenwilliam
2017/02/16 21:32:43
Ack. Used for testing.
| |
| 12 } | |
| 13 | |
| 14 /** | |
| 15 * @return {!Help.ReleaseNote} | |
| 16 */ | |
| 17 releaseNote() { | |
| 18 return this._releaseNote; | |
| 19 } | |
| 20 | |
| 21 /** | |
| 22 * @return {?Promise<?UI.Panel>} | |
| 23 */ | |
|
luoe
2017/02/15 22:32:29
Return value doesn't seem used.
chenwilliam
2017/02/16 21:32:42
Done.
| |
| 24 _init() { | |
| 25 return this._maybeShowInDrawer(this._versionSetting.get(), this._browserVers ion); | |
| 26 } | |
| 27 | |
| 28 /** | |
| 29 * @param {number} lastSeenVersion | |
| 30 * @param {number} browserVersion | |
| 31 * @return {?Promise<?UI.Panel>} | |
| 32 */ | |
| 33 _maybeShowInDrawer(lastSeenVersion, browserVersion) { | |
| 34 if (!Runtime.experiments.isEnabled('releaseNote')) | |
| 35 return null; | |
| 36 if (lastSeenVersion >= browserVersion) | |
| 37 return null; | |
| 38 if (this._releaseNote.version !== browserVersion) | |
|
luoe
2017/02/15 22:32:29
If we require an exact match, we don't need to do
chenwilliam
2017/02/16 21:32:42
Acknowledged.
| |
| 39 return null; | |
| 40 this._versionSetting.set(this._browserVersion); | |
| 41 return UI.inspectorView.showPanel(Help._releaseNoteViewId); | |
| 42 } | |
| 43 | |
| 44 /** | |
| 45 * @param {number} version | |
| 46 * @return {!Help.ReleaseNote} | |
| 47 */ | |
| 48 _getReleaseNoteByVersion(version) { | |
| 49 var note; | |
| 50 while (version) { | |
| 51 note = Help.ReleaseNoteManager.releaseNotesByVersion.find(note => note.ver sion === version); | |
| 52 if (note) | |
| 53 return note; | |
| 54 version--; | |
| 55 } | |
|
luoe
2017/02/15 22:32:29
This is getting the newest release note before or
chenwilliam
2017/02/16 21:32:43
Discussed in person
| |
| 56 return Help.ReleaseNoteManager.releaseNotesByVersion[Help.ReleaseNoteManager .releaseNotesByVersion.length - 1]; | |
| 57 } | |
| 58 | |
| 59 /** | |
| 60 * @return {number} | |
| 61 */ | |
| 62 _getBrowserVersion() { | |
| 63 var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); | |
| 64 var chromeMatch = navigator.userAgent.match(chromeRegex); | |
| 65 return parseInt(chromeMatch[1].split('.')[0], 10); | |
| 66 } | |
| 67 | |
| 68 _testNote() { | |
| 69 return { | |
|
einbinder
2017/02/15 20:10:45
Let's keep the test code in the test file.
chenwilliam
2017/02/16 21:32:42
Done.
| |
| 70 version: 99, | |
| 71 highlights: [ | |
| 72 { | |
| 73 text: 'Test bullet #1', | |
| 74 link: 'https://google.com/', | |
| 75 featured: true, | |
| 76 }, | |
| 77 { | |
| 78 text: 'Test bullet #2', | |
| 79 link: 'https://google.com/', | |
| 80 }, | |
| 81 ], | |
| 82 link: 'https://google.com/', | |
| 83 image: { | |
| 84 src: './resources/test.png', | |
| 85 caption: 'Test image', | |
| 86 }, | |
| 87 }; | |
| 88 } | |
| 89 }; | |
| 90 | |
| 91 /** @type {!Help.ReleaseNoteManager} */ | |
| 92 Help.releaseNoteManager; | |
| 93 | |
| 94 Help.ReleaseNoteView = class extends UI.VBox { | |
| 95 constructor() { | |
| 96 super(true); | |
| 97 this.registerRequiredCSS('help/releaseNote.css'); | |
| 98 var releaseNote = Host.isUnderTest() ? Help.releaseNoteManager._testNote() : Help.releaseNoteManager.releaseNote(); | |
| 99 this._releaseNoteElement = this._createReleaseNoteElement(releaseNote); | |
| 100 this.contentElement.appendChild(this._releaseNoteElement); | |
| 101 } | |
| 102 | |
| 103 /** | |
| 104 * @param {!Help.ReleaseNote} releaseNote | |
| 105 * @return {!Element} | |
| 106 */ | |
| 107 _createReleaseNoteElement(releaseNote) { | |
| 108 var container = createElementWithClass('div', 'release-note-container'); | |
| 109 insertText(container); | |
| 110 insertImage(container); | |
| 111 return container; | |
| 112 | |
| 113 /** | |
| 114 * @param {!Element} container | |
| 115 */ | |
| 116 function insertText(container) { | |
| 117 var textContainer = container.createChild('div', 'release-note-text-contai ner'); | |
| 118 textContainer.createChild('div', 'release-note-header').textContent = | |
| 119 `${Common.UIString('New in DevTools')} v${releaseNote.version}`; | |
|
einbinder
2017/02/15 20:10:45
Common.UIString('New in DevTools v%d', releaseNote
chenwilliam
2017/02/16 21:32:42
Done.
| |
| 120 var highlightContainer = textContainer.createChild('ul', 'release-note-hig hlight-container'); | |
| 121 for (var highlight of releaseNote.highlights) { | |
| 122 var className = highlight.featured ? 'release-note-featured-link' : 'rel ease-note-link'; | |
| 123 var highlightLink = UI.createExternalLink(highlight.link, highlight.text , className, undefined, true); | |
| 124 highlightContainer.createChild('li').appendChild(highlightLink); | |
| 125 } | |
| 126 | |
| 127 var viewMoreButton = UI.createExternalLink( | |
| 128 releaseNote.link, Common.UIString('And more...'), 'dth-button is-prima ry', undefined, true); | |
| 129 textContainer.appendChild(viewMoreButton); | |
| 130 | |
| 131 var closeButton = textContainer.createChild('button', 'dth-button is-secon dary close-release-note'); | |
| 132 closeButton.textContent = Common.UIString('Hide'); | |
| 133 closeButton.addEventListener( | |
| 134 'click', () => UI.inspectorView.closeDrawerTab(Help._releaseNoteViewId , true), false); | |
| 135 } | |
| 136 | |
| 137 /** | |
| 138 * @param {!Element} container | |
| 139 */ | |
| 140 function insertImage(container) { | |
| 141 var imageLink = UI.createExternalLink(releaseNote.link, ' ', 'release-note -image-container', undefined, true); | |
| 142 container.appendChild(imageLink); | |
| 143 var image = imageLink.createChild('img', 'release-note-image'); | |
| 144 image.src = releaseNote.image.src; | |
| 145 image.addEventListener('mouseover', e => container.classList.add('image-ho ver')); | |
| 146 image.addEventListener('mouseout', e => container.classList.remove('image- hover')); | |
| 147 } | |
| 148 } | |
| 149 }; | |
| 150 | |
| 151 /** | |
| 152 * @const | |
| 153 * @type {string} | |
| 154 */ | |
| 155 Help._releaseNoteViewId = 'release-note'; | |
| 156 | |
| 157 /** @typedef {!{src: string}} */ | |
| 158 Help.ReleaseNoteImage; | |
| 159 | |
| 160 /** @typedef {!{text: string, link: string, featured: (boolean | undefined)}} */ | |
| 161 Help.ReleaseNoteHighlight; | |
| 162 | |
| 163 /** @typedef {!{version: number, highlights: !Array<!Help.ReleaseNoteHighlight>, link: string, image: !Help.ReleaseNoteImage}} */ | |
| 164 Help.ReleaseNote; | |
| OLD | NEW |