Spaces:
Running
Running
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Google Apps Script Generator</title> | |
<script src="https://cdn.tailwindcss.com"></script> | |
<style> | |
.code-block { | |
font-family: 'Courier New', Courier, monospace; | |
white-space: pre-wrap; | |
background: #000000; /* Solid black background */ | |
color: #e2e8f0; | |
padding: 1.5rem; | |
border-radius: 0.5rem; | |
height: calc(100vh - 12rem); | |
overflow-y: auto; | |
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
border: 1px solid rgba(255, 255, 255, 0.2); | |
} | |
.section { display: none; } | |
.section.active { display: block; } | |
.input-field { | |
transition: border-color 0.2s ease, box-shadow 0.2s ease; | |
background: rgba(255, 255, 255, 0.2); | |
color: #1e293b; | |
border: 1px solid rgba(255, 255, 255, 0.3); | |
} | |
.input-field:focus { | |
border-color: #3b82f6; | |
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3); | |
} | |
.btn { | |
transition: background-color 0.2s ease, transform 0.1s ease; | |
background: rgba(255, 255, 255, 0.15); | |
backdrop-filter: blur(8px); | |
border: 1px solid rgba(255, 255, 255, 0.2); | |
} | |
.btn:hover { transform: translateY(-1px); } | |
.btn:active { transform: translateY(0); } | |
.step-indicator { | |
background: rgba(255, 255, 255, 0.1); | |
backdrop-filter: blur(5px); | |
border: 1px solid rgba(255, 255, 255, 0.2); | |
} | |
.step-indicator.active { | |
background: rgba(59, 130, 246, 0.8); | |
color: white; | |
} | |
.delete-btn:hover { background: rgba(220, 38, 38, 0.9); } | |
.glass-container { | |
background: rgba(255, 255, 255, 0.1); | |
backdrop-filter: blur(12px); | |
border: 1px solid rgba(255, 255, 255, 0.2); | |
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); | |
} | |
@media (max-width: 640px) { | |
.code-block { height: calc(100vh - 16rem); } | |
.flex.space-x-3 { flex-direction: column; space-x-0; space-y-3; } | |
.btn { width: 100%; margin-bottom: 0.5rem; } | |
.step-indicator { width: 8rem; height: 2.5rem; } | |
.glass-container { padding: 1rem; } | |
} | |
</style> | |
</head> | |
<body class="bg-gradient-to-br from-gray-200 via-gray-300 to-gray-400 min-h-screen font-sans p-4 sm:p-8"> | |
<!-- Progress Steps --> | |
<div class="flex justify-center space-x-4 sm:space-x-8 mb-6 sm:mb-8"> | |
<div class="step-indicator flex items-center justify-center w-10 h-10 sm:w-10 sm:h-10 rounded-full text-gray-700 font-semibold">1</div> | |
<div class="step-indicator flex items-center justify-center w-10 h-10 sm:w-10 sm:h-10 rounded-full text-gray-700 font-semibold">2</div> | |
<div class="step-indicator flex items-center justify-center w-10 h-10 sm:w-10 sm:h-10 rounded-full text-gray-700 font-semibold">3</div> | |
</div> | |
<!-- Main Content Sections --> | |
<div class="max-w-4xl mx-auto glass-container rounded-xl p-4 sm:p-6"> | |
<!-- Set Columns Section --> | |
<div id="columns" class="section active"> | |
<h1 class="text-2xl sm:text-3xl font-extrabold text-gray-900 mb-6 sm:mb-8 text-center">Set Columns</h1> | |
<div id="columnInputs" class="space-y-4 sm:space-y-5"> | |
<div class="flex space-x-3 sm:space-x-3"> | |
<input type="text" class="column-input input-field flex-1 px-3 sm:px-4 py-2 rounded-lg" placeholder="Column name (e.g., Status)" value="word"> | |
<button onclick="removeColumn(this)" class="delete-btn btn bg-red-600 text-white p-2 rounded-lg"> | |
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> | |
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" /> | |
</svg> | |
</button> | |
</div> | |
<div class="flex space-x-3 sm:space-x-3"> | |
<input type="text" class="column-input input-field flex-1 px-3 sm:px-4 py-2 rounded-lg" placeholder="Column name (e.g., Category)" value="meaning"> | |
<button onclick="removeColumn(this)" class="delete-btn btn bg-red-600 text-white p-2 rounded-lg"> | |
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> | |
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" /> | |
</svg> | |
</button> | |
</div> | |
</div> | |
<div class="flex flex-col sm:flex-row justify-between mt-6 space-y-3 sm:space-y-0 sm:space-x-4"> | |
<button onclick="addColumn()" class="btn bg-blue-600 text-white px-4 py-3 rounded-lg hover:bg-blue-700 text-base sm:text-lg font-medium">Add Column</button> | |
<button onclick="nextSection('code')" class="btn bg-green-600 text-white px-6 py-3 rounded-lg hover:bg-green-700 text-base sm:text-lg font-medium">Next</button> | |
</div> | |
</div> | |
<!-- Generated Code Section --> | |
<div id="code" class="section"> | |
<h1 class="text-2xl sm:text-3xl font-extrabold text-gray-900 mb-6 sm:mb-8 text-center">Generated Code</h1> | |
<div class="flex flex-col sm:flex-row justify-between items-center mb-4 space-y-3 sm:space-y-0"> | |
<h2 class="text-xl sm:text-2xl font-semibold text-gray-800">Code Preview</h2> | |
<button onclick="copyCode()" class="btn bg-gray-700 p-2 rounded-lg hover:bg-gray-600" title="Copy to clipboard"> | |
<svg class="w-6 h-6 text-gray-300" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V7a2 2 0 00-2-2h-2M8 5a2 2 0 002 2h4a2 2 0 002-2M8 5a2 2 0 012-2h4a2 2 0 012 2"></path></svg> | |
</button> | |
</div> | |
<div id="codePreview" class="code-block"></div> | |
<div class="flex flex-col sm:flex-row justify-between mt-6 space-y-3 sm:space-y-0 sm:space-x-4"> | |
<button onclick="nextSection('columns')" class="btn bg-gray-600 text-white px-6 py-3 rounded-lg hover:bg-gray-700 text-base sm:text-lg font-medium">Back</button> | |
<button onclick="nextSection('howto')" class="btn bg-green-600 text-white px-6 py-3 rounded-lg hover:bg-green-700 text-base sm:text-lg font-medium">Next</button> | |
</div> | |
</div> | |
<!-- How to Use Section --> | |
<div id="howto" class="section"> | |
<h1 class="text-2xl sm:text-3xl font-extrabold text-gray-900 mb-6 sm:mb-8 text-center">How to Use</h1> | |
<div class="flex flex-wrap gap-2 sm:gap-3 mb-6 overflow-x-auto pb-2"> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('appendSingle')">Append Single</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('appendMultiple')">Append Multiple</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('fetchAll')">Fetch All</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('fetchRange')">Fetch Range</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('search')">Search</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('update')">Update</button> | |
<button class="curl-button btn px-4 py-2 bg-gray-200 rounded-lg hover:bg-blue-600 hover:text-white text-sm font-medium" onclick="showCurlExample('delete')">Delete</button> | |
</div> | |
<div id="curlExamples" class="code-block"></div> | |
<div class="flex justify-start mt-6"> | |
<button onclick="nextSection('code')" class="btn bg-gray-600 text-white px-6 py-3 rounded-lg hover:bg-gray-700 text-base sm:text-lg font-medium">Back</button> | |
</div> | |
</div> | |
</div> | |
<script> | |
function nextSection(sectionId) { | |
document.querySelectorAll('.section').forEach(section => section.classList.remove('active')); | |
document.getElementById(sectionId).classList.add('active'); | |
// Update step indicators | |
const steps = ['columns', 'code', 'howto']; | |
const currentStep = steps.indexOf(sectionId); | |
document.querySelectorAll('.step-indicator').forEach((indicator, index) => { | |
indicator.classList.toggle('active', index === currentStep); | |
}); | |
} | |
// Initial step indicator | |
document.querySelector('.step-indicator').classList.add('active'); | |
</script> | |
<script src="script.js"></script> | |
</body> | |
</html> |