Browse Source

Merge branch 'master' of github.com:synrc/nitro

Namdak Tonpa 9 years ago
parent
commit
db28f4bd5e
4 changed files with 22 additions and 203 deletions
  1. 5 26
      include/nitro.hrl
  2. 15 17
      src/elements/element_calendar.erl
  3. 2 0
      src/elements/element_input.erl
  4. 0 160
      src/elements/element_svg.erl

+ 5 - 26
include/nitro.hrl

@@ -10,24 +10,6 @@
         hidden, lang, spellcheck, translate, onblur, onerror, onfocus, onmessage, onresize).
 -define(ACTION_BASE(Module), ancestor=action, trigger, target, module=Module, actions, source=[]).
 -define(CTRL_BASE(Module), ?ELEMENT_BASE(Module,undefined,Module)).
-% SVG attribute groups
--define(SVG_ANIMATION_EVENT, onbegin, onend, onload_animation, onrepeat).
--define(SVG_ANIMATION_ATTRIBUT_TARGET, attributeType, attributeName).
--define(SVG_ANIMATION_TIMING, svgbegin, dur, svgend, min, max, restart, repeatCount, repeatDur, fill).
--define(SVG_ANIMATION_VALUE, calcMode, values, keyTimes, keySplines, from, to, by, autoReverse, accelerate, decelerate).
--define(SVG_ANIMATION_ADDITION, additive, accumulate).
--define(SVG_CONDITIONAL_PROCESSING, requiredExtensions, requiredFeatures, systemLanguage).
--define(SVG_CORE, xmlbase, xmllang, xmlspace).
--define(SVG_DOCUMENT_EVENT, onabort, onscroll, onunload_document, onzoom).  %% onerror and onresize, duplicating HTML events, were removed.
--define(SVG_FILTER_PRIMITIVE, height, result, width, x, y).
--define(SVG_GRAPHICAL_EVENT, onactivate, onfocusin, onfocusout, onload_graphical, onmousedown, onmousemove, onmouseout, onmouseup). %% onclick and onmouseover, duplicating HTML events, were removed.
--define(SVG_PRESENTATION, alignment_baseline, baseline_shift, clip, clip_path, clip_rule, color, color_interpolation, color_interpolation_filters, color_profile, color_rendering, cursor,
-		direction, display, dominant_baseline, enable_background, fill, fill_opacity, fill_rule, filter, flood_color, flood_opacity, font_family, font_size, font_size_adjust, font_stretch,
-		font_style, font_variant, font_weight, glyph_orientation_horizontal, glyph_orientation_vertical, image_rendering, kerning, letter_spacing, lighting_color, marker_end, marker_mid,
-		marker_start, mask, opacity, overflow, pointer_events, shape_rendering, stop_color, stop_opacity, stroke, stroke_dasharray, stroke_dashoffset, stroke_linecap, stroke_linejoin,
-		stroke_miterlimit, stroke_opacity, stroke_width, text_anchor, text_decoration, text_rendering, unicode_bidi, visibility, word_spacing, writing_mode).
--define(SVG_TRANSFERT_FUNCTION, type, tableValues, slope, intercept, amplitude, exponent, offset).
--define(SVG_XLINK, xlinkhref, xlinktype, xlinkrole, xlinkarcrole, xlinktitle, xlinkshow, xlinkactuate).
 
 -record(element, {?ELEMENT_BASE(undefined)}).
 -record(literal, {?ELEMENT_BASE(element_literal), html_encode=true }).
@@ -80,12 +62,12 @@
 -record(textarea,       {?ELEMENT_BASE(element_textarea), autofocus, cols, dirname, disabled, form, maxlength, name, placeholder, readonly, required, rows, wrap, value}).
 
 % HTML Form inputs
--record(input,       {?ELEMENT_BASE(element_input),  autofocus, disabled, form, name, value, type=[], placeholder, multiple, min, max}).
+-record(input,       {?ELEMENT_BASE(element_input),  autofocus, disabled, form, name, value, type=[], placeholder, multiple, min, max, pattern, accept}).
 -record(input_button,       {?ELEMENT_BASE(element_input_button),  autofocus, disabled, form, name, value}).
 -record(checkbox,           {?ELEMENT_BASE(element_checkbox),  autofocus, checked=false, disabled, form, name, required, value}).
 -record(color,           {?ELEMENT_BASE(element_color),  autocomplete, autofocus, disabled, form, list, name, value}).
 -record(date,           {?ELEMENT_BASE(element_date),  autocomplete, autofocus, disabled, form, list, max, min, name, step, readonly, required, value}).
