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

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: fixes 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 = {};
6
7 /**
8 * @return {!Help.ReleaseNote}
9 */
10 Help.ReleaseNoteManager.releaseNote = function() {
dgozman 2017/02/17 22:27:03 Help.latestReleaseNote = function() {}
chenwilliam 2017/02/17 23:23:49 Done.
11 return Help.ReleaseNoteManager._releaseNote;
12 };
13
14 Help.ReleaseNoteManager.init = function() {
dgozman 2017/02/17 22:27:04 showIfNeeded
chenwilliam 2017/02/17 23:23:49 Done.
15 /** @type {!Help.ReleaseNote} */
16 Help.ReleaseNoteManager._releaseNote =
dgozman 2017/02/17 22:27:03 I'd init this lazily on the first call to latestRe
chenwilliam 2017/02/17 23:23:49 Done.
17 Help.ReleaseNoteManager._getReleaseNoteByVersion(Help.ReleaseNoteManager._ browserVersion);
18 /** @type {!Common.Setting} */
19 Help.ReleaseNoteManager._versionSetting = Common.settings.createSetting('relea seNoteVersionSeen', 0, false);
20 /** @type {number} */
21 Help.ReleaseNoteManager._browserVersion = Help.ReleaseNoteManager._getBrowserV ersion();
22
23 Help.ReleaseNoteManager._maybeShowInDrawer(
24 Help.ReleaseNoteManager._versionSetting.get(), Help.ReleaseNoteManager._br owserVersion);
25 };
26
27 /**
28 * @param {number} lastSeenVersion
29 * @param {number} browserVersion
30 * @return {?Promise<?UI.Panel>}
31 */
32 Help.ReleaseNoteManager._maybeShowInDrawer = function(lastSeenVersion, browserVe rsion) {
33 if (!Runtime.experiments.isEnabled('releaseNote'))
34 return null;
35 if (lastSeenVersion >= browserVersion)
36 return null;
37 if (Help.ReleaseNoteManager._releaseNote.version !== browserVersion)
38 return null;
39 Help.ReleaseNoteManager._versionSetting.set(Help.ReleaseNoteManager._browserVe rsion);
40 return UI.inspectorView.showPanel(Help._releaseNoteViewId);
41 };
42
43
44 /**
45 * @param {number} version
46 * @return {!Help.ReleaseNote}
47 */
48 Help.ReleaseNoteManager._getReleaseNoteByVersion = function(version) {
49 var note;
50 while (version) {
51 note = Help.releaseNotesByVersion.find(note => note.version === version);
52 if (note)
53 return note;
54 version--;
55 }
56 return Help.releaseNotesByVersion[Help.releaseNotesByVersion.length - 1];
57 };
58
59 /**
60 * @return {number}
61 */
62 Help.ReleaseNoteManager._getBrowserVersion = function() {
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 Help.ReleaseNoteView = class extends UI.VBox {
69 constructor() {
70 super(true);
71 this.registerRequiredCSS('help/releaseNote.css');
72 this._releaseNoteElement = this._createReleaseNoteElement(Help.ReleaseNoteMa nager.releaseNote());
73 this.contentElement.appendChild(this._releaseNoteElement);
74 }
75
76 /**
77 * @param {!Help.ReleaseNote} releaseNote
78 * @return {!Element}
79 */
80 _createReleaseNoteElement(releaseNote) {
81 var container = createElementWithClass('div', 'release-note-container');
82 insertText(container);
83 insertImage(container);
84 return container;
85
86 /**
87 * @param {!Element} container
88 */
89 function insertText(container) {
90 var textContainer = container.createChild('div', 'release-note-text-contai ner');
91 textContainer.createChild('div', 'release-note-header').textContent =
92 Common.UIString('New in DevTools v%d', releaseNote.version);
93 var highlightContainer = textContainer.createChild('ul', 'release-note-hig hlight-container');
94 for (var highlight of releaseNote.highlights) {
95 var className = highlight.featured ? 'release-note-featured-link' : 'rel ease-note-link';
96 var highlightLink = UI.createExternalLink(highlight.link, highlight.text , className);
97 highlightContainer.createChild('li').appendChild(highlightLink);
98 }
99
100 var openReleaseNote = (event) => {
101 event.consume(true);
102 InspectorFrontendHost.openInNewTab(releaseNote.link);
103 };
104 var viewMoreButton = UI.createTextButton(Common.UIString('And more...'), o penReleaseNote);
105 textContainer.appendChild(viewMoreButton);
106
107 var closeDrawerTab = (event) => {
108 event.consume(true);
109 UI.inspectorView.closeDrawerTab(Help._releaseNoteViewId, true);
110 };
111 var closeButton = UI.createTextButton(Common.UIString('Hide'), closeDrawer Tab, 'close-release-note');
112 textContainer.appendChild(closeButton);
113 }
114
115 /**
116 * @param {!Element} container
117 */
118 function insertImage(container) {
119 var imageLink = UI.createExternalLink(releaseNote.link, ' ', 'release-note -image-container');
120 container.appendChild(imageLink);
121 var image = imageLink.createChild('img', 'release-note-image');
122 image.src = releaseNote.image.src;
123 image.addEventListener('mouseover', e => container.classList.add('image-ho ver'));
124 image.addEventListener('mouseout', e => container.classList.remove('image- hover'));
125 }
126 }
127 };
128
129 /**
130 * @const
131 * @type {string}
132 */
133 Help._releaseNoteViewId = 'release-note';
134
135 /** @typedef {!{src: string}} */
136 Help.ReleaseNoteImage;
137
138 /** @typedef {!{text: string, link: string, featured: (boolean | undefined)}} */
139 Help.ReleaseNoteHighlight;
140
141 /** @typedef {!{version: number, highlights: !Array<!Help.ReleaseNoteHighlight>, link: string, image: !Help.ReleaseNoteImage}} */
142 Help.ReleaseNote;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698