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 /** | |
| 6 * @return {!Help.ReleaseNote} | |
| 7 */ | |
| 8 Help.latestReleaseNote = function() { | |
|
alph
2017/02/21 23:19:42
The namespace Help should go into file Help.js
chenwilliam
2017/02/22 02:36:38
Done.
| |
| 9 if (!Help._latestReleaseNote) { | |
| 10 /** @type {!Help.ReleaseNote} */ | |
| 11 Help._latestReleaseNote = Help._getReleaseNoteByVersion(Help.browserVersion( )); | |
| 12 } | |
| 13 return Help._latestReleaseNote; | |
| 14 }; | |
| 15 | |
| 16 /** | |
| 17 * @param {number} version | |
| 18 * @return {!Help.ReleaseNote} | |
| 19 */ | |
| 20 Help._getReleaseNoteByVersion = function(version) { | |
|
alph
2017/02/21 23:19:42
This function looks strange, why do you need to re
chenwilliam
2017/02/22 02:36:39
It's looking for the "best" release note to show w
| |
| 21 const originalVersion = version; | |
| 22 var note; | |
|
alph
2017/02/21 23:19:42
move it to definition.
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 23 while (version) { | |
| 24 note = Help.releaseNotesByVersion.find(note => note.version === version); | |
| 25 if (note) | |
| 26 return note; | |
| 27 version--; | |
| 28 } | |
| 29 console.error(`Unable to find release note for version ${originalVersion} - us ing last release note as fallback`); | |
| 30 return Help.releaseNotesByVersion[Help.releaseNotesByVersion.length - 1]; | |
| 31 }; | |
| 32 | |
| 33 /** | |
| 34 * @return {!Common.Setting} | |
| 35 */ | |
| 36 Help.releaseNoteVersionSetting = function() { | |
| 37 if (!Help._releaseNoteVersionSetting) { | |
| 38 /** @type {!Common.Setting} */ | |
| 39 Help._releaseNoteVersionSetting = Common.settings.createSetting('releaseNote VersionSeen', 0, false); | |
|
alph
2017/02/21 23:19:42
createLocalSetting
chenwilliam
2017/02/22 02:36:38
I wanted a global setting so it doesn't re-show a
| |
| 40 } | |
| 41 return Help._releaseNoteVersionSetting; | |
| 42 }; | |
| 43 | |
| 44 Help.showReleaseNoteIfNeeded = function() { | |
| 45 Help._showReleaseNoteIfNeeded(Help.releaseNoteVersionSetting().get(), Help.bro wserVersion()); | |
| 46 }; | |
| 47 | |
| 48 /** | |
| 49 * @param {number} lastSeenVersion | |
| 50 * @param {number} browserVersion | |
| 51 * @return {?Promise<?UI.Panel>} | |
| 52 */ | |
| 53 Help._showReleaseNoteIfNeeded = function(lastSeenVersion, browserVersion) { | |
| 54 if (!Runtime.experiments.isEnabled('releaseNote')) | |
| 55 return null; | |
| 56 if (lastSeenVersion >= browserVersion) | |
| 57 return null; | |
| 58 if (Help.latestReleaseNote().version !== browserVersion) | |
|
alph
2017/02/21 23:19:42
Why's the check?
What if the latest is 57, browser
chenwilliam
2017/02/22 02:36:39
I'd prefer to not open the what's new drawer for t
| |
| 59 return null; | |
| 60 Help.releaseNoteVersionSetting().set(Help.browserVersion()); | |
| 61 return UI.inspectorView.showPanel(Help._releaseNoteViewId); | |
| 62 }; | |
| 63 | |
| 64 /** | |
| 65 * @return {number} | |
| 66 */ | |
| 67 Help.browserVersion = function() { | |
| 68 if (!Help._browserVersion) { | |
| 69 var chromeRegex = new RegExp('(?:^|\\W)Chrome/(\\S+)'); | |
| 70 var chromeMatch = navigator.userAgent.match(chromeRegex); | |
| 71 /** @type {number} */ | |
| 72 Help._browserVersion = parseInt(chromeMatch[1].split('.')[0], 10); | |
|
alph
2017/02/21 23:19:42
No need for double parsing. Just extract the only
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 73 } | |
| 74 return Help._browserVersion; | |
| 75 }; | |
| 76 | |
| 77 Help.ReleaseNoteView = class extends UI.VBox { | |
| 78 constructor() { | |
| 79 super(true); | |
| 80 this.registerRequiredCSS('help/releaseNote.css'); | |
| 81 this._releaseNoteElement = this._createReleaseNoteElement(Help.latestRelease Note()); | |
| 82 this.contentElement.appendChild(this._releaseNoteElement); | |
| 83 } | |
| 84 | |
| 85 /** | |
| 86 * @param {!Help.ReleaseNote} releaseNote | |
| 87 * @return {!Element} | |
| 88 */ | |
| 89 _createReleaseNoteElement(releaseNote) { | |
| 90 var container = createElementWithClass('div', 'release-note-container'); | |
| 91 insertText(container); | |
|
alph
2017/02/21 23:19:42
no need to extract these into functions. They are
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 92 insertImage(container); | |
| 93 return container; | |
| 94 | |
| 95 /** | |
| 96 * @param {!Element} container | |
| 97 */ | |
| 98 function insertText(container) { | |
| 99 var textContainer = container.createChild('div', 'release-note-text-contai ner'); | |
| 100 textContainer.createChild('div', 'release-note-header').textContent = | |
| 101 Common.UIString('New in DevTools v%d', releaseNote.version); | |
|
alph
2017/02/21 23:19:42
drop 'v'?
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 102 var highlightContainer = textContainer.createChild('ul', 'release-note-hig hlight-container'); | |
| 103 for (var highlight of releaseNote.highlights) { | |
| 104 var className = highlight.featured ? 'release-note-featured-link' : 'rel ease-note-link'; | |
| 105 var highlightLink = UI.createExternalLink(highlight.link, highlight.text , className); | |
| 106 highlightContainer.createChild('li').appendChild(highlightLink); | |
| 107 } | |
| 108 | |
| 109 var openReleaseNote = (event) => { | |
|
alph
2017/02/21 23:19:42
no need () around event
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 110 event.consume(true); | |
| 111 InspectorFrontendHost.openInNewTab(releaseNote.link); | |
| 112 }; | |
| 113 var viewMoreButton = UI.createTextButton(Common.UIString('And more...'), o penReleaseNote); | |
|
alph
2017/02/21 23:19:43
just inline the handler here. It's small.
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 114 textContainer.appendChild(viewMoreButton); | |
| 115 | |
| 116 var closeDrawerTab = (event) => { | |
| 117 event.consume(true); | |
| 118 UI.inspectorView.closeDrawerTab(Help._releaseNoteViewId, true); | |
| 119 }; | |
| 120 var closeButton = UI.createTextButton(Common.UIString('Hide'), closeDrawer Tab, 'close-release-note'); | |
|
alph
2017/02/21 23:19:42
How about name it Dismiss?
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 121 textContainer.appendChild(closeButton); | |
| 122 } | |
| 123 | |
| 124 /** | |
| 125 * @param {!Element} container | |
| 126 */ | |
| 127 function insertImage(container) { | |
| 128 var imageLink = UI.createExternalLink(releaseNote.link, ' ', 'release-note -image-container'); | |
| 129 container.appendChild(imageLink); | |
| 130 var image = imageLink.createChild('img', 'release-note-image'); | |
| 131 image.src = releaseNote.image.src; | |
| 132 image.addEventListener('mouseover', e => container.classList.add('image-ho ver')); | |
|
alph
2017/02/21 23:19:42
Can't you do this with :hover pseudo style?
chenwilliam
2017/02/22 02:36:39
I'm trying to create a selector for the featured l
| |
| 133 image.addEventListener('mouseout', e => container.classList.remove('image- hover')); | |
| 134 } | |
| 135 } | |
| 136 }; | |
| 137 | |
| 138 /** | |
| 139 * @const | |
| 140 * @type {string} | |
| 141 */ | |
| 142 Help._releaseNoteViewId = 'release-note'; | |
| 143 | |
| 144 /** @typedef {!{src: string}} */ | |
| 145 Help.ReleaseNoteImage; | |
| 146 | |
| 147 /** @typedef {!{text: string, link: string, featured: (boolean | undefined)}} */ | |
| 148 Help.ReleaseNoteHighlight; | |
| 149 | |
| 150 /** @typedef {!{version: number, highlights: !Array<!Help.ReleaseNoteHighlight>, link: string, image: !Help.ReleaseNoteImage}} */ | |
|
alph
2017/02/21 23:19:43
Please make it less than 120 columns.
chenwilliam
2017/02/22 02:36:39
Done.
| |
| 151 Help.ReleaseNote; | |
| OLD | NEW |