Packages
nitro
4.4.1
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/element_calendar.erl
-module(element_calendar).
-author('G-Grand').
-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">>},
{<<"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}) ->
ID = nitro:to_list(Id),
I18n = case Lang of [] -> "clLangs.ua"; Lang -> "clLangs."++nitro:to_list(Lang) end,
Format = case Form of [] -> "YYYY-MM-DD"; Form -> Form end,
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)]); _ -> "null" 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(2000, 0, 1)" 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(2087, 4, 13)" end,
OnSelect = case SelectFn of [] -> "null"; _ -> SelectFn end,
DisDay = case DisDayFn of [] -> "null"; _ -> nitro:f("function(thisDate){return ~s(thisDate);}",[DisDayFn]) end,
Position = case Pos of [] -> "bottom left"; _ -> nitro:to_list(Pos) end,
Reposition = case Repos of [] -> "true"; _ -> nitro:to_list(Repos) end,
nitro:wire(nitro:f(
"pickers['~s'] = new Pikaday({
field: document.getElementById('~s'),
firstDay: 1,
i18n: ~s,
defaultDate: ~s,
setDefaultDate: true,
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)]
)).