109 lines
4.8 KiB
JavaScript
109 lines
4.8 KiB
JavaScript
// ==================== ПОДЕЛИТЬСЯ МИРОМ ====================
|
|
import { state } from '../core/state.js';
|
|
import { isTgWebApp } from './start-menu.js';
|
|
import { showToast } from './start-menu.js';
|
|
|
|
export function initShare() {
|
|
// Keep worldId click-to-copy as before
|
|
const worldIdEl = document.getElementById('worldId');
|
|
if (worldIdEl) {
|
|
worldIdEl.onclick = () => shareWorld();
|
|
}
|
|
}
|
|
|
|
export function shareWorld() {
|
|
const shareUrl = new URL(window.location.href);
|
|
shareUrl.searchParams.set('world', state.worldId);
|
|
const url = shareUrl.toString();
|
|
|
|
// In Telegram WebApp — use native share
|
|
if (isTgWebApp && window.Telegram && window.Telegram.WebApp && window.Telegram.WebApp.switchInlineQuery) {
|
|
const inviteUrl = 'https://t.me/' + (state.TELEGRAM_BOT_USERNAME || 'grechka_mkn8n_bot') + '/app?startapp=' + encodeURIComponent(state.worldId);
|
|
Telegram.WebApp.openTelegramLink(
|
|
'https://t.me/share/url?url=' + encodeURIComponent(inviteUrl) +
|
|
'&text=' + encodeURIComponent('🏗️ Заходи в GrechkaCraft! Код мира: ' + state.worldId)
|
|
);
|
|
return;
|
|
}
|
|
|
|
// Otherwise — show custom modal with URL + copy button
|
|
const overlay = document.createElement('div');
|
|
overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);z-index:100000;display:flex;align-items:center;justify-content:center;';
|
|
|
|
const box = document.createElement('div');
|
|
box.style.cssText = 'background:#C6C6C6;border:4px solid #000;padding:20px;max-width:400px;width:90%;box-shadow:4px 4px 0 #000;font-family:Courier New,monospace;';
|
|
|
|
const title = document.createElement('div');
|
|
title.textContent = '📤 Пригласить друзей';
|
|
title.style.cssText = 'font-size:18px;font-weight:bold;margin-bottom:12px;color:#222;';
|
|
box.appendChild(title);
|
|
|
|
const codeLabel = document.createElement('div');
|
|
codeLabel.style.cssText = 'font-size:13px;color:#444;font-weight:bold;margin-bottom:4px;';
|
|
codeLabel.textContent = 'Код мира:';
|
|
box.appendChild(codeLabel);
|
|
|
|
const codeBox = document.createElement('div');
|
|
codeBox.style.cssText = 'font-size:20px;font-weight:bold;background:#fff;border:3px solid #000;padding:8px 12px;margin-bottom:12px;letter-spacing:2px;text-align:center;color:#5A8F3C;';
|
|
codeBox.textContent = state.worldId;
|
|
box.appendChild(codeBox);
|
|
|
|
const linkLabel = document.createElement('div');
|
|
linkLabel.style.cssText = 'font-size:13px;color:#444;font-weight:bold;margin-bottom:4px;';
|
|
linkLabel.textContent = 'Ссылка:';
|
|
box.appendChild(linkLabel);
|
|
|
|
const linkBox = document.createElement('input');
|
|
linkBox.type = 'text';
|
|
linkBox.readOnly = true;
|
|
linkBox.value = url;
|
|
linkBox.style.cssText = 'width:100%;padding:8px;font-family:Courier New,monospace;font-size:13px;background:#fff;border:3px solid #000;color:#222;margin-bottom:12px;box-sizing:border-box;';
|
|
linkBox.onclick = () => linkBox.select();
|
|
box.appendChild(linkBox);
|
|
|
|
const btnRow = document.createElement('div');
|
|
btnRow.style.cssText = 'display:flex;gap:8px;';
|
|
|
|
const btnCopy = document.createElement('button');
|
|
btnCopy.textContent = '📋 Скопировать';
|
|
btnCopy.style.cssText = 'flex:1;padding:10px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#5A8F3C;color:#fff;box-shadow:2px 2px 0 #000;';
|
|
btnCopy.onclick = () => {
|
|
navigator.clipboard.writeText(url).then(() => {
|
|
showToast('📋 Ссылка скопирована!');
|
|
overlay.remove();
|
|
}).catch(() => {
|
|
linkBox.select();
|
|
document.execCommand('copy');
|
|
showToast('📋 Ссылка скопирована!');
|
|
overlay.remove();
|
|
});
|
|
};
|
|
btnRow.appendChild(btnCopy);
|
|
|
|
const btnCode = document.createElement('button');
|
|
btnCode.textContent = '📋 Код';
|
|
btnCode.style.cssText = 'padding:10px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#3C5F9E;color:#fff;box-shadow:2px 2px 0 #000;';
|
|
btnCode.onclick = () => {
|
|
navigator.clipboard.writeText(state.worldId).then(() => {
|
|
showToast('📋 Код скопирован: ' + state.worldId);
|
|
}).catch(() => {
|
|
showToast('Код: ' + state.worldId);
|
|
});
|
|
};
|
|
btnRow.appendChild(btnCode);
|
|
|
|
const btnClose = document.createElement('button');
|
|
btnClose.textContent = '✕';
|
|
btnClose.style.cssText = 'padding:10px 14px;font-family:Courier New,monospace;font-weight:bold;cursor:pointer;border:3px solid #000;background:#9E2B2B;color:#fff;box-shadow:2px 2px 0 #000;';
|
|
btnClose.onclick = () => overlay.remove();
|
|
btnRow.appendChild(btnClose);
|
|
|
|
box.appendChild(btnRow);
|
|
overlay.appendChild(box);
|
|
|
|
// Close on click outside box
|
|
overlay.onclick = (e) => { if (e.target === overlay) overlay.remove(); };
|
|
|
|
document.body.appendChild(overlay);
|
|
}
|