--record(calendar,       {?ELEMENT_BASE(element_calendar),  autocomplete, autofocus, disabled, form, list, maxDate, minDate, format, name, step, readonly, required, value, placeholder}).
+-record(calendar,       {?ELEMENT_BASE(element_calendar),  autocomplete, autofocus, disabled, form, list, maxDate, minDate, format, name, step, readonly, required, value, placeholder, onSelect, disableDayFn}).
 -record(datetime,           {?ELEMENT_BASE(element_datetime),  autocomplete, autofocus, disabled, form, list, max, min, name, step, readonly, required, value}).
 -record(datetime_local,           {?ELEMENT_BASE(element_datetime_local),  autocomplete, autofocus, disabled, form, list, max, min, name, step, readonly, required, value}).
 -record(email,           {?ELEMENT_BASE(element_email),  autocomplete, autofocus, disabled, form, list, maxlength, multiple, name, pattern, placeholder, readonly, required, size, value}).
@@ -194,15 +176,12 @@
 -record(u,       		?DEFAULT_BASE).
 -record(var,       		?DEFAULT_BASE).
 
-% HTML5 template
--record(template,		?DEFAULT_BASE).
-
-% SVG
--record(svg, {?ELEMENT_BASE(element_svg), version="1.1", baseProfile="full", xmlns="http://www.w3.org/2000/svg", xmlnsxlink="http://www.w3.org/1999/xlink", xmlnsev="http://www.w3.org/2001/xml-events", preserveAspectRatio, contentScriptType, contentStyleType, viewBox, externalResourcesRequired, ?SVG_CONDITIONAL_PROCESSING, ?SVG_CORE, ?SVG_DOCUMENT_EVENT, ?SVG_FILTER_PRIMITIVE, ?SVG_GRAPHICAL_EVENT, ?SVG_PRESENTATION, ?SVG_TRANSFERT_FUNCTION, ?SVG_XLINK}).
-
 % Extras
 -record(upload,         {?CTRL_BASE(element_upload), name, value}).
 
+% HTML5 template
+-record(template,		?DEFAULT_BASE).
+
 % Actions
 -record(action,  {?ACTION_BASE(undefined)}).
 -record(wire,    {?ACTION_BASE(action_wire)}).

+ 15 - 17
src/elements/element_calendar.erl

