PageSourceSearch

https://xyztype.com/assets/gray_matter/interfaces/account-57c3a61e…9b01e61e4ed95cba81be189f44a88641d478a451.js

js xyztype.com collected 2026-09-25 04:25:15 UTC 4,261 bytes, 127 lines download raw bytes

1// Copyright (c) 2021-2025 GrayBits LLC
2
3import _ from 'lodash'
4import axios from 'axios'
5import Errors from 'gray_matter/forms/errors'
6import * as DestroyItem from 'gray_matter/utility/destroy_item'
7import * as Notification from 'gray_matter/utility/notification'
8
9let enable_two_factor_authentication;
10let reset_secret;
11let reset_user_font_size;
12let user_font_size;
13let disable_two_factor;
14let form, errors;
15let user_country;
16let user_time_zone;
17
18export function init(){
19  form = document.querySelector('form.account_form');
20
21  if (form){
22    errors = new Errors(form, document.querySelector('.form_errors'));  
23    form.addEventListener('submit', updateAccount);
24
25    user_country = document.querySelector('.field_wrapper[data-attribute="country"] select');
26    user_country.addEventListener('change', updateCountry);
27    user_time_zone = document.querySelector('.field_wrapper[data-attribute="time_zone"] select');
28    user_time_zone.addEventListener('change', updateTimeZone);
29  }
30  if (document.getElementById('two_factor_authentication')){
31    enable_two_factor_authentication = document.getElementById('enable_two_factor_authentication');
32    if (enable_two_factor_authentication){
33      enable_two_factor_authentication.addEventListener('click', enableTwoFactorAuthentication);
34    }
35
36    reset_secret = document.getElementById('reset_secret');
37    if (reset_secret){
38      reset_secret.addEventListener('click', enableTwoFactorAuthentication);
39    }
40
41    disable_two_factor = document.getElementById('disable_two_factor');
42    if (disable_two_factor){
43      disable_two_factor.addEventListener('click', disableTwoFactorAuthentication);
44    }
45  }
46  reset_user_font_size = document.getElementById('reset_user_font_size');
47  if (reset_user_font_size){
48    user_font_size = document.getElementById('user_font_size');
49    user_font_size.addEventListener('input', _.debounce(() => setFontSize(), 400));
50    reset_user_font_size.addEventListener('click', resetFontSize);
51  }
52}
53
54async function updateTimeZone(){
55  const response = await axios.put(`/${document.body.dataset.prefix}/account/update_time_zone`, { time_zone: user_time_zone.value });
56}
57
58async function updateCountry(){
59  const response = await axios.put(`/${document.body.dataset.prefix}/account/update_country`, { country: user_country.value });
60
61  user_time_zone.innerHTML = response.data.options;
62}
63
64function updateFontSize(){
65  let font_size = user_font_size.value;
66  document.querySelector('html').style.fontSize = font_size + 'vw';
67  return font_size;
68}
69
70async function setFontSize(){
71  const response = await axios.put(`/${document.body.dataset.prefix}/account/settings/font_size`, { value: updateFontSize() });
72}
73
74function resetFontSize(){
75  user_font_size.value = 1.08;
76  setFontSize();
77}
78
79async function updateAccount(e){
80  e.preventDefault();
81  errors.clear();
82  try{
83    const response = await axios.put(form.action, new FormData(form));
84    Notification.showNotification('Successfully updated your account.');
85    document.getElementById('user_name').innerHTML = response.data.name;
86  } catch(error){ 
87    if (error.response){
88      errors.show(error.response.data);
89    } else {
90      Notification.showResponseError(error);
91    }
92  }
93}
94
95async function enableTwoFactorAuthentication(e){
96  e.stopPropagation();
97  e.preventDefault();
98
99  try{
100    const response = await axios.post(this.href);
101    document.getElementById('two_factor_authentication').innerHTML = response.data.two_factor;
102    document.body.insertAdjacentHTML('beforeend', response.data.secret);
103    document.getElementById('close_secret').addEventListener('click', closeSecret);
104    let secret = document.getElementById('authentication_secret');
105    secret.offsetHeight;
106    secret.classList.remove('poppedout');
107    init();
108  } catch(error) {
109    Notification.showResponseError(error);
110  }
111}
112
113async function disableTwoFactorAuthentication(e){
114  e.stopPropagation();
115  e.preventDefault();
116  try{
117    const response = await axios.post(this.href);
118    document.getElementById('two_factor_authentication').innerHTML = response.data.two_factor;
119    init();
120  } catch(error) {
121    Notification.showResponseError(error);
122  }
123}
124
125function closeSecret(){
126  DestroyItem.remove(document.getElementById('authentication_secret'));
127};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.