Skip to content

Commit 8862943

Browse files
authored
Fixed raw css, copy via clipboard API (#61)
* Fixed raw css, copy via clipboard API * Fixed lints * Moved flash message to the right bottom corner * CHANGELOG * Flash message refactored * Flash message refactored v2 * Flash message refactored v3
1 parent 61faeeb commit 8862943

File tree

6 files changed

+42
-68
lines changed

6 files changed

+42
-68
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.9.1 (08-11-2020)
2+
3+
* Fixed `raw` mode css
4+
* Improved raw copy to clipboard performance
5+
* Flash message moved to the right bottom corner
6+
17
## 1.9.0 (07-11-2020)
28

39
* "Download JSON" button

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jsondiscovery",
3-
"version": "1.9.0",
3+
"version": "1.9.1",
44
"description": "DiscoveryJson",
55
"author": "[email protected]",
66
"license": "MIT",

src/content/index.css

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ table, caption, th, td, tr {
1919
.view-raw {
2020
word-wrap: break-word;
2121
white-space: pre-wrap;
22+
word-break: break-all;
2223
}
2324

2425
.view-fieldset {
@@ -40,9 +41,9 @@ table, caption, th, td, tr {
4041
line-height: 34px;
4142
}
4243

43-
.view-flash-message {
44+
.flash-messages-container {
4445
position: fixed;
45-
top: 20px;
46+
bottom: 20px;
4647
right: 20px;
4748
}
4849

src/content/init.js

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export function init(getSettings) {
7575
* @returns {Discovery}
7676
*/
7777
export function initDiscovery(options) {
78-
const { Widget, router, complexViews } = require('@discoveryjs/discovery/dist/discovery.umd.js');
78+
const { Widget, router, complexViews, utils } = require('@discoveryjs/discovery/dist/discovery.umd.js');
7979
const settingsPage = require('../settings').default;
8080
const isolateStyleMarker = require('./index.css');
8181

@@ -89,6 +89,22 @@ export function initDiscovery(options) {
8989
discovery.apply(router);
9090
discovery.apply(complexViews);
9191

92+
discovery.flashMessagesContainer = utils.createElement('div', 'flash-messages-container');
93+
discovery.dom.container.append(discovery.flashMessagesContainer);
94+
discovery.flashMessage = (text, type) => {
95+
const fragment = document.createDocumentFragment();
96+
97+
discovery.view.render(fragment, {
98+
view: `alert-${type}`,
99+
content: 'text'
100+
}, text).then(() => {
101+
const el = fragment.firstChild;
102+
103+
discovery.flashMessagesContainer.append(el);
104+
setTimeout(() => el.remove(), 750);
105+
});
106+
};
107+
92108
settingsPage(discovery);
93109

94110
discovery.page.define('default', [
@@ -105,9 +121,7 @@ export function initDiscovery(options) {
105121
el.textContent = raw;
106122
}, { tag: 'pre' });
107123

108-
discovery.page.define('raw', [{
109-
view: 'raw'
110-
}]);
124+
discovery.page.define('raw', 'raw');
111125

112126
discovery.nav.append({
113127
content: 'text:"Index"',
@@ -141,22 +155,16 @@ export function initDiscovery(options) {
141155
});
142156
discovery.nav.append({
143157
content: 'text:"Copy raw"',
144-
onClick: function() {
158+
onClick: async function() {
145159
const { raw } = discovery.context;
146-
const div = document.createElement('div');
147-
div.innerHTML = raw;
148-
const rawText = div.textContent;
149-
const el = document.createElement('textarea');
150-
el.value = rawText;
151-
document.body.appendChild(el);
152-
el.select();
153-
document.execCommand('copy');
154-
document.body.removeChild(el);
155-
156-
this.textContent = 'Copied!';
157-
setTimeout(() => {
158-
this.textContent = 'Copy raw';
159-
}, 700);
160+
161+
try {
162+
await navigator.clipboard.writeText(raw);
163+
} catch (err) {
164+
console.error(err); // eslint-disable-line no-console
165+
}
166+
167+
discovery.flashMessage('Copied!', 'success');
160168
},
161169
when: () => {
162170
if (discovery.pageId === 'raw') {

src/settings.js

Lines changed: 4 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,6 @@ export default discovery => {
2222
discovery.view.render(el, content, data, context);
2323
});
2424

25-
discovery.view.define('flash-message', function(el, config) {
26-
const { message } = config;
27-
const { text, type } = message;
28-
const view = 'alert' + (type ? `-${type}` : '');
29-
30-
discovery.view.render(el, {
31-
view,
32-
content: 'text:"' + text + '"'
33-
});
34-
});
35-
3625
let detachToggleDarkMode = () => {};
3726

3827
const modifiers = [
@@ -81,7 +70,7 @@ export default discovery => {
8170
].map(content => ({ view: 'fieldset', content }));
8271

8372
discovery.page.define('settings', function(el, data, context) {
84-
const { settings, message } = context;
73+
const { settings } = context;
8574

8675
discovery.view.render(el, [
8776
'h1:"Settings"',
@@ -97,13 +86,8 @@ export default discovery => {
9786
}
9887
}
9988
]
100-
},
101-
{
102-
view: 'flash-message',
103-
when: 'message',
104-
message
10589
}
106-
], { message }, settings);
90+
], {}, settings);
10791
});
10892

10993
/**
@@ -120,37 +104,12 @@ export default discovery => {
120104
safari.extension.dispatchMessage('setSettings', settings);
121105
}
122106

123-
flashMessage({ settings }, 'Options saved.', 'success');
107+
discovery.flashMessage('Options saved.', 'success');
124108
} else {
125-
flashMessage({ settings }, errors.join(' '), 'danger');
109+
discovery.flashMessage(errors.join(' '), 'danger');
126110
}
127111
}
128112

129-
/**
130-
* Creates flash info-message
131-
* @param {Object} data
132-
* @param {string} text
133-
* @param {string} type
134-
*/
135-
function flashMessage(data, text, type) {
136-
const message = {
137-
text,
138-
type
139-
};
140-
141-
discovery.setData(
142-
discovery.data,
143-
Object.assign(discovery.context, data, { message })
144-
);
145-
146-
setTimeout(() => {
147-
discovery.setData(
148-
discovery.data,
149-
Object.assign(discovery.context, data, { message: null })
150-
);
151-
}, 750);
152-
}
153-
154113
/**
155114
* Validates settings
156115
* @param {Object} settings

0 commit comments

Comments
 (0)