@@ -43,33 +43,31 @@ render_element(Record) ->
       {<<"required">>,if Record#calendar.required == true -> "required"; true -> undefined end},
       {<<"step">>,Record#calendar.step},
       {<<"type">>, <<"calendar">>},
-      {<<"placeholder">>,Record#calendar.placeholder},
-      {<<"value">>,nitro:js_escape(Record#calendar.value)} | Record#calendar.data_fields
+      {<<"placeholder">>,Record#calendar.placeholder} | 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}) ->
+init(Id,#calendar{minDate=Min,maxDate=Max,lang=Lang,format=Form,value=Value,onSelect=SelectFn,disableDayFn=DisDayFn}) ->
     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,
-    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,
+    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,
     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'
+            format: '~s',
+            onSelect: ~s,
+            disableDayFn: ~s
         });",
-        [ID,ID,I18n,MinDate,MaxDate,Format]
+        [ID,ID,I18n,DefaultDate,MinDate,MaxDate,Format,OnSelect,DisDay]
     )).

+ 2 - 0
src/elements/element_input.erl

@@ -35,10 +35,12 @@ render_element(Record) ->
       {<<"disabled">>, if Record#input.disabled == true -> "disabled"; true -> undefined end},
       {<<"name">>,Record#input.name},
       {<<"type">>, Record#input.type},
+      {<<"accept">>, Record#input.accept},
       {<<"max">>, Record#input.max},
       {<<"placeholder">>,Record#input.placeholder},
       {<<"min">>, Record#input.min},
       {<<"multiple">>, Record#input.multiple },
+      {<<"pattern">>,Record#input.pattern},
       {<<"value">>,      nitro:js_escape(Record#input.value)},
       {<<"onkeypress">>, nitro:js_escape(Record#input.onkeypress)},
       {<<"onkeyup">>,    nitro:js_escape(Record#input.onkeyup)},

+ 0 - 160
src/elements/element_svg.erl

@@ -1,160 +0,0 @@
--module(element_svg).
--author('Konstantin Zakablukovsky').
--include("nitro.hrl").
--compile(export_all).
-
-render_element(Record) ->
-	wf_tags:emit_tag(<<"svg">>, nitro:render(Record#svg.body),
-	lists:append([
-		[
-			{<<"id">>, Record#svg.id},
-			{<<"class">>, Record#svg.class},
-			{<<"style">>, Record#svg.style},
-			{<<"version">>, Record#svg.version},
-			{<<"baseProfile">>, Record#svg.baseProfile},
-			{<<"xmlns">>, Record#svg.xmlns},
-			{<<"xmlns:xlink">>, Record#svg.xmlnsxlink},
-			{<<"xmlns:ev">>, Record#svg.xmlnsev},
-			{<<"preserveAspectRatio">>, Record#svg.preserveAspectRatio},
-			{<<"contentScriptType">>, Record#svg.contentScriptType},
-			{<<"contentStyleType">>, Record#svg.contentStyleType},
-			{<<"viewBox">>, Record#svg.viewBox},
-			{<<"externalResourcesRequired">>, Record#svg.externalResourcesRequired}
-		],
-		svg_conditional_processing(Record),
-		svg_core(Record),
-		svg_document_event(Record),
-		svg_filter_primitive(Record),
-		svg_graphical_event(Record),
-		svg_presentation(Record),
-		svg_transfert_function(Record),
-		svg_xlink(Record),
-		Record#svg.data_fields,
-		Record#svg.aria_states
-	])).
-
-
-%% Common SVG attributes
-svg_conditional_processing(Record)-> [
-	{<<"requiredExtensions">>, Record#svg.requiredExtensions},
-	{<<"requiredFeatures">>, Record#svg.requiredFeatures},
-	{<<"systemLanguage">>, Record#svg.systemLanguage}
-].
-
-svg_core(Record)-> [
-	{<<"xml:base">>, Record#svg.xmlbase},
-	{<<"xml:lang">>, Record#svg.xmllang},
-	{<<"xml:space">>, Record#svg.xmlspace}
-].
-
-svg_document_event(Record)-> [
-	{<<"onabort">>, Record#svg.onabort},
-	{<<"onerror">>, Record#svg.onerror},
-	{<<"onresize">>, Record#svg.onresize},
-	{<<"onscroll">>, Record#svg.onscroll},
-	{<<"onunload">>, Record#svg.onunload_document},
-	{<<"onzoom">>, Record#svg.onzoom}
-].
-
-svg_filter_primitive(Record)-> [
-	{<<"height">>, Record#svg.height},
-	{<<"result">>, Record#svg.result},
-	{<<"width">>, Record#svg.width},
-	{<<"x">>, Record#svg.x},
-	{<<"y">>, Record#svg.y}
-].
-
-svg_graphical_event(Record)-> [
-	{<<"onactivate">>, Record#svg.onactivate},
-	{<<"onclick">>, Record#svg.onclick},
-	{<<"onfocusin">>, Record#svg.onfocusin},
-	{<<"onfocusout">>, Record#svg.onfocusout},
-	{<<"onload">>, Record#svg.onload_graphical},
-	{<<"onmousedown">>, Record#svg.onmousedown},
-	{<<"onmousemove">>, Record#svg.onmousemove},
-	{<<"onmouseout">>, Record#svg.onmouseout},
-	{<<"onmouseover">>, Record#svg.onmouseover},
-	{<<"onmouseup">>, Record#svg.onmouseup}
-].
-
-svg_presentation(Record)-> [
-	{<<"alignment-baseline">>, Record#svg.alignment_baseline},
-	{<<"baseline-shift">>, Record#svg.baseline_shift},
-	{<<"clip">>, Record#svg.clip},
-	{<<"clip-path">>, Record#svg.clip_path},
-	{<<"clip-rule">>, Record#svg.clip_rule},
-	{<<"color">>, Record#svg.color},
-	{<<"color-interpolation">>, Record#svg.color_interpolation},
-	{<<"color-interpolation-filters">>, Record#svg.color_interpolation_filters},
-	{<<"color-profile">>, Record#svg.color_profile},
-	{<<"color-rendering">>, Record#svg.color_rendering},
-	{<<"cursor">>, Record#svg.cursor},
-	{<<"direction">>, Record#svg.direction},
-	{<<"display">>, Record#svg.display},
-	{<<"dominant-baseline">>, Record#svg.dominant_baseline},
-	{<<"enable-background">>, Record#svg.enable_background},
-	{<<"fill">>, Record#svg.fill},
-	{<<"fill-opacity">>, Record#svg.fill_opacity},
-	{<<"fill-rule">>, Record#svg.fill_rule},
-	{<<"filter">>, Record#svg.filter},
-	{<<"flood-color">>, Record#svg.flood_color},
-	{<<"flood-opacity">>, Record#svg.flood_opacity},
-	{<<"font-family">>, Record#svg.font_family},
-	{<<"font-size">>, Record#svg.font_size},
-	{<<"font-size-adjust">>, Record#svg.font_size_adjust},
-	{<<"font-stretch">>, Record#svg.font_stretch},
-	{<<"font-style">>, Record#svg.font_style},
-	{<<"font-variant">>, Record#svg.font_variant},
-	{<<"font-weight">>, Record#svg.font_weight},
-	{<<"glyph-orientation-horizontal">>, Record#svg.glyph_orientation_horizontal},
-	{<<"glyph-orientation-vertical">>, Record#svg.glyph_orientation_vertical},
-	{<<"image-rendering">>, Record#svg.image_rendering},
-	{<<"kerning">>, Record#svg.kerning},
-	{<<"letter-spacing">>, Record#svg.letter_spacing},
-	{<<"lighting-color">>, Record#svg.lighting_color},
-	{<<"marker-end">>, Record#svg.marker_end},
-	{<<"marker-mid">>, Record#svg.marker_mid},
-	{<<"marker-start">>, Record#svg.marker_start},
-	{<<"mask">>, Record#svg.mask},
-	{<<"opacity">>, Record#svg.opacity},
-	{<<"overflow">>, Record#svg.overflow},
-	{<<"pointer-events">>, Record#svg.pointer_events},
-	{<<"shape-rendering">>, Record#svg.shape_rendering},
-	{<<"stop-color">>, Record#svg.stop_color},
-	{<<"stop-opacity">>, Record#svg.stop_opacity},
-	{<<"stroke">>, Record#svg.stroke},
-	{<<"stroke-dasharray">>, Record#svg.stroke_dasharray},
-	{<<"stroke-dashoffset">>, Record#svg.stroke_dashoffset},
-	{<<"stroke-linecap">>, Record#svg.stroke_linecap},
-	{<<"stroke-linejoin">>, Record#svg.stroke_linejoin},
-	{<<"stroke-miterlimit">>, Record#svg.stroke_miterlimit},
-	{<<"stroke-opacity">>, Record#svg.stroke_opacity},
-	{<<"stroke-width">>, Record#svg.stroke_width},
-	{<<"text-anchor">>, Record#svg.text_anchor},
-	{<<"text-decoration">>, Record#svg.text_decoration},
-	{<<"text-rendering">>, Record#svg.text_rendering},
-	{<<"unicode-bidi">>, Record#svg.unicode_bidi},
-	{<<"visibility">>, Record#svg.visibility},
-	{<<"word-spacing">>, Record#svg.word_spacing},
-	{<<"writing-mode">>, Record#svg.writing_mode}
-].
-
-svg_transfert_function(Record)-> [
-	{<<"type">>, Record#svg.type},
-	{<<"tableValues">>, Record#svg.tableValues},
-	{<<"slope">>, Record#svg.slope},
-	{<<"intercept">>, Record#svg.intercept},
-	{<<"amplitude">>, Record#svg.amplitude},
-	{<<"exponent">>, Record#svg.exponent},
-	{<<"offset">>, Record#svg.offset}
-].
-
-svg_xlink(Record)-> [
-	{<<"xlink:href">>, Record#svg.xlinkhref},
-	{<<"xlink:type">>, Record#svg.xlinktype},
-	{<<"xlink:role">>, Record#svg.xlinkrole},
-	{<<"xlink:arcrole">>, Record#svg.xlinkarcrole},
-	{<<"xlink:title">>, Record#svg.xlinktitle},
-	{<<"xlink:show">>, Record#svg.xlinkshow},
-	{<<"xlink:actuate">>, Record#svg.xlinkactuate}
-].