Packages
nitro
1.4.0
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").
-export([render_element/1]).
render_element(Record) ->
Id = case Record#calendar.postback of
undefined -> Record#calendar.id;
Postback ->
ID = case Record#calendar.id of
undefined -> 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"; _ -> undefined end},
{<<"contextmenu">>, Record#calendar.contextmenu},
{<<"dir">>, case Record#calendar.dir of "ltr" -> "ltr"; "rtl" -> "rtl"; "auto" -> "auto"; _ -> undefined end},
{<<"draggable">>, case Record#calendar.draggable of true -> "true"; false -> "false"; _ -> undefined end},
{<<"dropzone">>, Record#calendar.dropzone},
{<<"hidden">>, case Record#calendar.hidden of "hidden" -> "hidden"; _ -> undefined end},
{<<"id">>, Id},
{<<"spellcheck">>, case Record#calendar.spellcheck of true -> "true"; false -> "false"; _ -> undefined end},
{<<"style">>, Record#calendar.style},
{<<"tabindex">>, Record#calendar.tabindex},
{<<"title">>, Record#calendar.title},
{<<"translate">>, case Record#calendar.contenteditable of "yes" -> "yes"; "no" -> "no"; _ -> undefined end},
% spec
{<<"autocomplete">>, case Record#calendar.autocomplete of true -> "on"; false -> "off"; _ -> undefined end},
{<<"autofocus">>,if Record#calendar.autofocus == true -> "autofocus"; true -> undefined end},
{<<"disabled">>, if Record#calendar.disabled == true -> "disabled"; true -> undefined end},
{<<"form">>,Record#calendar.form},
{<<"list">>,Record#calendar.list},
{<<"name">>,Record#calendar.name},
{<<"readonly">>,if Record#calendar.readonly == true -> "readonly"; true -> undefined end},
{<<"required">>,if Record#calendar.required == true -> "required"; true -> undefined 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 undefined -> "clLangs.ua"; Lang -> "clLangs."++nitro:to_list(Lang) end,
Format = case Form of undefined -> "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 undefined -> "null"; _ -> SelectFn end,
DisDay = case DisDayFn of undefined -> "null"; _ -> nitro:f("function(thisDate){return ~s(thisDate);}",[DisDayFn]) end,
Position = case Pos of undefined -> "bottom left"; _ -> nitro:to_list(Pos) end,
Reposition = case Repos of undefined -> "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)]
)).