PageSourceSearch

https://spacefarmers.io/assets/controllers/app_controller-f30b40b7…ba880867db8829f07a1832782c240c6d25966c6d.js

js spacefarmers.io collected 2026-10-07 22:07:47 UTC 5,109 bytes, 158 lines download raw bytes

1import {
2  Controller
3} from "@hotwired/stimulus"
4import consumer from 'channels/consumer';
5
6export default class extends Controller {
7  connect() {
8    var $this = this
9    initTheme();
10    initTimeFormat();
11    windowLoadContent();
12    disableDropdownTabEvents();
13    document.addEventListener("turbo:before-fetch-request", function (e) {
14      document.getElementById('loading-spinner').classList.remove('d-none');
15    });
16    document.addEventListener("turbo:frame-render", function (e) {
17      document.getElementById('loading-spinner').classList.add('d-none');
18    });
19    this.alertTimeout = undefined;
20    document.addEventListener("turbo:before-fetch-response", function (e) {
21      const alertBox = document.getElementById('alertBox');
22      if (e.detail.fetchResponse.response.status == 429) {
23        e.preventDefault();
24        $this.showAlertBox('The website is busy or you have been temporarily rate limited. Please try again in a few moments.');
25      } else if (e.detail.fetchResponse.response.status == 500) {
26        e.preventDefault();
27        $this.showAlertBox('The server has encountered an error (500). Please try again later.');
28      }
29    });
30    this.connectToPoolChannel();
31    this.connectToNewsChannel();
32    document.getElementById('newsDropdown').addEventListener('show.bs.dropdown', function () {
33      $this.setNewsSeen();
34    });
35  }
36
37  disconnect() {
38    this.poolChannel.unsubscribe();
39    this.newsChannel.unsubscribe();
40  }
41
42  showAlertBox(text) {
43    if (this.alertTimeout) {
44      clearTimeout(this.alertTimeout);
45    }
46    const alertBoxText = document.getElementById('alertBoxText');
47    alertBoxText.innerHTML = text;
48    alertBox.classList.remove('d-none');
49    this.alertTimeout = setTimeout(() => {
50      alertBox.classList.add('d-none');
51    }, 10000);
52    document.getElementById('loading-spinner').classList.add('d-none');
53  }
54
55  connectToPoolChannel() {
56    this.poolChannel = consumer.subscriptions.create({
57      channel: "PoolChannel"
58    }, {
59      received: this._poolCableReceived.bind(this),
60    });
61  }
62
63  connectToNewsChannel() {
64    this.newsChannel = consumer.subscriptions.create({
65      channel: "NewsChannel"
66    }, {
67      received: this._newsCableReceived.bind(this),
68    });
69  }
70
71  _poolCableReceived(data) {
72    const timeDiffMsec = timeDiff(data.utc_time);
73    if (timeDiffMsec > 20000) {
74      document.getElementById('time-diff-dropdown').classList.remove('d-none');
75      document.getElementById('time-difference').innerHTML = Math.round(timeDiffMsec / 1000);
76    } else {
77      document.getElementById('time-diff-dropdown').classList.add('d-none');
78    }
79    let poolSize = data.pool_size;
80    let poolSizeUnit = 'TiB'
81    if (poolSize >= 1024) {
82      poolSize = poolSize / 1024
83      poolSizeUnit = 'PiB'
84    }
85    var elements = document.getElementsByClassName("pool-size");
86    Array.from(elements).forEach(function (el) {
87      el.innerHTML = poolSize.toFixed(2);
88    });
89    var elements = document.getElementsByClassName("pool-size-unit");
90    Array.from(elements).forEach(function (el) {
91      el.innerHTML = poolSizeUnit;
92    });
93    var elements = document.getElementsByClassName("xch-usd");
94    Array.from(elements).forEach(function (el) {
95      el.innerHTML = data.xch_usd;
96    });
97  }
98
99  _newsCableReceived(data) {
100    document.getElementById('newsList').reload();
101  }
102
103  toggleHeaderTicker() {
104    var elements = document.getElementsByClassName("header-ticker");
105    Array.from(elements).forEach(function (el) {
106      console.log(el);
107      el.classList.toggle('d-md-block');
108      el.classList.toggle('d-none');
109    });
110  }
111
112  toggleNewsBody(event) {
113    event.stopPropagation();
114    const parentElement = event.target.closest('.news-item');
115    const newsDropdown = parentElement.querySelector('.news-dropdown');
116    const newsBody = parentElement.querySelector('.news-body');
117    if (newsDropdown != null) {
118      newsDropdown.classList.toggle('bx-chevron-down');
119      newsDropdown.classList.toggle('bx-chevron-up');
120      newsBody.classList.toggle('d-none');
121    }
122  }
123
124  setNewsSeen() {
125    const currentTimestamp = Date.UTC(
126      new Date().getUTCFullYear(),
127      new Date().getUTCMonth(),
128      new Date().getUTCDate(),
129      new Date().getUTCHours(),
130      new Date().getUTCMinutes(),
131      new Date().getUTCSeconds(),
132      new Date().getUTCMilliseconds()
133    );
134    localStorage.setItem("newsTimestamp", Math.floor(currentTimestamp / 1000));
135    this.newsCounter();
136  }
137
138  newsCounter() {
139    var newsTimestamp = localStorage.getItem("newsTimestamp") || 0;
140    const elements = document.getElementsByClassName('news-item');
141    var count = 0;
142    for (let i = 0; i < elements.length; i++) {
143      const timestamp = parseInt(elements[i].getAttribute('data-timestamp'));
144      if (timestamp > newsTimestamp) {
145        count = count + 1;
146      }
147    }
148
149    const newsCounter = document.getElementById('newsCounter')
150    if (count > 0) {
151      newsCounter.classList.remove('d-none');
152      newsCounter.innerHTML = count
153    } else {
154      newsCounter.classList.add('d-none');
155    }
156    convertUTCTime();
157  }
158};

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.