AiDeveloper1 commited on
Commit
beb6417
·
verified ·
1 Parent(s): 566b26a

Upload 4 files

Browse files
templates/home.html ADDED
@@ -0,0 +1,289 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <title>Home - Social Media Scheduler</title>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <!-- Bootstrap 5 CDN -->
9
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
11
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
12
+
13
+ <style>
14
+ body {
15
+ font-family: 'Inter', sans-serif;
16
+ background-color: #f8f9fa;
17
+ }
18
+
19
+ /* Loader Styles */
20
+ #ftco-loader {
21
+ align-items: center;
22
+ background-color: #ffffff;
23
+ display: flex;
24
+ height: 100vh;
25
+ justify-content: center;
26
+ left: 0;
27
+ position: fixed;
28
+ top: 0;
29
+ width: 100%;
30
+ z-index: 999999;
31
+ }
32
+
33
+ .loader {
34
+ position: relative;
35
+ }
36
+
37
+ .loader .loader-box {
38
+ display: flex;
39
+ justify-self: center;
40
+ align-items: center;
41
+ margin: auto;
42
+ transition: all 0.9s ease-in-out;
43
+ }
44
+
45
+ .spinner {
46
+ width: 40px;
47
+ height: 40px;
48
+ border: 4px solid #000000;
49
+ border-top-color: transparent;
50
+ border-radius: 50%;
51
+ animation: spin 1s linear infinite;
52
+ }
53
+
54
+ @keyframes spin {
55
+ to {
56
+ transform: rotate(360deg);
57
+ }
58
+ }
59
+
60
+ /* Rest of your CSS remains unchanged */
61
+ .platform-status {
62
+ background-color: #fff;
63
+ border-radius: 10px;
64
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
65
+ padding: 20px;
66
+ margin-bottom: 20px;
67
+ border-top: 5px solid #0A66C2;
68
+ display: flex;
69
+ justify-content: center;
70
+ flex-direction: column;
71
+ align-items: center;
72
+ text-align: center;
73
+ transition: all .3s ease;
74
+ }
75
+
76
+ .platform-status:hover {
77
+ box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;
78
+ }
79
+
80
+ .btn-custom {
81
+ min-width: 180px;
82
+ }
83
+
84
+ .btn-connect {
85
+ background-color: #0A66C2;
86
+ color: #fff;
87
+ }
88
+
89
+ .btn-connect:hover {
90
+ background-color: #0A66C2;
91
+ }
92
+
93
+ .icon {
94
+ border-bottom: 1px solid #f2f2f2;
95
+ width: 100%;
96
+ padding: 30px 0px;
97
+ }
98
+
99
+ .icon i {
100
+ font-size: 50px;
101
+ color: #0A66C2;
102
+ }
103
+
104
+ .linkedin {
105
+ margin: 20px auto;
106
+ font-size: 20px;
107
+ color: #333333;
108
+ font-weight: 600;
109
+ }
110
+
111
+ .submit_btn {
112
+ background-color: green;
113
+ color: white;
114
+ padding: 6px 16px 7px;
115
+ border: none;
116
+ border-radius: 25px;
117
+ cursor: pointer;
118
+ font-size: 15px;
119
+ transition: background-color 0.3s ease;
120
+ text-decoration: none !important;
121
+ }
122
+
123
+ .submit_btn:hover {
124
+ background-color: transparent;
125
+ color: green;
126
+ border: 1px solid green;
127
+ }
128
+
129
+ .connected {
130
+ color: green !important;
131
+ transition: background-color 0.3s ease;
132
+ font-size: 14px;
133
+ padding: 6px 16px 9px;
134
+ border-radius: 25px;
135
+ text-decoration: none;
136
+ margin: 10px 0px;
137
+ }
138
+
139
+ .connected_btn {
140
+ background-color: green;
141
+ color: #fff;
142
+ transition: background-color 0.3s ease;
143
+ font-size: 14px;
144
+ padding: 6px 16px 9px;
145
+ border-radius: 25px;
146
+ text-decoration: none;
147
+ margin: 10px 0px;
148
+ }
149
+
150
+ .connected_btn:hover {
151
+ background-color: transparent;
152
+ color: green;
153
+ border: 1px solid green;
154
+ }
155
+
156
+ .not-connected {
157
+ color: #dc3545 !important;
158
+ transition: background-color 0.3s ease;
159
+ font-size: 14px;
160
+ padding: 6px 16px 9px;
161
+ border-radius: 25px;
162
+ text-decoration: none;
163
+ margin: 10px 0px;
164
+ }
165
+
166
+ .disconnected {
167
+ background-color: #dc3545;
168
+ color: #ffffff;
169
+ transition: background-color 0.3s ease;
170
+ font-size: 14px;
171
+ padding: 6px 16px 9px;
172
+ border-radius: 25px;
173
+ text-decoration: none;
174
+ margin: 10px 0px;
175
+ }
176
+
177
+ .disconnected:hover {
178
+ background-color: transparent;
179
+ color: #dc3545;
180
+ border: 1px solid #dc3545;
181
+ }
182
+
183
+ .social_media {
184
+ padding: 80px 0px;
185
+ }
186
+
187
+ .back_btn {
188
+ background-color: #f8f9fa;
189
+ color: green;
190
+ padding: 6px 16px 9px;
191
+ border: 1px solid green;
192
+ border-radius: 25px;
193
+ cursor: pointer;
194
+ font-size: 14px;
195
+ transition: background-color 0.3s ease;
196
+ margin: 10px 0px;
197
+ }
198
+
199
+ .back_btn:hover {
200
+ background-color: green;
201
+ color: #fff;
202
+ border: 1px solid #fff;
203
+ }
204
+ </style>
205
+ </head>
206
+
207
+ <body>
208
+ <!-- Loader -->
209
+ <div id="ftco-loader">
210
+ <div class="loader">
211
+ <div class="loader-box">
212
+ <div class="spinner"></div>
213
+ </div>
214
+ </div>
215
+ </div>
216
+
217
+ <!-- Main Content -->
218
+ <div id="content" style="display: none;">
219
+ <section class="social_media">
220
+ <div class="container">
221
+ <h1 class="text-center mb-5">Social Media Scheduler</h1>
222
+ <div class="row justify-content-center align-items-center">
223
+ <div class="col-lg-4 col-md-6">
224
+ <div class="platform-status">
225
+ <div class="icon">
226
+ <i class="fab fa-linkedin"></i>
227
+ </div>
228
+ <h2 class="linkedin">LinkedIn</h2>
229
+ <div style="display: flex;align-items: center;">
230
+ {% if connected_platforms.linkedin %}
231
+ <p class="connected ">Connected ✓ </p>
232
+ <a href="{{ url_for('disconnect', platform='linkedin') }}" class="ms-2 btn disconnected ">Disconnect</a>
233
+ {% else %}
234
+ <p class=" not-connected">Not Connected</p>
235
+ <a href="{{ url_for('linkedin_auth') }}" class="ms-2 btn submit_btn">Connect</a>
236
+ {% endif %}
237
+ </div>
238
+ </div>
239
+ </div>
240
+
241
+ <div class="col-lg-4 col-md-6">
242
+ <div class="platform-status">
243
+ <div class="icon">
244
+ <i class="fab fa-x-twitter text-dark"></i>
245
+ </div>
246
+ <h2 class="linkedin">Twitter</h2>
247
+ <div style="display: flex;align-items: center;">
248
+ {% if connected_platforms.twitter %}
249
+ <p class="connected ">Connected ✓ </p>
250
+ <a href="{{ url_for('disconnect', platform='twitter') }}" class="ms-2 btn disconnected ">Disconnect</a>
251
+ {% else %}
252
+ <p class=" not-connected">Not Connected</p>
253
+ <a href="{{ url_for('twitter_auth') }}" class="ms-2 btn submit_btn">Connect</a>
254
+ {% endif %}
255
+ </div>
256
+ </div>
257
+ </div>
258
+ </div>
259
+
260
+ <div class="text-center mt-4">
261
+ {% if not (connected_platforms.linkedin and connected_platforms.twitter) %}
262
+ <a href="{{ url_for('connect_all') }}" class="btn connected_btn me-2">Connect All Platforms</a>
263
+ {% endif %}
264
+
265
+ {% if connected_platforms.linkedin or connected_platforms.twitter %}
266
+ <a href="{{ url_for('create_post') }}" class="btn back_btn ">Go to Post</a>
267
+ {% endif %}
268
+ </div>
269
+ </div>
270
+ </section>
271
+ </div>
272
+
273
+ <!-- Loader Script -->
274
+ <script>
275
+ window.addEventListener("load", () => {
276
+ const loader = document.getElementById("ftco-loader");
277
+ const content = document.getElementById("content");
278
+ setTimeout(() => {
279
+ loader.style.display = "none";
280
+ content.style.display = "block";
281
+ }, 1000);
282
+ });
283
+ </script>
284
+
285
+ <!-- Bootstrap JS -->
286
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
287
+ </body>
288
+
289
+ </html>
templates/post.html ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Schedule RSS Posts</title>
6
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
7
+ <link href="https://fonts.googleapis.com/css2?family=Inter:[email protected]&display=swap" rel="stylesheet">
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
9
+
10
+
11
+ <script>
12
+ function addRssField() {
13
+ const container = document.getElementById('rss-container');
14
+ const newField = document.createElement('div');
15
+ newField.className = "input-group mb-3";
16
+ newField.innerHTML = `
17
+ <input type="text" class="form-control" name="rss_urls" placeholder="RSS Feed URL" required>
18
+ <button type="button" class="btn minus_btn" onclick="this.parentElement.remove()">
19
+ <i class="fas fa-minus"></i></button>
20
+ `;
21
+ container.appendChild(newField);
22
+ }
23
+ </script>
24
+ <style>
25
+ body {
26
+ font-family: 'Inter', sans-serif;
27
+ }
28
+ .form_section{
29
+ padding: 50px 0px;
30
+ }
31
+
32
+ .plus_btn,
33
+ .minus_btn {
34
+ border: none;
35
+ background-color: #4CAF50;
36
+ color: white;
37
+ padding: 6px 14px;
38
+ border-radius: 5px;
39
+ cursor: pointer;
40
+ font-size: 13px;
41
+
42
+ }
43
+ .minus_btn{
44
+ background-color: #dc3545;
45
+
46
+ }
47
+ .minus_btn:hover
48
+ {
49
+ background-color: #d33241;
50
+ color: white;
51
+ }
52
+ .plus_btn:hover
53
+ {
54
+ background-color: #3ea141;
55
+ color: white;
56
+ }
57
+ .form-label{
58
+ color: #222;
59
+ }
60
+ .form .form-control,
61
+ .form select{
62
+ font-size: 15px;
63
+ color: #222;
64
+ box-shadow: none !important;
65
+ }
66
+ .form .form-control::placeholder{
67
+ font-size: 15px;
68
+ color: #999;
69
+ }
70
+ .submit_btn{
71
+ background-color: #75b798;
72
+ color: white;
73
+ padding: 10px 20px;
74
+ border: none;
75
+ border-radius: 5px;
76
+ cursor: pointer;
77
+ font-size: 15px;
78
+ transition: background-color 0.3s ease;
79
+
80
+ }
81
+ .submit_btn:hover{
82
+ background-color: #70c79e;
83
+ color: white;
84
+ }
85
+ .back_btn{
86
+ background-color: #f8f9fa;
87
+ color: #70c79e;
88
+ padding: 8px 20px;
89
+ border: 1px solid #70c79e;
90
+ border-radius: 5px;
91
+ cursor: pointer;
92
+ font-size: 15px;
93
+ transition: background-color 0.3s ease;
94
+ margin-top: 20px;
95
+ margin-bottom: 20px;
96
+
97
+ }
98
+ .back_btn:hover{
99
+ background-color: #70c79f;
100
+ color: #fff;
101
+
102
+
103
+ }
104
+ /* loader css */
105
+ #ftco-loader {
106
+ align-items: center;
107
+ background-color: #ffffff;
108
+ display: flex;
109
+ height: 100vh;
110
+ justify-content: center;
111
+ left: 0;
112
+ position: fixed;
113
+ top: 0;
114
+ width: 100%;
115
+ z-index: 999999;
116
+ }
117
+
118
+ .loader {
119
+ position: relative;
120
+ }
121
+
122
+ .loader .loader-box {
123
+ display: flex;
124
+ justify-self: center;
125
+ align-items: center;
126
+ margin: auto;
127
+ transition: all 0.9s ease-in-out;
128
+ }
129
+
130
+ .spinner {
131
+ width: 40px;
132
+ height: 40px;
133
+ border: 4px solid #000000;
134
+ border-top-color: transparent;
135
+ border-radius: 50%;
136
+ animation: spin 1s linear infinite;
137
+ }
138
+
139
+ @keyframes spin {
140
+ to {
141
+ transform: rotate(360deg);
142
+ }
143
+ }
144
+
145
+ </style>
146
+ </head>
147
+ <body class="bg-light" id="content">
148
+
149
+ <!-- loader -->
150
+ <div id="ftco-loader">
151
+ <div class="loader">
152
+ <div class="loader-box">
153
+ <div class="spinner"></div>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ <section class="form_section">
158
+ <div class="container ">
159
+ <h1 class="text-center mb-4">Schedule RSS Posts</h1>
160
+ <div class="row">
161
+ <div class="col-lg-6 mx-auto">
162
+ <form method="POST" class="bg-white p-4 shadow rounded form">
163
+ <div id="rss-container">
164
+ <label class="form-label">RSS Feed URL:</label>
165
+ <div class="input-group mb-3">
166
+ <input type="text" class="form-control" name="rss_urls" placeholder="RSS Feed URL" required>
167
+ <button type="button" class="btn plus_btn" onclick="addRssField()">
168
+ <i class="fas fa-plus"></i>
169
+ </button>
170
+ </div>
171
+ </div>
172
+
173
+ <div class="mb-3">
174
+ <label class="form-label">Number of Posts per Day:</label>
175
+ <input type="number" class="form-control" name="posts_per_day" max="15" placeholder="Number of Posts per Day" required>
176
+ </div>
177
+
178
+ <div class="mb-3">
179
+ <label class="form-label">Schedule Type:</label>
180
+ <select class="form-select form-control" name="schedule_type">
181
+ <option value="daily">Daily</option>
182
+ <option value="weekly">Weekly (5 posts/day × 7 days)</option>
183
+ <option value="monthly">Monthly (5 posts/day × 30 days)</option>
184
+ </select>
185
+ </div>
186
+
187
+ <div class="mb-3">
188
+ <label class="form-label">First Post Time:</label>
189
+ <input type="datetime-local" class="form-control" name="first_post_time" required>
190
+ </div>
191
+
192
+ <div class="mb-3">
193
+ <label class="form-label">Frequency Between Posts:</label>
194
+ <label for="frequency" class="form-label">Enter frequency (in minutes, must be greater than 30):</label><br>
195
+ <input type="number" id="frequency" class="form-control" name="frequency" min="30 " placeholder="Enter frequency in minutes">
196
+
197
+ </div>
198
+
199
+ <div class="d-grid">
200
+ <input type="submit" class="btn submit_btn" value="Generate Posts">
201
+ </div>
202
+ </form>
203
+
204
+ <div class="text-center mt-4">
205
+ <a href="{{ url_for('scheduled_posts') }}" class="btn submit_btn me-2">View Scheduled Posts</a>
206
+ <a href="{{ url_for('home') }}" class="btn back_btn">Back</a>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+
212
+ </div>
213
+
214
+
215
+ </section>
216
+
217
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
218
+ <script>
219
+ window.addEventListener("load", () => {
220
+ const loader = document.getElementById("ftco-loader");
221
+ const content = document.getElementById("content");
222
+
223
+
224
+ setTimeout(() => {
225
+ loader.style.display = "none";
226
+ content.style.display = "block";
227
+ }, 2000);
228
+ });
229
+
230
+
231
+
232
+ </script>
233
+ </body>
234
+ </html>
templates/review.html ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Review Posts</title>
6
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
7
+ <link href="https://fonts.googleapis.com/css2?family=Inter:[email protected]&display=swap" rel="stylesheet">
8
+ <style>
9
+ body {
10
+ font-family: 'Inter', sans-serif;
11
+
12
+ }
13
+ .table img {
14
+ max-width: 80px;
15
+ height: 80px;
16
+ border-radius: 5px;
17
+ object-fit: cover;
18
+ }
19
+ .section-padding {
20
+ padding: 40px 0;
21
+ }
22
+ .submit-btn {
23
+ background-color: #75b798;
24
+ color: #fff;
25
+ border: none;
26
+ padding: 7px 16px 8px;
27
+ border-radius: 5px;
28
+ font-size: 15px;
29
+ border-radius: 25px;
30
+ }
31
+ .submit-btn:hover {
32
+ background-color:transparent;
33
+ color: #70c79e;
34
+ border: 1px solid #70c79e;
35
+ }
36
+ .back-btn {
37
+ margin-top: 20px;
38
+ display: inline-block;
39
+ color: #70c79e;
40
+ text-decoration: none;
41
+ }
42
+ .back-btn:hover {
43
+ text-decoration: underline;
44
+ color: #58ad87;
45
+ }
46
+ .review_section{
47
+ padding:80px 0px;
48
+ }
49
+
50
+ .table>thead {
51
+ vertical-align: bottom;
52
+ border: 1px solid #f2f2f2;
53
+ }
54
+ .table{
55
+ margin-top: 30px;
56
+
57
+ }
58
+ .table tr,
59
+ .table td{
60
+ text-align: center;
61
+ font-size: 15px;
62
+ }
63
+ .back_btn{
64
+ background-color: #fff;
65
+ color: #70c79e;
66
+ padding: 7px 16px 8px;
67
+ border: 1px solid #70c79e;
68
+ cursor: pointer;
69
+ font-size: 15px;
70
+ transition: background-color 0.3s ease;
71
+ text-decoration: none;
72
+ border-radius: 25px;
73
+ }
74
+ .back_btn:hover{
75
+ background-color: #70c79f;
76
+ color: #fff;
77
+
78
+
79
+ }
80
+ .table-responsive {
81
+
82
+ -webkit-overflow-scrolling: touch;
83
+ max-height: 350px;
84
+ overflow-y: auto;
85
+ }
86
+ .table>thead {
87
+ vertical-align: bottom;
88
+ border: 1px solid #f2f2f2;
89
+ position: sticky;
90
+ top: 0;
91
+ padding: 0;
92
+
93
+ }
94
+
95
+ .table>thead th {
96
+ background-color: #75b798;
97
+ }
98
+
99
+ /* loader css */
100
+ #ftco-loader {
101
+ align-items: center;
102
+ background-color: #ffffff;
103
+ display: flex;
104
+ height: 100vh;
105
+ justify-content: center;
106
+ left: 0;
107
+ position: fixed;
108
+ top: 0;
109
+ width: 100%;
110
+ z-index: 999999;
111
+ }
112
+
113
+ .loader {
114
+ position: relative;
115
+ }
116
+
117
+ .loader .loader-box {
118
+ display: flex;
119
+ justify-self: center;
120
+ align-items: center;
121
+ margin: auto;
122
+ transition: all 0.9s ease-in-out;
123
+ }
124
+
125
+ .spinner {
126
+ width: 40px;
127
+ height: 40px;
128
+ border: 4px solid #000000;
129
+ border-top-color: transparent;
130
+ border-radius: 50%;
131
+ animation: spin 1s linear infinite;
132
+ }
133
+
134
+ @keyframes spin {
135
+ to {
136
+ transform: rotate(360deg);
137
+ }
138
+ }
139
+
140
+ </style>
141
+ </head>
142
+ <body id="content">
143
+
144
+ <!-- loader -->
145
+ <div id="ftco-loader">
146
+ <div class="loader">
147
+ <div class="loader-box">
148
+ <div class="spinner"></div>
149
+ </div>
150
+ </div>
151
+ </div>
152
+
153
+ <section class="review_section">
154
+ <div class="container">
155
+ <div class="row">
156
+ <div class="col-lg-12 mx-auto">
157
+
158
+
159
+ <h1 class="mb-4 text-center">Review Generated Posts</h1>
160
+
161
+ <div class="mb-3">
162
+ <p><strong>First Post Time:</strong> {{ first_post_time }}</p>
163
+ <p><strong>Frequency:</strong> {{ frequency }} minutes</p>
164
+ </div>
165
+
166
+ <form method="POST">
167
+ <div class="table-responsive">
168
+ <table class="table table-bordered ">
169
+ <thead class="table-light">
170
+ <tr>
171
+ <th>Platform</th>
172
+ <th>Description</th>
173
+ <th>Image</th>
174
+ </tr>
175
+ </thead>
176
+ <tbody>
177
+ {% for post in posts %}
178
+ <tr>
179
+ <td>{{ post.platform|capitalize }}</td>
180
+ <td>{{ post.text }}</td>
181
+ <td>
182
+ {% if post.image_url %}
183
+ <img src="{{ post.image_url }}" alt="Post Image" class="img-fluid mb-1">
184
+
185
+
186
+ {% else %}
187
+ <span class="text-muted">No image</span>
188
+ {% endif %}
189
+ </td>
190
+ </tr>
191
+ {% endfor %}
192
+ </tbody>
193
+ </table>
194
+ </div>
195
+
196
+ <div class="text-center mt-3">
197
+ <input type="submit" value="Schedule All Posts" class="btn submit-btn">
198
+ <a href="{{ url_for('create_post') }}" class="back_btn ms-2">← Back to Create Post</a>
199
+ </div>
200
+ </form>
201
+
202
+ <div class="text-center">
203
+
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ </section>
209
+
210
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
211
+ <script>
212
+ window.addEventListener("load", () => {
213
+ const loader = document.getElementById("ftco-loader");
214
+ const content = document.getElementById("content");
215
+
216
+
217
+ setTimeout(() => {
218
+ loader.style.display = "none";
219
+ content.style.display = "block";
220
+ }, 2000);
221
+ });
222
+
223
+
224
+
225
+ </script>
226
+ </body>
227
+ </html>
templates/scheduled.html ADDED
@@ -0,0 +1,219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Scheduled Posts</title>
6
+ <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
7
+ <style>
8
+ .img-thumbnail {
9
+ max-width: 80px;
10
+ height: 80px;
11
+ border-radius: 5px;
12
+ object-fit: cover;
13
+ }
14
+ .back_btn{
15
+ background-color: #fff;
16
+ color: #70c79e;
17
+ padding: 7px 16px 8px;
18
+ border: 1px solid #70c79e;
19
+ cursor: pointer;
20
+ font-size: 15px;
21
+ transition: background-color 0.3s ease;
22
+ text-decoration: none;
23
+ border-radius: 25px;
24
+ }
25
+ .back_btn:hover{
26
+ background-color: #70c79f;
27
+ color: #fff;
28
+
29
+
30
+ }
31
+ .table-responsive td,
32
+ .table-responsive th{
33
+ text-align: center;
34
+ }
35
+ .table-responsive {
36
+ -webkit-overflow-scrolling: touch;
37
+ max-height: 500px;
38
+ overflow-y: auto;
39
+ }
40
+ .table-responsive td, .table-responsive th {
41
+ vertical-align: baseline;
42
+ text-align: center;
43
+ }
44
+ .table-responsive tr:hover{
45
+ background-color: red;
46
+ }
47
+ .table>thead {
48
+ vertical-align: bottom;
49
+ border: 1px solid #f2f2f2;
50
+ position: sticky;
51
+ top: 0;
52
+ padding: 0;
53
+ }
54
+ .table>thead th{
55
+ background-color: #75b798;
56
+
57
+ }
58
+
59
+ /* loader css */
60
+ #ftco-loader {
61
+ align-items: center;
62
+ background-color: #ffffff;
63
+ display: flex;
64
+ height: 100vh;
65
+ justify-content: center;
66
+ left: 0;
67
+ position: fixed;
68
+ top: 0;
69
+ width: 100%;
70
+ z-index: 999999;
71
+ }
72
+
73
+ .loader {
74
+ position: relative;
75
+ }
76
+
77
+ .loader .loader-box {
78
+ display: flex;
79
+ justify-self: center;
80
+ align-items: center;
81
+ margin: auto;
82
+ transition: all 0.9s ease-in-out;
83
+ }
84
+
85
+ .spinner {
86
+ width: 40px;
87
+ height: 40px;
88
+ border: 4px solid #000000;
89
+ border-top-color: transparent;
90
+ border-radius: 50%;
91
+ animation: spin 1s linear infinite;
92
+ }
93
+
94
+ @keyframes spin {
95
+ to {
96
+ transform: rotate(360deg);
97
+ }
98
+ }
99
+ </style>
100
+ </head>
101
+ <body class="bg-light" id="content">
102
+ <!-- loader -->
103
+ <div id="ftco-loader">
104
+ <div class="loader">
105
+ <div class="loader-box">
106
+ <div class="spinner"></div>
107
+ </div>
108
+ </div>
109
+ </div>
110
+
111
+ <div class="container py-5">
112
+ <h1 class="text-center mb-4">Scheduled Posts</h1>
113
+ <div class="row">
114
+ <div class="col-lg-12 mx-auto">
115
+ <div class="mb-5">
116
+ <h2 class="mb-3">LinkedIn Posts</h2>
117
+ {% if linkedin_posts %}
118
+ <div class="table-responsive">
119
+ <table class="table table-bordered table-striped align-middle">
120
+ <thead class="table-secondary">
121
+ <tr>
122
+ <th style="width:20%;">Platform</th>
123
+ <th style="width:40%;">Description</th>
124
+ <th style="width:20%;">Image URL</th>
125
+ <th style="width:20%;">Schedule Time</th>
126
+ </tr>
127
+ </thead>
128
+ <tbody>
129
+ {% for post in linkedin_posts %}
130
+ <tr>
131
+ <td style="width:20%;">{{ post.platform|capitalize }}</td>
132
+ <td style="width:40%;">{{ post.text }}</td>
133
+ <td style="width:20%;">
134
+ {% if post.image_url %}
135
+ <img src="{{ post.image_url }}" alt="Post Image" class="img-thumbnail mb-1">
136
+ <!-- <img src="https://plus.unsplash.com/premium_photo-1689568126014-06fea9d5d341?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MXx8cHJvZmlsZXxlbnwwfHwwfHx8MA%3D%3D" alt="Post Image" class="img-thumbnail mb-1"> -->
137
+
138
+ <!-- <p style=" word-break: break-word;">{{ post.image_url }}</p> -->
139
+ {% else %}
140
+ No image
141
+ {% endif %}
142
+ </td>
143
+ <td style="width:20%;">{{ post.scheduled_time.strftime('%Y-%m-%d %H:%M') }}</td>
144
+ </tr>
145
+ {% endfor %}
146
+ </tbody>
147
+ </table>
148
+ </div>
149
+ {% else %}
150
+ <div class="alert alert-warning">No LinkedIn posts scheduled.</div>
151
+ {% endif %}
152
+ </div>
153
+
154
+ <div class="mb-5">
155
+ <h2 class="mb-3">Twitter Posts</h2>
156
+ {% if twitter_posts %}
157
+ <div class="table-responsive">
158
+ <table class="table table-bordered table-striped align-middle">
159
+ <thead class="table-secondary">
160
+ <tr>
161
+ <th style="width:20%;">Platform</th>
162
+ <th style="width:40%;">Description</th>
163
+ <th style="width:20%;">Image URL</th>
164
+ <th style="width:20%;">Schedule Time</th>
165
+ </tr>
166
+ </thead>
167
+ <tbody>
168
+ {% for post in twitter_posts %}
169
+ <tr>
170
+ <td style="width:20%;">{{ post.platform|capitalize }}</td>
171
+ <td style="width:40%;">{{ post.text }}</td>
172
+ <td style="width:20%;">
173
+ {% if post.image_url %}
174
+ <img src="{{ post.image_url }}" alt="Post Image" class="img-thumbnail mb-1">
175
+ <!-- <img src="https://plus.unsplash.com/premium_photo-1689568126014-06fea9d5d341?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MXx8cHJvZmlsZXxlbnwwfHwwfHx8MA%3D%3D" alt="Post Image" class="img-thumbnail mb-1"> -->
176
+ <!-- <p style=" word-break: break-word;">{{ post.image_url }}</p> -->
177
+ {% else %}
178
+ No image
179
+ {% endif %}
180
+ </td>
181
+ <td style="width:20%;">{{ post.scheduled_time.strftime('%Y-%m-%d %H:%M') }}</td>
182
+ </tr>
183
+ {% endfor %}
184
+ </tbody>
185
+ </table>
186
+ </div>
187
+ {% else %}
188
+ <div class="alert alert-warning">No Twitter posts scheduled.</div>
189
+ {% endif %}
190
+ </div>
191
+
192
+ <div class="text-center">
193
+ <a href="{{ url_for('home') }}" class="btn back_btn">Back to Home</a>
194
+ </div>
195
+ </div>
196
+ </div>
197
+
198
+
199
+ </div>
200
+
201
+ <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
202
+
203
+ <script>
204
+ window.addEventListener("load", () => {
205
+ const loader = document.getElementById("ftco-loader");
206
+ const content = document.getElementById("content");
207
+
208
+
209
+ setTimeout(() => {
210
+ loader.style.display = "none";
211
+ content.style.display = "block";
212
+ }, 2000);
213
+ });
214
+
215
+
216
+
217
+ </script>
218
+ </body>
219
+ </html>