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

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: finalize 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 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;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698