관리-도구
편집 파일: funnel_control.js
var request = new ajaxRequest(); var visualloader = new visualLoader(); var initialtemplate = "Test This template"; var tmpltcrdstyle = { height: "200px", width: "100%" }; Vue.component('is_ajax_loading', { template: `<div class="overlay"></div>`, }); //Page control context Vue.component('page_context', { template: ` <div class="fnl_page_context" v-bind:style="{display: (show)? 'block':'none'}"> <div v-on:click="visit()"><i class="fas fa-globe"></i> ${t('Visit Page')}</div> <hr/> <div v-on:click="changeLevel(true)"><i class="fas fa-arrow-circle-up"></i> ${t('Move page one level up')}</div> <hr/> <div v-on:click="changeLevel(false)"><i class="fas fa-arrow-circle-down"></i> ${t('Move page one level down')}</div> <hr/> <div v-on:click="del()"><i class="fas fa-trash"></i> Delete</div> <div v-on:click="copyPage()"><i class="fas fa-copy"></i> ${t('Duplicate Page')}</div> </div> `, props: ['show'], methods: { del: function () { funnel.deleteCurrent(); }, visit: function () { funnel.show_context = false; let url = `${funnel.funnel_url}/${funnel.page_foler_name}`; window.open(url, '_blank'); }, changeLevel: function (up = false) { funnel.changeLevel(up); }, copyPage: function () { funnel.copyCurrent(); }, } }); //Funnels rename Vue.component('funnel_rename', { template: ` <div class="col-sm-4"> <div class="card clone-funnel-template-card shadow"> <div class="card-header card-header-copy text-center"> <div class="row"><div class="col">{{t('Rename Funnel')}}</div><div class="col text-right"> <i class="fas fa-times-circle" style="cursor:pointer" v-on:click="doToggle()"></i> </div></div></div> <div class="card-body"> <div class="mb-3"> <input type="text" class="form-control" v-bind:placeholder="t('Enter Funnel Name')" v-model="funnelname"> </div> <div class="mb-3 text-center text-error" v-if="(err.length>0)" v-html="t(err)"></div> <div class="mb-3"> <button class="btn btn-block theme-button form-control" v-on:click="renameFunnels()">{{t('Rename Funnel')}}</button> </div> <div class="mb-3 text-success text-center" v-if="(success.length>0)" v-html="t(success)"></div> </div> </div> </div> `, props: ['toggle', 'funnel_name'], mounted: function () { this.funnelname = funnel.funnel_name; }, data: function () { return { funnelname: "", success: '', err: '', }; }, methods: { t: function (txt, arr = []) { return t(txt, arr); }, doToggle: function () { this.toggle(); }, renameFunnels: function () { const url = new URL(window.location.href); const funnel_id = url.searchParams.get("id"); var name = this.funnelname.toLowerCase().split(" "); var name = name.join("-"); name = funnel.removeSpecialChars(name); var data = { "funnelid": funnel_id, "funnelname": name, renamefunnels: 1 }; request.postRequestCb('req.php', data, (data) => { if (data.trim() == 1) { this.success = "Funnel Renamed Successfully"; this.err = ""; setTimeout(() => { this.success = ""; this.doToggle(); window.location.reload(); }, 2000); } else { this.err = data; this.success = ""; } }); } } }); //Vue funnel cloning container Vue.component('funnel_cloner', { template: `<div class="col-sm-4"> <div class="card clone-funnel-template-card shadow"> <div class="card-header card-header-copy text-center"> <div class="row"><div class="col">{{t('Copy Funnel')}}</div><div class="col text-right"> <i class="fas fa-times-circle" style="cursor:pointer" v-on:click="doToggle()"></i> </div></div></div> <div class="card-body"> <div class="alert alert-info">{{t('Please provide funnel token to start the installation process')}}</div> <div class="mb-3"> <input type="text" class="form-control" v-bind:placeholder="t('Enter Funnel Code')" v-model="remote_id"> </div> <div class="mb-3 text-center" v-if="(err.length>0)" v-html="t(err)"></div> <div class="mb-3"> <button class="btn btn-block theme-button form-control" v-on:click="createPage()">{{t('Start Cloning')}}</button> </div> </div> </div> </div>`, props: ['toggle'], data: function () { return { remote_id: "", err: "", }; }, methods: { t: function (txt, arr = []) { let str = t(txt, arr); return this.decodeHTMLEntities(str); }, decodeHTMLEntities: function (str) { if (str && typeof str === 'string') { var txt = document.createElement("textarea"); txt.innerHTML = str; str = txt.value; } return str; }, doToggle: function () { this.toggle(); }, createPage: async function () { this.err = ""; this.remote_id = this.remote_id.trim(); if (this.remote_id.length < 1) { return; } let loader = new visualLoader(); loader.set(document.querySelectorAll(".clone-funnel-template-card")[0]); loader.load('Loading...'); let pages = []; let get_pages = await (new Promise((resolve, reject) => { request.postRequestCb('req.php', { clone_funnel_get_map: this.remote_id, current_funnel: funnel.current_funnel }, function (data) { try { pages = JSON.parse(data); resolve(pages); return; } catch (err) { console.log(err); resolve(false); return; } }); })); if (get_pages && Array.isArray(pages) && pages.length > 0) { try { let lbl_container = document.querySelectorAll("#lblbtncontainer")[0]; let older_lbls = lbl_container.getElementsByTagName("button"); for (let i = older_lbls.length; i >= 1; i--) { lbl_container.removeChild(older_lbls[i - 1]); } let start = 0; let counted_pages = []; for (let i = 0; i < pages.length; i++) { let page = pages[i]; let done = await qfnlSiteDownloader(page.page_url, 'init_content', page.page_content); let btn; if (counted_pages.indexOf(page.filename) === -1) { counted_pages.push(page.filename); funnel.new_lbl_name = page.filename; addNewLabel(); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 1000); }); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 200); }); btn = lbl_container.getElementsByTagName("button")[i]; btn.setAttribute('category', page.category); } else { btn = lbl_container.getElementsByTagName("button")[counted_pages.indexOf(page.filename)]; } await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 200); }); btn.dispatchEvent(new Event("mousedown")); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 100); }); let clone_req = { qfnl_clone_site: page.page_url, clone_step: "download" }; clone_req = { ...clone_req, "funnel_id": funnel.current_funnel, "ab_type": page.type, "lavel": funnel.template_selector_btn, "category": funnel.selected_template_category, "page": funnel.page_foler_name }; await new Promise((resolve, reject) => { request.postRequestCb('req.php', clone_req, (data) => { resolve(true); }); }); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 200); }); funnel.funnalSettingToggle(); funnel.page_meta = JSON.parse(page.metadata); funnel.page_title = page.title; funnel.template_has_a_b_test = (parseInt(page.hasabtest)) ? true : false; if (page.active_type !== undefined) { funnel.page_active_type = page.active_type.trim(); } let saved_settings = JSON.parse(page.settings); saved_settings.snippet_integrations = []; funnel.page_settings = saved_settings; funnel.page_header_scripts = page.pageheader; funnel.page_footer_scripts = page.pagefooter; funnel.valid_inputs_pages = page.inputs; await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 200); }); await new Promise((resolve, reject) => { funnel.updatecurrentfunnelsetting((data) => { resolve(data); }); }); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 400); }); await funnel.takeCurrentScreenshot(funnel.current_funnel, funnel.page_foler_name, page.type, funnel.template_selector_btn, funnel.selected_template_category); await new Promise((resolve, reject) => { setTimeout(function () { resolve(true); }, 400); }); funnel.funnalSettingToggle(); } loader.done(); window.location = `index.php?page=create_funnel&id=${funnel.current_funnel}`; } catch (err) { console.log(err); } } else { loader.unable(this.t("Something wrong please try again.")); setTimeout(function () { loader.unset(); }, 1000); this.err = `<p class='text-center text-danger'>${this.t('Something wrong please try again.')}</p>`; } } }, watch: {} }); //blank website label template Vue.component("qfnl-addnew-lbl", { template: `<div class="addnewlblanddroplabel"><button class="btn intro-newpage theme-button btn-block mt-2" data-bs-toggle="modal" data-bs-target="#upgradeFromFreeModal" v-if="all_pages>=4 && user_plan_type==2"><i class="fas fa-plus"></i> {{t("New Page")}}</button><button class="btn intro-newpage theme-button btn-block mt-2" v-on:click="openLabelNameAdder()" v-else><i class="fas fa-plus"></i> {{t("New Page")}}</button></div> `, data: function () { return { openclosename: 0, lblname: "", }; }, props: { user_plan_type: { type: Number, default: 2 }, all_pages: { type: Number, default: 0 } }, methods: { t: function (txt, arr = []) { let str = t(txt, arr); return this.decodeHTMLEntities(str); }, decodeHTMLEntities: function (str) { if (str && typeof str === 'string') { var txt = document.createElement("textarea"); txt.innerHTML = str; str = txt.value; } return str; }, openLabelNameAdder: function () { funnel.close_new_model = true; }, }, }); //AB template start Vue.component('template-detail', { template: "<div class='card template-card shadow' v-bind:style='{display:(haspage)? \"block\":\"none\"}'><div class='card-header card-header-copy text-center'>{{t('Template')}} {{(name=='a')? '':'B'}}</div><div v-bind:class='\" card-body abdivcontent\"+name+lbl' style='height:250px;background-color:#fff;' v-html='(hashtml)? hascontent:nocontent'></div><div class='card-footer justify-content-center footerabstat'><div class='row'><div class='col-5'><p>{{t('Views')}}: {{t(views.toLocaleString())}}</p><p>{{t('Conversion')}}: <span v-html='t(converts)'></span></p></div><div class='col-7 text-right'><span v-html='(hashtml)? hastemplate:notemplate'></span></div></div></div>{{chkLbl()}}</div>", props: ['name', 'fid', 'lbl', 'backgroundimg'], mounted: function () { this.initTemplate(); }, data: function () { return { haspage: true, cachelbl: 1, views: 0, converts: 0, reattempt: 0, hashtml: false, nocontent: "<div><center><h3 style='font-size:200px;opacity:0.2;'><i class='fas fa-image'></i></h3></center></div>", hascontent: "<div></div>", notemplate: "<div><button type='button' class='btn theme-button btn-xs' style='display:inline-block;margin-right:2px;min-width:158px;margin-bottom:2px;' onclick='openTemplateSelector(\"" + this.name + "\")'>" + t('Choose Template') + " <i class='far fa-hand-point-up' ></i></button><button type='button' class='btn theme-button btn-xs' style='display:inline-block;min-width:158px;' onclick='editTemplate(" + this.fid + ",\"" + this.name + "\")'>" + t('Create From Scratch') + " <i class='fas fa-pencil-alt'></i></button></div>", hastemplate: "<div><button type='button' class='btn theme-button btn-xs' style='display:inline-block;margin-right:2px;min-width:158px;margin-bottom:2px;' onclick='openTemplateSelector(\"" + this.name + "\")'>" + t('Change Template') + " <i class='far fa-hand-point-up' ></i></button><button type='button' style='display:inline-block;min-width:158px;' class='btn theme-button btn-xs' onclick='editTemplate(" + this.fid + ",\"" + this.name + "\")'>" + t("Edit Existing Page") + " <i class='far fa-edit' ></i></button></div>", cardbg: { height: '300px', backgroundColor: "#fff", }, } }, methods: { t: function (txt, arr = []) { let str = t(txt, arr); return this.decodeHTMLEntities(str); }, decodeHTMLEntities: function (str) { if (str && typeof str === 'string') { var txt = document.createElement("textarea"); txt.innerHTML = str; str = txt.value; } return str; }, test: function () { alert(1); }, initTemplate: function () { var thisvue = this; try { setTimeout(function () { thisvue.haspage = (funnel.page_foler_name.trim().length > 0) ? true : false; var settingcircles = document.getElementsByClassName("setiingcircle"); for (var i = 0; i < settingcircles.length; i++) { settingcircles[i].style.display = (thisvue.haspage) ? 'block' : 'none'; } }, 20); } catch (err) { console.log(err.message); } try { setTimeout(function () { document.getElementsByClassName("abdivcontent" + thisvue.name + thisvue.lbl)[0].style.backgroundColor = "#fff"; document.getElementsByClassName("abdivcontent" + thisvue.name + thisvue.lbl)[0].style.backgroundImage = "url()"; }, 200); this.cachelbl = this.lbl; var loada = new visualLoader(); var loadb = new visualLoader(); try { loada.set(document.getElementsByClassName("template-card")[0]); loadb.set(document.getElementsByClassName("template-card")[1]); loada.load(); loadb.load(); } catch (err) { console.log(err.message); } var reqdata = { "currentfunnelabdetail": 1, "funnel_id": this.fid, "label": this.lbl, "type": this.name }; var currentabtype = this.name; request.postRequestCb('req.php', reqdata, function (data) { try { var tempdata = data.trim(); if (tempdata.length > 2) { try { var jsn = JSON.parse(tempdata); } catch (errrr) { if (thisvue.reattempt == 0) { thisvue.initTemplate(); ++thisvue.reattempt; loada.unset(); loadb.unset(); } } funnel.page_title = jsn.title; try { var tempmetadata = JSON.parse(jsn.metadata); funnel.page_meta = tempmetadata; } catch (err) { console.log(err.message); } funnel.page_foler_name = jsn.filename; funnel.page_header_scripts = jsn.pageheader; funnel.page_footer_scripts = jsn.pagefooter; funnel.valid_inputs_pages = jsn.valid_inputs; funnel.selected_smtp = jsn.primarysmtp; funnel.selected_product = jsn.product.split(','); funnel.selected_payment_method = jsn.paymentmethod; funnel.selected_membership_pages = jsn.membership.split(','); if (jsn.active_type !== undefined) { funnel.page_active_type = jsn.active_type.trim(); } if (jsn.settings.length > 0) { try { funnel.page_settings = JSON.parse(jsn.settings.trim()); } catch (erst) { console.log(erst); } } var hasab = jsn.hasabtest; if (thisvue.name !== 'b') { if (hasab == '1') { funnel.template_has_a_b_test = true; } else { funnel.template_has_a_b_test = false; } } funnel.init_ab_turn_on = false; if (jsn.verified_membership_page !== undefined) { if (jsn.verified_membership_page == 1) { funnel.verifyed_membership_page = true; } else { funnel.verifyed_membership_page = false; } } var autorespondersarr = jsn.selares.split('@'); var selectedautoresponders = document.getElementById("autoreslist").querySelectorAll("input[type=checkbox]"); for (var i = 0; i < selectedautoresponders.length; i++) { if (autorespondersarr.indexOf(selectedautoresponders[i].value) < 0) { selectedautoresponders[i].checked = false; } else { selectedautoresponders[i].checked = true; } } var listsarr = jsn.lists.split('@'); var selectedlists = document.getElementById("listslist").querySelectorAll("input[type=checkbox]"); for (var i = 0; i < selectedlists.length; i++) { if (listsarr.indexOf(selectedlists[i].value) < 0) { selectedlists[i].checked = false; } else { selectedlists[i].checked = true; } } setTimeout(function () { thisvue.views = jsn.viewcount; thisvue.converts = "<a href='index.php?page=optins&funnelid=page@" + funnel.current_funnel + "@" + jsn.id + "'>" + jsn.convertcount.toLocaleString() + "</a>"; thisvue.hashtml = true; try { let fURL = ""; try { fURL = `${funnel.funnel_url}/${jsn.templateimg}`; } catch (err) { console.log(err); } setPreview(fURL, "abdivcontent" + jsn.type + jsn.level, jsn.type); document.getElementsByClassName("abdivcontent" + jsn.type + jsn.level)[0].style.backgroundRepeat = "no-repeat"; document.getElementsByClassName("abdivcontent" + jsn.type + jsn.level)[0].style.backgroundSize = "contain"; document.getElementsByClassName("abdivcontent" + jsn.type + jsn.level)[0].style.backgroundPosition = "center"; document.getElementsByClassName("abdivcontent" + jsn.type + jsn.level)[0].style.height = "250px"; } catch (errrdf) { console.log(errrdf); } }, 2000); } else { thisvue.hashtml = false; if (currentabtype != 'b') { //autoresponders var selectedautoresponders = document.getElementById("autoreslist").querySelectorAll("input[type=checkbox]"); for (var i = 0; i < selectedautoresponders.length; i++) { selectedautoresponders[i].checked = false; } //selected lists var selectedlistssss = document.getElementById("listslist").querySelectorAll("input[type=checkbox]"); for (var i = 0; i < selectedlistssss.length; i++) { selectedlistssss[i].checked = false; } } } loada.unset(); loadb.unset(); } catch (err) { console.log(err.message); } }); } catch (err) { console.log(err.message); } }, chkLbl: function () { if (this.cachelbl != this.lbl) { if (funnel.manual_selection && (this.cachelbl > 0 && this.lbl > 0)) { funnel.initSetup(); funnel.manual_selection = false; } this.initTemplate(); } }, }, }); //AB template Ends function setPreview(url, cls, type) { try { let ifr = document.querySelectorAll(`iframe.screenshot_ifr_${type}`)[0]; ifr.src = url; let doc; try { doc = document.getElementsByClassName(cls)[0]; doc.style.backgroundImage = `url("assets/img/visual_cog.gif")`; } catch (err) { console.log(err); } ifr.onload = function () { html2canvas(ifr.contentWindow.document.body, { width: 1200 }).then(canvas => { try { let url = canvas.toDataURL('image/png'); doc.style.backgroundImage = `url("${url}")`; doc.style.backgroundSize = 'cover'; } catch (err) { console.log(err); } }); }; } catch (err) { console.log(err); } } var funnel = new Vue({ el: "#funnel", mounted: function () { this.initHideContext(); }, data: { is_ajax_loading: false, funnel_name: "", funnel_host: document.getElementById("hostname").value, funnel_url: document.getElementById("hostname").value, funnel_url_full: document.getElementById("funnel_url").value, funnel_url_slug: "", err: "", funnel_type: 'membership', course_type: '0', //free or paid manual_selection: false, step: [true, false], current_funnel: 0, current_step: 'step_1', funnel_modify_pre_index: 0, template_detail_a: initialtemplate, template_detail_b: initialtemplate, template_has_a_b_test: false, tmpltcrdstyle: tmpltcrdstyle, template_selector_btn: 0, pagecount_start_from: 1, movable_element: 0, page_title: "", page_foler_name: "", page_header_scripts: "", page_footer_scripts: "", funnel_setting_err: "", funnel_setting_view: false, common_inputs_for_current_funnel: "firstname,lastname,name,email,phone,password,reenterpassword,remember_user", valid_inputs_pages: "firstname,lastname,name,email,phone,password,reenterpassword,remember_user", new_lbl_name: "", selected_template_category: "all", tempselected_category: "all", templatecontaineropened: 0, template_under_download: false, verifyed_membership_page: false, selected_smtp: "phpmailer", selected_product: [0], selected_payment_method: 0, new_label: 'Page', new_category: 'all', close_new_model: false, selected_membership_pages: [], page_meta: { description: '', icon: '', keywords: '', robots: '', copyright: '', DC_title: '' }, page_settings: { cookie_notice: 0, redirect_for_post: 0, redirect_for_post_url: '', snippet_integrations: [], page_cache: 0, zapier_enable: false, pabbly_enable: false, active_amp: false }, funnel_cloner_opened: false, init_ab_turn_on: false, funnel_rename_opened: false, initiated_template_blocks: false, force_rename: false, show_context: false, page_position_changing: false, pglvl_active: 0, page_active_type: 'NA', }, methods: { t: function (txt, arr = []) { let str = t(txt, arr); return this.decodeHTMLEntities(str); }, decodeHTMLEntities: function (str) { if (str && typeof str === 'string') { var txt = document.createElement("textarea"); txt.innerHTML = str; str = txt.value; } return str; }, doInitAbTurnOn: function () { this.init_ab_turn_on = true; }, toggleFunnelCloner: function () { this.funnel_cloner_opened = !this.funnel_cloner_opened; }, toggleFunnelRename: function () { this.funnel_rename_opened = !this.funnel_rename_opened; }, addFunnelAndPageValidInput: function (var_name, e) { let value = e.target.value; let reg = /[\n]+/g; let inp_arr = value.replace(reg, ",").split(","); let final_arr = []; inp_arr.map((data) => { data = data.trim(); if (data.length > 0) { final_arr.push(data); } }); eval(`this.${var_name}=final_arr.join(',')`); }, initSetup: function () { this.template_has_a_b_test = false; this.page_title = ""; this.page_header_scripts = ""; this.page_footer_scripts = ""; this.valid_inputs_pages = "firstname,lastname,name,email,password,reenterpassword,remember_user"; this.verifyed_membership_page = false; this.selected_smtp = "phpmailer"; this.selected_product = [0]; this.selected_payment_method = 0; this.selected_membership_pages = []; this.page_meta = { description: '', icon: '', keywords: '', robots: '', copyright: '', DC_title: '' }; this.page_settings = { cookie_notice: 0, redirect_for_post: 0, redirect_for_post_url: '', snippet_integrations: [], page_cache: 0, zapier_enable: false, pabbly_enable: false, active_amp: false }; this.force_rename = false; this.show_context = false; this.page_active_type = 'NA'; }, activeCacheForAMP: function () { if (this.page_settings.active_amp && !this.page_settings.page_cache) { this.page_settings.page_cache = true; } }, headerAdder: function () { var project = this.funnel_type; project = project.charAt(0).toUpperCase() + project.slice(1).toLowerCase(); var header_doc = document.getElementById("uniquefunnelheader"); if (project == "Blank") { project = "Custom" } if (this.funnel_setting_view) { header_doc.innerHTML = this.t("Edit Page") + " <span style='font-size:15px'>" + project + " / <a href='" + this.funnel_url + "'>" + this.funnel_name + "</a> / <a href='" + this.funnel_url + "/" + this.page_foler_name + "'>" + this.page_foler_name + "</a></span>"; } else { header_doc.innerHTML = this.t("Edit Funnel") + " <span style='font-size:15px'>" + project + " / <a href='" + this.funnel_url + "'>" + this.funnel_name + "</a></span>"; } modifytitle(this.funnel_name, "Edit Funnel"); }, funnalSettingToggle: function () { this.funnel_setting_view = (this.funnel_setting_view) ? false : true; if (this.funnel_setting_err.indexOf("successfully") > -1) { this.funnel_setting_err = ""; } this.headerAdder(); }, updateMainInputsFromPage: function () { //type for main 1 for page 2 try { var main = this.common_inputs_for_current_funnel.split(','); var page = this.valid_inputs_pages.split(','); for (i = 0; i < page.length; i++) { if (main.indexOf(page[i]) < 0) { if (page[i].trim().length < 1) { continue; } main.push(page[i]); } } this.common_inputs_for_current_funnel = main.join(','); } catch (err) { console.log(err.message); } }, urlSuggester: function () { var name = this.funnel_name.toLowerCase().split(" "); var name = name.join("-"); name = this.removeSpecialChars(name); this.funnel_url_slug = name; }, createFunnel: function () { this.err = ""; visualloader.set(document.getElementsByClassName("visual-pnl")[0]); visualloader.load(this.t("Creating URL")); visualloader.addStyle("current", ["width:100% !important;"]); if (this.funnel_url.length < 4 || this.funnel_name < 1 || this.funnel_type == '0' || this.course_type == '0') { this.err = `<div style='overflow-wrap:break-word;max-height:60px;max-width:100%;overflow-y:auto;margin-bottom:5px;'><center>${this.t('Fill all required fields properly')}</center></div>`; visualloader.unable(this.t("Unable To Create")); var t = setTimeout(function () { visualloader.unset(); }, 1000); } else { var thisvue = this; var fields = { "createfunnel": 1, "funnel_url": this.funnel_url.trim(), "funnel_name": this.funnel_name.trim(), "funnel_type": this.funnel_type, "course_type": this.course_type, "modify_index": this.funnel_modify_pre_index }; request.postRequestCb('req.php', fields, function (data) { data = data.trim(); if (!isNaN(data)) { visualloader.done("Done"); window.history.pushState( null, null, `?page=create_funnel&id=${data}` ); window.location = location.href; } else { visualloader.unable("Unable To Create"); var t = setTimeout(function () { visualloader.unset(); }, 1000); thisvue.err = data; thisvue.err = "<div style='overflow-wrap:break-word;max-height:60px;max-width:100%;overflow-y:auto;margin-bottom:5px;'><center>" + thisvue.t(thisvue.err) + "</center></div>"; } }); } }, removeSpecialChars: function (str) { const specialChars = /[`!@#$%^&*()+=\[\]{};':"\\|,.<>\/?~]/gim; return str.replace(specialChars, ""); }, selectedFunnelType: function (type) { if (this.current_funnel != 0) { if (this.funnel_type == type) { return true } else { return false }; } }, activeMenuBtn: function (e) { this.force_rename = false; try { if (!this.manual_selection) { this.manual_selection = true; } var current = e.target; try { if ((!parseInt(current.getAttribute('ready'))) || (!this.initiated_template_blocks)) { this.initiated_template_blocks = true; this.page_foler_name = current.innerText.trim().toLowerCase(); this.page_foler_name = this.page_foler_name.replace(/[\s]+/g, "-"); } } catch (err) { console.log(err); } this.funnel_setting_err = ""; var doc = document.getElementsByClassName("mnubtn"); for (var j = 0; j < doc.length; j++) { doc[j].classList.remove('activemenubtn'); } current.classList.add('activemenubtn'); this.template_selector_btn = current.getAttribute('lbl'); try { this.selected_template_category = current.getAttribute("category"); } catch (errrr) { } if (this.selected_template_category === null) { this.selected_template_category = "all"; } this.detectCurrentCategory(); } catch (err) { console.log(err.message); } }, addNewLabel: function () { this.tempselected_category = this.new_category; console.log(this.tempselected_category, this.new_category); this.new_lbl_name = this.new_label; addNewLabel(); this.new_category = "all"; this.new_label = "Page"; this.close_new_model = false; let Btns = document.querySelectorAll(`.mnubtn`); let firstBtn = Btns[Btns.length - 1]; // fire the mousedown event on latest if (firstBtn) { firstBtn.dispatchEvent(new Event('mousedown')); firstBtn.dispatchEvent(new Event("click")); firstBtn.dispatchEvent(new Event('mouseup')); } }, closeNewModel: function () { this.close_new_model = false; }, initHideContext: function () { try { document.body.addEventListener('mousedown', (e) => { if (this.show_context) { let doc = document.querySelectorAll(".fnl_page_context")[0]; if (e.target.closest(".fnl_page_context") == null) { if (this.pglvl_active > 0) { --this.show_context; } else { this.show_context = false; } } } }); } catch (err) { console.log(err); } }, showContext: function (show = true, e = false) { try { e.preventDefault(); if (show) { setTimeout(() => { this.show_context = true; let scrollHeight = Math.round(document.documentElement.scrollTop || document.body.scrollTop); let doc = document.querySelectorAll(".fnl_page_context")[0]; doc.style.top = `${(e.pageY - scrollHeight)}px`; doc.style.left = `${e.pageX}px`; }, 10); } else { this.show_context = false; } } catch (err) { console.log(err); } }, deleteCurrent: function (e = false) { if (this.page_position_changing) { return false; } var val = confirm(this.t("Do you want to delete this page?")); if (val) { this.page_position_changing = true; this.show_context = false; var doc = document.getElementById("lblbtncontainer"); doc.removeChild(document.querySelectorAll(`button[lbl="${this.template_selector_btn}"]`)[0]); let current_tempselected_button = this.template_selector_btn; this.template_selector_btn = 0; this.page_foler_name = ""; var data = { "dellbl": 1, "funnelid": this.current_funnel, "label": current_tempselected_button }; request.postRequestCb('req.php', data, (data) => { this.processChangeLbl(); }); } }, copyCurrent: function (e = false) { if (this.page_position_changing) { return false; } var val = confirm(this.t("Do you want to copy this page?")); if (val) { this.page_position_changing = true; this.show_context = false; let current_tempselected_button = this.template_selector_btn; var data = { copylbl: 1, funnelid: this.current_funnel, label: current_tempselected_button, }; request.postRequestCb("req.php", data, (r) => { try { let res = JSON.parse(r); this.lblname = res.page_name; funnel.new_lbl_name = this.lblname; funnel.tempselected_category = res.category; addNewLabel(); funnel.createIndicator(); this.initTemplate(); } catch (error) { console.log(error); } }); } }, changeLevel: function (up = false) { if (this.page_position_changing) { return false; } thisvue = this; var container = document.getElementById("lblbtncontainer"); let lbl = parseInt(this.template_selector_btn); if (this.show_context && !isNaN(lbl)) { this.pglvl_active = 2; let selected = container.querySelectorAll(`button[lbl="${lbl}"]`)[0]; let target = lbl + ((up) ? -1 : 1); if (target < 1) { return }; target = container.querySelectorAll(`button[lbl="${target}"]`); if (target[0] === undefined) { return; } target = target[0]; this.page_position_changing = true; if (up) { container.insertBefore(selected, target); } else { container.insertBefore(target, selected); } setTimeout(() => { this.processChangeLbl(() => { thisvue.template_selector_btn = selected.getAttribute('lbl'); }); }, 200); } }, processChangeLbl: function (cb = false) { let thisvue = this; var container = document.getElementById("lblbtncontainer"); var btns = container.getElementsByTagName("button"); var arr = {}; for (var i = 0; i < btns.length; i++) { var current = btns[i].getAttribute('lbl'); arr[current] = i + 1; btns[i].setAttribute('lbl', i + 1); } var chngedlbls = JSON.stringify(arr); thisvue.page_position_changing = true; var lblhtml = document.getElementById("lblbtncontainer").innerHTML; lblhtml = lblhtml.substr(lblhtml.indexOf("/h4") + 4, lblhtml.length).trim(); request.postRequestCb('req.php', { "chnglbl": 1, "funnel_id": thisvue.current_funnel, 'lbls': chngedlbls, "lblhtml": lblhtml }, function (data) { if (parseInt(data) === 1) { thisvue.page_position_changing = false; } thisvue.createIndicator(); if (typeof (cb) === 'function') { cb(); } }); }, abload: function (template = 1) { }, changePosition: function (elem) { if (elem.button === 0) { this.movable_element = elem.target; var thisvue = this; var pos = elem.pageY; var container = document.getElementById("lblbtncontainer"); var startmoving = 0; container.addEventListener('mousemove', function (e) { if (e.target.getAttribute("ready") == "1") { if (thisvue.movable_element !== 0) { if (startmoving > 5) { var incor_dec = e.pageY - pos; pos += incor_dec; thisvue.movable_element.style.top = (pos - 320).toString() + "px"; if (incor_dec === 0) { thisvue.movable_element.style.position = "static"; } else { thisvue.movable_element.style.position = "absolute"; } } ++startmoving; } } }); document.addEventListener('mouseup', function (e) { startmoving = 0; if (thisvue.movable_element !== 0) { thisvue.movable_element.style.top = "0px"; thisvue.movable_element.style.position = "static"; thisvue.movable_element = 0; } }); } }, catchElement: function (evnt, force = 0) { thisvue = this; var container = document.getElementById("lblbtncontainer"); if (this.movable_element != 0 || force == 1) { if (force == 0) { if (evnt.target.getAttribute("ready") == "1") { if (this.movable_element.getAttribute('lbl') > evnt.target.getAttribute('lbl')) { container.insertBefore(this.movable_element, evnt.target); } else { container.insertBefore(evnt.target, this.movable_element); } } this.movable_element.style.top = "0px"; this.movable_element.style.position = "static"; } var btns = container.getElementsByTagName("button"); var arr = {}; for (var i = 0; i < btns.length; i++) { var current = btns[i].getAttribute('lbl'); arr[current] = i + 1; btns[i].setAttribute('lbl', i + 1); } var chngedlbls = JSON.stringify(arr); if (force == 0) { var temp = thisvue.movable_element.getAttribute('lbl'); } else { chngedlbls = "html"; } this.movable_element = 0; var lblhtml = document.getElementById("lblbtncontainer").innerHTML; lblhtml = lblhtml.substr(lblhtml.indexOf("/h4") + 4, lblhtml.length).trim(); request.postRequestCb('req.php', { "chnglbl": 1, "funnel_id": thisvue.current_funnel, 'lbls': chngedlbls, "lblhtml": lblhtml }, function (data) { if (force == 0) { thisvue.template_selector_btn = temp; } thisvue.createIndicator(); }); } }, updatecurrentfunnelsetting: function (cb = null, editor = false) { this.updateMainInputsFromPage(); this.detectCurrentCategory(1); var thisvue = this; this.funnel_setting_err = ""; var hasab = 0; if (this.template_has_a_b_test) { hasab = 1; } var selectedautoresponders = document.getElementById("autoreslist").querySelectorAll("input[type=checkbox]"); var autoresponders = ""; for (var i = 0; i < selectedautoresponders.length; i++) { if (selectedautoresponders[i].checked) { autoresponders += selectedautoresponders[i].value + '@'; } } var selectedlists = document.getElementById("listslist").querySelectorAll("input[type=checkbox]"); var lists = ""; for (var i = 0; i < selectedlists.length; i++) { if (selectedlists[i].checked) { lists += selectedlists[i].value + '@'; } } let selected_products_to_add = []; this.selected_product.forEach(p => { if (parseInt(p) > 0) { selected_products_to_add.push(p); } }); selected_products_to_add = (selected_products_to_add.length > 0) ? selected_products_to_add.join(',') : 0; let page_name = this.page_foler_name.toLowerCase(); page_name = page_name.replace(/\s/g, "-"); var jsn = JSON.stringify({ page_title: this.page_title, metadata: JSON.stringify(this.page_meta), page_folder: page_name.toLowerCase(), header_scripts: this.page_header_scripts, footer_scripts: this.page_footer_scripts, has_ab: hasab, valid_inputs: this.common_inputs_for_current_funnel, valid_inputs_page: this.valid_inputs_pages, autoresponders: autoresponders, vrified_membership: this.verifyed_membership_page, page_category: this.selected_template_category, smtps: this.selected_smtp, lists: lists, product: selected_products_to_add, payment_method: this.selected_payment_method, membership_pages: this.selected_membership_pages.join(','), page_settings: JSON.stringify(this.page_settings), force_rename: (this.force_rename) ? 1 : 0, active_type: this.page_active_type }); var update = { "update_funnel_setting": 1, "funnel_id": this.current_funnel, "label": this.template_selector_btn, "data": jsn }; let prenEl = document.querySelector(`button[lbl="${this.template_selector_btn}"]`); request.postRequestCb('req.php', update, function (data) { var res = data.trim(); if (res == 1) { prenEl.innerHTML = thisvue.converCapatilize(page_name.replace(/-/g, " ")); this.page_foler_name = page_name; thisvue.force_rename = false; if (editor === false) { thisvue.funnel_setting_err = "Saved successfully (Please consider closing existing page editors if opened, reopen it if required!)"; setTimeout(function () { thisvue.funnel_setting_err = ""; }, 5000); } thisvue.catchElement('', 1); if (thisvue.page_settings.page_cache) { } } else { thisvue.funnel_setting_err = res; } if (cb !== null) { cb(data); } }); }, closeSettingBtn: function (frst, second) { let secondS = document.querySelectorAll(`.${second}`); let firstS = document.querySelectorAll(`.${frst}`); for (let i = 0; i < secondS.length; i++) { secondS[i].style.visibility = "hidden"; } for (let i = 0; i < firstS.length; i++) { firstS[i].style.visibility = "visible"; } }, checkpage: function (e) { let page_name = this.page_foler_name.toLowerCase(); page_name = page_name.replace(/\s/g, "-"); this.page_foler_name = page_name; // return this.page_foler_name; }, converCapatilize: function (str) { //split the above string into an array of strings //whenever a blank space is encountered const arr = str.split(" "); //loop through each element of the array and capitalize the first letter. for (var i = 0; i < arr.length; i++) { arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1); } //Join all the elements of the array back into a string //using a blankspace as a separator const str2 = arr.join(" "); return str2; }, orderFormProductSelection: function (e) { if (this.selectSingleProduct) { try { let p = e.target.value; this.selected_product.splice(0, this.selected_product.length); this.selected_product.push(p); } catch (err) { console.log(err); } } }, indicatorRequest: function (data, btn) { this.page_position_changing = true; request.postRequestCb('req.php', data, (data) => { this.page_position_changing = false; if (data.trim() == '0') { btn.setAttribute('ready', 0); btn.style.setProperty('opacity', '0.6', 'important'); } else { btn.setAttribute('ready', 1); btn.style.setProperty('opacity', '1', 'important'); } }); }, createIndicator: function (current = 0) { var mnubtns = document.getElementById("lblbtncontainer").getElementsByTagName("button"); if (current === 0) { for (var i = 0; i < mnubtns.length; i++) { var lvl = mnubtns[i].getAttribute('lbl'); var postdata = { "currentfunnelabdetail": 1, "funnel_id": this.current_funnel, "type": "a", "label": lvl }; this.indicatorRequest(postdata, mnubtns[i]); } } }, openTemplateSelector: function (abtype) { var thisvue = this; var template_container = document.getElementById("templateinstalldiv_container"); if (this.templatecontaineropened == 0) { var bdy = document.getElementsByClassName("labelscontainer")[0]; var div = document.createElement("div"); div.setAttribute('id', 'templateinstalldiv'); var head = "<div class='card' style='background-color:white !important;border:0px;box-shadow: 0 .5rem 1rem rgba(0,0,0,.15)!important;border:0px !important;'><div class='card-header' style='background-color:white !important;border: 0!important;font-size: 23px!important;color: #1d56bb;'>" + this.t('Choose Template') + " (" + this.t('Category') + ": " + this.t(this.tempselected_category.charAt(0).toUpperCase() + this.tempselected_category.slice(1)) + ")<span id='deltemplateselectiondiv' style='right:10px;top:8px;position:absolute;font-size:20px;cursor:pointer;color:rgb(31, 87, 202);'><i class='fas fa-arrow-alt-circle-left'></i> " + this.t('Go Back') + "</span></div><div class='card-body'><div class='row'><div class='col text-right'><button class='btn btn-primary theme-button mb-1' onclick='zipTemplateUpload(event)' data-bs-toggle='tooltip' title='" + this.t("Upload your template as ZIP format. Make sure the main content file is named as \"index.html\"") + "'><i class='fas fa-download'></i> " + this.t('Import Template') + "</button> <button class='clonesite btn btn-prmary theme-button' style='margin-bottom:6px;'><i class='fas fa-copy'></i> " + this.t('Clone URL') + "</button></div></div><div class='input-group'><div class='input-group-prepend'><div class='input-group-text'>" + this.t('Search Templates') + "</div></div><input type='text' placeholder='" + this.t('Enter Your Search Attribute For Templates') + "' class='form-control srchtemplate'></div><div class='tmpltbdydiv' style='width:100%;margin-top:20px;'>"; var footer = "</div></div></div>"; div.innerHTML = head + "<center><center><h2 style='offset:4'>" + this.t('Loading...') + "</h2></center></center>" + footer; this.selected_template_category = (this.tempselected_category == null) ? 'all' : this.tempselected_category; var reqdata = { "current_funnel": this.current_funnel, "folder_name": this.page_foler_name, "abtype": abtype, "type": this.tempselected_category, "load_templates": 1 }; var close_div = function () { try { template_container.removeChild(div); } catch (errrr) { } thisvue.templatecontaineropened = 0; thisvue.template_under_download = false; }; doEscapePopup(close_div); request.postRequestCb('req.php', reqdata, function (data) { try { div.getElementsByClassName("tmpltbdydiv")[0].innerHTML = data; document.getElementById("deltemplateselectiondiv").addEventListener('click', function () { close_div(); }); } catch (err) { } } ); template_container.appendChild(div); try { setTimeout(function () { try { document.getElementsByClassName("clonesite")[0].onclick = function () { var clone_doc = document.createElement("div"); clone_doc.classList.add('row'); var clonedoc_content = `<div style="top:0px;left:0px;height:100%;width:100%;position:fixed;background-color:#1ab2ff;opacity:0.5"> </div><div class="col-sm-4" style="top:30%;left:40%;transform:translate:(-50%,-50%);position:fixed;"><div class="card pnl clonecard" style="z-index:9999;"><div class="card-header"><div class="row"><div class="col">${thisvue.t('Clone URL')}</div><div class="col text-right"><i class="fas fa-times closeclonediv" style="cursor:pointer;"></i></div></div></div> <div class="card-body"> <label>${thisvue.t('Add The Page URL You Want To Clone')}</label> <div class="alert alert-info">${thisvue.t('Download HTML & CSS content of any static page')}</div> <div class="mb-3"> <input type="text" class="form-control urltoclone" placeholder="${thisvue.t('Add The Page URL You Want To Clone')}"> <div class="text-right text-primary" style="cursor: pointer;"><span class="do_clone_htmlcontent">${thisvue.t('Already Have HTML content?')}</span></div> <textarea class="form-control clonehtmlcontent" style="display:none" placeholder='${thisvue.t('Enter Content')}'></textarea> <p class="clone_err text-center mt-2"></p> <button class="btn theme-button btn-block mt-2 doclone form-control">${thisvue.t('Clone The URL')}</button> </div> </div> </div></div>`; clone_doc.innerHTML = clonedoc_content; if (div.getElementsByClassName("clonecard").length < 1) { div.appendChild(clone_doc); setTimeout( function () { document.querySelectorAll(".do_clone_htmlcontent")[0].onclick = function () { let doc = document.querySelectorAll(".clonehtmlcontent")[0]; doc.style.display = (doc.style.display === 'block') ? 'none' : 'block'; }; var closeclonediv = document.querySelectorAll(".closeclonediv")[0]; closeclonediv.addEventListener("click", function () { div.removeChild(clone_doc); }); var clonebtn = document.querySelectorAll("button.doclone")[0] clonebtn.addEventListener("click", async function () { var clonable_url = document.getElementsByClassName("urltoclone")[0].value.trim(); var clonable_content = document.getElementsByClassName("clonehtmlcontent")[0].value; var cloneerr_div = document.getElementsByClassName("clone_err")[0]; if (clonable_url.length > 2) { try { var clone_loader = new visualLoader(); clone_loader.set(document.querySelectorAll("div.clonecard")[0]); clone_loader.load(thisvue.t("Please Wait, The Process May Take Few Minutes")); } catch (err) { console.log(err.messaes); } if (clonable_content.trim().length > 0) { clonable_content = clonable_content.trim(); await qfnlSiteDownloader(clonable_url, 'init_content', clonable_content); } else { await qfnlSiteDownloader(clonable_url); } let clone_req = { qfnl_clone_site: clonable_url, clone_step: "download" }; clone_req = { ...clone_req, "funnel_id": thisvue.current_funnel, "ab_type": abtype, "lavel": thisvue.template_selector_btn, "category": thisvue.selected_template_category, "page": thisvue.page_foler_name }; cloneerr_div.innerHTML = thisvue.t("Please Wait, This Process Will Take Few Minutes"); cloneerr_div.style.color = "green"; clonebtn.disabled = true; var tempstorebtn = thisvue.template_selector_btn; thisvue.template_selector_btn = 0; request.postRequestCb("req.php", clone_req, async function (data) { await thisvue.takeCurrentScreenshot(thisvue.current_funnel, thisvue.page_foler_name, abtype, tempstorebtn, thisvue.selected_template_category); thisvue.template_selector_btn = tempstorebtn; clonebtn.disabled = false; data = data.trim(); if (data == '1') { try { clone_loader.done("Done"); } catch (err) { console.log(err.message); } setTimeout( function () { closeclonediv.click(); document.getElementById("deltemplateselectiondiv").click(); thisvue.updatecurrentfunnelsetting(); thisvue.createIndicator(); }, 1500); } else { try { clone_loader.unable(thisvue.t("Unable To Download")); } catch (err) { console.log(err.message); } cloneerr_div.style.color = "#cc0066"; cloneerr_div.innerHTML = data; thisvue.updatecurrentfunnelsetting(); thisvue.createIndicator(); } setTimeout(function () { try { clone_loader.unset(); } catch (err) { console.log(err.message); } }, 1500); }); } }); }, 200); } }; } catch (err) { console.log(err.message); } document.getElementsByClassName("srchtemplate")[0].onkeyup = function (srchelem) { var searchdata = srchelem.target.value.trim(); if (searchdata.length > 3) { div.getElementsByClassName("tmpltbdydiv")[0].innerHTML = "<center><h2 >Searching...</h2></center>"; var reqdata_search = { "current_funnel": this.current_funnel, "folder_name": this.page_foler_name, "abtype": abtype, "type": this.selected_template_category, "load_templates": 1, "search_template": searchdata }; request.postRequestCb('req.php', reqdata_search, function (data) { div.getElementsByClassName("tmpltbdydiv")[0].innerHTML = data; if (data.trim().length < 5) { div.getElementsByClassName("tmpltbdydiv")[0].innerHTML = "<center><h2 style='offset:2;'>" + thisvue.t('No Template Available') + "</h2></center>"; } }); } else { request.postRequestCb('req.php', reqdata, function (data) { div.getElementsByClassName("tmpltbdydiv")[0].innerHTML = data; }); } } }, 1000); } catch (errrrrrr) { } ++this.templatecontaineropened; thisvue = this; setTimeout( function () { if (thisvue.templatecontaineropened > 0) { document.getElementById("deltemplateselectiondiv").addEventListener('click', function () { try { document.getElementsByClassName("labelscontainer")[0].removeChild(document.getElementById("templateinstalldiv")); } catch (errrrr) { } thisvue.templatecontaineropened = 0; }); } }, 1000); } }, qfnlDownloadSpecificTemplate: function (thisdiv, templateid, abtype) { var thisvue = this; var alltemp = document.querySelectorAll(".tmpltbdydiv")[0].querySelectorAll("div.card"); for (var i = 0; i < alltemp.length; i++) { alltemp[i].getElementsByClassName("card-body")[0].style.border = "0px"; alltemp[i].getElementsByClassName("card-body")[0].getElementsByClassName("masktemplateimg")[0].style.filter = "blur(0px)"; alltemp[i].getElementsByClassName("card-body")[0].getElementsByClassName("rounddownload")[0].style.display = "none"; } var downloader = thisdiv.getElementsByClassName("rounddownload")[0]; downloader.style.display = "block"; thisdiv.getElementsByClassName("masktemplateimg")[0].style.filter = "blur(10px)"; if (isNaN(templateid)) { return; } downloader.onclick = function (e) { if (thisvue.template_under_download) { return; } thisvue.template_under_download = true; var btn = downloader; btn.disabled = true; btn.innerHTML = "<h1><i class='fas fa-circle-notch fa-spin'></i></h1>"; var reqdata = { "template_id": templateid, "funnel_id": thisvue.current_funnel, "ab_type": abtype, "lavel": thisvue.template_selector_btn, "category": thisvue.selected_template_category, "page": thisvue.page_foler_name, "save_template": 1 }; request.setCookie('templateedited_' + thisvue.current_funnel + '_' + thisvue.template_selector_btn, 0, -1); var tempstorebtn = thisvue.template_selector_btn; thisvue.template_selector_btn = 0; request.postRequestCb('req.php', reqdata, async function (data) { await thisvue.takeCurrentScreenshot(thisvue.current_funnel, thisvue.page_foler_name, abtype, tempstorebtn, thisvue.selected_template_category); thisvue.template_selector_btn = tempstorebtn; btn.disabled = false; document.getElementById("deltemplateselectiondiv").click(); thisvue.updatecurrentfunnelsetting(); thisvue.createIndicator(); }); }; }, takeCurrentScreenshot: function (funnel, page, abtype, lavel, category) { return new Promise(function (resolve, reject) { resolve(1); }); }, detectCurrentCategory: function (update = 0) { try { var category = document.querySelectorAll("button[lbl='" + this.template_selector_btn + "']")[0].getAttribute("category"); if (update == 0) { if (category === null) { category = "all"; } this.tempselected_category = category; } else { document.querySelectorAll("button[lbl='" + this.template_selector_btn + "']")[0].setAttribute("category", this.tempselected_category); this.selected_template_category = this.tempselected_category; } } catch (err) { } }, getMarketPlaceURL: function (plugin = false) { let marketplace_url = `http://marketplace.cloudfunnels.in`; let current_url = window.location.href; if (plugin) { marketplace_url = `${marketplace_url}/plugin/view/${plugin}`; } try { let url = new URL(current_url); try { url.searchParams.forEach(s => { url.searchParams.delete(s); }); } catch (err) { console.log(err); } url.searchParams.append('page', 'plugins'); current_url = url.href; } catch (err) { console.log(err); } return `${marketplace_url}/?plugin_ref_installation=${btoa(current_url)}`; } }, computed: { selectSingleProduct: function () { return (['course', 'orderform'].indexOf(this.selected_template_category) > -1) ? true : false; }, integrationsURL: function () { return this.getMarketPlaceURL('cf_plugin_for_externalscripts'); }, marketPlaceURL: function () { return this.getMarketPlaceURL(); } }, watch: { page_foler_name: function (new_val, old_val) { if (new_val != old_val) { } }, funnel_url_slug: function (_new) { let url = `${this.funnel_host}/${_new}`; url = url.trim().split(""); if (url[url.length - 1] === "/") { url.pop(); } url = url.join(""); this.funnel_url = url; }, }, }); var Newlabelcomponent = Vue.extend({ template: '<button v-bind:category="category" v-bind:lbl="nextlabel" class="btn btn-outline-secondary btn-block mnubtn form-control" v-on:mousedown="activeMenuBtn($event)" v-on:contextmenu="showContext(true, $event)"><span class=""></span> {{labelname}}</button>', mounted: function () { this.inIt(); }, data: function () { return { nextlabel: 1, labelname: "page 1", category: 'all', page_url: '', }; }, methods: { changePosition: function (e) { funnel.changePosition(e); }, activeMenuBtn: function (e) { funnel.activeMenuBtn(e); }, catchElement: function (e) { funnel.catchElement(e); }, showContext: function (stat, e) { funnel.showContext(stat, e); }, inIt: function () { var len = 1; try { var allbtns = document.getElementById("lblbtncontainer").getElementsByTagName("button"); if (allbtns.length > 0) { len = allbtns.length + 1; } } catch (err) { console.log(err); } this.nextlabel = len; if (funnel.new_lbl_name.length < 1) { funnel.new_lbl_name = 'page ' + len; } this.labelname = funnel.new_lbl_name; let lblname = this.labelname; lblname = lblname.replace(/\s/gi, "-").toLowerCase(); this.page_url = `${funnel.funnel_url_full}/${lblname}`; this.category = funnel.tempselected_category; funnel.new_lbl_name = ""; }, } }); function addNewLabel() { var component = new Newlabelcomponent().$mount(); document.getElementById("lblbtncontainer").appendChild(component.$el); setTimeout(function () { funnel.createIndicator(); }, 500); } function changeTemplate() { } var tempholderforeditor = 0; var editcheckcookie = "templateedited"; var cache_lists = []; var cache_autores = []; function processCachingListsAndAutoresponders(set = true) { try { let lists = document.querySelectorAll("#listslist")[0].querySelectorAll("input[type=checkbox]"); let autores = document.querySelectorAll("#autoreslist")[0].querySelectorAll("input[type=checkbox]"); lists.forEach(list => { if (set && list.checked) { cache_lists.push(list.value); } else if (!set && cache_lists.indexOf(list.value) >= 0) { list.checked = true; } }); if (!set) { cache_lists = []; } autores.forEach(auto => { if (set && auto.checked) { cache_autores.push(auto.value); } else if (!set && cache_autores.indexOf(auto.value) >= 0) { auto.checked = true; } }); if (!set) { cache_autores = []; } } catch (err) { console.log(err); } } function editTemplate(idd, name) { console.log(funnel.template_selector_btn); var lbl = funnel.template_selector_btn; var go = 0; var prevlbl = lbl - 1; try { go = document.querySelectorAll('button[lbl="' + prevlbl + '"]')[0].getAttribute('ready'); } catch (e) { console.log(e.message); } if (lbl == 1) { go = 1; } //without any reason go = 1; if (go > 0) { processCachingListsAndAutoresponders(true); var category = funnel.selected_template_category; if (category === null) { category = "all"; } var editor = window.open("index.php?page=page_builder&fid=" + idd + "&abtype=" + name + "&lbl=" + funnel.template_selector_btn + "&category=" + category + "&folder=" + funnel.page_foler_name, "..::CloudFunnels Editor::..", "toolbar=yes,top=0,left=0,height=4000,width=4000"); editor.moveTo(0, 0); editor.resizeTo(screen.width, screen.height); tempholderforeditor = lbl; editcheckcookie += "_" + idd + "_" + tempholderforeditor; editor.onbeforeunload = function () { request.setCookie(editcheckcookie, lbl, 30); }; document.body.addEventListener('mousemove', refreshOnMouseMove); request.setCookie(editcheckcookie, 0, -1); funnel.template_selector_btn = 0; refreshDuringEdit(); } else { alert(t("Seems you forgot to carete previous label")); } } function refreshOnMouseMove() { request.setCookie(editcheckcookie, tempholderforeditor, 30); } function refreshDuringEdit() { if (request.getCookie(editcheckcookie) < 1) { setTimeout(refreshDuringEdit, 1000); } else { funnel.template_selector_btn = request.getCookie(editcheckcookie); tempholderforeditor = 0; editcheckcookie = "templateedited"; processCachingListsAndAutoresponders(false); funnel.updatecurrentfunnelsetting(null, true); funnel.createIndicator(); } } var settingdivopen = 1; function settingDivOpenClose() { jQuery(document).ready(function ($) { $(".settingdiv").hide(); $(".openclosetoggle").click(function () { if (settingdivopen == 1) { $(".settingdiv").show(500); settingdivopen = 0; } else { $(".settingdiv").hide(500); settingdivopen = 1; } }); }); } function openTemplateSelector(type) { funnel.openTemplateSelector(type); } function qfnlDownloadSpecificTemplate(div, id, abtype) { funnel.qfnlDownloadSpecificTemplate(div, id, abtype); } const qfnlimgloadersleep = function (delay = 5000) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(1); }, delay); }); }; const qfnlSiteDownloader = function (url, doo = 'init', remote_content = '') { return new Promise((resolve, reject) => { request.postRequestCb("req.php", { qfnl_arrenge_cloner: doo, qfnl_clone_target_url: url, remote_content }, (data) => { data = data.trim(); if (data !== '0' && !isNaN(data)) { let count = parseInt(data); let count_req = 0; let image_downloader = async () => { request.postRequestPromise("req.php", { qfnl_arrenge_cloner: "download_images", qfnl_clone_target_url: url }).then(async (res) => { if (count == 0) { resolve(1); } else { ++count_req; if (count_req == 10) { count_req = 0; } --count; image_downloader(); } }); }; image_downloader(); } else { resolve(data); } }); }); } const zipTemplateUpload = function (e) { let doc = document.createElement("input"); doc.type = "file"; doc.accept = ".zip"; doc.click(); doc.onchange = function () { let file = doc.files[0]; e.target.disabled = true; e.target.innerHTML = "<i class='fas fa-spinner fa-spin'></i> " + t('Loading') + "..."; request.postRequestCb("req.php", { upload_zipped_template: 1, template_zip: file }, async function (res) { e.target.innerHTML = ""; e.target.innerHTML = "<i class='fas fa-download'></i> " + t('Import Template') + ""; try { res = JSON.parse(res); if (res.status) { let url = res.data; document.querySelectorAll("button.clonesite")[0].click(); await new Promise(function (resolve, reject) { setTimeout(function () { resolve(1); }, 300) }); document.querySelectorAll("input.urltoclone")[0].value = url; await new Promise(function (resolve, reject) { setTimeout(function () { resolve(1); }, 100) }); document.querySelectorAll("button.doclone")[0].click(); } else { alert(res.data); e.target.disabled = false; } } catch (err) { alert(err.message); e.target.disabled = false; } }); }; return; } request.registerAjaxLoading(function (stat) { funnel.is_ajax_loading = stat; });