SC CODE: Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "ui.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "1ed6cf57c7ed37eeabeeaa549bf6ab71b0fac70c4d5f635701867a559ff5c58b")
37 STORE("fileCheckS", "06e865ac46ecbf92e6bd1ed5904f25f760079dd917419938025c2ad85cf51dc8")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// DERO Explorer v2.0 - UI Module (UI Helpers, Search)
(function() {
'use strict';
var D = window.DeroExplorer;
var U = D.utils;
var R = D.router;
var S = D.state;
var M = D.modules;
// UI Helpers
var UI = {
updateStatus: function(type, status, label) {
var dot = document.getElementById(type + '-dot');
var lbl = document.getElementById(type + '-label');
if (dot) dot.className = 'status-dot ' + status;
if (lbl) lbl.textContent = label;
},
showLoading: function(target, msg) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="loading-state"><div class="loading-spinner"></div><span>' + (msg || 'Loading...') + '</span></div>';
},
showError: function(target, title, msg) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="error-state"><div class="error-icon">!</div><h3>' + U.escHtml(title) + '</h3>' + (msg ? '<p>' + U.escHtml(msg) + '</p>' : '') + '<button class="btn btn-ghost" onclick="location.reload()">Retry</button></div>';
},
showEmpty: function(target, msg, icon) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="empty-state"><div class="empty-icon">' + (icon || '*') + '</div><p>' + U.escHtml(msg) + '</p></div>';
},
statCard: function(o) {
return '<div class="stat-card"><div class="stat-icon">' + o.icon + '</div><div class="stat-value">' + U.escHtml(o.value) + '</div><div class="stat-label">' + U.escHtml(o.label) + '</div>' + (o.delta ? '<div class="stat-delta">' + U.escHtml(o.delta) + '</div>' : '') + '</div>';
},
sectionHeader: function(o) {
return '<div class="section-header"><div class="section-header-left"><span class="section-icon">' + o.icon + '</span><span class="section-title">' + U.escHtml(o.title) + '</span></div><div class="section-header-right">' + (o.meta ? '<span class="section-meta">' + U.escHtml(o.meta) + '</span>' : '') + (o.badge ? '<span class="badge ' + o.badge.class + '">' + U.escHtml(o.badge.text) + '</span>' : '') + '</div></div>';
},
detailRow: function(label, value, opts) {
opts = opts || {};
var copyIcon = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>';
return '<div class="detail-row"><span class="detail-label">' + U.escHtml(label) + '</span><span class="detail-value' + (opts.mono ? ' mono' : '') + '">' + U.escHtml(value) + (opts.copyable ? '<button class="copy-btn" onclick="navigator.clipboard.writeText(\'' + value + '\')" title="Copy">' + copyIcon + '</button>' : '') + '</span></div>';
},
toast: function(msg, type) {
var t = document.createElement('div');
t.className = 'toast toast-' + (type || 'info');
t.textContent = msg;
var c = document.getElementById('toast-container');
if (!c) { c = document.createElement('div'); c.id = 'toast-container'; c.style.cssText = 'position:fixed;bottom:20px;right:20px;z-index:9999;'; document.body.appendChild(c); }
c.appendChild(t);
setTimeout(function() { t.style.opacity = '0'; setTimeout(function() { t.remove(); }, 300); }, 3000);
}
};
// Search
var Search = {
detectType: function(q) {
if (!q) return 'empty';
q = q.trim();
if (U.isNumeric(q)) return 'height';
if (U.isValidHash(q)) return 'hash';
if (q.includes('.tela')) return 'tela';
return 'unknown';
},
perform: async function(q) {
if (!q || !q.trim()) return;
var type = this.detectType(q);
S.searchQuery = q;
switch (type) {
case 'height': R.goToBlock(parseInt(q)); break;
case 'hash': await this.searchHash(q); break;
case 'tela': UI.toast('TELA name resolution coming soon', 'info'); break;
default: UI.toast('Unknown search format', 'warning');
}
},
searchHash: async function(hash) {
var conn = M.get('connectivity');
if (!conn) { UI.toast('Connectivity not loaded', 'error'); return; }
UI.toast('Searching...', 'info');
try {
var tx = await conn.getTransaction(hash);
if (tx && tx.txid) { R.goToTx(hash); return; }
} catch (e) {}
try {
var sc = await conn.getSmartContract(hash);
if (sc && sc.code) { R.goToSC(hash); return; }
} catch (e) {}
UI.toast('Hash not found as TX or SC', 'warning');
}
};
// Attach to DeroExplorer
D.ui = UI;
D.search = Search;
// Search handler
window.handleSearch = function(e) {
if (e.key === 'Enter') Search.perform(document.getElementById('search-input').value);
};
})();
*/ |
| SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "ui.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "1ed6cf57c7ed37eeabeeaa549bf6ab71b0fac70c4d5f635701867a559ff5c58b")
37 STORE("fileCheckS", "06e865ac46ecbf92e6bd1ed5904f25f760079dd917419938025c2ad85cf51dc8")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// DERO Explorer v2.0 - UI Module (UI Helpers, Search)
(function() {
'use strict';
var D = window.DeroExplorer;
var U = D.utils;
var R = D.router;
var S = D.state;
var M = D.modules;
// UI Helpers
var UI = {
updateStatus: function(type, status, label) {
var dot = document.getElementById(type + '-dot');
var lbl = document.getElementById(type + '-label');
if (dot) dot.className = 'status-dot ' + status;
if (lbl) lbl.textContent = label;
},
showLoading: function(target, msg) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="loading-state"><div class="loading-spinner"></div><span>' + (msg || 'Loading...') + '</span></div>';
},
showError: function(target, title, msg) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="error-state"><div class="error-icon">!</div><h3>' + U.escHtml(title) + '</h3>' + (msg ? '<p>' + U.escHtml(msg) + '</p>' : '') + '<button class="btn btn-ghost" onclick="location.reload()">Retry</button></div>';
},
showEmpty: function(target, msg, icon) {
var el = typeof target === 'string' ? document.getElementById(target) : target;
if (!el) return;
el.innerHTML = '<div class="empty-state"><div class="empty-icon">' + (icon || '*') + '</div><p>' + U.escHtml(msg) + '</p></div>';
},
statCard: function(o) {
return '<div class="stat-card"><div class="stat-icon">' + o.icon + '</div><div class="stat-value">' + U.escHtml(o.value) + '</div><div class="stat-label">' + U.escHtml(o.label) + '</div>' + (o.delta ? '<div class="stat-delta">' + U.escHtml(o.delta) + '</div>' : '') + '</div>';
},
sectionHeader: function(o) {
return '<div class="section-header"><div class="section-header-left"><span class="section-icon">' + o.icon + '</span><span class="section-title">' + U.escHtml(o.title) + '</span></div><div class="section-header-right">' + (o.meta ? '<span class="section-meta">' + U.escHtml(o.meta) + '</span>' : '') + (o.badge ? '<span class="badge ' + o.badge.class + '">' + U.escHtml(o.badge.text) + '</span>' : '') + '</div></div>';
},
detailRow: function(label, value, opts) {
opts = opts || {};
var copyIcon = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>';
return '<div class="detail-row"><span class="detail-label">' + U.escHtml(label) + '</span><span class="detail-value' + (opts.mono ? ' mono' : '') + '">' + U.escHtml(value) + (opts.copyable ? '<button class="copy-btn" onclick="navigator.clipboard.writeText(\'' + value + '\')" title="Copy">' + copyIcon + '</button>' : '') + '</span></div>';
},
toast: function(msg, type) {
var t = document.createElement('div');
t.className = 'toast toast-' + (type || 'info');
t.textContent = msg;
var c = document.getElementById('toast-container');
if (!c) { c = document.createElement('div'); c.id = 'toast-container'; c.style.cssText = 'position:fixed;bottom:20px;right:20px;z-index:9999;'; document.body.appendChild(c); }
c.appendChild(t);
setTimeout(function() { t.style.opacity = '0'; setTimeout(function() { t.remove(); }, 300); }, 3000);
}
};
// Search
var Search = {
detectType: function(q) {
if (!q) return 'empty';
q = q.trim();
if (U.isNumeric(q)) return 'height';
if (U.isValidHash(q)) return 'hash';
if (q.includes('.tela')) return 'tela';
return 'unknown';
},
perform: async function(q) {
if (!q || !q.trim()) return;
var type = this.detectType(q);
S.searchQuery = q;
switch (type) {
case 'height': R.goToBlock(parseInt(q)); break;
case 'hash': await this.searchHash(q); break;
case 'tela': UI.toast('TELA name resolution coming soon', 'info'); break;
default: UI.toast('Unknown search format', 'warning');
}
},
searchHash: async function(hash) {
var conn = M.get('connectivity');
if (!conn) { UI.toast('Connectivity not loaded', 'error'); return; }
UI.toast('Searching...', 'info');
try {
var tx = await conn.getTransaction(hash);
if (tx && tx.txid) { R.goToTx(hash); return; }
} catch (e) {}
try {
var sc = await conn.getSmartContract(hash);
if (sc && sc.code) { R.goToSC(hash); return; }
} catch (e) {}
UI.toast('Hash not found as TX or SC', 'warning');
}
};
// Attach to DeroExplorer
D.ui = UI;
D.search = Search;
// Search handler
window.handleSearch = function(e) {
if (e.key === 'Enter') Search.perform(document.getElementById('search-input').value);
};
})();
*/'] |