openethereum/js/packages/dapp-accounts/CreateAccount/print.js

71 lines
1.9 KiB
JavaScript
Raw Normal View History

// Copyright 2015-2017 Parity Technologies (UK) Ltd.
2016-11-30 19:58:52 +01:00
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
export const onPrint = (window, cb) => {
let called = false;
let query;
let queryFn;
2016-11-30 19:58:52 +01:00
const onPrint = () => {
if (queryFn) {
query.removeListener(queryFn);
}
2016-11-30 19:58:52 +01:00
window.removeEventListener('afterprint', onPrint, false);
2016-11-30 19:58:52 +01:00
if (!called) {
called = true;
cb();
}
};
if (window.matchMedia) {
queryFn = (query) => {
if (!query.matches) {
onPrint();
}
};
2016-11-30 19:58:52 +01:00
query = window.matchMedia('print');
query.addListener(queryFn);
}
2016-11-30 19:58:52 +01:00
window.addEventListener('afterprint', onPrint, false);
};
export default (html) => {
const iframe = document.createElement('iframe');
2016-11-30 19:58:52 +01:00
iframe.setAttribute('sandbox', 'allow-modals allow-same-origin allow-scripts');
iframe.setAttribute('src', '/');
iframe.setAttribute('style', 'display: none');
document.body.appendChild(iframe);
const teardown = () => {
// Safari crashes without a timeout.
setTimeout(() => document.body.removeChild(iframe), 0);
};
setTimeout(() => {
iframe.contentDocument.write(html);
2016-11-30 20:42:22 +01:00
setTimeout(() => {
onPrint(iframe.contentWindow, teardown);
iframe.contentWindow.focus();
iframe.contentWindow.print();
}, 20);
2016-11-30 19:58:52 +01:00
}, 0);
};