Spaces:
Running
Running
File size: 9,645 Bytes
70538d6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Print Specifications Generator</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
.output-box {
min-height: 300px;
white-space: pre-wrap;
font-family: monospace;
}
.copy-btn {
transition: all 0.2s;
}
.copy-btn:hover {
transform: translateY(-2px);
}
.copy-btn:active {
transform: translateY(0);
}
</style>
</head>
<body class="bg-gray-50">
<div class="container mx-auto px-4 py-8 max-w-4xl">
<h1 class="text-3xl font-bold text-center mb-6 text-gray-800">Print Specifications Generator</h1>
<div class="bg-white rounded-lg shadow-md p-6 mb-8">
<div class="mb-4">
<label for="bookText" class="block text-sm font-medium text-gray-700 mb-2">Paste Book Text:</label>
<textarea id="bookText" rows="10" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500"></textarea>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<div>
<label for="printRun" class="block text-sm font-medium text-gray-700 mb-2">Print Run (copies):</label>
<input type="number" id="printRun" min="1" value="100" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
</div>
<div>
<label for="formatSize" class="block text-sm font-medium text-gray-700 mb-2">Format Size:</label>
<select id="formatSize" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500">
<option value="A5">A5 (148×210 mm)</option>
<option value="A4">A4 (210×297 mm)</option>
<option value="B5">B5 (176×250 mm)</option>
<option value="custom">Custom</option>
</select>
</div>
</div>
<div class="mb-4">
<label class="inline-flex items-center">
<input type="checkbox" id="hasImages" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-offset-0 focus:ring-indigo-200 focus:ring-opacity-50">
<span class="ml-2 text-sm text-gray-700">Contains images/illustrations</span>
</label>
</div>
<div class="flex justify-center">
<button id="generateBtn" class="px-6 py-3 bg-indigo-600 text-white font-medium rounded-md shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
Generate Print Specs
</button>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="bg-white rounded-lg shadow-md p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-semibold text-gray-800">Russian Version</h2>
<button onclick="copyToClipboard('russianOutput')" class="copy-btn px-3 py-1 bg-gray-100 text-gray-700 text-sm rounded hover:bg-gray-200">
Copy Text
</button>
</div>
<div id="russianOutput" class="output-box p-3 border border-gray-200 rounded bg-gray-50 text-gray-800 overflow-auto"></div>
</div>
<div class="bg-white rounded-lg shadow-md p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-semibold text-gray-800">Chinese Version</h2>
<button onclick="copyToClipboard('chineseOutput')" class="copy-btn px-3 py-1 bg-gray-100 text-gray-700 text-sm rounded hover:bg-gray-200">
Copy Text
</button>
</div>
<div id="chineseOutput" class="output-box p-3 border border-gray-200 rounded bg-gray-50 text-gray-800 overflow-auto"></div>
</div>
</div>
</div>
<script>
document.getElementById('generateBtn').addEventListener('click', generatePrintSpecs);
function generatePrintSpecs() {
const bookText = document.getElementById('bookText').value;
const printRun = document.getElementById('printRun').value;
const formatSize = document.getElementById('formatSize').value;
const hasImages = document.getElementById('hasImages').checked;
if (!bookText.trim()) {
alert('Please paste the book text');
return;
}
// Calculate word count and pages
const wordCount = bookText.trim().split(/\s+/).length;
let wordsPerPage;
switch(formatSize) {
case 'A5': wordsPerPage = 280; break;
case 'A4': wordsPerPage = 500; break;
case 'B5': wordsPerPage = 350; break;
default: wordsPerPage = 280;
}
const pageCount = Math.ceil(wordCount / wordsPerPage);
// Determine binding method
let bindingMethod;
if (pageCount <= 48) {
bindingMethod = 'скрепка (степлер)';
} else if (pageCount <= 96) {
bindingMethod = 'клеевое бесшвейное скрепление (КБС)';
} else {
bindingMethod = 'прошивка нитками';
}
// Determine paper type
const innerPaper = hasImages ? 'мелованная бумага 115 г/м²' : 'офсетная бумага 80 г/м²';
const coverPaper = 'картон 250 г/м² с матовой ламинацией';
// Generate Russian output
const russianOutput = `Здравствуйте,
Требуется расчет стоимости печати книги со следующими параметрами:
• Формат: ${formatSize}
• Объем: ~${pageCount} страниц
• Тираж: ${printRun} экз.
• Бумага внутреннего блока: ${innerPaper}
• Бумага обложки: ${coverPaper}
• Способ скрепления: ${bindingMethod}
• Печать: ${hasImages ? 'цветная (4+4)' : 'черно-белая (1+1)'}
${hasImages ? '• Содержит иллюстрации/изображения\n' : ''}
Прошу сообщить стоимость и сроки изготовления.
Спасибо!`;
// Generate Chinese output
const chineseBinding = pageCount <= 48 ? '骑马钉' : (pageCount <= 96 ? '胶装' : '锁线胶装');
const chineseColor = hasImages ? '彩色印刷(4+4)' : '黑白印刷(1+1)';
const chineseOutput = `您好,
请报价以下印刷规格:
规格:${formatSize}
页数:约${pageCount}页
印量:${printRun}本
内页用纸:${hasImages ? '115克铜版纸' : '80克双胶纸'}
封面用纸:250克铜版纸+哑膜
装订方式:${chineseBinding}
印刷方式:${chineseColor}
${hasImages ? '包含图片/插图\n' : ''}
请告知价格和交货时间。
谢谢!`;
// Display outputs
document.getElementById('russianOutput').textContent = russianOutput;
document.getElementById('chineseOutput').textContent = chineseOutput;
}
function copyToClipboard(elementId) {
const element = document.getElementById(elementId);
const range = document.createRange();
range.selectNode(element);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
// Show feedback
const originalText = event.target.textContent;
event.target.textContent = 'Copied!';
event.target.classList.add('bg-green-100', 'text-green-700');
setTimeout(() => {
event.target.textContent = originalText;
event.target.classList.remove('bg-green-100', 'text-green-700');
}, 2000);
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Nekruz/specbook-generator" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html> |