UNPKG

sparnatural

Version:

Visual client-side SPARQL query builder and knowledge graph exploration tool

205 lines (181 loc) 5.46 kB
import { Pattern } from "sparqljs"; import { SelectedVal } from "../SelectedVal"; import AddUserInputBtn from "../buttons/AddUserInputBtn"; import { AbstractWidget, ValueRepetition, WidgetValue } from "./AbstractWidget"; import { I18n } from "../../settings/I18n"; import HTMLComponent from "../HtmlComponent"; export class DateValue implements WidgetValue { value: { label: string; start: string; stop: string; }; key():string { return this.value.start+" - "+this.value.stop; } constructor(v:DateValue["value"]) { this.value = v; } } export class DatesWidget extends AbstractWidget { datesHandler: any; addWidgetValueBtn: AddUserInputBtn; input: JQuery<HTMLElement>; inputStart: JQuery<HTMLElement>; inputEnd: JQuery<HTMLElement>; inputValue: JQuery<HTMLElement>; constructor( parentComponent: HTMLComponent, datesHandler: any, startClassVal: SelectedVal, objectPropVal: SelectedVal, endClassVal: SelectedVal ) { super( "date-widget", parentComponent, null, startClassVal, objectPropVal, endClassVal, ValueRepetition.SINGLE ); this.datesHandler = datesHandler; this.startClassVal = startClassVal; this.objectPropVal = objectPropVal; this.endClassVal = endClassVal; } render() { super.render(); this.input = $( `<input id="input" placeholder="${ I18n.labels.PlaceHolderDatePeriod }"/>` ); this.inputStart = $( `<input id="input-start" placeholder="${ I18n.labels.TimeWidgetDateFrom }"/>` ); this.inputEnd = $( `<input id="input-start" placeholder="${ I18n.labels.TimeWidgetDateFrom }"/>` ); this.inputValue = $(`<input id="input-value" type="hidden"/>`); this.html .append(this.input) .append(this.inputStart) .append(this.inputEnd) .append(this.inputValue); this.addWidgetValueBtn = new AddUserInputBtn( this, I18n.labels.ButtonAdd, this.#addValueBtnClicked ).render(); var phrase = ""; var data_json = null; $.ajax({ url: this.datesHandler.datesUrl( this.startClassVal.type, this.objectPropVal.type, this.endClassVal.type, phrase ), async: false, success: function (data) { data_json = data; }, }); var options = { data: {}, getValue: function (element: any) { return this.datesHandler.elementLabel(element); }, list: { match: { enabled: true, }, onChooseEvent: function () { var values = this.input.getSelectedItemData(); var value = this.datesHandler.elementLabel(values); var start = this.datesHandler.elementStart(values); var stop = this.datesHandler.elementEnd(values); this.input.val(value).trigger("change"); this.inputStart.val(start).trigger("change"); this.inputEnd.val(stop).trigger("change"); this.inputValue.val(value).trigger("change"); }, }, template: { type: "custom", method: function (value: any, item: any) { var label = this.datesHandler.elementLabel(item); var start = this.datesHandler.elementStart(item); var stop = this.datesHandler.elementEnd(item); return ( "<div>" + label + ' <span class="start">' + start + '</span><span class="end">' + stop + "</span></div>" ); }, }, requestDelay: 400, }; this.input.easyAutocomplete(options); return this; } #addValueBtnClicked = () => { let val = { start: this.inputStart.val().toString(), stop: this.inputEnd.val().toString(), label: "", }; this.triggerRenderWidgetVal(this.parseInput(val)); }; parseInput(dateValue:DateValue["value"]): DateValue { if (dateValue.start == "" || dateValue.stop == "") { dateValue = null; } else { if (parseInt(dateValue.start) > parseInt(dateValue.stop)) { dateValue = null; } else { var absoluteStartYear = dateValue.start.startsWith("-") ? dateValue.start.substring(1) : dateValue.start; var paddedAbsoluteStartYear = absoluteStartYear.padStart(4, "0"); var paddedStartYear = dateValue.start.startsWith("-") ? "-" + paddedAbsoluteStartYear : paddedAbsoluteStartYear; dateValue.start = paddedStartYear + "-01-01T00:00:00"; var absoluteStopYear = dateValue.stop.startsWith("-") ? dateValue.stop.substring(1) : dateValue.stop; var paddedAbsoluteStopYear = absoluteStopYear.padStart(4, "0"); var paddedStopYear = dateValue.stop.startsWith("-") ? "-" + paddedAbsoluteStopYear : paddedAbsoluteStopYear; dateValue.stop = paddedStopYear + "-12-31T23:59:59"; } } dateValue.label = this.#getValueLabel( dateValue.start, dateValue.stop ); return new DateValue(dateValue); } #getValueLabel = function (start: any, stop: any) { let lbl = ""; if (start != "" && start) { lbl = lbl.concat(` ${start.toISOString().slice(0, 10)}`); } if (stop && stop != "") { lbl = lbl.concat(` - ${stop.toISOString().slice(0, 10)}`); } return lbl; }; }