57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
import computed from "ember-addons/ember-computed-decorators";
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
|
|
function b64EncodeUnicode(str) {
|
|
return btoa(
|
|
encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function toSolidBytes(
|
|
match,
|
|
p1
|
|
) {
|
|
return String.fromCharCode("0x" + p1);
|
|
})
|
|
);
|
|
}
|
|
|
|
export default Ember.Component.extend({
|
|
classNames: ["backup-codes"],
|
|
backupCodes: null,
|
|
|
|
click(event) {
|
|
if (event.target.id === "backupCodes") {
|
|
this._selectAllBackupCodes();
|
|
}
|
|
},
|
|
|
|
didRender() {
|
|
this._super(...arguments);
|
|
|
|
const backupCodes = this.element.querySelector("#backupCodes");
|
|
if (backupCodes) {
|
|
backupCodes.style.height = backupCodes.scrollHeight;
|
|
}
|
|
},
|
|
|
|
@computed("formattedBackupCodes")
|
|
base64BackupCode: b64EncodeUnicode,
|
|
|
|
@computed("backupCodes")
|
|
formattedBackupCodes(backupCodes) {
|
|
if (!backupCodes) return null;
|
|
|
|
return backupCodes.join("\n").trim();
|
|
},
|
|
|
|
actions: {
|
|
copyToClipboard() {
|
|
this._selectAllBackupCodes();
|
|
this.copyBackupCode(document.execCommand("copy"));
|
|
}
|
|
},
|
|
|
|
_selectAllBackupCodes() {
|
|
const textArea = this.element.querySelector("#backupCodes");
|
|
textArea.focus();
|
|
textArea.setSelectionRange(0, this.formattedBackupCodes.length);
|
|
}
|
|
});
|