Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(665)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/help/ReleaseNote.js

Issue 2649023007: DevTools: implement release note behind an experiment (Closed)
Patch Set: address CL comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698