Files
P4RS3LT0NGV3/templates/decoder.html
Dustin Farley dc10a90851 refactor: migrate to modular tool-based architecture
- Implement tool registry system with individual tool modules
- Reorganize transformers into categorized source modules
- Remove emojiLibrary.js, consolidate into EmojiUtils and emojiData
- Fix mobile close button and tooltip functionality
- Add build system for transforms and emoji data
- Migrate from Python backend to pure JavaScript
- Add comprehensive documentation and testing
- Improve code organization and maintainability
- Ignore generated files (transforms-bundle.js, emojiData.js)
2025-12-02 20:26:32 -08:00

65 lines
3.7 KiB
HTML

<div v-if="activeTab === 'decoder'" class="tab-content">
<div class="transform-layout">
<div class="input-section">
<div class="input-header">
<label for="decoder-input">Paste any encoded text to decode</label>
<select v-model="selectedDecoder" @change="runUniversalDecode" style="margin-left: 15px; padding: 5px 10px; border-radius: 6px; border: 1px solid var(--input-border); background: var(--button-bg); color: var(--text);">
<option value="auto">🔍 Auto-detect</option>
<option v-for="transform in getAllTransformsWithReverse()" :key="transform.name" :value="transform.name">
{{ transform.name }}
</option>
</select>
</div>
<textarea
id="decoder-input"
v-model="decoderInput"
placeholder="Paste any encoded text here... (Base64, Morse code, Binary, Braille, etc.)"
@input="runUniversalDecode"
></textarea>
</div>
<div class="output-section">
<div class="output-header">
<label>
<span v-if="decoderResult && decoderResult.method">
Decoded using: <strong>{{ decoderResult.method }}</strong>
</span>
<span v-else>
Decoded Output
</span>
</label>
<button
v-if="decoderOutput"
@click="copyToClipboard(decoderOutput)"
class="copy-button"
title="Copy to clipboard"
>
<i class="fas fa-copy"></i> Copy
</button>
</div>
<textarea
id="decoder-output"
:value="decoderOutput"
readonly
placeholder="Decoded text will appear here..."
></textarea>
<!-- Alternatives section -->
<div v-if="decoderResult && decoderResult.alternatives && decoderResult.alternatives.length > 0" class="alternatives-section">
<div class="alternatives-header">
<i class="fas fa-list"></i> {{ decoderResult.alternatives.length }} Alternative{{ decoderResult.alternatives.length > 1 ? 's' : '' }}:
</div>
<div class="alternatives-list">
<div
v-for="(alt, index) in decoderResult.alternatives"
:key="index"
class="alternative-item"
>
<div class="alternative-method">{{ alt.method }}</div>
<div class="alternative-preview">{{ alt.text.substring(0, 100) }}{{ alt.text.length > 100 ? '...' : '' }}</div>
</div>
</div>
</div>
</div>
</div>
</div>