Spaces:
Running
Running
Frontend Structure
This folder contains the modular frontend components for Screenshot Studio.
Directory Structure
static/
βββ css/
β βββ styles.css # Main stylesheet with all UI components
βββ js/
β βββ navigation.js # Navigation, tabs, and UI controls
β βββ text-to-image.js # Text to Image tool functionality
β βββ html-to-image.js # HTML to Image tool functionality
β βββ utils.js # Shared utility functions
βββ README.md # This file
File Descriptions
CSS
- styles.css: Contains all styles including:
- Layout (sidebar, main content)
- Components (buttons, forms, cards)
- Utilities (loading, alerts, grids)
- Responsive design
JavaScript Modules
navigation.js
- Tool switching between Text to Image and HTML to Image
- Advanced settings toggle
- Reset to defaults functionality
- HTML tab switching (paste/upload)
- File upload handler
text-to-image.js
- Handles text input processing
- Collects all settings (output, advanced)
- Makes API call to
/generateendpoint - Error handling and loading states
html-to-image.js
- Handles HTML input (paste or upload)
- Makes API call to
/generate-htmlendpoint - Error handling and loading states
utils.js
displayResults(): Renders screenshot grid- Shared utility functions
- Can be extended with more helpers
Customization Guide
Adding a New Tool
- Add navigation item in
templates/index.html:
<div class="nav-item" onclick="switchTool('new-tool')">
<svg class="nav-icon">...</svg>
New Tool
</div>
- Add tool section in
templates/index.html:
<div id="new-tool" class="tool-section">
<!-- Tool content -->
</div>
- Create JS file
static/js/new-tool.js:
async function generateFromNewTool() {
// Implementation
}
- Import in
templates/index.html:
<script src="{{ url_for('static', filename='js/new-tool.js') }}"></script>
Modifying Styles
All styles are in static/css/styles.css. The design uses CSS variables for easy theming:
:root {
--primary: #34A853; /* Main green color */
--primary-dark: #2D8E47; /* Darker green */
--primary-light: #E8F5E9; /* Light green background */
--bg-white: #FFFFFF;
--bg-gray: #F8F9FA;
--text-primary: #202124;
--text-secondary: #5F6368;
--border: #DADCE0;
}
Adding New Settings
- Add input field in the settings section
- Collect value in
generateFromText()function - Pass to backend in settings object
- Handle in Flask route
Best Practices
- Keep modules focused: Each JS file should handle one tool/feature
- Use CSS variables: For consistent theming
- Follow naming conventions:
- CSS: kebab-case (
.form-input) - JS: camelCase (
generateFromText)
- CSS: kebab-case (
- Add comments: Explain complex logic
- Test responsiveness: Check mobile/tablet views
Dependencies
- Google Fonts (Roboto, Google Sans)
- No external JS libraries (vanilla JavaScript)
- Flask for serving static files