atef91 commited on
Commit
97ca436
·
verified ·
1 Parent(s): 81a148f

اضف مؤشر تقدمي بصري اثناء التوليد - Initial Deployment

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +266 -19
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Gmails Bot
3
- emoji: 📉
4
- colorFrom: gray
5
- colorTo: yellow
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: gmails-bot
3
+ emoji: 🐳
4
+ colorFrom: blue
5
+ colorTo: gray
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,266 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Gmail Dot Trick Generator</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
9
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
10
+ <style>
11
+ @keyframes fadeIn {
12
+ from { opacity: 0; transform: translateY(10px); }
13
+ to { opacity: 1; transform: translateY(0); }
14
+ }
15
+ .fade-in {
16
+ animation: fadeIn 0.5s ease-out forwards;
17
+ }
18
+ .copied {
19
+ background-color: rgba(74, 222, 128, 0.1);
20
+ border-color: rgba(74, 222, 128, 1);
21
+ }
22
+ .email-option:hover {
23
+ transform: translateY(-2px);
24
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
25
+ }
26
+ #results-container {
27
+ max-height: 400px;
28
+ overflow-y: auto;
29
+ scrollbar-width: thin;
30
+ }
31
+ #results-container::-webkit-scrollbar {
32
+ width: 6px;
33
+ }
34
+ #results-container::-webkit-scrollbar-track {
35
+ background: #f1f1f1;
36
+ }
37
+ #results-container::-webkit-scrollbar-thumb {
38
+ background-color: #888;
39
+ border-radius: 3px;
40
+ }
41
+ </style>
42
+ </head>
43
+ <body class="bg-gradient-to-br from-blue-50 to-purple-50 min-h-screen">
44
+ <div class="container mx-auto px-4 py-12">
45
+ <!-- Header -->
46
+ <header class="text-center mb-12">
47
+ <h1 class="text-3xl md:text-4xl font-bold text-gray-800 mb-2">Gmail Dot Trick Generator</h1>
48
+ <p class="text-gray-600 max-w-2xl mx-auto">
49
+ Create unlimited alternative email addresses using Gmail's dot trick. All emails will be delivered to your original inbox.
50
+ </p>
51
+ </header>
52
+
53
+ <!-- Main Card -->
54
+ <div class="bg-white rounded-xl shadow-lg p-6 max-w-3xl mx-auto relative">
55
+ <!-- Loader (hidden initially) -->
56
+ <div id="loader" class="absolute hidden inset-0 bg-white bg-opacity-70 flex items-center justify-center rounded-xl z-10">
57
+ <div class="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-blue-600"></div>
58
+ </div>
59
+ <!-- Input Section -->
60
+ <div class="flex flex-col md:flex-row gap-4 mb-8">
61
+ <div class="flex-1">
62
+ <label for="email" class="block text-sm font-medium text-gray-700 mb-1">Original Gmail Address</label>
63
+ <div class="relative flex items-center">
64
+ <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
65
+ <i class="fas fa-envelope text-gray-400"></i>
66
+ </div>
67
+ <input type="email" id="email" class="pl-10 w-full rounded-lg border-gray-300 focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="yourname@gmail.com">
68
+ </div>
69
+ </div>
70
+ <div class="flex-shrink-0 self-end">
71
+ <button id="generate-btn" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2.5 rounded-lg font-medium transition duration-200 shadow-md hover:shadow-lg">
72
+ Generate <i class="fas fa-magic ml-2"></i>
73
+ </button>
74
+ </div>
75
+ </div>
76
+
77
+ <!-- Options Section -->
78
+ <div class="mb-8">
79
+ <h2 class="text-lg font-semibold text-gray-700 mb-3">Generation Options</h2>
80
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
81
+ <div class="email-option p-4 border rounded-lg bg-gray-50 transition cursor-pointer">
82
+ <div class="flex items-center mb-2">
83
+ <input type="radio" id="basic" name="variant" value="basic" checked class="h-4 w-4 text-blue-600 focus:ring-blue-500">
84
+ <label for="basic" class="ml-2 block text-sm font-medium text-gray-700">Basic Variations</label>
85
+ </div>
86
+ <p class="text-xs text-gray-500">Add dots in different positions (e.g., y.ourname@gmail.com)</p>
87
+ </div>
88
+ <div class="email-option p-4 border rounded-lg bg-gray-50 transition cursor-pointer">
89
+ <div class="flex items-center mb-2">
90
+ <input type="radio" id="plus" name="variant" value="plus" class="h-4 w-4 text-blue-600 focus:ring-blue-500">
91
+ <label for="plus" class="ml-2 block text-sm font-medium text-gray-700">Plus Variations</label>
92
+ </div>
93
+ <p class="text-xs text-gray-500">Use plus sign (e.g., yourname+variation@gmail.com)</p>
94
+ </div>
95
+ <div class="email-option p-4 border rounded-lg bg-gray-50 transition cursor-pointer">
96
+ <div class="flex items-center mb-2">
97
+ <input type="radio" id="combined" name="variant" value="combined" class="h-4 w-4 text-blue-600 focus:ring-blue-500">
98
+ <label for="combined" class="ml-2 block text-sm font-medium text-gray-700">Combined</label>
99
+ </div>
100
+ <p class="text-xs text-gray-500">Combine dots and plus sign variations</p>
101
+ </div>
102
+ </div>
103
+ </div>
104
+
105
+ <!-- Results Section -->
106
+ <div>
107
+ <div class="flex justify-between items-center mb-3">
108
+ <h2 class="text-lg font-semibold text-gray-700">Generated Email Variations</h2>
109
+ <button id="copy-all" class="text-sm bg-gray-200 hover:bg-gray-300 px-3 py-1 rounded-md text-gray-700 flex items-center">
110
+ <i class="far fa-copy mr-1"></i> Copy All
111
+ </button>
112
+ </div>
113
+ <div id="results-container" class="border rounded-lg divide-y">
114
+ <!-- Generated emails will appear here -->
115
+ <div class="text-center py-16 text-gray-500" id="empty-state">
116
+ <i class="far fa-envelope-open text-4xl mb-3 opacity-50"></i>
117
+ <p>Enter your Gmail address and click "Generate" to see variations</p>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </div>
122
+
123
+ <!-- Info Section -->
124
+ <div class="mt-12 bg-white rounded-xl shadow-lg p-6 max-w-3xl mx-auto">
125
+ <h2 class="text-xl font-semibold text-gray-800 mb-4">How the Gmail Dot Trick Works</h2>
126
+ <div class="space-y-4">
127
+ <div class="p-4 bg-blue-50 rounded-lg">
128
+ <h3 class="font-medium text-blue-800 mb-2"><i class="fas fa-info-circle mr-2"></i>Dots Don't Matter</h3>
129
+ <p class="text-gray-700">Gmail ignores dots in the username part of the address. So "your.name@gmail.com" is the same as "yourname@gmail.com".</p>
130
+ </div>
131
+ <div class="p-4 bg-purple-50 rounded-lg">
132
+ <h3 class="font-medium text-purple-800 mb-2"><i class="fas fa-plus-circle mr-2"></i>Plus Sign Usage</h3>
133
+ <p class="text-gray-700">You can add a plus sign (+) and any word before the @ symbol. Emails to "yourname+shopping@gmail.com" still go to "yourname@gmail.com".</p>
134
+ </div>
135
+ <div class="p-4 bg-green-50 rounded-lg">
136
+ <h3 class="font-medium text-green-800 mb-2"><i class="fas fa-lightbulb mr-2"></i>Practical Uses</h3>
137
+ <ul class="list-disc pl-5 text-gray-700 space-y-1">
138
+ <li>Filter incoming emails to different folders</li>
139
+ <li>Track which services might be selling your email</li>
140
+ <li>Create unique addresses for different signups</li>
141
+ </ul>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </div>
146
+
147
+ <script>
148
+ document.addEventListener('DOMContentLoaded', function() {
149
+ const generateBtn = document.getElementById('generate-btn');
150
+ const emailInput = document.getElementById('email');
151
+ const resultsContainer = document.getElementById('results-container');
152
+ const emptyState = document.getElementById('empty-state');
153
+ const copyAllBtn = document.getElementById('copy-all');
154
+
155
+ // Email option click handlers
156
+ const emailOptions = document.querySelectorAll('.email-option');
157
+ emailOptions.forEach(option => {
158
+ option.addEventListener('click', function() {
159
+ const radio = this.querySelector('input[type="radio"]');
160
+ radio.checked = true;
161
+ });
162
+ });
163
+
164
+ generateBtn.addEventListener('click', generateVariations);
165
+ emailInput.addEventListener('keypress', function(e) {
166
+ if (e.key === 'Enter') {
167
+ generateVariations();
168
+ }
169
+ });
170
+
171
+ function generateVariations() {
172
+ // Show loader
173
+ document.getElementById('loader').classList.remove('hidden');
174
+
175
+ const originalEmail = emailInput.value.trim();
176
+ const variant = document.querySelector('input[name="variant"]:checked').value;
177
+
178
+ // Basic validation
179
+ if (!originalEmail || !originalEmail.includes('@gmail.com')) {
180
+ alert('Please enter a valid Gmail address (should end with @gmail.com)');
181
+ return;
182
+ }
183
+
184
+ // Extract username part
185
+ const username = originalEmail.split('@')[0];
186
+ const domain = '@gmail.com';
187
+
188
+ // Clear previous results
189
+ resultsContainer.innerHTML = '';
190
+ emptyState.style.display = 'none';
191
+
192
+ // Generate variations based on selected method
193
+ let variations = [];
194
+
195
+ if (variant === 'basic' || variant === 'combined') {
196
+ // Generate dot variations
197
+ for (let i = 1; i < username.length; i++) {
198
+ const variantEmail = username.slice(0, i) + '.' + username.slice(i) + domain;
199
+ variations.push(variantEmail);
200
+ }
201
+ }
202
+
203
+ if (variant === 'plus' || variant === 'combined') {
204
+ // Generate plus variations
205
+ const plusVariations = ['shopping', 'work', 'social', 'newsletters', 'signup', 'temporary', 'personal', 'business', 'finance', 'travel'];
206
+ plusVariations.forEach(word => {
207
+ variations.push(`${username}+${word}${domain}`);
208
+ });
209
+ }
210
+
211
+ // Hide loader when all animations are queued
212
+ setTimeout(() => {
213
+ document.getElementById('loader').classList.add('hidden');
214
+ }, (variations.length * 50) + 500); // Match animation duration
215
+
216
+ // Display variations with animation
217
+ variations.forEach((email, index) => {
218
+ const emailElement = document.createElement('div');
219
+ emailElement.className = 'p-3 flex justify-between items-center fade-in';
220
+ emailElement.style.animationDelay = `${index * 0.05}s`;
221
+
222
+ emailElement.innerHTML = `
223
+ <span class="text-gray-800 font-mono text-sm md:text-base">${email}</span>
224
+ <button class="copy-btn px-3 py-1 rounded border text-gray-600 hover:text-blue-600 hover:border-blue-400 transition">
225
+ <i class="far fa-copy"></i>
226
+ </button>
227
+ `;
228
+
229
+ resultsContainer.appendChild(emailElement);
230
+ });
231
+
232
+ // Add copy event listeners
233
+ document.querySelectorAll('.copy-btn').forEach(btn => {
234
+ btn.addEventListener('click', function() {
235
+ const emailToCopy = this.parentNode.querySelector('span').textContent;
236
+ navigator.clipboard.writeText(emailToCopy).then(() => {
237
+ this.innerHTML = '<i class="fas fa-check"></i>';
238
+ this.classList.add('copied');
239
+ setTimeout(() => {
240
+ this.innerHTML = '<i class="far fa-copy"></i>';
241
+ this.classList.remove('copied');
242
+ }, 2000);
243
+ });
244
+ });
245
+ });
246
+ }
247
+
248
+ // Copy all functionality
249
+ copyAllBtn.addEventListener('click', function() {
250
+ const emails = Array.from(document.querySelectorAll('#results-container span')).map(el => el.textContent);
251
+ if (emails.length === 0) {
252
+ alert('No emails to copy. Generate some variations first.');
253
+ return;
254
+ }
255
+
256
+ navigator.clipboard.writeText(emails.join('\n')).then(() => {
257
+ copyAllBtn.innerHTML = '<i class="fas fa-check mr-1"></i> Copied!';
258
+ setTimeout(() => {
259
+ copyAllBtn.innerHTML = '<i class="far fa-copy mr-1"></i> Copy All';
260
+ }, 2000);
261
+ });
262
+ });
263
+ });
264
+ </script>
265
+ <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=atef91/gmails-bot" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
266
+ </html>