diff --git a/ccp/js/inputwidgetcontroller.js b/ccp/js/inputwidgetcontroller.js
index 33a82d9..3163288 100644
--- a/ccp/js/inputwidgetcontroller.js
+++ b/ccp/js/inputwidgetcontroller.js
@@ -9,10 +9,15 @@ class CCPInputWidgetController extends HTMLElement {
connectedCallback(){
this.#data = JSON.parse(this.getAttribute("input"))
- if(this.isEnum()){
+ if(this.isChecklist()){
+
const opts = this.#data.schema.enum.join(",")
- this.innerHTML += ``
+ this.innerHTML += ``
+ } else if(this.isEnum()){
+
+ const opts = this.#data.schema.enum.join(",")
+ this.innerHTML += ``
}else if(this.isCode()){
this.innerHTML += ``
@@ -46,7 +51,11 @@ class CCPInputWidgetController extends HTMLElement {
return this.firstElementChild.name
}
- isEnum(input){
+ isChecklist(){
+ return this.isEnum() && (this.#data.schema.format === "checklist")
+ }
+
+ isEnum(){
return (this.#data.schema.type === "string") && ("enum" in this.#data.schema)
}
@@ -117,6 +126,11 @@ class CCPBaseInputWidgetController extends HTMLElement{
this.value = Array(Math.max(this.#minOccurs,1)).fill(this.#default)
}
+ setValue(v){
+ this.#value = v
+ this.render()
+ }
+
set value(v){
const actual = Array.isArray(v) ? v : [v]
if(actual.length < this.#minOccurs || actual.length > this.#maxOccurs){
@@ -272,6 +286,55 @@ class CCPEnumInputWidgetController extends CCPBaseInputWidgetController{
}
window.customElements.define('d4s-ccp-input-enum', CCPEnumInputWidgetController);
+class CCPChecklistInputWidgetController extends CCPBaseInputWidgetController{
+
+ constructor(){
+ super()
+ }
+
+ connectedCallback(){
+ this.rootdoc.addEventListener("change", ev=>{
+ if(ev.target.getAttribute("name") === this.name){
+ const index = Number(ev.target.getAttribute("data-index"))
+
+ const elems = Array.prototype.slice.call(ev.currentTarget.querySelectorAll(`input[name='${this.name}'][data-index='${index}']`))
+
+ this.value[index] = elems.filter(e=>e.checked).map(e=>e.value).join(",")
+ }
+ })
+ }
+
+ buildOpts(index, selections){
+ return this.options.map(o=>`
+
+
+ -1 ? 'checked' : ''}/>
+ `).join("\n")
+ }
+
+ content(){
+ if(this.value.length === 1){
+ const opts = this.buildOpts(0, this.value.length ? this.value[0].split(",") : [])
+ return `
+
+ ${opts}
+
+ `
+ }
+ var out =
+ this.value.map((c,i)=>{
+ const opts = this.buildOpts(i, c.split(","))
+ return `
+
+ ${opts}
+
+ `
+ }).join("\n")
+ return out
+ }
+}
+window.customElements.define('d4s-ccp-input-checklist', CCPChecklistInputWidgetController);
+
class CCPTextAreaWidgetController extends CCPBaseInputWidgetController{
constructor(){
@@ -382,15 +445,19 @@ class CCPSecretInputWidgetController extends CCPBaseInputWidgetController{
content(){
if(this.value.length <= 1){
return `
-
- 👁
+
+
+ 👁
+
`
}
var out =
this.value.map((c,i)=>{
return `
-
- 👁
+
+
+ 👁
+
`
}).join("\n")
return out
diff --git a/ccp/js/inputwidgeteditorcontroller.js b/ccp/js/inputwidgeteditorcontroller.js
index 9da3f80..2b8ea66 100644
--- a/ccp/js/inputwidgeteditorcontroller.js
+++ b/ccp/js/inputwidgeteditorcontroller.js
@@ -65,27 +65,27 @@ class CCPInputWidgetEditorController extends HTMLElement{
this.innerHTML = `
-
+
${ input.id !== 'ccpimage' ? this.renderDeleteButton() : ''}
@@ -108,7 +114,7 @@ class CCPInputWidgetEditorController extends HTMLElement{
-
-
${this.renderDefaultByType()}
- 👁
+ 👁
@@ -176,7 +184,7 @@ class CCPInputWidgetEditorController extends HTMLElement{
}
else if(ename === "format"){
this.#input.schema.format = val
- this.render(this.#input, this.#index, true)
+ //this.render(this.#input, this.#index, true)
/*this.querySelector("div[name=input-default] span[name=password_toggle]").classList.add("d-none")
this.querySelector("div[name=input-default] input[name=default]").type = ""
if(this.#input.schema.format === "secret"){