Changeset 3304101
- Timestamp:
- 06/01/2025 02:03:43 AM (10 months ago)
- Location:
- radas
- Files:
-
- 194 added
- 9 edited
-
tags/0.2.3 (added)
-
tags/0.2.3/admin (added)
-
tags/0.2.3/admin/assets (added)
-
tags/0.2.3/admin/assets/admin-scripts-rds.php (added)
-
tags/0.2.3/admin/assets/admin-styles-rds.php (added)
-
tags/0.2.3/admin/assets/css (added)
-
tags/0.2.3/admin/assets/css/fieldbox.css (added)
-
tags/0.2.3/admin/assets/css/fieldbox.min.css (added)
-
tags/0.2.3/admin/assets/css/option-page-cpt.css (added)
-
tags/0.2.3/admin/assets/css/option-page-cpt.min.css (added)
-
tags/0.2.3/admin/assets/css/style.css (added)
-
tags/0.2.3/admin/assets/css/style.min.css (added)
-
tags/0.2.3/admin/assets/js (added)
-
tags/0.2.3/admin/assets/js/m-fieldbox.js (added)
-
tags/0.2.3/admin/assets/js/m-fieldbox.min.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt-page.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt-page.min.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt-table.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt-table.min.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page-cpt.min.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page.js (added)
-
tags/0.2.3/admin/assets/js/m-option-page.min.js (added)
-
tags/0.2.3/admin/index.php (added)
-
tags/0.2.3/admin/option-page-cpt.php (added)
-
tags/0.2.3/admin/option-page.php (added)
-
tags/0.2.3/admin/rest (added)
-
tags/0.2.3/admin/rest/cpt (added)
-
tags/0.2.3/admin/rest/cpt/rest-option-page.php (added)
-
tags/0.2.3/inc (added)
-
tags/0.2.3/inc/autoloader.php (added)
-
tags/0.2.3/inc/bd-elements (added)
-
tags/0.2.3/inc/bd-elements/elements (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs/css.twig (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs/default.css (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs/element.php (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs/html.twig (added)
-
tags/0.2.3/inc/bd-elements/elements/Radas_Breadcrumbs/ssr.php (added)
-
tags/0.2.3/inc/bd-elements/plugin.php (added)
-
tags/0.2.3/inc/functions.php (added)
-
tags/0.2.3/inc/plugin.php (added)
-
tags/0.2.3/index.php (added)
-
tags/0.2.3/lib (added)
-
tags/0.2.3/lib/assets (added)
-
tags/0.2.3/lib/assets/admin-scripts-lib.php (added)
-
tags/0.2.3/lib/assets/admin-styles-lib.php (added)
-
tags/0.2.3/lib/assets/css (added)
-
tags/0.2.3/lib/assets/css/common (added)
-
tags/0.2.3/lib/assets/css/common/_border-desktop.css (added)
-
tags/0.2.3/lib/assets/css/common/_border-general.css (added)
-
tags/0.2.3/lib/assets/css/common/_border-mobile.css (added)
-
tags/0.2.3/lib/assets/css/common/_flex-desktop.css (added)
-
tags/0.2.3/lib/assets/css/common/_flex-general.css (added)
-
tags/0.2.3/lib/assets/css/common/_flex-mobile.css (added)
-
tags/0.2.3/lib/assets/css/common/_spacing-desktop.css (added)
-
tags/0.2.3/lib/assets/css/common/_spacing-general.css (added)
-
tags/0.2.3/lib/assets/css/common/_spacing-mobile.css (added)
-
tags/0.2.3/lib/assets/css/common/_width-general.css (added)
-
tags/0.2.3/lib/assets/css/common/style.css (added)
-
tags/0.2.3/lib/assets/css/common/style.min.css (added)
-
tags/0.2.3/lib/assets/css/datatables.css (added)
-
tags/0.2.3/lib/assets/css/datatables.min.css (added)
-
tags/0.2.3/lib/assets/css/iconbox.css (added)
-
tags/0.2.3/lib/assets/css/iconbox.min.css (added)
-
tags/0.2.3/lib/assets/css/page.css (added)
-
tags/0.2.3/lib/assets/css/page.min.css (added)
-
tags/0.2.3/lib/assets/js (added)
-
tags/0.2.3/lib/assets/js/datatables.js (added)
-
tags/0.2.3/lib/assets/js/datatables.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox (added)
-
tags/0.2.3/lib/assets/js/fieldbox/fieldbox.css (added)
-
tags/0.2.3/lib/assets/js/fieldbox/fieldbox.min.css (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-dialog.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-dialog.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-fboxlist.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-fboxlist.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-fieldbox.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-fieldbox.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-functions.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-functions.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-sortable.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-sortable.min.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-types.js (added)
-
tags/0.2.3/lib/assets/js/fieldbox/m-types.min.js (added)
-
tags/0.2.3/lib/assets/js/general (added)
-
tags/0.2.3/lib/assets/js/general/dialogbox.css (added)
-
tags/0.2.3/lib/assets/js/general/dialogbox.min.css (added)
-
tags/0.2.3/lib/assets/js/general/m-general.js (added)
-
tags/0.2.3/lib/assets/js/general/m-general.min.js (added)
-
tags/0.2.3/lib/assets/js/general/spinner.css (added)
-
tags/0.2.3/lib/assets/js/general/spinner.min.css (added)
-
tags/0.2.3/lib/assets/js/iconbox (added)
-
tags/0.2.3/lib/assets/js/iconbox/iconbox.css (added)
-
tags/0.2.3/lib/assets/js/iconbox/iconbox.min.css (added)
-
tags/0.2.3/lib/assets/js/iconbox/m-iconbox.js (added)
-
tags/0.2.3/lib/assets/js/iconbox/m-iconbox.min.js (added)
-
tags/0.2.3/lib/assets/js/m-admin.js (added)
-
tags/0.2.3/lib/assets/js/m-admin.min.js (added)
-
tags/0.2.3/lib/assets/js/m-general.min.js (added)
-
tags/0.2.3/lib/assets/js/m-iconbox.min.js (added)
-
tags/0.2.3/lib/assets/js/m-public.js (added)
-
tags/0.2.3/lib/assets/js/m-public.min.js (added)
-
tags/0.2.3/lib/assets/js/m-utils.js (added)
-
tags/0.2.3/lib/assets/js/m-utils.min.js (added)
-
tags/0.2.3/lib/assets/js/media-box.js (added)
-
tags/0.2.3/lib/assets/js/media-box.min.js (added)
-
tags/0.2.3/lib/assets/js/page.js (added)
-
tags/0.2.3/lib/assets/js/page.min.js (added)
-
tags/0.2.3/lib/assets/js/tabs.js (added)
-
tags/0.2.3/lib/assets/js/tabs.min.js (added)
-
tags/0.2.3/lib/bd (added)
-
tags/0.2.3/lib/bd/dynamic-data (added)
-
tags/0.2.3/lib/bd/dynamic-data/opt-image-field.php (added)
-
tags/0.2.3/lib/bd/dynamic-data/opt-string-field.php (added)
-
tags/0.2.3/lib/bd/dynamic-data/opt-url-field.php (added)
-
tags/0.2.3/lib/bd/dynamic-data/register-field.php (added)
-
tags/0.2.3/lib/classes (added)
-
tags/0.2.3/lib/classes/abstracts (added)
-
tags/0.2.3/lib/classes/abstracts/element.php (added)
-
tags/0.2.3/lib/classes/abstracts/field.php (added)
-
tags/0.2.3/lib/classes/abstracts/index.php (added)
-
tags/0.2.3/lib/classes/abstracts/page.php (added)
-
tags/0.2.3/lib/classes/abstracts/scripts.php (added)
-
tags/0.2.3/lib/classes/abstracts/styles.php (added)
-
tags/0.2.3/lib/classes/abstracts/wrapper.php (added)
-
tags/0.2.3/lib/classes/index.php (added)
-
tags/0.2.3/lib/classes/interfaces (added)
-
tags/0.2.3/lib/classes/interfaces/element-interface.php (added)
-
tags/0.2.3/lib/classes/interfaces/index.php (added)
-
tags/0.2.3/lib/classes/trait (added)
-
tags/0.2.3/lib/classes/trait/arrayaccess-skeleton.php (added)
-
tags/0.2.3/lib/classes/trait/element-skeleton.php (added)
-
tags/0.2.3/lib/classes/trait/index.php (added)
-
tags/0.2.3/lib/classes/trait/singleton.php (added)
-
tags/0.2.3/lib/elements (added)
-
tags/0.2.3/lib/elements/container.php (added)
-
tags/0.2.3/lib/elements/fields (added)
-
tags/0.2.3/lib/elements/fields/checkbox-field.php (added)
-
tags/0.2.3/lib/elements/fields/checkboxes-field.php (added)
-
tags/0.2.3/lib/elements/fields/color-field.php (added)
-
tags/0.2.3/lib/elements/fields/date-field.php (added)
-
tags/0.2.3/lib/elements/fields/editor-field.php (added)
-
tags/0.2.3/lib/elements/fields/email-field.php (added)
-
tags/0.2.3/lib/elements/fields/field-group.php (added)
-
tags/0.2.3/lib/elements/fields/file-field.php (added)
-
tags/0.2.3/lib/elements/fields/group-field.php (added)
-
tags/0.2.3/lib/elements/fields/hidden-field.php (added)
-
tags/0.2.3/lib/elements/fields/index.php (added)
-
tags/0.2.3/lib/elements/fields/media-field.php (added)
-
tags/0.2.3/lib/elements/fields/number-field.php (added)
-
tags/0.2.3/lib/elements/fields/password-field.php (added)
-
tags/0.2.3/lib/elements/fields/phone-field.php (added)
-
tags/0.2.3/lib/elements/fields/radio-field.php (added)
-
tags/0.2.3/lib/elements/fields/select-field.php (added)
-
tags/0.2.3/lib/elements/fields/text-field.php (added)
-
tags/0.2.3/lib/elements/fields/textarea-field.php (added)
-
tags/0.2.3/lib/elements/fields/url-field.php (added)
-
tags/0.2.3/lib/elements/form-table.php (added)
-
tags/0.2.3/lib/elements/tab.php (added)
-
tags/0.2.3/lib/elements/tabs.php (added)
-
tags/0.2.3/lib/factories (added)
-
tags/0.2.3/lib/factories/element-factory.php (added)
-
tags/0.2.3/lib/factories/index.php (added)
-
tags/0.2.3/lib/helper (added)
-
tags/0.2.3/lib/helper/breadcrumb.php (added)
-
tags/0.2.3/lib/helper/breakdance.php (added)
-
tags/0.2.3/lib/helper/index.php (added)
-
tags/0.2.3/lib/helper/instance.php (added)
-
tags/0.2.3/lib/helper/option.php (added)
-
tags/0.2.3/lib/helper/util.php (added)
-
tags/0.2.3/lib/helper/wpml.php (added)
-
tags/0.2.3/lib/html-templates (added)
-
tags/0.2.3/lib/html-templates/field-box-template.php (added)
-
tags/0.2.3/lib/html-templates/index.php (added)
-
tags/0.2.3/lib/index.php (added)
-
tags/0.2.3/lib/plugin.php (added)
-
tags/0.2.3/radas.php (added)
-
tags/0.2.3/readme.txt (added)
-
trunk/admin/assets/js/m-option-page-cpt-page.js (modified) (1 diff)
-
trunk/admin/assets/js/m-option-page-cpt-page.min.js (modified) (1 diff)
-
trunk/admin/option-page.php (modified) (3 diffs)
-
trunk/admin/rest/cpt/rest-option-page.php (modified) (5 diffs)
-
trunk/inc/bd-elements (added)
-
trunk/inc/bd-elements/elements (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs/css.twig (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs/default.css (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs/element.php (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs/html.twig (added)
-
trunk/inc/bd-elements/elements/Radas_Breadcrumbs/ssr.php (added)
-
trunk/inc/bd-elements/plugin.php (added)
-
trunk/inc/functions.php (added)
-
trunk/inc/plugin.php (modified) (2 diffs)
-
trunk/lib/helper/breadcrumb.php (added)
-
trunk/lib/helper/breakdance.php (added)
-
trunk/lib/helper/instance.php (added)
-
trunk/lib/helper/option.php (added)
-
trunk/lib/helper/util.php (modified) (2 diffs)
-
trunk/lib/helper/wpml.php (added)
-
trunk/lib/plugin.php (modified) (1 diff)
-
trunk/radas.php (modified) (3 diffs)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
radas/trunk/admin/assets/js/m-option-page-cpt-page.js
r3156917 r3304101 62 62 const shortCode = `[${page.slug} field=${fBox.name}]` 63 63 dialog.appendContent(elShortcode('sc', 'WordPress Shortcode:', `[${page.slug} field=${fBox.name}]`)); 64 dialog.appendContent(elShortcode('go', 'PHP:', ` get_option("${page.slug}")["${fBox.name}"]`));64 dialog.appendContent(elShortcode('go', 'PHP:', `radas_get_option( "${page.slug}", "${fBox.name}" )`)); 65 65 dialog.addButton('Close'); 66 66 dialog.addEventListener('buttonClick', (e)=>{ -
radas/trunk/admin/assets/js/m-option-page-cpt-page.min.js
r3156917 r3304101 1 import{fBoxList as e,createFBox as t}from"../../../lib/assets/js/fieldbox/m-fieldbox.min.js?v=1727180045";import{iconBox as s}from"../../../lib/assets/js/iconbox/m-iconbox.min.js?v=1727180045";import{setErrorMessage as i}from"../../../lib/assets/js/m-utils.min.js?v=1727180045";import{elBinder as a,showSpinner as n,popupAlert as d,dialogBox as o,getFormValue as l}from"../../../lib/assets/js/general/m-general.min.js?v=1727180045";import{adminFlashNotice as r}from"../../../lib/assets/js/m-admin.min.js?v=1727180045";window.fBoxList=e;const c=jQuery,p=new s("iconbox");class h extends a{node;#e=document.querySelector("form");constructor(){super();const t=this;this.node=document.getElementById("rds-form"),this.node.querySelectorAll("[data-handle]").forEach((e=>{this._bind(e,e.getAttribute("data-handle"))})),this.addEventListener("input",(e=>{const s=e.detail.handle;if("post_id"==s&&(t.post_id?(c(".btn-save-page").html("Update"),t.elBinded("slug").readOnly=!0):(c(".btn-save-page").html("Create"),t.elBinded("slug").readOnly=!1)),"type"==s){const s="menu"==e.detail.value;t.elBinded("parent_menu").closest("tr").classList.toggle("hide",s),t.elBinded("menu_title").closest("tr").classList.toggle("hide",!s),t.elBinded("page_icon").closest("tr").classList.toggle("hide",!s)}"page_icon"==s&&(t.elBinded("btn_icon").removeAttribute("class"),t.elBinded("btn_icon").setAttribute("class","button button-secondary dashicons-before "+t.page_icon))})),this.addEventListener("buttonClick",(e=>{"btn_icon"==e.detail.handle&&p.open()})),this.addEventListener("saved",(s=>{t.post_id=s.detail.id,Object.values(e.list).forEach((e=>{t.#t(e),t.#s(e)})),t.setLastData()})),this.elBinded("slug").setAttribute("data-valid-handle","page_slug"),this.#i(),this.#e.addEventListener("input",this.#a),c(".btn-save-page").on("click",(()=>{t.saveData()}))}#n;setLastData(){this.#n=l(this.#e)}saveData(){const t=this;if(n(!0),c(".rds-input:visible").each((function(){u(this)})),Object.values(e.list).forEach((e=>{if(!e.node.classList.contains("expanded")){e.node.classList.add("expanded");const t=c(e.node);t.find(".rds-input:visible").each((function(){u(this)})),0==t.find(".rds-error-message:visible").length&&e.node.classList.remove("expanded")}})),0!=c(".rds-error-message:visible").length)return d("Data Validation","Save failed, please check your input!"),void n(!1);const s={title:this.title,slug:this.slug,description:this.description,capability:this.capability,type:this.type,parent:this.parent_menu,menu_title:this.menu_title,icon:this.page_icon,position:this.position,fields:[{type:"form_table",name:this.slug+"_aft",fields:e.getValues()}]},i=wpApiSettings.root+this.#e.getAttribute("data-endpoint")+(this.post_id?"/"+this.post_id:""),a=this.post_id?"put":"post";c.ajax({url:i,method:a,data:JSON.stringify(s),dataType:"json",contentType:"application/json; charset=utf-8",beforeSend:e=>{e.setRequestHeader("X-WP-Nonce",wpApiSettings.nonce)},success:e=>{t.dispatchEvent(new CustomEvent("saved",{detail:{id:e.data.id,json:s}})),n(!1),r("success",e.message)},error:e=>{n(!1),e.hasOwnProperty("responseJSON")&&e.responseJSON.hasOwnProperty("message")?d("Save Failed",e.responseJSON.message):r("error",e.responseText,1e4)}})}fillData(e,s){try{this.post_id=e,this.title=s.title,this.slug=s.slug,this.description=s.description,this.capability=s.capability,this.type=s.type,this.parent_menu=s.parent,this.menu_title=s.menu_title,this.page_icon=s.icon,this.position=s.position,s.fields[0].fields.forEach((e=>{t(e,0,{after:e=>{this.post_id&&(this.#t(e),this.#s(e))}})}))}catch(e){console.error(e.message)}}#t(e){e.elBinded("btn_shortcode").disabled&&(e.elBinded("btn_shortcode").disabled=!1,e.addEventListener("buttonClick",(t=>{"btn_shortcode"==t.detail.handle&&(e=>{const t=new o("dlg-shortcode"),s=(e,t,s)=>{const i=document.createElement("div"),a=document.createElement("div"),n=document.createElement("input"),d=document.createElement("label"),o=document.createElement("button");return d.textContent=t,d.setAttribute("for",e),n.id=e,n.value=s,n.setAttribute("style","width: 320px;"),n.setAttribute("type","text"),n.readOnly=!0,o.setAttribute("class","no-button dashicons dashicons-clipboard"),o.addEventListener("click",(async e=>{n.select(),n.setSelectionRange(0,99999);try{await navigator.clipboard.writeText(n.value)}catch(e){document.execCommand("copy")}r("success","Copied the text: "+n.value)})),a.setAttribute("style","display: flex;align-items: center;column-gap: 4px;"),a.append(n),a.append(o),i.setAttribute("style","display: flex; flex-direction: column; row-gap: 4px; padding: 8px 0;"),i.append(d),i.append(a),i};return t.title="Code for "+e.elBinded("fbox_title").innerHTML+" field",m.slug,e.name,t.appendContent(s("sc","WordPress Shortcode:",`[${m.slug} field=${e.name}]`)),t.appendContent(s("go","PHP:",` get_option("${m.slug}")["${e.name}"]`)),t.addButton("Close"),t.addEventListener("buttonClick",(e=>{e.target.close()})),t.addEventListener("close",(t=>{t.target.node.remove(),e.elBinded("btn_shortcode").focus()})),t})(e).open()})))}#s(e,t=!0){e.elBinded("type").disabled=t,e.elBinded("type").classList.toggle("rds-bold",t),e.elBinded("btn_generate_id").classList.toggle("hide",t),e.elBinded("name").readOnly=t}#i(){const e=this;p.addEventListener("open",(t=>{e.page_icon&&t.target.elBinded(e.page_icon).focus()})),p.addEventListener("close",(t=>{e.elBinded("btn_icon").focus()})),p.addEventListener("iconClick",(t=>{e.page_icon=t.detail.icon,t.target.close()}))}#a(e){u(e.target)}clear(){this.post_id="",this.title="",this.slug="",this.description="",this.capability="manage_options",this.type="menu",this.parent_menu="",this.menu_title="",this.page_icon="dashicons-admin-generic",this.position="",this.slug="",Object.keys(e.list).forEach((t=>{e.remove(t)})),c(".rds-error-message").html("")}show(){c("#rds-form").removeClass("hide"),c(".btn-warpper-header").removeClass("hide"),this.elBinded("title").focus(),this.setLastData()}#d(){const e=new o("dlg-close-page");return e.title="Close Confirmation",e.content="Are you sure that you want to close the current page? The changes that you made won't be saved.",e.addButton(["Yes","No"]),e.addEventListener("buttonClick",(e=>{"Yes"==e.detail.text&&(c("#rds-list").removeClass("hide"),c(".btn-add-page").removeClass("hide"),c("#rds-form").addClass("hide"),c(".btn-warpper-header").addClass("hide")),e.target.close()})),e.addEventListener("close",(e=>{e.target.node.remove()})),e}close(){this.#n!=l(this.#e)?this.#d().open():(c("#rds-list").removeClass("hide"),c(".btn-add-page").removeClass("hide"),c("#rds-form").addClass("hide"),c(".btn-warpper-header").addClass("hide"))}}const u=e=>{i(e);const t=e.getAttribute("data-valid-handle");if("page_slug"==t){let t=/^\w+$/;if(""!=e.value&&!t.test(e.value))return i(e,"This field may only contain letters, numbers, and underscores"),!1}if("field_name"==t){e.setAttribute("data-val",e.value);let s=/^\w+$/;if(""!=e.value&&!s.test(e.value))return i(e,"This field may only contain letters, numbers, and underscores"),!1;const a=document.querySelectorAll('[data-valid-handle="'+t+'"][data-val="'+e.value+'"]');if(a.length>1)return a.forEach((t=>{t.setAttribute("data-duplicate",e.value),i(t,"This field cannot be duplicates")})),!1;{const s=e.getAttribute("data-duplicate");if(s){e.removeAttribute("data-duplicate");const a=document.querySelectorAll('[data-valid-handle="'+t+'"][data-val="'+s+'"]');1==a.length&&a.forEach((e=>{e.removeAttribute("data-duplicate"),i(e)}))}}}e.checkValidity()||i(e,e.validationMessage)},m=new h;export{h as optPage,m as page};1 import{fBoxList as e,createFBox as t}from"../../../lib/assets/js/fieldbox/m-fieldbox.min.js?v=1727180045";import{iconBox as s}from"../../../lib/assets/js/iconbox/m-iconbox.min.js?v=1727180045";import{setErrorMessage as i}from"../../../lib/assets/js/m-utils.min.js?v=1727180045";import{elBinder as a,showSpinner as n,popupAlert as d,dialogBox as o,getFormValue as l}from"../../../lib/assets/js/general/m-general.min.js?v=1727180045";import{adminFlashNotice as r}from"../../../lib/assets/js/m-admin.min.js?v=1727180045";window.fBoxList=e;const c=jQuery,p=new s("iconbox");class h extends a{node;#e=document.querySelector("form");constructor(){super();const t=this;this.node=document.getElementById("rds-form"),this.node.querySelectorAll("[data-handle]").forEach((e=>{this._bind(e,e.getAttribute("data-handle"))})),this.addEventListener("input",(e=>{const s=e.detail.handle;if("post_id"==s&&(t.post_id?(c(".btn-save-page").html("Update"),t.elBinded("slug").readOnly=!0):(c(".btn-save-page").html("Create"),t.elBinded("slug").readOnly=!1)),"type"==s){const s="menu"==e.detail.value;t.elBinded("parent_menu").closest("tr").classList.toggle("hide",s),t.elBinded("menu_title").closest("tr").classList.toggle("hide",!s),t.elBinded("page_icon").closest("tr").classList.toggle("hide",!s)}"page_icon"==s&&(t.elBinded("btn_icon").removeAttribute("class"),t.elBinded("btn_icon").setAttribute("class","button button-secondary dashicons-before "+t.page_icon))})),this.addEventListener("buttonClick",(e=>{"btn_icon"==e.detail.handle&&p.open()})),this.addEventListener("saved",(s=>{t.post_id=s.detail.id,Object.values(e.list).forEach((e=>{t.#t(e),t.#s(e)})),t.setLastData()})),this.elBinded("slug").setAttribute("data-valid-handle","page_slug"),this.#i(),this.#e.addEventListener("input",this.#a),c(".btn-save-page").on("click",(()=>{t.saveData()}))}#n;setLastData(){this.#n=l(this.#e)}saveData(){const t=this;if(n(!0),c(".rds-input:visible").each((function(){u(this)})),Object.values(e.list).forEach((e=>{if(!e.node.classList.contains("expanded")){e.node.classList.add("expanded");const t=c(e.node);t.find(".rds-input:visible").each((function(){u(this)})),0==t.find(".rds-error-message:visible").length&&e.node.classList.remove("expanded")}})),0!=c(".rds-error-message:visible").length)return d("Data Validation","Save failed, please check your input!"),void n(!1);const s={title:this.title,slug:this.slug,description:this.description,capability:this.capability,type:this.type,parent:this.parent_menu,menu_title:this.menu_title,icon:this.page_icon,position:this.position,fields:[{type:"form_table",name:this.slug+"_aft",fields:e.getValues()}]},i=wpApiSettings.root+this.#e.getAttribute("data-endpoint")+(this.post_id?"/"+this.post_id:""),a=this.post_id?"put":"post";c.ajax({url:i,method:a,data:JSON.stringify(s),dataType:"json",contentType:"application/json; charset=utf-8",beforeSend:e=>{e.setRequestHeader("X-WP-Nonce",wpApiSettings.nonce)},success:e=>{t.dispatchEvent(new CustomEvent("saved",{detail:{id:e.data.id,json:s}})),n(!1),r("success",e.message)},error:e=>{n(!1),e.hasOwnProperty("responseJSON")&&e.responseJSON.hasOwnProperty("message")?d("Save Failed",e.responseJSON.message):r("error",e.responseText,1e4)}})}fillData(e,s){try{this.post_id=e,this.title=s.title,this.slug=s.slug,this.description=s.description,this.capability=s.capability,this.type=s.type,this.parent_menu=s.parent,this.menu_title=s.menu_title,this.page_icon=s.icon,this.position=s.position,s.fields[0].fields.forEach((e=>{t(e,0,{after:e=>{this.post_id&&(this.#t(e),this.#s(e))}})}))}catch(e){console.error(e.message)}}#t(e){e.elBinded("btn_shortcode").disabled&&(e.elBinded("btn_shortcode").disabled=!1,e.addEventListener("buttonClick",(t=>{"btn_shortcode"==t.detail.handle&&(e=>{const t=new o("dlg-shortcode"),s=(e,t,s)=>{const i=document.createElement("div"),a=document.createElement("div"),n=document.createElement("input"),d=document.createElement("label"),o=document.createElement("button");return d.textContent=t,d.setAttribute("for",e),n.id=e,n.value=s,n.setAttribute("style","width: 320px;"),n.setAttribute("type","text"),n.readOnly=!0,o.setAttribute("class","no-button dashicons dashicons-clipboard"),o.addEventListener("click",(async e=>{n.select(),n.setSelectionRange(0,99999);try{await navigator.clipboard.writeText(n.value)}catch(e){document.execCommand("copy")}r("success","Copied the text: "+n.value)})),a.setAttribute("style","display: flex;align-items: center;column-gap: 4px;"),a.append(n),a.append(o),i.setAttribute("style","display: flex; flex-direction: column; row-gap: 4px; padding: 8px 0;"),i.append(d),i.append(a),i};return t.title="Code for "+e.elBinded("fbox_title").innerHTML+" field",m.slug,e.name,t.appendContent(s("sc","WordPress Shortcode:",`[${m.slug} field=${e.name}]`)),t.appendContent(s("go","PHP:",`radas_get_option("${m.slug}", "${e.name}")`)),t.addButton("Close"),t.addEventListener("buttonClick",(e=>{e.target.close()})),t.addEventListener("close",(t=>{t.target.node.remove(),e.elBinded("btn_shortcode").focus()})),t})(e).open()})))}#s(e,t=!0){e.elBinded("type").disabled=t,e.elBinded("type").classList.toggle("rds-bold",t),e.elBinded("btn_generate_id").classList.toggle("hide",t),e.elBinded("name").readOnly=t}#i(){const e=this;p.addEventListener("open",(t=>{e.page_icon&&t.target.elBinded(e.page_icon).focus()})),p.addEventListener("close",(t=>{e.elBinded("btn_icon").focus()})),p.addEventListener("iconClick",(t=>{e.page_icon=t.detail.icon,t.target.close()}))}#a(e){u(e.target)}clear(){this.post_id="",this.title="",this.slug="",this.description="",this.capability="manage_options",this.type="menu",this.parent_menu="",this.menu_title="",this.page_icon="dashicons-admin-generic",this.position="",this.slug="",Object.keys(e.list).forEach((t=>{e.remove(t)})),c(".rds-error-message").html("")}show(){c("#rds-form").removeClass("hide"),c(".btn-warpper-header").removeClass("hide"),this.elBinded("title").focus(),this.setLastData()}#d(){const e=new o("dlg-close-page");return e.title="Close Confirmation",e.content="Are you sure that you want to close the current page? The changes that you made won't be saved.",e.addButton(["Yes","No"]),e.addEventListener("buttonClick",(e=>{"Yes"==e.detail.text&&(c("#rds-list").removeClass("hide"),c(".btn-add-page").removeClass("hide"),c("#rds-form").addClass("hide"),c(".btn-warpper-header").addClass("hide")),e.target.close()})),e.addEventListener("close",(e=>{e.target.node.remove()})),e}close(){this.#n!=l(this.#e)?this.#d().open():(c("#rds-list").removeClass("hide"),c(".btn-add-page").removeClass("hide"),c("#rds-form").addClass("hide"),c(".btn-warpper-header").addClass("hide"))}}const u=e=>{i(e);const t=e.getAttribute("data-valid-handle");if("page_slug"==t){let t=/^\w+$/;if(""!=e.value&&!t.test(e.value))return i(e,"This field may only contain letters, numbers, and underscores"),!1}if("field_name"==t){e.setAttribute("data-val",e.value);let s=/^\w+$/;if(""!=e.value&&!s.test(e.value))return i(e,"This field may only contain letters, numbers, and underscores"),!1;const a=document.querySelectorAll('[data-valid-handle="'+t+'"][data-val="'+e.value+'"]');if(a.length>1)return a.forEach((t=>{t.setAttribute("data-duplicate",e.value),i(t,"This field cannot be duplicates")})),!1;{const s=e.getAttribute("data-duplicate");if(s){e.removeAttribute("data-duplicate");const a=document.querySelectorAll('[data-valid-handle="'+t+'"][data-val="'+s+'"]');1==a.length&&a.forEach((e=>{e.removeAttribute("data-duplicate"),i(e)}))}}}e.checkValidity()||i(e,e.validationMessage)},m=new h;export{h as optPage,m as page}; -
radas/trunk/admin/option-page.php
r3302806 r3304101 10 10 use Radas\Lib\Classes\Abstracts\Field; 11 11 use Radas\Lib\Factories\Element_Factory; 12 use Radas\Lib\Helper\Breakdance; 12 13 use Radas\Lib\Helper\Util; 14 use Radas\Lib\Helper\WPML; 13 15 14 16 /** … … 28 30 protected $is_breakdance_active; 29 31 30 public function __construct($post_id){ 31 $this->page = json_decode(get_post_meta($post_id, 'op_json', true), true); 32 33 $this->option_name = $this->page['slug']; 34 $this->is_wpml_active = Util::is_wpml_active(); 35 $this->is_breakdance_active = Util::is_breakdance_active(); 32 public function __construct(array $page){ 33 $this->page = $page; 34 35 $this->is_wpml_active = WPML::is_active(); 36 $this->is_breakdance_active = Breakdance::is_active(); 36 37 37 38 if($this->page){ 39 $this->option_name = $this->page['slug']; 38 40 $this->elements = Element_Factory::getInstance()($this->page['fields'][0]); 39 41 $this->fields = Util::get_element_fields($this->elements); 40 42 $this->route = '/options/' . $this->page['slug']; 41 } 43 44 add_filter("radas_get_{$this->option_name}_value", function($field_name, array $args=[] ){ 45 return $this->get_value($field_name, $args); 46 }, 10, 2); 47 } 42 48 } 43 49 … … 212 218 } 213 219 220 if($this->fields[$atts['field']]->type == 'password') { 221 return; 222 } 223 214 224 return $this->get_value($atts['field'], $atts); 215 216 /** get options value and insert to fields */217 $this->get_option_values();218 219 /** @var Field $field */220 $field = $this->fields[$atts['field']];221 222 if( array_key_exists('format', $atts) && $atts['format'] == 'raw' ){223 return $field->get_sanitized_value();224 }225 226 // if($field->type == 'media' && $field->attributes['data-media-type'] == 'image'){227 if($field->type == 'media'){228 $atts = shortcode_atts( [229 'size' => 'thumbnail',230 'width' => '',231 'height' => '',232 'format' => '',233 ], $atts);234 235 if($atts['format'] == 'id') {236 return $field->get_sanitized_value();237 }238 239 if($atts['format'] == 'url') {240 return wp_get_attachment_url($field->get_sanitized_value());241 }242 243 $ar_size = [];244 if($atts['width']) {245 array_push($ar_size, $atts['width']);246 if($atts['height']) {247 array_push($ar_size, $atts['height']);248 }249 return wp_get_attachment_image($field->get_sanitized_value(), $ar_size);250 }251 252 if($atts['size']) {253 return wp_get_attachment_image($field->get_sanitized_value(), $atts['size']);254 }255 }256 257 if($field->type == 'email'){258 $atts = shortcode_atts( [259 'format' => '',260 ], $atts);261 262 if($atts['format'] == 'url') {263 return esc_url('mailto:' . $field->get_sanitized_value());264 }265 }266 267 if($field->type == 'tel'){268 $atts = shortcode_atts( [269 'format' => '',270 ], $atts);271 272 if($atts['format'] == 'url') {273 return esc_url('tel:' . $field->get_sanitized_value());274 }275 }276 277 if($field->type == 'date'){278 $atts = shortcode_atts( [279 'format' => 'default',280 ], $atts);281 282 $date = date_create($field->get_sanitized_value());283 284 if($atts['format'] == 'default') {285 return date_format($date, get_option( 'date_format' ));286 }287 288 return date_format($date, $atts['format']);289 }290 291 if($field->type == 'select' || $field->type == 'radio'){292 $atts = shortcode_atts( [293 'format' => 'value',294 ], $atts);295 296 if($atts['format'] == 'value') {297 return $field->get_sanitized_value();298 }299 300 if($atts['format'] == 'text') {301 return esc_html($field->options[$field->get_sanitized_value()]);302 }303 }304 305 return $field->get_sanitized_value();306 225 } 307 226 -
radas/trunk/admin/rest/cpt/rest-option-page.php
r3302806 r3304101 3 3 4 4 use Radas\Admin\Option_Page; 5 use Radas\Lib\Helper\Instance; 6 use Radas\Lib\Helper\Option; 5 7 use Radas\Lib\Helper\Util; 6 8 use WP_REST_Request; … … 91 93 } 92 94 93 /** @var Option_Page $opt_page */ 94 $opt_page = Util::get_instance_with_param(Option_Page::class, $id,$id);95 /** @var Option_Page $opt_page */ 96 $opt_page = Option::get_instance_by_id($id); 95 97 if(!$opt_page->delete()){ 96 98 return Util::rest_response( … … 104 106 } 105 107 106 Util::delete_instance_with_param(Option_Page::class, $id,$id);108 Option::delete_instance_by_id($id); 107 109 108 110 // $page = json_decode(get_post_meta($id, 'op_json', true), true); … … 262 264 update_post_meta($id, 'op_json', $request->get_body()); 263 265 264 // re -set chache265 wp_cache_delete(Option_Page::class . '_' . $id, 'radas_instance');266 Util::get_instance_with_param(Option_Page::class, $id,$id);266 // refresh instance 267 Option::delete_instance_by_id($id); 268 Option::get_instance_by_id($id); 267 269 268 270 return Util::rest_response( … … 337 339 338 340 // create option page and save it to chache 339 Util::get_instance_with_param(Option_Page::class, $new_id,$new_id);341 Option::get_instance_by_id($new_id); 340 342 341 343 return Util::rest_response( -
radas/trunk/inc/plugin.php
r3156010 r3304101 6 6 use Radas\Admin\Option_Page_CPT; 7 7 use Radas\Admin\Rest\CPT\REST_Option_Page; 8 use Radas\Lib\Helper\Util; 8 use Radas\Lib\Helper\Instance; 9 use Radas\Lib\Helper\Option; 9 10 10 11 // If this file is called directly, abort. … … 73 74 while ( $the_query->have_posts() ) { 74 75 $the_query->the_post(); 75 $post_id = get_post()->ID; 76 Util::get_instance_with_param(Option_Page::class, $post_id, $post_id)->register(); 76 $opt_page = Option::get_instance_by_id( get_post()->ID ); 77 if(!is_null($opt_page)){ 78 $opt_page->register(); 79 } 77 80 } 78 81 } -
radas/trunk/lib/helper/util.php
r3302806 r3304101 80 80 } 81 81 82 /**83 * To get Instance from wp_cache84 * @param string $class85 * @return mixed86 */87 public static function get_cached_instance($class){88 $instance = wp_cache_get($class, 'radas_instance');89 if(!$instance){90 if(!class_exists($class)){91 return false;92 }93 $instance = new $class();94 wp_cache_set($class, $instance, 'radas_instance');95 }96 // wp_cache_flush_group( 'vxn_express_class' );97 return $instance;98 }99 100 /**101 * To get Instance from wp_cache102 * @param string $class103 * @return bool104 */105 public static function delete_cached_instance($class){106 return wp_cache_delete ($class, 'radas_instance');107 }108 109 110 /**111 * To get cached instance with params from wp_cache112 * @param string $class113 * @param string $key114 * @param mixed $param115 * @return mixed116 */117 public static function get_instance_with_param($class, $key, ...$param){118 $instance = wp_cache_get("{$class}_{$key}", 'radas_instance');119 if(!$instance){120 if(!class_exists($class)){121 return false;122 }123 $instance = new $class(...$param);124 wp_cache_set("{$class}_{$key}", $instance, 'radas_instance');125 }126 return $instance;127 }128 129 /**130 * To get cached instance with params from wp_cache131 * @param string $class132 * @param string $key133 * @param mixed $param134 * @return bool135 */136 public static function delete_instance_with_param($class, $key, ...$param){137 return wp_cache_delete("{$class}_{$key}", 'radas_instance');138 }139 140 82 public static function get_function_return_type($function){ 141 83 return (new \ReflectionFunction($function))->getReturnType(); … … 193 135 return new \WP_REST_Response($response, $status); 194 136 } 195 196 public static function is_breakdance_active() {197 if (!function_exists('is_plugin_active')) {198 require_once ABSPATH . 'wp-admin/includes/plugin.php';199 }200 201 return is_plugin_active('breakdance/plugin.php');202 }203 204 public static function is_wpml_active() {205 if (!function_exists('is_plugin_active')) {206 require_once ABSPATH . 'wp-admin/includes/plugin.php';207 }208 209 return is_plugin_active('sitepress-multilingual-cms/sitepress.php');210 }211 212 public static function get_lang() {213 return apply_filters( 'wpml_current_language', null );214 }215 137 } -
radas/trunk/lib/plugin.php
r3156010 r3304101 13 13 14 14 add_action('init', 'radas_lib_register_scripts'); 15 add_action('init', 'radas_lib_register_styles'); 15 add_action('init', 'radas_lib_register_styles'); 16 16 }); 17 17 -
radas/trunk/radas.php
r3302806 r3304101 4 4 * Plugin URI: https://wpradas.com 5 5 * Description: The Lightweight WordPress Plugin for Effortless Options Page Creation 6 * Version: 0.2. 26 * Version: 0.2.3 7 7 * Requires at least: 6.5 8 8 * Requires PHP: 8.0 … … 32 32 require_once RADAS_PATH . 'inc/autoloader.php'; 33 33 require_once RADAS_PATH . 'inc/plugin.php'; 34 require_once RADAS_PATH . 'inc/functions.php'; 35 require_once RADAS_PATH . 'inc/bd-elements/plugin.php'; 34 36 require_once RADAS_PATH . 'lib/plugin.php'; 37 35 38 36 39 // action … … 42 45 do_action('radas_run'); 43 46 } 44 -
radas/trunk/readme.txt
r3302806 r3304101 5 5 Requires at least: 6.5 6 6 Tested up to: 6.8.1 7 Stable tag: 0.2. 27 Stable tag: 0.2.3 8 8 License: GPLv2 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 50 50 * WordPress 6.5 or later 51 51 52 = CREATE OPTIONS PAGE = 53 54 1. To create new options page go to Tools->Radas Options Page 55 1. Click Add New button 56 52 57 = AUTOMATIC INSTALLATION = 53 58 … … 65 70 66 71 == Changelog == 72 = 0.2.3 = 73 74 * Add Radas Breadcrumbs element for Breakdance 75 * add radas_get_option API function 76 * add radas_option_page_load_json API function 77 * optimize code 78 67 79 = 0.2.2 = 68 80
Note: See TracChangeset
for help on using the changeset viewer.