Packages
nitro
4.12.3
11.4.16
11.4.15
11.4.14
9.9.7
9.9.6
8.2.4
8.2.3
8.2.2
8.2.1
8.2.0
7.12.1
7.10.0
7.9.3
7.9.2
7.9.1
7.9.0
7.8.3
7.8.2
7.8.0
7.7.1
7.7.0
7.6.2
7.6.1
7.6.0
7.5.0
7.4.2
7.4.1
7.4.0
7.2.1
7.2.0
7.1.1
7.1.0
6.12.0
6.11.11
6.11.10
6.11.9
6.11.8
6.11.7
6.11.6
6.11.4
6.11.2
6.11.1
6.10.9
6.10.8
6.10.7
6.10.6
6.10.5
6.10.4
6.10.3
6.10.2
6.10.1
6.9.1
6.6.1
6.5.0
6.4.4
6.4.3
6.4.2
6.4.1
6.4.0
5.12.4
5.12.3
5.12.2
5.12.1
5.12.0
5.11.1
5.11.0
5.9.2
5.9.1
5.8.5
5.8.4
5.8.3
5.8.1
5.8.0
5.6.1
5.5.1
5.4.3
5.4.2
5.4.1
5.3.1
5.3.0
5.2.1
5.1.7
5.1.6
5.1.5
5.1.4
5.1.3
5.1.2
5.1.1
4.12.11
4.12.10
4.12.9
4.12.8
4.12.7
4.12.6
4.12.5
4.12.4
4.12.3
4.12.2
4.12.1
4.12.0
4.11.13
4.11.12
4.11.11
4.11.10
4.11.9
4.11.8
4.11.7
4.11.6
4.11.5
4.11.4
4.11.3
4.11.2
4.11.1
4.11.0
4.10.9
4.10.8
4.10.7
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.7.7
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.4.1
4.4.0
1.4.0
NITRO Nitrogen Web Framework
Current section
Files
Jump to
Current section
Files
src/elements/input/element_calendar.erl
-module(element_calendar).
-include_lib("nitro/include/calendar.hrl").
-include_lib("nitro/include/nitro.hrl").
-include_lib("nitro/include/event.hrl").
-export([render_element/1]).
render_element(Record) when Record#calendar.show_if==false -> [<<>>];
render_element(Record) ->
Id = case Record#calendar.postback of
[] -> Record#calendar.id;
Postback ->
ID = case Record#calendar.id of
[] -> nitro:temp_id();
I -> I end,
nitro:wire(#event{type=click, postback=Postback, target=ID,
source=Record#calendar.source, delegate=Record#calendar.delegate }),
ID end,
init(Id,Record),
List = [
%global
{<<"accesskey">>, Record#calendar.accesskey},
{<<"class">>, Record#calendar.class},
{<<"contenteditable">>, case Record#calendar.contenteditable of true -> "true"; false -> "false"; _ -> [] end},
{<<"contextmenu">>, Record#calendar.contextmenu},
{<<"dir">>, case Record#calendar.dir of "ltr" -> "ltr"; "rtl" -> "rtl"; "auto" -> "auto"; _ -> [] end},
{<<"draggable">>, case Record#calendar.draggable of true -> "true"; false -> "false"; _ -> [] end},
{<<"dropzone">>, Record#calendar.dropzone},
{<<"hidden">>, case Record#calendar.hidden of "hidden" -> "hidden"; _ -> [] end},
{<<"id">>, Id},
{<<"spellcheck">>, case Record#calendar.spellcheck of true -> "true"; false -> "false"; _ -> [] end},
{<<"style">>, Record#calendar.style},
{<<"tabindex">>, Record#calendar.tabindex},
{<<"title">>, Record#calendar.title},
{<<"translate">>, case Record#calendar.contenteditable of "yes" -> "yes"; "no" -> "no"; _ -> [] end},
% spec
{<<"autocomplete">>, case Record#calendar.autocomplete of true -> "on"; false -> "off"; _ -> [] end},
{<<"autofocus">>,if Record#calendar.autofocus == true -> "autofocus"; true -> [] end},
{<<"disabled">>, if Record#calendar.disabled == true -> "disabled"; true -> [] end},
{<<"form">>,Record#calendar.form},
{<<"list">>,Record#calendar.list},
{<<"name">>,Record#calendar.name},
{<<"readonly">>,if Record#calendar.readonly == true -> "readonly"; true -> [] end},
{<<"required">>,if Record#calendar.required == true -> "required"; true -> [] end},
{<<"step">>,Record#calendar.step},
{<<"type">>, <<"calendar">>},
{<<"value">>, case Record#calendar.value of {Yv,Mv,Dv} -> io_lib:format("~4..0B-~2..0B-~2..0B",[Yv,Mv,Dv]); [] -> []; _ -> [] end},
{<<"pattern">>,Record#calendar.pattern},
{<<"placeholder">>,Record#calendar.placeholder},
{<<"onkeypress">>, Record#calendar.onkeypress} | Record#calendar.data_fields
],
wf_tags:emit_tag(<<"input">>, nitro:render(Record#calendar.body), List).
init(Id,#calendar{minDate=Min,maxDate=Max,lang=Lang,format=Form,
value=Value,onSelect=SelectFn,disableDayFn=DisDayFn,
position=Pos,reposition=Repos,yearRange=YearRange} = Calendar) ->
ID = nitro:to_list(Id),
I18n = "clLangs.ua",
Format = "YYYY-MM-DD",
DefaultDate = case Value of
{Yv,Mv,Dv} -> nitro:f("new Date(~s,~s,~s)",[nitro:to_list(Yv),nitro:to_list(Mv-1),nitro:to_list(Dv)]);
_ -> "new Date(2019, 11, 26)" end,
MinDate = case Min of {Y,M,D} -> nitro:f("new Date(~s,~s,~s)",[nitro:to_list(Y), nitro:to_list(M-1), nitro:to_list(D)]); _ -> "new Date(2009, 3, 4)" end,
MaxDate = case Max of {Y1,M1,D1} -> nitro:f("new Date(~s,~s,~s)",[nitro:to_list(Y1),nitro:to_list(M1-1),nitro:to_list(D1)]); _ -> "new Date(2189, 4, 1)" end,
OnSelect = "null",
DisDay = "null",
Position = "bottom left",
Reposition = "true",
nitro:wire(nitro:f(
"pickers['~s'] = new Pikaday({
field: document.getElementById('~s'),
firstDay: 0,
i18n: ~s,
defaultDate: ~s,
setDefaultDate: false,
minDate: ~s,
maxDate: ~s,
format: '~s',
onSelect: ~s,
disableDayFn: ~s,
position: '~s',
reposition: ~s,
yearRange: ~s
});",
[ID,ID,I18n,DefaultDate,MinDate,MaxDate,Format,OnSelect,DisDay,
Position,Reposition,nitro:to_list(YearRange)]
)).