/** * Copyright (C) 2024 Puter Technologies Inc. * * This file is part of Puter. * * Puter is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import UIWindow from './UIWindow.js' import UIWindowMyWebsites from './UIWindowMyWebsites.js' async function UIWindowPublishWebsite(target_dir_uid, target_dir_name, target_dir_path){ let h = ''; h += `
`; // success h += `
`; h += ``; h += `

${i18n('dir_published_as_website', `${target_dir_name}`)}

`; h += `

`; h += ``; h+= `
`; // form h += `
`; // error msg h += `
`; // subdomain h += `
`; h += ``; h += `
https://.${window.hosting_domain}
`; h += `
`; // uid h += ``; // Publish h += `` h += `
`; h += `
`; const el_window = await UIWindow({ title: 'Publish Website', icon: null, uid: null, is_dir: false, body_content: h, has_head: true, selectable_body: false, draggable_body: false, allow_context_menu: false, is_resizable: false, is_droppable: false, init_center: true, allow_native_ctxmenu: true, allow_user_select: true, width: 450, dominant: true, onAppend: function(this_window){ $(this_window).find(`.publish-website-subdomain`).val(generate_identifier()); $(this_window).find(`.publish-website-subdomain`).get(0).focus({preventScroll:true}); }, window_class: 'window-publishWebsite', window_css:{ height: 'initial' }, body_css: { width: 'initial', height: '100%', 'background-color': 'rgb(245 247 249)', 'backdrop-filter': 'blur(3px)', } }) $(el_window).find('.publish-btn').on('click', function(e){ // todo do some basic validation client-side //Subdomain let subdomain = $(el_window).find('.publish-website-subdomain').val(); // disable 'Publish' button $(el_window).find('.publish-btn').prop('disabled', true); puter.hosting.create( subdomain, target_dir_path).then((res)=>{ $(el_window).find('.window-publishWebsite-form').hide(100, function(){ let url = 'https://' + subdomain + '.' + window.hosting_domain + '/'; $(el_window).find('.publishWebsite-published-link').attr('href', url); $(el_window).find('.publishWebsite-published-link').text(url); $(el_window).find('.window-publishWebsite-success').show(100) $(`.item[data-uid="${target_dir_uid}"] .item-has-website-badge`).show(); }); // find all items whose path starts with target_dir_path $(`.item[data-path^="${target_dir_path}"]`).each(function(){ // show the link badge $(this).find('.item-has-website-url-badge').show(); // update item's website_url attribute $(this).attr('data-website_url', url + $(this).attr('data-path').substring(target_dir_path.length)); }) update_sites_cache(); }).catch((err)=>{ $(el_window).find('.publish-website-error-msg').html( err.message + ( err.code === 'subdomain_limit_reached' ? ' Manage Your Subdomains' : '' ) ); $(el_window).find('.publish-website-error-msg').fadeIn(); // re-enable 'Publish' button $(el_window).find('.publish-btn').prop('disabled', false); }) }) $(el_window).find('.publish-window-ok-btn').on('click', function(){ $(el_window).close(); }) } $(document).on('click', '.manage-your-websites-link', async function(e){ UIWindowMyWebsites(); }) export default UIWindowPublishWebsite