on-codemerge
Version:
A WYSIWYG editor for on-codemerge is a user-friendly interface that allows users to edit and view their code in real time, exactly as it will appear in the final product
535 lines (534 loc) • 18.4 kB
JavaScript
/*! on-codemerge v1.3.1 @author Pavel Kuzmin @license MIT @homepage https://s00d.github.io/on-codemerge/ @repository git+https://github.com/s00d/on-codemerge.git Copyright (c) 2026 Pavel Kuzmin - Built on 2026-07-02T13:39:17.947Z */
var l = Object.defineProperty;
var d = (r, e, t) => e in r ? l(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
var i = (r, e, t) => d(r, typeof e != "symbol" ? e + "" : e, t);
import { FieldBuilder as s } from "./FieldBuilder.mjs";
class u {
constructor(e) {
i(this, "templates", []);
i(this, "fieldBuilder");
this.fieldBuilder = new s();
}
/**
* Initialize the template manager
*/
initialize() {
this.initializeTemplates();
}
/**
* Initialize default templates
*/
initializeTemplates() {
this.templates = [
this.createContactFormTemplate(),
this.createRegistrationFormTemplate(),
this.createSurveyFormTemplate(),
this.createPaymentFormTemplate(),
this.createOrderFormTemplate(),
this.createFeedbackFormTemplate(),
this.createResumeFormTemplate(),
this.createBookingFormTemplate(),
this.createNewsletterFormTemplate(),
this.createSatisfactionSurveyTemplate(),
this.createJobApplicationTemplate(),
this.createSupportTicketTemplate()
];
}
/**
* Get all templates
*/
getTemplates() {
return this.templates;
}
/**
* Get categories
*/
getCategories() {
return ["contact", "survey", "registration", "payment", "custom"];
}
/**
* Get category names in English
*/
getCategoryNames() {
return {
contact: "Contact",
survey: "Survey",
registration: "Registration",
payment: "Payment",
custom: "Custom"
};
}
/**
* Create contact form template
*/
createContactFormTemplate() {
return {
id: "contact-form",
name: "Contact Form",
description: "Simple form for user contact",
category: "contact",
config: {
id: "contact-form-template",
method: "POST",
action: "/contact",
className: "contact-form",
fields: [
this.fieldBuilder.createPresetField("text", "Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone"),
this.fieldBuilder.createPresetField("textarea", "Message", {}, { required: !0 })
]
}
};
}
/**
* Create registration form template
*/
createRegistrationFormTemplate() {
return {
id: "registration-form",
name: "Registration Form",
description: "Form for new user registration",
category: "registration",
config: {
id: "registration-form-template",
method: "POST",
action: "/register",
className: "registration-form",
fields: [
this.fieldBuilder.createPresetField("text", "Username", {}, { required: !0, minLength: 3 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField(
"password",
"Password",
{},
{ required: !0, minLength: 6 }
),
this.fieldBuilder.createPresetField("password", "Confirm Password", {}, { required: !0 }),
this.fieldBuilder.createPresetField("checkbox", "Agree to Terms", {}, { required: !0 })
]
}
};
}
/**
* Create survey form template
*/
createSurveyFormTemplate() {
return {
id: "survey-form",
name: "Survey Form",
description: "Form for conducting surveys",
category: "survey",
config: {
id: "survey-form-template",
method: "POST",
action: "/survey",
className: "survey-form",
fields: [
this.fieldBuilder.createPresetField("text", "Your Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Age Group",
{ options: ["18-25", "26-35", "36-45", "46-55", "55+"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"radio",
"Gender",
{ options: ["Male", "Female", "Other"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField("textarea", "Your Suggestions"),
this.fieldBuilder.createPresetField("range", "Service Rating", {}, { required: !0 })
]
}
};
}
/**
* Create payment form template
*/
createPaymentFormTemplate() {
return {
id: "payment-form",
name: "Payment Form",
description: "Form for processing payments",
category: "payment",
config: {
id: "payment-form-template",
method: "POST",
action: "/payment",
className: "payment-form",
fields: [
this.fieldBuilder.createPresetField(
"text",
"Card Number",
{},
{ required: !0, pattern: "^[0-9]{13,19}$" }
),
this.fieldBuilder.createPresetField("text", "Cardholder Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"text",
"Expiry Date",
{},
{ required: !0, pattern: "^(0[1-9]|1[0-2])/([0-9]{2})$" }
),
this.fieldBuilder.createPresetField(
"text",
"CVV",
{},
{ required: !0, pattern: "^[0-9]{3,4}$" }
),
this.fieldBuilder.createPresetField("number", "Amount", {}, { required: !0, min: 0.01 })
]
}
};
}
/**
* Create order form template
*/
createOrderFormTemplate() {
return {
id: "order-form",
name: "Order Form",
description: "Form for product orders and delivery",
category: "custom",
config: {
id: "order-form-template",
method: "POST",
action: "/order",
className: "order-form",
fields: [
this.fieldBuilder.createPresetField("text", "Product Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("number", "Quantity", {}, { required: !0, min: 1 }),
this.fieldBuilder.createPresetField("text", "Customer Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone", {}, { required: !0 }),
this.fieldBuilder.createPresetField("textarea", "Delivery Address", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Delivery Method",
{ options: ["Standard Delivery", "Express Delivery", "Pickup"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField("textarea", "Special Instructions")
]
}
};
}
/**
* Create feedback form template
*/
createFeedbackFormTemplate() {
return {
id: "feedback-form",
name: "Feedback Form",
description: "Form for collecting user feedback and suggestions",
category: "survey",
config: {
id: "feedback-form-template",
method: "POST",
action: "/feedback",
className: "feedback-form",
fields: [
this.fieldBuilder.createPresetField("text", "Your Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Feedback Type",
{ options: ["Bug Report", "Feature Request", "General Feedback", "Complaint", "Praise"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField("text", "Subject", {}, { required: !0 }),
this.fieldBuilder.createPresetField("textarea", "Your Feedback", {}, { required: !0 }),
this.fieldBuilder.createPresetField("range", "Rating", {}, { required: !0 }),
this.fieldBuilder.createPresetField("checkbox", "Allow us to contact you")
]
}
};
}
/**
* Create resume form template
*/
createResumeFormTemplate() {
return {
id: "resume-form",
name: "Resume Form",
description: "Form for job applications and resume submission",
category: "custom",
config: {
id: "resume-form-template",
method: "POST",
action: "/resume",
className: "resume-form",
fields: [
this.fieldBuilder.createPresetField("text", "Full Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone", {}, { required: !0 }),
this.fieldBuilder.createPresetField("text", "Position Applied For", {}, { required: !0 }),
this.fieldBuilder.createPresetField("textarea", "Work Experience", {}, { required: !0 }),
this.fieldBuilder.createPresetField("textarea", "Education"),
this.fieldBuilder.createPresetField("textarea", "Skills"),
this.fieldBuilder.createPresetField("file", "Resume/CV", {}, { required: !0 }),
this.fieldBuilder.createPresetField("textarea", "Cover Letter"),
this.fieldBuilder.createPresetField(
"checkbox",
"I agree to the terms",
{},
{ required: !0 }
)
]
}
};
}
/**
* Create booking form template
*/
createBookingFormTemplate() {
return {
id: "booking-form",
name: "Booking Form",
description: "Form for scheduling appointments and bookings",
category: "custom",
config: {
id: "booking-form-template",
method: "POST",
action: "/booking",
className: "booking-form",
fields: [
this.fieldBuilder.createPresetField("text", "Full Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone", {}, { required: !0 }),
this.fieldBuilder.createPresetField("date", "Booking Date", {}, { required: !0 }),
this.fieldBuilder.createPresetField("time", "Preferred Time", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Service Type",
{ options: ["Consultation", "Appointment", "Meeting", "Event", "Other"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"number",
"Number of People",
{},
{ required: !0, min: 1 }
),
this.fieldBuilder.createPresetField("textarea", "Special Requirements"),
this.fieldBuilder.createPresetField(
"checkbox",
"I confirm my booking",
{},
{ required: !0 }
)
]
}
};
}
/**
* Create newsletter subscription form template
*/
createNewsletterFormTemplate() {
return {
id: "newsletter-form",
name: "Newsletter Subscription",
description: "Form for newsletter and email subscription",
category: "contact",
config: {
id: "newsletter-form-template",
method: "POST",
action: "/newsletter",
className: "newsletter-form",
fields: [
this.fieldBuilder.createPresetField("text", "First Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("text", "Last Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"email",
"Email Address",
{},
{ required: !0, email: !0 }
),
this.fieldBuilder.createPresetField("select", "Newsletter Type", {
options: ["General", "Technology", "Business", "Lifestyle", "All"]
}),
this.fieldBuilder.createPresetField("checkbox", "Weekly Newsletter"),
this.fieldBuilder.createPresetField("checkbox", "Monthly Newsletter"),
this.fieldBuilder.createPresetField("checkbox", "Special Offers"),
this.fieldBuilder.createPresetField(
"checkbox",
"I agree to receive emails",
{},
{ required: !0 }
)
]
}
};
}
/**
* Create satisfaction survey template
*/
createSatisfactionSurveyTemplate() {
return {
id: "satisfaction-survey",
name: "Satisfaction Survey",
description: "Form for measuring customer satisfaction",
category: "survey",
config: {
id: "satisfaction-survey-template",
method: "POST",
action: "/satisfaction-survey",
className: "satisfaction-survey",
fields: [
this.fieldBuilder.createPresetField("text", "Customer Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("select", "Product/Service Used", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"radio",
"Overall Satisfaction",
{
options: ["Very Satisfied", "Satisfied", "Neutral", "Dissatisfied", "Very Dissatisfied"]
},
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"radio",
"Would you recommend us?",
{ options: ["Definitely", "Probably", "Not Sure", "Probably Not", "Definitely Not"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"radio",
"Value for Money",
{ options: ["Excellent", "Good", "Fair", "Poor", "Very Poor"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField("textarea", "What did you like most?"),
this.fieldBuilder.createPresetField("textarea", "What could we improve?"),
this.fieldBuilder.createPresetField("checkbox", "Allow us to use your feedback")
]
}
};
}
/**
* Create job application form template
*/
createJobApplicationTemplate() {
return {
id: "job-application",
name: "Job Application",
description: "Form for job applications and recruitment",
category: "custom",
config: {
id: "job-application-template",
method: "POST",
action: "/job-application",
className: "job-application",
fields: [
this.fieldBuilder.createPresetField("text", "First Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("text", "Last Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone", {}, { required: !0 }),
this.fieldBuilder.createPresetField("text", "Position", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Experience Level",
{ options: ["Entry Level", "Mid Level", "Senior Level", "Executive"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"textarea",
"Why should we hire you?",
{},
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"textarea",
"Previous Experience",
{},
{ required: !0 }
),
this.fieldBuilder.createPresetField("file", "Resume", {}, { required: !0 }),
this.fieldBuilder.createPresetField("file", "Cover Letter"),
this.fieldBuilder.createPresetField("checkbox", "I am available for interview"),
this.fieldBuilder.createPresetField(
"checkbox",
"I agree to the terms",
{},
{ required: !0 }
)
]
}
};
}
/**
* Create support ticket form template
*/
createSupportTicketTemplate() {
return {
id: "support-ticket",
name: "Support Ticket",
description: "Form for creating support tickets and technical issues",
category: "custom",
config: {
id: "support-ticket-template",
method: "POST",
action: "/support-ticket",
className: "support-ticket",
fields: [
this.fieldBuilder.createPresetField("text", "Full Name", {}, { required: !0 }),
this.fieldBuilder.createPresetField("email", "Email", {}, { required: !0, email: !0 }),
this.fieldBuilder.createPresetField("tel", "Phone", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"select",
"Issue Category",
{
options: [
"Technical Issue",
"Billing Question",
"Feature Request",
"Bug Report",
"General Inquiry"
]
},
{ required: !0 }
),
this.fieldBuilder.createPresetField(
"select",
"Priority Level",
{ options: ["Low", "Medium", "High", "Critical"] },
{ required: !0 }
),
this.fieldBuilder.createPresetField("text", "Subject", {}, { required: !0 }),
this.fieldBuilder.createPresetField(
"textarea",
"Description of Issue",
{},
{ required: !0 }
),
this.fieldBuilder.createPresetField("file", "Screenshots/Attachments"),
this.fieldBuilder.createPresetField("textarea", "Steps to Reproduce"),
this.fieldBuilder.createPresetField(
"checkbox",
"I agree to the support terms",
{},
{ required: !0 }
)
]
}
};
}
/**
* Получает шаблон по ID
*/
getTemplate(e) {
return this.templates.find((t) => t.id === e);
}
/**
* Экспортирует шаблон в JSON
*/
exportTemplate(e) {
const t = this.getTemplate(e);
return t ? JSON.stringify(t, null, 2) : null;
}
}
export {
u as TemplateManager
};