-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.min.js
More file actions
14 lines (14 loc) · 12 KB
/
script.min.js
File metadata and controls
14 lines (14 loc) · 12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let isTableGenerated=!1,columns=[];const navLinks=document.querySelectorAll(".nav-link"),editor=CodeMirror.fromTextArea(document.getElementById("codeEditor"),{lineNumbers:!0,mode:"javascript",theme:"dracula",matchBrackets:!0,autoCloseBrackets:!0,extraKeys:{"Ctrl-Space":"autocomplete"},viewportMargin:1/0,lineWrapping:!0});function loadChapterContent(e){if(!isTableGenerated){showPopupMessage("Please create the data extension first before generating the AMPscript code.");return}let t=`https://raw.githubusercontent.com/b2Shashi-mc/ampscript/main/${e}.amp`;fetch(t).then(e=>{if(e.ok)return e.text();throw Error("Chapter not found")}).then(t=>{t=replacePlaceholders(t,e),editor.setValue(t)}).catch(e=>{console.error("Error fetching chapter:",e),showPopupMessage("Failed to load chapter content")})}function generateColumnAssignments(e=[]){let t="",n="";for(let l=0;l<e.length;l++)e[l]&&(t+=`set @${e[l].name} = Field(@row, "${e[l].name}")
`);return n+=`" ${e[0].name}: ", @${e[0].name}`,{columnAssignments:t,outputLineColumns:n}}function replacePlaceholders(e,t){switch(t){case"chapter1":e=(e=(e=e.replace(/{{attributeToFetch}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{attributeToSearch}}/g,columns[1]?`"${columns[1].name}"`:'""')).replace(/{{valueToSearch}}/g,(columns[2],'""'));break;case"chapter2":case"chapter3":e=(e=e.replace(/{{attributeToSearch}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{valueToSearch}}/g,(columns[2],'""'));let{columnAssignments:n,outputLineColumns:l}=generateColumnAssignments(columns);e=(e=e.replace(/{{columnAssignments}}/g,n)).replace(/{{outputLineColumns}}/g,l);break;case"chapter4":case"chapter5":e=(e=(e=e.replace(/{{attributeToSearch}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{attributeToSort}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{valueToSearch}}/g,(columns[2],'""'));let{columnAssignments:a,outputLineColumns:o}=generateColumnAssignments(columns);e=(e=e.replace(/{{columnAssignments}}/g,a)).replace(/{{outputLineColumns}}/g,o);break;case"chapter6":case"chapter7":let s=columns.map(e=>`set @${e.name} = ""`).join("\n "),c=columns.map(e=>`"${e.name}", @${e.name}`).join(", ");e=(e=e.replace(/{{#columns}}[\s\S]*?{{\/columns}}/g,s)).replace(/{{#columns_comma}}[\s\S]*?{{\/columns_comma}}/g,c);break;case"chapter8":case"chapter9":case"chapter10":case"chapter11":if(!columns||0===columns.length){console.error("Columns array is empty or undefined");break}e=e.replace(/{{column1}}/g,columns[0]?`${columns[0].name}`:'""');let i=columns.slice(1).map(e=>`set @${e.name} = "DefaultUpdateValue"`).join("\n ");e=e.replace(/{{#columns}}[\s\S]*?{{\/columns}}/g,i);let r=columns.slice(1).map(e=>`"${e.name}", @${e.name}`).join(", ");e=e.replace(/{{#columns_comma}}[\s\S]*?{{\/columns_comma}}/g,r);break;case"chapter12":case"chapter13":case"chapter14":e=(e=e.replace(/{{attributeToSearch}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{valueToSearch}}/g,(columns[2],'""'));let u=columns.find(e=>"Date"===e.type);e=e.replace(/{{datecolumn}}/g,u?`"${u.name}"`:'""'),u||showPopupMessage("There is no date field defined!");break;case"chapter16":case"chapter17":e=(e=(e=e.replace(/{{attributeToSearch}}/g,columns[0]?`"${columns[0].name}"`:'""')).replace(/{{valueToSearch}}/g,(columns[2],'""'))).replace(/{{rows}}/g,columns?columns.length-1:0);let d=columns.slice(1).map(e=>`set @${e.name} = Field(@row, "${e.name}")`).join("\n ");e=e.replace(/{{#columns}}[\s\S]*?{{\/columns}}/g,d);let m=columns.slice(1).map(e=>`"${e.name}__c", @${e.name}`).join(", ");e=e.replace(/{{#columns_comma}}[\s\S]*?{{\/columns_comma}}/g,m);break;default:console.warn(`No specific replacement logic for chapter: ${t}`)}return e}function toggleTheme(){let e=editor.getOption("theme");editor.setOption("theme","dracula"===e?"default":"dracula");let t=document.body;t.classList.toggle("light-theme"),t.classList.toggle("dark-theme")}function updateProgress(){var e=document.documentElement.scrollHeight-window.innerHeight,t=window.scrollY;document.getElementById("progressIndicator").style.width=t/e*100+"%"}function copyCode(){var e=editor.getValue(),t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t),showCopyModal()}function showCopyModal(){var e=document.getElementById("copyModal");e.style.display="block",setTimeout(function(){e.style.display="none"},2e3)}function showPopupMessage(e){let t=document.getElementById("messageModal"),n=document.getElementById("popupMessageContent");n.textContent=e,t.style.display="block",t.setAttribute("aria-hidden","false"),setTimeout(function(){t.style.display="none"},5e3)}function setActiveChapterLink(e){document.querySelectorAll(".nav-link").forEach(e=>{e.classList.remove("active")});let t=document.querySelector(`.nav-link[data-chapter="${e}"]`);t&&t.classList.add("active")}document.getElementById("toggleThemeButton").addEventListener("click",toggleTheme),document.querySelectorAll(".nav-link").forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();let t=e.target.getAttribute("data-chapter");loadChapterContent(t),document.querySelectorAll(".nav-link").forEach(e=>{e.classList.remove("active")}),this.classList.add("active")})}),document.getElementById("defineColumns").addEventListener("click",function(){let e=document.getElementById("numColumns").value,t=document.getElementById("columnContainer");if(e<3){showPopupMessage("Please specify at least 3 attributes that you would like to define for the data extension."),document.getElementById("numColumns").focus();return}t.innerHTML="",columns=[];for(let n=0;n<e;n++){let l=document.createElement("div");l.classList.add("column-input"),l.innerHTML=`
<input type="text" id="colName${n}" placeholder="Attribute Name" required>
<select id="colType${n}">
<option value="Text">Text</option>
<option value="EmailAddress">EmailAddress</option>
<option value="Number">Number</option>
<option value="Date">Date</option>
<option value="Boolean">Boolean</option>
<option value="Phone">Phone</option>
<option value="Locale">Locale</option>
</select>
<input type="number" id="colLength${n}" placeholder="Max Length" required>
`,t.appendChild(l);let a=document.getElementById(`colType${n}`),o=document.getElementById(`colLength${n}`);a.addEventListener("change",function(){"Date"===a.value||"Number"===a.value||"Boolean"===a.value||"Phone"===a.value||"Locale"===a.value?(o.disabled=!0,o.value=""):"EmailAddress"===a.value?(o.disabled=!0,o.value=254):(o.value=50,o.disabled=!1)}),("Date"===a.value||"Number"===a.value)&&(o.disabled=!0)}document.getElementById("generateTableButton").style.display="inline-block",document.getElementById("columnForm").style.display="none"}),document.getElementById("generateTableButton").addEventListener("click",function(){let e=document.getElementById("numColumns").value,t=document.getElementById("tableContainer");t.innerHTML="",columns=[];for(let n=0;n<e;n++){let l=document.getElementById(`colName${n}`).value,a=document.getElementById(`colType${n}`).value,o=document.getElementById(`colLength${n}`).value;if("Text"===a&&(!l||!a||!o)){showPopupMessage(`Please fill in all details for Attribute ${n+1}`),document.getElementById(`colName${n}`).focus();return}columns.push({name:l,type:a,length:o})}let s=document.createElement("table");s.classList.add("table"),s.style.width="100%",s.style.borderCollapse="collapse";let c=s.insertRow();["Column Name","Data Type","Max Length"].forEach(e=>{let t=c.insertCell();t.innerHTML=`<strong>${e}</strong>`,t.style.border="1px solid #ccc",t.style.padding="8px",t.style.textAlign="left"}),columns.forEach(e=>{let t=s.insertRow(),n=[e.name,e.type,e.length];n.forEach(e=>{let n=t.insertCell();n.innerHTML=e,n.style.border="1px solid #ccc",n.style.padding="8px",n.style.textAlign="left"})}),t.appendChild(s),document.getElementById("defineColumns").style.display="none",document.getElementById("generateTableButton").style.display="none",document.getElementById("columnContainer").style.display="none",document.getElementById("numColumns").style.display="none";let i=document.createElement("div");i.classList.add("button-container"),t.appendChild(i);let r=document.createElement("button");r.id="addRowButton",r.innerText="Add Row",r.style.display="none",i.appendChild(r),r.addEventListener("click",function(){let e=s.insertRow();["","",""].forEach((t,n)=>{let l=e.insertCell(n),a=document.createElement("input");a.type="text",a.value=t,l.appendChild(a),l.style.border="1px solid #ccc",l.style.padding="8px",l.style.textAlign="left"}),columns.push({name:"",type:"",length:""})});let u=document.getElementById("editButtonContainer");u.innerHTML="";let d=document.createElement("button");d.id="editButton",d.innerText="Edit",i.appendChild(d);let m=!1;d.addEventListener("click",function(){let e=s.getElementsByTagName("tr");if(m){let t=!0,n=!0,l=!0;for(let a=1;a<e.length;a++){let o=e[a].getElementsByTagName("td"),c=o[0].querySelector("input"),i=o[1].querySelector("input"),u=o[2].querySelector("input");if(!c.value||!i.value||!u.value){t=!1;break}if("Text"!==i.value&&"Boolean"!==i.value&&"Number"!==i.value&&"Date"!==i.value&&"Locale"!==i.value&&"Phone"!==i.value&&"EmailAddress"!==i.value){n=!1;break}if(isNaN(u.value)){l=!1;break}}if(!t){showPopupMessage("Please fill in all fields before saving.");return}if(!n){showPopupMessage("Invalid data type selected.");return}if(!l){showPopupMessage("Please enter a valid number for length");return}for(let p=1;p<e.length;p++){let g=e[p].getElementsByTagName("td"),h=g[0].querySelector("input"),y=g[1].querySelector("input"),v=g[2].querySelector("input");columns[p-1].name=h.value,columns[p-1].type=y.value,columns[p-1].length=v.value,g[0].innerHTML=h.value,g[1].innerHTML=y.value,g[2].innerHTML=v.value}d.innerText="Edit",r.style.display="none"}else{for(let f=1;f<e.length;f++){let E=e[f].getElementsByTagName("td"),b=E[0].innerText,B=E[1].innerText,L=E[2].innerText;E[0].innerHTML=`<input type="text" value="${b}">`,E[1].innerHTML=`<input type="text" value="${B}">`,E[2].innerHTML=`<input type="text" value="${L}">`}d.innerText="Save",r.style.display="inline"}m=!m}),isTableGenerated=!0,loadChapterContent("chapter1"),setActiveChapterLink("chapter1")}),window.addEventListener("scroll",updateProgress),updateProgress(),document.getElementById("chapterSearch").addEventListener("input",function(){let e=this.value.toLowerCase(),t=document.querySelectorAll(".chapter-list li");t.forEach(function(t){let n=t.textContent.toLowerCase();n.includes(e)?t.style.display="":t.style.display="none"})}),window.onload=function(){document.getElementById("numColumns").focus()},document.getElementById("closeModal").onclick=function(){document.getElementById("popupModal").style.display="none",document.getElementById("numColumns").focus()},document.getElementById("defineColumnsBtn").onclick=function(){document.getElementById("popupModal").style.display="none",document.getElementById("numColumns").focus()},document.getElementById("instructionsbtn").onclick=function(){document.getElementById("messageModal").style.display="none"},document.addEventListener("contextmenu",function(e){e.preventDefault()},!1),document.addEventListener("keydown",function(e){e.ctrlKey&&("u"===e.key||"U"===e.key)&&e.preventDefault()}),document.getElementById("closeMessageModal").addEventListener("click",function(){let e=document.getElementById("messageModal");e.style.display="none",e.setAttribute("aria-hidden","true")}),window.addEventListener("click",function(e){let t=document.getElementById("messageModal");e.target===t&&(t.style.display="none",t.setAttribute("aria-hidden","true"))}),document.getElementById("ws-proxy").addEventListener("click",function(){window.open("https://b2shashi-mc.github.io/WS-Proxy/","_blank")}),document.getElementById("data-views").addEventListener("click",function(){window.open("https://b2shashi-mc.github.io/data-views/","_blank")}),document.getElementById("SSJS").addEventListener("click",function(){window.open("https://b2shashi-mc.github.io/ssjs-core/","_blank")}),document.getElementById("ampscript").addEventListener("click",function(){window.open("https://b2shashi-mc.github.io/ampscript-soap-api/","_blank")});