<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AI Story Writing Tool</title> <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> <style> .regenerateIcon { cursor: pointer; display: inline-block; margin-left: 10px; font-size: 20px; /* Adjust size as needed */ } body { font-family: 'Arial', sans-serif; background-color: #f2f2f2; margin: 0; padding: 20px; box-sizing: border-box; } #chatContainer { background-color: #fff; border-radius: 8px; overflow: hidden; width: 100%; max-width: 800px; margin: auto; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } #chatHeader { width: 100%; padding: 10px; margin-bottom: 20px; border-radius: 8px; border: none; color: white; text-align: center; font-size: 16px; cursor: pointer; background-image: linear-gradient(to right, #6a11cb 0%, #2575fc 100%); transition: all 0.3s ease; text-decoration: none; /* Remove underline from download link */ display: inline-block; /* Needed for anchor to behave like a button */ text-align: center; /* Ensure text is centered in download link */ } #chatBody { padding: 20px; max-height: 300px; overflow-y: auto; } .messageContainer { display: flex; justify-content: flex-end; margin-bottom: 10px; } .message { background-color: #e2f0cb; padding: 10px; border-radius: 5px; max-width: 70%; word-wrap: break-word; } #prompt { width: calc(100% - 40px - 10px); margin: 10px 20px; padding: 12px; border-radius: 5px; border: 1px solid #ccc; } button { width: 100%; padding: 10px; margin-bottom: 20px; border-radius: 8px; border: none; color: white; text-align: center; font-size: 15px; cursor: pointer; background-image: linear-gradient(to right, #6a11cb 0%, #2575fc 100%); transition: all 0.3s ease; text-decoration: none; /* Remove underline from download link */ display: inline-block; /* Needed for anchor to behave like a button */ text-align: center; /* Ensure text is centered in download link */ } button:hover { transform: translateY(-2px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } #copyButton { background-color: #007bff; } #progressOverlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000; } #progressOverlay > div { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-size: 20px; } /* Add styles for formatted text */ .formatted-text { white-space: pre-wrap; /* Keeps white space and line breaks */ } .formatted-text a { color: #007bff; text-decoration: none; } .formatted-text a:hover { text-decoration: underline; } /* Dropdown Styles */ #storyCategory, #languageSelection { width: calc(50% - 25px); /* Adjust width to fit side by side with some space */ padding: 10px; margin: 10px; border-radius: 5px; border: 1px solid #ccc; background-color: #fff; font-family: 'Arial', sans-serif; font-size: 16px; box-sizing: border-box; /* Ensure padding and border are included in width */ display: inline-block; /* Display side by side */ cursor: pointer; } #storyCategory:disabled, #languageSelection:disabled { background-color: #e9ecef; cursor: not-allowed; } /* Adjust margin for the prompt to align with the new dropdowns */ #prompt { margin: 0 10px 10px 10px; } /* Style adjustments for button to align with the new layout */ button { width: calc(100% - 20px); margin: 10px; } /* Ensure the container width accommodates new elements */ #chatContainer { padding-bottom: 10px; /* Add some padding at the bottom */ } .message.code { background-color: #f5f5f5; /* Light grey background */ color: #333; /* Darker text for contrast */ font-family: monospace; /* Monospace font for code-like appearance */ white-space: pre-wrap; /* Allows text to wrap and preserves formatting */ word-wrap: break-word; /* Allows long lines to break and wrap to the next line */ padding: 10px; /* Padding inside the preformatted text block */ border-radius: 5px; /* Rounded corners like other messages */ } </style> </head> <body> <div id="chatContainer"> <div id="chatHeader">AI Story Writing Tool</div> <select id="storyCategory" class="dropdown"> <option value="Moral">Moral</option> <option value="Educational">Educational</option> <option value="Historical">Historical</option> <option value="Magical">Magical</option> <option value="Adventure">Adventure</option> <option value="Science Fiction">Science Fiction</option> <option value="Fantasy">Fantasy</option> <option value="Mystery">Mystery</option> <option value="Romance">Romance</option> <option value="Horror">Horror</option> <option value="Thriller">Thriller</option> <option value="Biographical">Biographical</option> <option value="Inspirational">Inspirational</option> <option value="Comedy">Comedy</option> <option value="Drama">Drama</option> <option value="Documentary">Documentary</option> <option value="Action">Action</option> <option value="Satire">Satire</option> </select> <select id="languageSelection" class="dropdown"> <option value="">Default (English)</option> <option value="Assamese">Assamese</option> <option value="Bengali">Bengali</option> <option value="Gujarati">Gujarati</option> <option value="Hindi">Hindi</option> <option value="Kannada">Kannada</option> <option value="Kashmiri">Kashmiri</option> <option value="Konkani">Konkani</option> <option value="Malayalam">Malayalam</option> <option value="Marathi">Marathi</option> <option value="Nepali">Nepali</option> <option value="Odia">Odia</option> <option value="Punjabi">Punjabi</option> <option value="Sanskrit">Sanskrit</option> <option value="Sindhi">Sindhi</option> <option value="Tamil">Tamil</option> <option value="Telugu">Telugu</option> <option value="Urdu">Urdu</option> <!-- Add more languages as needed --> </select> <textarea id="prompt" placeholder="Type a message..." rows="3"></textarea> <button id="generateStory" onclick="generateStory()">Generate Story</button> <div id="chatBody"></div> </div> <div id="progressOverlay"> <div>Thinking...</div> </div> <script> function generateStory() { var prompt = $("#prompt").val(); var category = $("#storyCategory").val(); var language = $("#languageSelection").val(); // Get the value of the selected option var storyPrompt = `Write a ${category} story for "${prompt}" in ${language} language`; $('#progressOverlay').show(); // Show progress overlay // how to get API key // https://allfreestore.com/wp-content/uploads/2024/03/Get%20OpenAI%20API%20Key.mp4 var apiKey = 'your_api_key'; // Replace with your actual OpenAI API key var apiUrl = 'https://api.openai.com/v1/chat/completions'; var requestBody = { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: storyPrompt }], temperature: 0.7 }; $.ajax({ type: 'POST', url: apiUrl, headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + apiKey }, data: JSON.stringify(requestBody), success: function(response) { $('#progressOverlay').hide(); // Hide progress overlay addTypewriterEffect(response.choices[0].message.content, 'chatBody'); }, error: function(error) { $('#progressOverlay').hide(); // Hide progress overlay on error console.error('Error generating privacy policy:', error); } }); } function formatResponseText(text) { // Convert URLs into hyperlinks text = text.replace(/(https?:\/\/[^\s]+)/g, '<a href="$1" target="_blank">$1</a>'); // Detect headings and make them bold text = text.replace(/^##\s?(.+)/gm, '<strong>$1</strong>'); // Replace newline characters with <p> tags for paragraphs // text = text.replace(/\n/g, '</p><p>'); // Wrap the text in <p> tags to ensure it starts and ends as a paragraph return '<p>' + text + '</p>'; } function addTypewriterEffect(text, elementId) { var formattedText = formatResponseText(text); var container = $('<div class="messageContainer"></div>').appendTo('#' + elementId); var message = $('<div class="message formatted-text" style="background-color: #f5f5f5;"></div>').appendTo(container); var i = 0; var speed = 10; // Typing speed in milliseconds function typeWriter() { if (i < formattedText.length) { var charToAdd = formattedText.charAt(i); if (formattedText.substring(i).startsWith('<a href=') || formattedText.substring(i).startsWith('<br>') || formattedText.substring(i).startsWith('<strong>')) { var tagEnd = formattedText.indexOf('>', i) + 1; charToAdd = formattedText.substring(i, tagEnd); i = tagEnd; } else if (formattedText.charAt(i) === '<') { var tagEnd = formattedText.indexOf('>', i) + 1; charToAdd = formattedText.substring(i, tagEnd); i = tagEnd - 1; } message.append(charToAdd); i++; setTimeout(typeWriter, speed); } else { var copyIcon = $('<div class="copyIcon">📋</div>').appendTo(container); copyIcon.click(function() { var textToCopy = message.text(); navigator.clipboard.writeText(textToCopy).then(function() { alert('Text copied to clipboard!'); }, function(err) { console.error('Could not copy text: ', err); }); }); var regenerateIcon = $('<div class="regenerateIcon">🔁</div>').appendTo(container); regenerateIcon.click(function() { $('#chatBody').html(''); // Clear the previous messages generateStory(); // Call generatePrivacyPolicy function to regenerate the policy }); } } typeWriter(); } function formatResponseText(text) { text = text.replace(/(https?:\/\/[^\s]+)/g, '<a href="$1" target="_blank">$1</a>'); text = text.replace(/^##\s?(.+)/gm, '<strong>$1</strong>'); text = text.replace(/^(\s*(?:-|\*|\d+\.)\s+.+)$/gm, '$1<br>'); return text; } </script> <style> .regenerateIcon, .copyIcon { cursor: pointer; display: inline-block; margin-left: 10px; font-size: 20px; /* Adjust size as needed */ } .userMessage .message { background-color: #e2f0cb; } #progressOverlay { display: none; /* Initially hidden */ position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000; } #progressOverlay > div { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: white; font-size: 20px; } </style> <div id="progressOverlay"> <div>Thinking...</div> </div> </script> </body> </html>
AI Story Writing Tool
Thinking...
Thinking...