mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-29 01:59:39 +01:00
Etemplate: Fix readonly was still giving a value
This commit is contained in:
parent
a82c080ca5
commit
ea2004173f
@ -111,7 +111,7 @@ export function parseTime(timeString)
|
|||||||
let am_pm = timeString.endsWith("pm") || timeString.endsWith("PM") ? 12 : 0;
|
let am_pm = timeString.endsWith("pm") || timeString.endsWith("PM") ? 12 : 0;
|
||||||
|
|
||||||
let strippedString = timeString.replaceAll(/[^0-9:]/gi, '');
|
let strippedString = timeString.replaceAll(/[^0-9:]/gi, '');
|
||||||
|
|
||||||
if(timeString.startsWith("12") && strippedString != timeString)
|
if(timeString.startsWith("12") && strippedString != timeString)
|
||||||
{
|
{
|
||||||
// 12:xx am -> 0:xx, 12:xx pm -> 12:xx
|
// 12:xx am -> 0:xx, 12:xx pm -> 12:xx
|
||||||
@ -337,6 +337,12 @@ export class Et2Date extends Et2InputWidget(LionInputDatepicker)
|
|||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Empty field, return ''
|
||||||
|
if(!this.modelValue)
|
||||||
|
{
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
// The supplied value was not understandable, return null
|
// The supplied value was not understandable, return null
|
||||||
if(this.modelValue instanceof Unparseable || !this.modelValue)
|
if(this.modelValue instanceof Unparseable || !this.modelValue)
|
||||||
|
@ -52,13 +52,13 @@ describe("Date widget", () =>
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
it("'0' shows no value", async() =>
|
it("'0' shows nothing", async() =>
|
||||||
{
|
{
|
||||||
element.set_value("0");
|
element.set_value("0");
|
||||||
// wait for asychronous changes to the DOM
|
// wait for asychronous changes to the DOM
|
||||||
await elementUpdated(element);
|
await elementUpdated(element);
|
||||||
assert.equal(element.querySelector("input").value, "");
|
assert.equal(element.querySelector("input").value, "");
|
||||||
assert.equal(element.get_value(), null);
|
assert.equal(element.get_value(), '');
|
||||||
});
|
});
|
||||||
|
|
||||||
const tz_list = [
|
const tz_list = [
|
||||||
|
@ -97,7 +97,11 @@ const Et2InputWidgetMixin = (superclass) =>
|
|||||||
|
|
||||||
getValue()
|
getValue()
|
||||||
{
|
{
|
||||||
return typeof this.serializedValue !== "undefined" ? this.serializedValue : this.modalValue;
|
if(this.readOnly)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return this.serializedValue !== "undefined" ? this.serializedValue : this.modalValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,14 +31,14 @@ let element : Et2InputWidgetInterface;
|
|||||||
|
|
||||||
export function inputBasicTests(before : Function, test_value : string, value_selector : string)
|
export function inputBasicTests(before : Function, test_value : string, value_selector : string)
|
||||||
{
|
{
|
||||||
describe("Readonly tests", () =>
|
describe("Readonly", () =>
|
||||||
{
|
{
|
||||||
beforeEach(async() =>
|
beforeEach(async() =>
|
||||||
{
|
{
|
||||||
element = await before();
|
element = await before();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Does not return a value (via attribute)', async() =>
|
it("does not return a value (via attribute)", async() =>
|
||||||
{
|
{
|
||||||
element.readOnly = true;
|
element.readOnly = true;
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ export function inputBasicTests(before : Function, test_value : string, value_se
|
|||||||
assert.equal(element.getValue(), null);
|
assert.equal(element.getValue(), null);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Does not return a value (via method)', async() =>
|
it("does not return a value (via method)", async() =>
|
||||||
{
|
{
|
||||||
(<Et2InputWidgetInterface>element).set_readonly(true);
|
(<Et2InputWidgetInterface>element).set_readonly(true);
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ export function inputBasicTests(before : Function, test_value : string, value_se
|
|||||||
assert.equal(element.getValue(), null);
|
assert.equal(element.getValue(), null);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Does not return a value if it goes readonly after having a value', async() =>
|
it("does not return a value if it goes readonly after having a value", async() =>
|
||||||
{
|
{
|
||||||
element.set_value(test_value);
|
element.set_value(test_value);
|
||||||
|
|
||||||
@ -81,13 +81,13 @@ export function inputBasicTests(before : Function, test_value : string, value_se
|
|||||||
{
|
{
|
||||||
element = await before();
|
element = await before();
|
||||||
});
|
});
|
||||||
it('No value shows no value', () =>
|
it("no value gives empty string", () =>
|
||||||
{
|
{
|
||||||
assert.equal((<Element><unknown>element).querySelector(value_selector).textContent, "");
|
assert.equal((<Element><unknown>element).querySelector(value_selector).textContent, "");
|
||||||
assert.equal(element.get_value(), null);
|
assert.equal(element.get_value(), "");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Value out matches value in', async() =>
|
it("value out matches value in", async() =>
|
||||||
{
|
{
|
||||||
element.set_value(test_value);
|
element.set_value(test_value);
|
||||||
|
|
||||||
|
@ -43,6 +43,15 @@ export class Et2Textbox extends Et2InputWidget(LionInput)
|
|||||||
{
|
{
|
||||||
super.connectedCallback();
|
super.connectedCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getValue()
|
||||||
|
{
|
||||||
|
if(this.readOnly)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return this.value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore TypeScript is not recognizing that Et2Textbox is a LitElement
|
// @ts-ignore TypeScript is not recognizing that Et2Textbox is a LitElement
|
||||||
|
@ -4,20 +4,25 @@
|
|||||||
import {assert, fixture} from '@open-wc/testing';
|
import {assert, fixture} from '@open-wc/testing';
|
||||||
import {Et2Textbox} from "../Et2Textbox";
|
import {Et2Textbox} from "../Et2Textbox";
|
||||||
import {html} from "lit-element";
|
import {html} from "lit-element";
|
||||||
|
import {inputBasicTests} from "../../Et2InputWidget/test/InputBasicTests";
|
||||||
|
|
||||||
|
// Reference to component under test
|
||||||
|
let element : Et2Textbox;
|
||||||
|
|
||||||
|
async function before()
|
||||||
|
{
|
||||||
|
// Create an element to test with, and wait until it's ready
|
||||||
|
element = await fixture<Et2Textbox>(html`
|
||||||
|
<et2-textbox></et2-textbox>
|
||||||
|
`);
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
describe("Textbox widget", () =>
|
describe("Textbox widget", () =>
|
||||||
{
|
{
|
||||||
// Reference to component under test
|
|
||||||
let element : Et2Textbox;
|
|
||||||
|
|
||||||
// Setup run before each test
|
// Setup run before each test
|
||||||
beforeEach(async() =>
|
beforeEach(before);
|
||||||
{
|
|
||||||
// Create an element to test with, and wait until it's ready
|
|
||||||
element = await fixture<Et2Textbox>(html`
|
|
||||||
<et2-textbox></et2-textbox>
|
|
||||||
`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('is defined', () =>
|
it('is defined', () =>
|
||||||
{
|
{
|
||||||
@ -29,4 +34,5 @@ describe("Textbox widget", () =>
|
|||||||
element.set_label("Yay label");
|
element.set_label("Yay label");
|
||||||
assert.isEmpty(element.shadowRoot.querySelectorAll('.et2_label'));
|
assert.isEmpty(element.shadowRoot.querySelectorAll('.et2_label'));
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
inputBasicTests(before, "I'm a good test value", "input");
|
Loading…
Reference in New Issue
Block a user