From 6a7694548785b270d87ccd200a539ec6b67aa9b0 Mon Sep 17 00:00:00 2001 From: Mohammad Zulfahmi Date: Wed, 8 May 2024 14:18:12 +0700 Subject: [PATCH] gitignore site dir --- mkdocs.yml | 3 +- overrides/main.html | 8 + site/404.html | 158 ++++--- .../assets/javascripts/bundle.efa0ade1.min.js | 29 -- .../javascripts/bundle.efa0ade1.min.js.map | 8 - .../javascripts/lunr/min/lunr.ko.min.js | 2 +- .../javascripts/lunr/min/lunr.zh.min.js | 2 +- site/assets/javascripts/lunr/wordcut.js | 4 +- .../workers/search.208ed371.min.js | 42 -- .../workers/search.208ed371.min.js.map | 8 - site/assets/stylesheets/main.c4a75a56.min.css | 1 - .../stylesheets/main.c4a75a56.min.css.map | 1 - .../stylesheets/palette.a0c5b2b5.min.css | 1 - .../stylesheets/palette.a0c5b2b5.min.css.map | 1 - site/features/index.html | 398 ++++++++++-------- site/getting_started/index.html | 227 ++++++---- site/how_to_contribute/index.html | 308 +++++++++----- site/index.html | 223 ++++++---- site/search/search_index.json | 2 +- site/sitemap.xml | 30 -- site/sitemap.xml.gz | Bin 201 -> 127 bytes site/sponsors/index.html | 202 ++++++--- site/usage/index.html | 352 ++++++++++++---- 23 files changed, 1250 insertions(+), 760 deletions(-) create mode 100644 overrides/main.html delete mode 100644 site/assets/javascripts/bundle.efa0ade1.min.js delete mode 100644 site/assets/javascripts/bundle.efa0ade1.min.js.map delete mode 100644 site/assets/javascripts/workers/search.208ed371.min.js delete mode 100644 site/assets/javascripts/workers/search.208ed371.min.js.map delete mode 100644 site/assets/stylesheets/main.c4a75a56.min.css delete mode 100644 site/assets/stylesheets/main.c4a75a56.min.css.map delete mode 100644 site/assets/stylesheets/palette.a0c5b2b5.min.css delete mode 100644 site/assets/stylesheets/palette.a0c5b2b5.min.css.map diff --git a/mkdocs.yml b/mkdocs.yml index d5d75c6..685e31f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,12 +17,13 @@ plugins: theme: name: material + custom_dir: overrides features: - announce.dismiss - content.code.annotate - content.tabs.link - content.tooltips - # - header.autohide + - header.autohide - navigation.expand - navigation.indexes - navigation.instant diff --git a/overrides/main.html b/overrides/main.html new file mode 100644 index 0000000..3cf182c --- /dev/null +++ b/overrides/main.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} + +{% block outdated %} + You're not viewing the latest version. + + Click here to go to latest. + +{% endblock %} \ No newline at end of file diff --git a/site/404.html b/site/404.html index 08514a5..2ab04ac 100644 --- a/site/404.html +++ b/site/404.html @@ -14,8 +14,9 @@ + - + @@ -23,14 +24,17 @@ - + - + + + + @@ -64,9 +68,6 @@ - - - @@ -77,6 +78,10 @@ + + @@ -96,6 +101,7 @@
@@ -115,29 +121,39 @@
-
- - - - - - - - - - - - - -
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + - + + - + diff --git a/site/assets/javascripts/bundle.efa0ade1.min.js b/site/assets/javascripts/bundle.efa0ade1.min.js deleted file mode 100644 index 215c901..0000000 --- a/site/assets/javascripts/bundle.efa0ade1.min.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict";(()=>{var Ri=Object.create;var gr=Object.defineProperty;var ki=Object.getOwnPropertyDescriptor;var Hi=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Pi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,on=Object.prototype.propertyIsEnumerable;var nn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&nn(e,r,t[r]);if(kt)for(var r of kt(t))on.call(t,r)&&nn(e,r,t[r]);return e};var an=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&on.call(e,n)&&(r[n]=e[n]);return r};var Ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $i=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Hi(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=ki(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ri(Pi(e)):{},$i(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var cn=Ht((xr,sn)=>{(function(e,t){typeof xr=="object"&&typeof sn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function c(T){var Qe=T.type,De=T.tagName;return!!(De==="INPUT"&&s[Qe]&&!T.readOnly||De==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function f(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(a(r.activeElement)&&f(r.activeElement),n=!0)}function m(T){n=!1}function d(T){a(T.target)&&(n||c(T.target))&&f(T.target)}function h(T){a(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),G())}function G(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function oe(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,oe())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),G(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var fn=Ht(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},s=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(oe,N){d.append(N,oe)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+f+" due to "+T)}}var m=u.createElement("a");m.href=c,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=c,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,G=!0,oe=this;["append","delete","set"].forEach(function(T){var Qe=h[T];h[T]=function(){Qe.apply(h,arguments),v&&(G=!1,oe.search=h.toString(),G=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,G&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(c){Object.defineProperty(s,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){a(c)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var Kr=Ht((Mt,qr)=>{/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */(function(t,r){typeof Mt=="object"&&typeof qr=="object"?qr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ci}});var s=i(279),a=i.n(s),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var E=p()(O);return m("cut"),E},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[O?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var G=function(O,E){var H=v(O);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},oe=function(O){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof O=="string"?H=G(O,E):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?H=G(O.value,E):(H=p()(O),m("copy")),H},N=oe;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(E){return typeof E}:T=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},T(j)}var Qe=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=O.action,H=E===void 0?"copy":E,I=O.container,q=O.target,Me=O.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function wi(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function rn(j,O){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=f()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",Rt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Me,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(Rt){Me=Me&&!!document.queryCommandSupported(Rt)}),Me}}]),E}(a()),Ci=Ai},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=f.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function c(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function f(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function c(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return f(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=c},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),s=c.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function f(){c.off(i,f),s.apply(a,arguments)}return f._=s,this.on(i,f,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=a.length;for(c;c{"use strict";/*! - * escape-html - * Copyright(c) 2012-2013 TJ Holowaychuk - * Copyright(c) 2015 Andreas Lubbe - * Copyright(c) 2015 Tiancheng "Timothy" Gu - * MIT Licensed - */var ns=/["'&<>]/;Go.exports=os;function os(e){var t=""+e,r=ns.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(f[0]===6||f[0]===2)){r=0;continue}if(f[0]===3&&(!i||f[1]>i[0]&&f[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{c(n[m](d))}catch(h){p(i[0][3],h)}}function c(m){m.value instanceof et?Promise.resolve(m.value.v).then(f,u):p(i[0][2],m)}function f(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function ln(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(f){i({value:f,done:a})},s)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var $t=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: -`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` - `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),c=a.next();!c.done;c=a.next()){var f=c.value;f.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof $t?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{mn(h)}catch(v){i=i!=null?i:[],v instanceof $t?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new $t(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)mn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function It(e){return e instanceof Ie||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function mn(e){A(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new En(r,n)},t}(F);var En=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Ut);var Tn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var Te=new Tn(Sn);var _=new F(function(e){return e.complete()});function Dt(e){return e&&A(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return A(Cr(e))?e.pop():void 0}function Oe(e){return Dt(Cr(e))?e.pop():void 0}function Vt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function zt(e){return A(e==null?void 0:e.then)}function Nt(e){return A(e[ft])}function qt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Kt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ni(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qt=Ni();function Yt(e){return A(e==null?void 0:e[Qt])}function Gt(e){return pn(this,arguments,function(){var r,n,o,i;return Pt(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return A(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(Nt(e))return qi(e);if(pt(e))return Ki(e);if(zt(e))return Qi(e);if(qt(e))return On(e);if(Yt(e))return Yi(e);if(Bt(e))return Gi(e)}throw Kt(e)}function qi(e){return new F(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ki(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?L(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Vn(function(){return new Xt}))}}function zn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,m,d=0,h=!1,v=!1,G=function(){p==null||p.unsubscribe(),p=void 0},oe=function(){G(),u=m=void 0,h=v=!1},N=function(){var T=u;oe(),T==null||T.unsubscribe()};return y(function(T,Qe){d++,!v&&!h&&G();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,c))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,G(),p=$r(oe,o,$e),De.error($e)},complete:function(){h=!0,G(),p=$r(oe,s),De.complete()}}),U(T).subscribe(u))})(f)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function er(e){return C(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),B())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Qn(e){return C(b(window,"load"),b(window,"resize")).pipe(Ce(0,Te),l(()=>Xe(e)),V(Xe(e)))}function tr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return C(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Te),l(()=>tr(e)),V(tr(e)))}var Gn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Dr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ga?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Dr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=va.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Bn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Xn=typeof WeakMap!="undefined"?new WeakMap:new Gn,Zn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ya.getInstance(),n=new Aa(t,r,this);Xn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Zn.prototype[e]=function(){var t;return(t=Xn.get(this))[e].apply(t,arguments)}});var Ca=function(){return typeof rr.ResizeObserver!="undefined"?rr.ResizeObserver:Zn}(),eo=Ca;var to=new x,Ra=$(()=>k(new eo(e=>{for(let t of e)to.next(t)}))).pipe(g(e=>C(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(L(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ir(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var ro=new x,ka=$(()=>k(new IntersectionObserver(e=>{for(let t of e)ro.next(t)},{threshold:0}))).pipe(g(e=>C(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function ar(e){return ka.pipe(S(t=>t.observe(e)),g(t=>ro.pipe(L(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function no(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),B())}var sr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function oo(e){return sr[e].checked}function Ke(e,t){sr[e].checked!==t&&sr[e].click()}function Ue(e){let t=sr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function Ha(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Pa(){return C(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function io(){let e=b(window,"keydown").pipe(L(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:oo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),L(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!Ha(n,r)}return!0}),pe());return Pa().pipe(g(t=>t?_:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function ao(){return new x}function so(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)so(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)so(n,o);return n}function cr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function co(){return location.hash.substring(1)}function Vr(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function $a(){return b(window,"hashchange").pipe(l(co),V(co()),L(e=>e.length>0),J(1))}function fo(){return $a().pipe(l(e=>ce(`[id="${e}"]`)),L(e=>typeof e!="undefined"))}function zr(e){let t=matchMedia(e);return Zt(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function uo(){let e=matchMedia("print");return C(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function Nr(e,t){return e.pipe(g(r=>r?t():_))}function fr(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>_),g(r=>r.status!==200?Tt(()=>new Error(r.statusText)):k(r)))}function We(e,t){return fr(e,t).pipe(g(r=>r.json()),J(1))}function po(e,t){let r=new DOMParser;return fr(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function ur(e){let t=M("script",{src:e});return $(()=>(document.head.appendChild(t),C(b(t,"load"),b(t,"error").pipe(g(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function lo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function mo(){return C(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(lo),V(lo()))}function ho(){return{width:innerWidth,height:innerHeight}}function bo(){return b(window,"resize",{passive:!0}).pipe(l(ho),V(ho()))}function vo(){return Q([mo(),bo()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function pr(e,{viewport$:t,header$:r}){let n=t.pipe(Z("size")),o=Q([n,r]).pipe(l(()=>Xe(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,c,f)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:c,error:f});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` - @@ -86,6 +87,10 @@ + + @@ -105,6 +110,7 @@
@@ -124,29 +130,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + + @@ -867,10 +892,11 @@

Things that we want to add in
- + + - + diff --git a/site/getting_started/index.html b/site/getting_started/index.html index 9e8d6d1..b4e8a4e 100644 --- a/site/getting_started/index.html +++ b/site/getting_started/index.html @@ -18,8 +18,9 @@ + - + @@ -27,15 +28,18 @@ - + - + + + + @@ -68,9 +72,6 @@ - - - @@ -86,6 +87,10 @@ + + @@ -105,6 +110,7 @@
@@ -124,29 +130,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + + @@ -625,10 +707,11 @@

Full Version - + + - + diff --git a/site/how_to_contribute/index.html b/site/how_to_contribute/index.html index 614d291..322d047 100644 --- a/site/how_to_contribute/index.html +++ b/site/how_to_contribute/index.html @@ -18,8 +18,9 @@ + - + @@ -27,15 +28,18 @@ - + - + + + + @@ -68,24 +72,20 @@ - - -
+ + @@ -105,6 +105,7 @@
@@ -124,29 +125,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + + - + + - + diff --git a/site/index.html b/site/index.html index 99be7bd..a5e6d93 100644 --- a/site/index.html +++ b/site/index.html @@ -16,8 +16,9 @@ + - + @@ -25,15 +26,18 @@ - + - + + + + @@ -66,9 +70,6 @@ - - - @@ -84,6 +85,10 @@ + + @@ -103,6 +108,7 @@
@@ -122,29 +128,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + + @@ -552,10 +620,11 @@

Contributors - + + - + diff --git a/site/search/search_index.json b/site/search/search_index.json index 1598020..d03e8fd 100644 --- a/site/search/search_index.json +++ b/site/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-,:!=\\[\\]()\"`/]+|\\.(?!\\d)|&[lg]t;|(?!\\b)(?=[A-Z][a-z])","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"

Generator is a Laravel-based open-source toolkit for building basic needs for administration interface setup like Create, Read, Update, and Delete. It's the minimalistic template or a starting point for developing CMS system, admin panel, or any other web application that requires CRUD functionality.

"},{"location":"#the-reason","title":"The Reason","text":"

We have a bit of time to build master main data over and over again, therefore this package may let you focus on your core features application, Instead, you might use that time to sleep, play video games, or, since it's Ramadhan, pray to Allah \ufdfb and Prophet Muhammad \ufdfa

"},{"location":"#upgrade-guide","title":"Upgrade Guide","text":"

Currently, we don't have any upgrade guide for this time. But, we will make it soon if we have any breaking changes. Enjoy!

"},{"location":"#who-we-are","title":"Who We Are","text":"

We're just bunch of people working on side project (freelance) developer based in Bekasi, Indonesia. We want to make a difference in the world by helping people making their own projects via open source and free software such like our creation.

"},{"location":"#pricing","title":"Pricing","text":"

Nope, it's 100% free & open source.

"},{"location":"#license","title":"License","text":"

MIT.

"},{"location":"#sponsors","title":"Sponsors","text":"

Space is available, lmao.

"},{"location":"#contributors","title":"Contributors","text":"

Thank you to all our fellow contributors.

"},{"location":"features/","title":"Features","text":""},{"location":"features/#simple-version","title":"Simple Version","text":"
  • CRUD Generator
    • Support more than 15 column types of migrations, like string, char, date, year, etc.
    • Datatables (Yajra Datatables)
    • One To Many (Inverse) / Belongs To
    • Model casting
    • Image upload (Intervention Image)
    • Support HTML 5 Input
    • Request validations supported: required, in, image, min, max, string, email, number, date, exists, nullable, unique, comfirmed
"},{"location":"features/#full-version","title":"Full Version","text":"
  • CRUD Generator
  • Configurable sidebar menus
  • CRUD User
  • Roles and permissions (Spatie Permission)
  • Authentication (Laravel Fortify)
    • Login
    • Register
    • Forgot Password
    • 2FA Authentication
    • Update profile information
"},{"location":"features/#avaiable-commands","title":"Avaiable Commands","text":""},{"location":"features/#install-the-generator","title":"Install The Generator","text":"

Install Generator Variants (Simple/Full Version)

For simple version

php artisan generator:install simple
For full verion
php artisan generator:install full

Warning! That will overwrite several files, so use caution while using this command and avoid using it more than once.

"},{"location":"features/#set-the-sidebar-menu","title":"Set the sidebar menu","text":"

Set the sidebar menu to fully blade code (static) or use a list from config (dynamic)

Sidebar configuration place in config/generator.php

php artisan generator:sidebar dynamic

While using static sidebar menu, you feel free to edit the sidebar menus on resources/views/layouts/sidebar.blade.php

php artisan generator:sidebar static

After you create a new module using the generator, sidebar will automatically comeback to set dynamic

"},{"location":"features/#utilitieshelpers","title":"Utilities/Helpers","text":""},{"location":"features/#check-sidebar-active-menus","title":"Check sidebar active menus","text":"
is_active_menu(string|array $menu): boolean;
"},{"location":"features/#utility-class","title":"Utility class","text":"

All utility functions that you maybe need, are available in EvdigiIna\\Generator\\Generators\\GeneratorUtils

use EvdigiIna\\Generator\\Generators\\GeneratorUtils;\n\n/**\n* Get template/stub file.\n*\n* @param string $path\n* @return string\n*/\nGeneratorUtils::getTemplate(string $path): string\n\n/**\n* Check folder if doesnt exist, then make folder.\n*\n* @param string $path\n* @return void\n*/\nGeneratorUtils::checkFolder(string $path): void\n\n/**\n* Convert string to singular pascal case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::singularPascalCase(string $string): string\n\n/**\n* Convert string to singular pascal case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::pascalCase(string $string): string\n\n/**\n* Convert string to plural pascal case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::pluralPascalCase(string $string): string\n\n/**\n* Convert string to plural snake case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::pluralSnakeCase(string $string): string\n\n/**\n* Convert string to singular snake case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::singularSnakeCase(string $string): string\n\n/**\n* Convert string to plural pascal case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::pluralCamelCase(string $string): string\n\n/**\n* Convert string to singular pascal case.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::singularCamelCase(string $string): string\n\n/**\n* Convert string to plural, kebab case, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::pluralKebabCase(string $string): string\n\n/**\n* Convert string kebab case, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::kebabCase(string $string): string\n\n/**\n* Convert string to singular, kebab case, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::singularKebabCase(string $string): string\n\n/**\n* Convert string to singular, remove special caracters, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanSingularLowerCase(string $string): string\n\n/**\n* Remove special caracters, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanLowerCase(string $string): string\n\n/**\n* Convert string to plural, remove special caracters, and uppercase every first letters.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanPluralUcWords(string $string): string\n\n/**\n* Convert string to singular, remove special caracters, and uppercase every first letters.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanSingularUcWords(string $string): string\n\n/**\n* Remove special caracters, and uppercase every first letters.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanUcWords(string $string): string\n\n/**\n* Convert string to plural, remove special caracters, and lowercase.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::cleanPluralLowerCase(string $string): string\n\n/**\n* Get 1 column after id on the table.\n*\n* @param string $table\n* @return string $column\n*/\nGeneratorUtils::getColumnAfterId(string $table): string\n\n/**\n* Select id and column after id on the table.\n*\n* @param string $table\n* @return string $selectedField\n*/\nGeneratorUtils::selectColumnAfterIdAndIdItself(string $table): string\n\n/**\n* Converts camelCase string to have spaces between each.\n*\n* @param string $string\n* @return string\n*/\nGeneratorUtils::fromCamelCase(string $string): string\n\n/**\n* Set model name from the latest of array(if exists).\n*\n* @param string $model\n* @param string $style\n* @return string\n*/\nGeneratorUtils::setModelName(string $model, string $style = 'pascal case'): string\n\n/**\n* Set default image and code to controller.\n*\n* @param null|string $default,\n* @param string $field\n* @param string $model\n* @return array\n*/\nGeneratorUtils::setDefaultImage(null|string $default, string $field, string $model): array\n\n/**\n* Convert array from config to string like array.\n*\n* @param array $idebars\n* @return string\n*/\nGeneratorUtils::convertArraySidebarToString(array $sidebars): string
"},{"location":"features/#things-that-we-want-to-add-in-the-future","title":"Things that we want to add in the future","text":"
  • API CRUD generator
  • API docs
  • Can create more relation type
  • Upload file except image
  • CRUD with desain pattern(Service/Repository Pattern)
  • Laravel table pagination
  • Import/Export csv
  • Input for custom table name
  • Change request validation as an array
  • Add a checkbox for whether to use route model binding or not
  • Add a checkbox to turn off automatic pluralization
  • If the time zone is set to Indonesia, then disable pluralization
  • Add username to users table
  • New template admin
  • Option to auto migrate table or not
  • Add config for showing an image in the data table or not
  • ability to hide/show the field on the view page
  • Configuration to limit showing fields in the index page
  • Can select the field that will be showing in belongsTo the relation
  • The generator can make seeder and factory
  • Add default config for minimum & maximum length to column type string
  • The generator can make subfolders for request class validation
  • Add configuration for image type rounded or square
  • Add support for diffForHumans() to input type date.
  • Can custom validation(write-in input)
  • The generator can use caching
  • The generator can create policy
  • The generator can create model observer
  • Use database transaction
  • The generator can create mutator & casting
  • Configuration for upload file to S3
  • Add soft delete option
  • If the model is in a subfolder then the route will use the sub-route
  • Add unit test for the generator
  • The generator can create unit test
  • Add notification if the user changed their email or password (package)
  • Add activity log (package)
  • Add backup database (package)
  • The Generator uses enum class for column type enum
  • Refactor code

The list is subject to change at any time and features may be added in any order.

"},{"location":"getting_started/","title":"Getting Started","text":""},{"location":"getting_started/#requirements","title":"Requirements","text":"

All you need is Composer, PHP ^8.1, and Laravel ^9.x.

"},{"location":"getting_started/#installation","title":"Installation","text":"
composer require evdigiina/generator --dev

For this package, there are two variations: Simple Version and Full Version

"},{"location":"getting_started/#simple-version","title":"Simple Version","text":"

Only the generator, includes: Yajra Datatables, Intervention Image, and Bootstrap 5.

View all features

Publish assets

php artisan generator:install simple

Register the provider in config/app.php

/*\n* Package Service Providers...\n*/\nApp\\Providers\\ViewComposerServiceProvider::class,

Then goes to /simple-generators/create/

"},{"location":"getting_started/#full-version","title":"Full Version","text":"

The generator + starter app, includes: Yajra Datatables, Intervention Image, Laravel Fortify, Spatie Permission, and Mazer Template.

View all features.

Installing this package after a brand-new Laravel installation is necessary if you want to use the full version of it. because several files will be overwritten.

Install Laravel Fortify & Spatie Permission

composer require laravel/fortify spatie/laravel-permission

Publish assets

php artisan generator:install full

Warning! Be careful with this command, it will overwrite several files, don't run it multiple times.

Register the provider in config/app.php

/*\n* Package Service Providers...\n*/\n\nApp\\Providers\\FortifyServiceProvider::class,\nSpatie\\Permission\\PermissionServiceProvider::class,\nApp\\Providers\\ViewComposerServiceProvider::class,

Run migration and seeder

php artisan migrate --seed

Then goes to /generators/create

Account

  • Email: admin@example.com
  • Password: password
"},{"location":"getting_started/#whats-inside","title":"What's inside?","text":""},{"location":"getting_started/#simple-version_1","title":"Simple Version","text":"
  • Yajra datatable - ^10.x
  • Intervention Image - ^2.x
  • Bootstrap - ^5.x
"},{"location":"getting_started/#full-version_1","title":"Full Version","text":"
  • Yajra datatable - ^10.x
  • Intervention Image - ^2.x
  • Laravel Forify - ^1.x
  • Spatie permission - ^5.x
  • Mazer template - ^2.x
"},{"location":"how_to_contribute/","title":"How To Contribute","text":"

Star the repository

"},{"location":"how_to_contribute/#coming-soon","title":"Coming soon","text":""},{"location":"sponsors/","title":"Sponsors / Supporters","text":""},{"location":"sponsors/#become-a-sponsor-supporter","title":"Become a sponsor / supporter","text":"

Generator is an MIT-licensed open-source project and is completely free to use. The tremendous amount of effort needed to maintain and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors or supporters.

"},{"location":"sponsors/#give-it-personally-to-our-core-team-member","title":"Give it personally to our core team member","text":"
  • Mohammad Zulfahmi (Author of the Generator)
    • GitHub Sponsor
    • Buymeacoffe
    • Ko-fi
    • Saweria
  • Rachmad Nur Hayat
    • GitHub
    • Buymeacoffe
    • Ko-fi
    • Saweria
"},{"location":"sponsors/#sponsor-as-a-company","title":"Sponsor as a company","text":"

Your company logo will appear on our website and GitHub project READMEs. Furthermore, supporting OSS increases your brand's reputation. To do so, please contact us using the details provided below.

  • mohammad.zulfahmi03@gmail.com
  • Rahmat
"},{"location":"usage/","title":"Usage","text":""},{"location":"usage/#create-your-first-crud","title":"Create your first CRUD","text":"

Go to /generators/create if yo're using Full Version or /simple-generators/create for Simple Version

Below is table about supported input type & validation when you are using some column type.

Columm Type Input Type Validation Length (min & max) string text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 integer number, range, hidden required|numeric \u2705 text text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 booelan radio, select, datalist required|booelan \u274c char text, color, week, email, telephone, password url, search, file, hidden required|string \u2705 date date, month required|date \u274c time time required|date \u274c year select, datalist required|numeric \u274c dateTime datetime-local required|date \u274c decimal number, range, hidden required|numeric \u274c double number, range, hidden required|numeric \u274c enum select, readio, datalist required|in \u274c float number, range, hidden required|numeric \u274c foreignId select, datalist required|exist \u274c tinyInteger number, range, hidden required|numeric \u274c mediumInteger number, range, hidden required|numeric \u274c bigInteger number, range, hidden required|numeric \u274c tinyText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 mediumText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 longText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705

required validation will change to nullable if you uncheck required switch in the form, if any input type password will automatically added confirmed validation, min:1|max:100 for supported length column and email|unique for email input type.

"},{"location":"usage/#create-relation","title":"Create Relation","text":"

For now is only support One To Many (Inverse) / Belongs To.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id lacus id sem dapibus faucibus. Aenean eu magna sodales augue efficitur porttitor eget a mi. Aenean pulvinar sit amet tellus sit amet placerat. Fusce pulvinar suscipit lacus, ut fermentum nulla efficitur a.

"},{"location":"usage/#create-upload-file","title":"Create Upload File","text":"

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam id lacus id sem dapibus faucibus. Aenean eu magna sodales augue efficitur porttitor eget a mi. Aenean pulvinar sit amet tellus sit amet placerat. Fusce pulvinar suscipit lacus, ut fermentum nulla efficitur a.

if you are using storage for store the image, make sure you run php artisan storage:link

"},{"location":"usage/#create-sidebar-menu","title":"Create sidebar menu","text":"

This feature only avaiable in full version.

You can easily create a dynamic sidebar menus with just a few input. all sidebar menus configuration place in config/generator.php

How about i dont need dynamic sidebar menu, i just want create my menu in blade? yeah we provide it, click here how to do it.

"},{"location":"usage/#configuration","title":"Configuration","text":"

Below is the default config for the generator and sidebar menus:

return [\n    /**\n     * If any input file(image) as default will used options below.\n     */\n    'image' => [\n        /**\n         * Path for store the image.\n         *\n         * avaiable options:\n         * 1. public\n         * 2. storage\n         */\n        'path' => 'storage',\n\n        /**\n         * Will used if image is nullable and default value is null.\n         */\n        'default' => 'https://via.placeholder.com/350?text=No+Image+Avaiable',\n\n        /**\n         * Crop the uploaded image using intervention image.\n         */\n        'crop' => true,\n\n        /**\n         * When set to true the uploaded image aspect ratio will still original.\n         */\n        'aspect_ratio' => true,\n\n        /**\n         * Crop image size.\n         */\n        'width' => 500,\n        'height' => 500,\n    ],\n\n    'format' => [\n        /**\n         * Will used to first year on select, if any column type year.\n         */\n        'first_year' => 1900,\n\n        /**\n         * If any date column type will cast and display used this format, but for input date still will used Y-m-d format.\n         *\n         * another most common format:\n         * - M d Y\n         * - d F Y\n         * - Y m d\n         */\n        'date' => 'd/m/Y',\n\n        /**\n         * If any input type month will cast and display used this format.\n         */\n        'month' => 'm/Y',\n\n        /**\n         * If any input type time will cast and display used this format.\n         */\n        'time' => 'H:i',\n\n        /**\n         * If any datetime column type or datetime-local on input, will cast and display used this format.\n         */\n        'datetime' => 'd/m/Y H:i',\n\n        /**\n         * Limit string on index view for any column type text or longtext.\n         */\n        'limit_text' => 100,\n    ],\n\n    /**\n     * It will used for generator to manage and showing menus on sidebar views.\n     *\n     * Example:\n     * [\n     *   'header' => 'Main',\n     *\n     *   // All permissions in menus[] and submenus[]\n     *   'permissions' => ['test view'],\n     *\n     *   menus' => [\n     *       [\n     *          'title' => 'Main Data',\n     *          'icon' => '<i class=\"bi bi-collection-fill\"></i>',\n     *          'route' => null,\n     *\n     *          // permission always null when isset submenus\n     *          'permission' => null,\n     *\n     *          // All permissions on submenus[] and will empty[] when submenus equals to []\n     *          'permissions' => ['test view'],\n     *\n     *          'submenus' => [\n     *                 [\n     *                     'title' => 'Tests',\n     *                     'route' => '/tests',\n     *                     'permission' => 'test view'\n     *                  ]\n     *               ],\n     *           ],\n     *       ],\n     *  ],\n     *\n     * This code below always changes when you use a generator and maybe you must lint or format the code.\n     */\n    'sidebars' => [\n        [\n            'header' => 'Main',\n            'permissions' => [\n                'test view'\n            ],\n            'menus' => [\n                [\n                    'title' => 'Main Data',\n                    'icon' => '<i class=\"bi bi-collection-fill\"></i>',\n                    'route' => null,\n                    'permission' => null,\n                    'permissions' => [\n                        'test view'\n                    ],\n                    'submenus' => [\n                        [\n                            'title' => 'Tests',\n                            'route' => '/tests',\n                            'permission' => 'test view'\n                        ]\n                    ]\n                ]\n            ]\n        ],\n        [\n            'header' => 'Users',\n            'permissions' => [\n                'user view',\n                'role & permission view'\n            ],\n            'menus' => [\n                [\n                    'title' => 'Users',\n                    'icon' => '<i class=\"bi bi-people-fill\"></i>',\n                    'route' => '/users',\n                    'permission' => 'user view',\n                    'permissions' => [],\n                    'submenus' => []\n                ],\n                [\n                    'title' => 'Roles & permissions',\n                    'icon' => '<i class=\"bi bi-person-check-fill\"></i>',\n                    'route' => '/roles',\n                    'permission' => 'role & permission view',\n                    'permissions' => [],\n                    'submenus' => []\n                ]\n            ]\n        ],\n    ],\n];\n
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-,:!=\\[\\]()\"`/]+|\\.(?!\\d)|&[lg]t;|(?!\\b)(?=[A-Z][a-z])","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"

Generator is a Laravel-based open-source toolkit for building basic needs for administration interface setup like Create, Read, Update, and Delete. It's the minimalistic template or a starting point for developing CMS system, admin panel, or any other web application that requires CRUD functionality.

"},{"location":"#the-reason","title":"The Reason","text":"

We have a bit of time to build master main data over and over again, therefore this package may let you focus on your core features application, Instead, you might use that time to sleep, play video games, or touch some grass.

"},{"location":"#who-we-are","title":"Who We Are","text":"

We're just bunch of people working on side project (freelance) developer based in Bekasi, Indonesia. We want to make a difference in the world by helping people making their own projects via open source and free software such like our creation.

"},{"location":"#pricing","title":"Pricing","text":"

Nope, it's 100% free & open source.

"},{"location":"#license","title":"License","text":"

MIT.

"},{"location":"#sponsors","title":"Sponsors","text":"

Space is available, lmao.

"},{"location":"#contributors","title":"Contributors","text":"

Thank you to all our fellow contributors.

"},{"location":"features/","title":"Features","text":""},{"location":"features/#simple-version","title":"Simple Version","text":"
  • CRUD Generator
    • Support more than 15 column types of migrations, like string, char, date, year, etc.
    • Datatables (Yajra Datatables)
    • One To Many (Inverse) / Belongs To
    • Model casting
    • Image upload (Intervention Image)
    • Support HTML 5 Input
    • Request validations supported: required, in, image, min, max, string, email, number, date, exists, nullable, unique, confirmed
"},{"location":"features/#full-version","title":"Full Version","text":"
  • CRUD Generator
  • Configurable sidebar menus
  • CRUD User
  • Roles and permissions (Spatie Permission)
  • Authentication (Laravel Fortify)
    • Login
    • Register
    • Forgot Password
    • 2FA Authentication
    • Update profile information
"},{"location":"features/#available-commands","title":"Available Commands","text":""},{"location":"features/#install-the-generator","title":"Install The Generator","text":"

Install Generator Variants (Simple/Full Version)

For simple version

php artisan generator:install simple
For full version
php artisan generator:install full

Warning! That will overwrite several files, so use caution while using this command and avoid using it more than once.

"},{"location":"features/#set-the-sidebar-menu","title":"Set the sidebar menu","text":"

Set the sidebar menu to fully blade code (static) or use a list from config (dynamic)

Sidebar configuration place in config/generator.php

php artisan generator:sidebar dynamic

While using static sidebar menu, you feel free to edit the sidebar menus on resources/views/layouts/sidebar.blade.php

php artisan generator:sidebar static

After you create a new module using the generator, sidebar will automatically comeback to set dynamic

"},{"location":"features/#utilitieshelpers","title":"Utilities/Helpers","text":""},{"location":"features/#check-sidebar-active-menus","title":"Check sidebar active menus","text":"
is_active_menu(string|array $menu): boolean;
"},{"location":"features/#utility-class","title":"Utility class","text":"

All utility functions that you maybe need, are available in App\\Generators\\GeneratorUtils

use App\\Generators\\GeneratorUtils;\n\n/**\n * Get template/file.\n*/\npublic static function getTemplate(string $path): string;\n\n/**\n* Get published files.\n*/\npublic static function getPublishedFiles(string $path): string;\n\n/**\n* Check folder if not exist, then make folder.\n*/\npublic static function checkFolder(string $path): void;\n\n/**\n* Convert string to singular pascal case.\n*/\npublic static function singularPascalCase(string $string): string;\n\n/**\n* Convert string to singular pascal case.\n*/\npublic static function pascalCase(string $string): string;\n\n/**\n* Convert string to plural pascal case.\n*/\npublic static function pluralPascalCase(string $string): string;\n\n/**\n* Convert string to plural snake case.\n*/\npublic static function pluralSnakeCase(string $string): string;\n\n/**\n* Convert string to singular snake case.\n*/\npublic static function singularSnakeCase(string $string): string;\n\n/**\n* Convert string to plural pascal case.\n*/\npublic static function pluralCamelCase(string $string): string;\n\n/**\n* Convert string to singular pascal case.\n*/\npublic static function singularCamelCase(string $string): string;\n\n/**\n* Convert string to plural, kebab case, and lowercase.\n*/\npublic static function pluralKebabCase(string $string): string;\n\n/**\n* Convert string to kebab case, and lowercase.\n*/\npublic static function kebabCase(string $string): string;\n\n/**\n* Convert string to singular, kebab case, and lowercase.\n*/\npublic static function singularKebabCase(string $string): string;\n\n/**\n* Convert string to singular, remove special characters, and lowercase.\n*/\npublic static function cleanSingularLowerCase(string $string): string;\n\n/**\n* Remove special characters, and lowercase.\n*/\npublic static function cleanLowerCase(string $string): string;\n\n/**\n* Convert string to plural, remove special characters, and uppercase every first letters.\n*/\npublic static function cleanPluralUcWords(string $string): string;\n\n/**\n* Convert string to singular, remove special characters, and uppercase every first letters.\n*/\npublic static function cleanSingularUcWords(string $string): string;\n\n/**\n* Remove special characters, and uppercase every first letters.\n*/\npublic static function cleanUcWords(string $string): string;\n\n/**\n* Convert string to plural, remove special characters, and lowercase.\n*/\npublic static function cleanPluralLowerCase(string $string): string;\n\n/**\n* Get 1 column after id on the table.\n*/\npublic static function getColumnAfterId(string $table): string;\n\n/**\n* Select id and column after id on the table.\n*/\npublic static function selectColumnAfterIdAndIdItself(string $table): string;\n\n/**\n* Get model location or path if contains '/'.\n*/\npublic static function getModelLocation(string $model): string;\n\n/**\n* Converts camelCase string to have spaces between each.\n*/\npublic static function fromCamelCase(string $string): string;\n/**\n* Set model name from the latest of array(if exists).\n*/\npublic static function setModelName(string $model, string $style = 'pascal case'): string;\n\n/**\n* Set default image and code to controller.\n*/\npublic static function setDefaultImage(null|string $default, string $field, string $model): array;\n\n/**\n* Convert array from config to string like array.\n*/\npublic static function convertArraySidebarToString(array $sidebars): string;\n\n/**\n* Check if menu is active.\n*/\npublic static function isActiveMenu(string|array $route): string;
"},{"location":"features/#things-that-we-want-to-add-in-the-future","title":"Things that we want to add in the future","text":"
  • API CRUD generator
  • API docs
  • Can create more relation type
  • Upload file except image
  • CRUD with desain pattern(Service/Repository Pattern)
  • Laravel table pagination
  • Import/Export csv
  • Input for custom table name
  • Change request validation as an array
  • Add a checkbox for whether to use route model binding or not
  • Add a checkbox to turn off automatic pluralization
  • If the time zone is set to Indonesia, then disable pluralization
  • Add username to users table
  • New template admin
  • Option to auto migrate table or not
  • Add config for showing an image in the data table or not
  • ability to hide/show the field on the view page
  • Configuration to limit showing fields in the index page
  • Can select the field that will be showing in belongsTo the relation
  • The generator can make seeder and factory
  • Add default config for minimum & maximum length to column type string
  • The generator can make subfolders for request class validation
  • Add configuration for image type rounded or square
  • Add support for diffForHumans() to input type date.
  • Can custom validation(write-in input)
  • The generator can use caching
  • The generator can create policy
  • The generator can create model observer
  • Use database transaction
  • The generator can create mutator & casting
  • Configuration for upload file to S3
  • Add soft delete option
  • If the model is in a subfolder then the route will use the sub-route
  • Add unit test for the generator
  • The generator can create unit test
  • Add notification if the user changed their email or password (package)
  • Add activity log (package)
  • Add backup database (package)
  • The Generator uses enum class for column type enum
  • Refactor code

The list is subject to change at any time and features may be added in any order.

"},{"location":"getting_started/","title":"Getting Started","text":""},{"location":"getting_started/#requirements","title":"Requirements","text":"

All you need is Composer, PHP ^8.1, and Laravel ^9.x.

"},{"location":"getting_started/#installation","title":"Installation","text":"
composer require evdigiina/generator --dev

For this package, there are two variations: Simple Version and Full Version

"},{"location":"getting_started/#simple-version","title":"Simple Version","text":"

Only the generator, includes: Yajra Datatables, Intervention Image, and Bootstrap 5.

View all features

Publish assets

php artisan generator:install simple

Register the provider in config/app.php

/*\n* Package Service Providers...\n*/\nApp\\Providers\\ViewComposerServiceProvider::class,

Then go to /simple-generators/create/

"},{"location":"getting_started/#full-version","title":"Full Version","text":"

The generator + starter app, includes: Yajra Datatables, Intervention Image, Laravel Fortify, Spatie Permission, and Mazer Template.

View all features.

Installing this package after a brand-new Laravel installation is necessary if you want to use the full version of it. because several files will be overwritten.

Install Laravel Fortify & Spatie Permission

composer require laravel/fortify spatie/laravel-permission

Publish assets

php artisan generator:install full

Warning! Be careful with this command, it will overwrite several files, don't run it multiple times.

Register the provider in config/app.php

/*\n* Package Service Providers...\n*/\n\nApp\\Providers\\FortifyServiceProvider::class,\nSpatie\\Permission\\PermissionServiceProvider::class,\nApp\\Providers\\ViewComposerServiceProvider::class,

Run migration and seeder

php artisan migrate --seed

Then go to /generators/create

Account

  • Email: admin@example.com
  • Password: password
"},{"location":"getting_started/#whats-inside","title":"What's inside?","text":""},{"location":"getting_started/#simple-version_1","title":"Simple Version","text":"
  • Yajra datatable - ^10.x
  • Intervention Image - ^2.x
  • Bootstrap - ^5.x
"},{"location":"getting_started/#full-version_1","title":"Full Version","text":"
  • Yajra datatable - ^10.x
  • Intervention Image - ^2.x
  • Laravel Forify - ^1.x
  • Spatie permission - ^5.x
  • Mazer template - ^2.x
"},{"location":"how_to_contribute/","title":"How To Contribute","text":"

To contribute to this project, please follow the following steps:

  • Star & fork the repository

  • Create a new laravel project using the following command: composer create-project laravel/laravel generator-dev or laravel new generator-dev

  • Install the dependencies using the following command: composer require laravel/fortify spatie/laravel-permission intervention/image \"^2.0\" yajra/laravel-datatables-oracle

  • Publish fortify resources php artisan vendor:publish --provider=\"Laravel\\Fortify\\FortifyServiceProvider\"

  • Create folder packages/evdigi-ina in the root of the project

  • Cd into packages/evdigi-ina, clone the repository git clone https://github.com/Evdigi-INA/generator.git and install the depedency composer i then back again into root project

  • Add the following code to the composer.json

\"autoload\": {\n    \"psr-4\": {\n        \"App\\\\\": \"app/\",\n        \"Database\\\\Factories\\\\\": \"database/factories/\",\n        \"Database\\\\Seeders\\\\\": \"database/seeders/\",\n        \"EvdigiIna\\\\Generator\\\\\": \"packages/evdigi-ina/generator/src/\"\n    }\n},
  • Run the following command composer dump-autoload

  • Add the following code to the config/app.php

/*\n* Package Service Providers...\n*/\nEvdigiIna\\Generator\\Providers\\GeneratorServiceProvider::class,\nYajra\\DataTables\\DataTablesServiceProvider::class,\nSpatie\\Permission\\PermissionServiceProvider::class,\nIntervention\\Image\\ImageServiceProvider::class,\nApp\\Providers\\FortifyServiceProvider::class,\n// App\\Providers\\ViewComposerServiceProvider::class,
  • Publish required file for the generator php artisan generator:install full
  • Add the following code to the composer.json (autoload files)
\"autoload\": {\n    \"psr-4\": {\n        \"App\\\\\": \"app/\",\n        \"Database\\\\Factories\\\\\": \"database/factories/\",\n        \"Database\\\\Seeders\\\\\": \"database/seeders/\",\n        \"EvdigiIna\\\\Generator\\\\\": \"packages/evdigi-ina/generator/src/\"\n    },\n     \"files\": [\n         \"App/Generators/helper.php\"\n    ]\n},
  • Uncomment App\\Providers\\ViewComposerServiceProvider::class in config/app.php

  • Then run composer dump-autoload for a second time

  • Migrate the database php artisan migrate --seed

  • Run local development server php artisan serve and go to /generators/create

  • Make changes code as you wish in packages/evdigi-ina/generator.

  • Make sure the code is working properly

  • Checkout to a new branch git branch your_name && git checkout your_name && git add . && git commit -m \"describe your changes

  • Push the code to the repository git push origin your_name

  • Create a pull request.

"},{"location":"sponsors/","title":"Sponsors / Supporters","text":""},{"location":"sponsors/#become-a-sponsor-supporter","title":"Become a sponsor / supporter","text":"

Generator is an MIT-licensed open-source project and is completely free to use. The tremendous amount of effort needed to maintain and develop new features for the project is only made sustainable thanks to the generous financial backing of our sponsors or supporters.

"},{"location":"sponsors/#give-it-personally-to-our-core-team-member","title":"Give it personally to our core team member","text":"
  • Mohammad Zulfahmi (Author)
  • GitHub Sponsor
  • Buymeacoffe
  • Ko-fi
  • Saweria
  • Rachmad Nur Hayat
  • GitHub
  • Buymeacoffe
  • Ko-fi
  • Saweria
"},{"location":"sponsors/#sponsor-as-a-company","title":"Sponsor as a company","text":"

Your company logo will appear on our website and GitHub project READMEs. Furthermore, supporting OSS increases your brand's reputation. To do so, please contact us using the details provided below.

  • mohammad.zulfahmi03@gmail.com
  • Rahmat
"},{"location":"usage/","title":"Usage","text":""},{"location":"usage/#create-your-first-crud","title":"Create your first CRUD","text":"

Go to /generators/create if yo're using Full Version or /simple-generators/create for Simple Version

Below is table about supported input type & validation when you are using some column type.

Column Type Input Type Validation Length (min & max) string text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 integer number, range, hidden required|numeric \u2705 text text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 boolean radio, select, datalist required|boolean \u274c char text, color, week, email, telephone, password url, search, file, hidden required|string \u2705 date date, month required|date \u274c time time required|date \u274c year select, datalist required|numeric \u274c dateTime datetime-local required|date \u274c decimal number, range, hidden required|numeric \u274c double number, range, hidden required|numeric \u274c enum select, radio, datalist required|in \u274c float number, range, hidden required|numeric \u274c foreignId select, datalist required|exist \u274c tinyInteger number, range, hidden required|numeric \u274c mediumInteger number, range, hidden required|numeric \u274c bigInteger number, range, hidden required|numeric \u274c tinyText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 mediumText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705 longText text, textarea, email, telephone, password url, search, file, hidden required|string \u2705

required validation will change to nullable if you uncheck required switch in the form, if any input type password will automatically added confirmed validation, min:1|max:100 for supported length column and email|unique for email input type.

"},{"location":"usage/#create-a-relation","title":"Create a Relation","text":"

For now is only support One To Many (Inverse) / Belongs To.

There is rules you must be followed if you want create a a relation:

  • Field name:
    • Must be the table name but in singular + _id, eg: if we have a users table then it must be a user_id.
  • Column Type:
    • Change to foreignId.
    • For constrain or related model name, you can fill with table name (automatically change to plural).
    • Action on update & delete:
      • On update: nothing, cascade, restrict
      • On delete: nothing, cascade, restrict, null

Make sure the related table & model already exist, if its no then the selected field for showing in select/datalist is an id, by default selected field is second column in related table.

"},{"location":"usage/#create-an-upload-file","title":"Create an Upload File","text":"

Set column type to string, input type to file, select file type (for now only support image), fill the max size(optional), and default value (must be a valid link), also we use Intervention Image for manipulating uploaded image. all setting for images are available at config/generator.php.

Default image configuration:

'image' => [\n    /**\n    * Path for store the image.\n    *\n    * available options:\n    * 1. public\n    * 2. storage\n    */\n    'path' => 'storage',\n\n    /**\n    * Will used if image is nullable and default value is null.\n    */\n    'default' => 'https://via.placeholder.com/350?text=No+Image+available',\n\n    /**\n    * Crop the uploaded image using intervention image.\n    */\n    'crop' => true,\n\n    /**\n    * When set to true the uploaded image aspect ratio will still original.\n    */\n    'aspect_ratio' => true,\n\n    /**\n    * Crop image size.\n    */\n    'width' => 500,\n    'height' => 500,\n],

if you are using storage for store the image, make sure you run php artisan storage:link

"},{"location":"usage/#create-a-sidebar-menu","title":"Create a Sidebar Menu","text":"

This feature only available in full version.

You can easily create a dynamic sidebar menu with just a few inputs. all sidebar menus configuration are placed in config/generator.php

How about I don't need a dynamic sidebar menu, I just want to create my menu in blade. yeah, we provide it, click here how to do it.

"},{"location":"usage/#role-permissions","title":"Role & Permissions","text":"

While you are using the full version, after creating a new module will automatically generate some permissions and assign them to the role admin. all permissions are stored in config/permission.php

Here an example:

[\n    'group' => 'products',\n    'access' => [\n        'product view',\n        'product create',\n        'product edit',\n        'product delete'\n    ]\n],

"},{"location":"usage/#configuration","title":"Configuration","text":"

Below is the default config for the generator and sidebar menus:

<?php\n\nreturn [\n    /**\n     * If any input file(image) as default will used options below.\n     */\n    'image' => [\n        /**\n         * Path for store the image.\n         *\n         * available options:\n         * 1. public\n         * 2. storage\n         */\n        'path' => 'storage',\n\n        /**\n         * Will used if image is nullable and default value is null.\n         */\n        'default' => 'https://via.placeholder.com/350?text=No+Image+available',\n\n        /**\n         * Crop the uploaded image using intervention image.\n         */\n        'crop' => true,\n\n        /**\n         * When set to true the uploaded image aspect ratio will still original.\n         */\n        'aspect_ratio' => true,\n\n        /**\n         * Crop image size.\n         */\n        'width' => 500,\n        'height' => 500,\n    ],\n\n    'format' => [\n        /**\n         * Will used to first year on select, if any column type year.\n         */\n        'first_year' => 1900,\n\n        /**\n         * If any date column type will cast and display used this format, but for input date still will used Y-m-d format.\n         *\n         * another most common format:\n         * - M d Y\n         * - d F Y\n         * - Y m d\n         */\n        'date' => 'd/m/Y',\n\n        /**\n         * If any input type month will cast and display used this format.\n         */\n        'month' => 'm/Y',\n\n        /**\n         * If any input type time will cast and display used this format.\n         */\n        'time' => 'H:i',\n\n        /**\n         * If any datetime column type or datetime-local on input, will cast and display used this format.\n         */\n        'datetime' => 'd/m/Y H:i',\n\n        /**\n         * Limit string on index view for any column type text or longtext.\n         */\n        'limit_text' => 100,\n    ],\n\n    /**\n     * It will used for generator to manage and showing menus on sidebar views.\n     *\n     * Example:\n     * [\n     *   'header' => 'Main',\n     *\n     *   // All permissions in menus[] and submenus[]\n     *   'permissions' => ['test view'],\n     *\n     *   menus' => [\n     *       [\n     *          'title' => 'Main Data',\n     *          'icon' => '<i class=\"bi bi-collection-fill\"></i>',\n     *          'route' => null,\n     *\n     *          // permission always null when isset submenus\n     *          'permission' => null,\n     *\n     *          // All permissions on submenus[] and will empty[] when submenus equals to []\n     *          'permissions' => ['test view'],\n     *\n     *          'submenus' => [\n     *                 [\n     *                     'title' => 'Tests',\n     *                     'route' => '/tests',\n     *                     'permission' => 'test view'\n     *                  ]\n     *               ],\n     *           ],\n     *       ],\n     *  ],\n     *\n     * This code below always changes when you use a generator and maybe you must lint or format the code.\n     */\n    'sidebars' => [\n        [\n            'header' => 'Main',\n            'permissions' => [\n                'test view'\n            ],\n            'menus' => [\n                [\n                    'title' => 'Main Data',\n                    'icon' => '<i class=\"bi bi-collection-fill\"></i>',\n                    'route' => null,\n                    'permission' => null,\n                    'permissions' => [\n                        'test view'\n                    ],\n                    'submenus' => [\n                        [\n                            'title' => 'Tests',\n                            'route' => '/tests',\n                            'permission' => 'test view'\n                        ]\n                    ]\n                ]\n            ]\n        ],\n        [\n            'header' => 'Users',\n            'permissions' => [\n                'user view',\n                'role & permission view'\n            ],\n            'menus' => [\n                [\n                    'title' => 'Users',\n                    'icon' => '<i class=\"bi bi-people-fill\"></i>',\n                    'route' => '/users',\n                    'permission' => 'user view',\n                    'permissions' => [],\n                    'submenus' => []\n                ],\n                [\n                    'title' => 'Roles & permissions',\n                    'icon' => '<i class=\"bi bi-person-check-fill\"></i>',\n                    'route' => '/roles',\n                    'permission' => 'role & permission view',\n                    'permissions' => [],\n                    'submenus' => []\n                ],\n            ]\n        ],\n    ],\n];\n
"},{"location":"usage/#production-setup","title":"Production Setup","text":"

Because this package is only installed in development, so some files will not be included in the production environment. so you must do the following steps:

In composer.json add this code below:

\"autoload\": {\n    \"files\": [\n        \"App/Generators/helper.php\"\n    ]\n},\n\"extra\": {\n    \"laravel\": {\n        \"aliases\": {\n            \"GeneratorUtils\": \"App\\\\Generators\\\\GeneratorUtils\",\n        }\n    }\n}

Then run composer dump-autoload.

"}]} \ No newline at end of file diff --git a/site/sitemap.xml b/site/sitemap.xml index 16d72dd..0f8724e 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -1,33 +1,3 @@ - - None - 2023-04-09 - daily - - - None - 2023-04-09 - daily - - - None - 2023-04-09 - daily - - - None - 2023-04-09 - daily - - - None - 2023-04-09 - daily - - - None - 2023-04-09 - daily - \ No newline at end of file diff --git a/site/sitemap.xml.gz b/site/sitemap.xml.gz index 8ccba883ffda4c138b86a2f9f0e55b2392c08214..88d5f58bff20dba62bace9a0d29e73e9d109f69f 100644 GIT binary patch literal 127 zcmV-_0D%7=iwFo1UOHw1|8r?{Wo=<_E_iKh04<9_3V)_WXo8&M?ytk3HC}0~zlG)VuSKZ!wIa|X5YSjvtPBme0ME+X%EKP0`CaJNL%G9W9tInuIKcKOOf!W zZ$SqX!xjqMgwUTT9fpB`3A&R#5a(+Os)+;8#iWenSR^Rccwkmj@zyDEaaMCWs`Wxb z=v*Z-mhDq^NLd~ui?@oYM%r56y?%&Fn)bu#%9)Auhuq*B{BQ87#a|I${k{!=TLS<9 DGu2*P diff --git a/site/sponsors/index.html b/site/sponsors/index.html index 3ecc084..319637d 100644 --- a/site/sponsors/index.html +++ b/site/sponsors/index.html @@ -16,8 +16,9 @@ + - + @@ -25,15 +26,18 @@ - + - + + + + @@ -66,9 +70,6 @@ - - - @@ -84,6 +85,10 @@ + + @@ -103,6 +108,7 @@
@@ -122,29 +128,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + + - + + - + diff --git a/site/usage/index.html b/site/usage/index.html index 15362c1..deb3b0c 100644 --- a/site/usage/index.html +++ b/site/usage/index.html @@ -18,8 +18,9 @@ + - + @@ -27,15 +28,18 @@ - + - + + + + @@ -68,9 +72,6 @@ - - - @@ -86,6 +87,10 @@ + + @@ -105,6 +110,7 @@
@@ -124,29 +130,39 @@
- - - - - - - - - - - - - - - + +
+ + + + + + + + + + + + + + + + + +
+ + + +