bohdan.kotenko 2 лет назад
Родитель
Сommit
9215515605

+ 1 - 1
include/calendar.hrl

@@ -7,6 +7,6 @@
   autocomplete=true, autofocus=false, disabled=false, form=[], list=[], maxDate={2019,2,2},
     minDate, format="DD.MM.YYYY", pattern=[], name=[], step=[], readonly=[], required=[],
     value={2020,2,2}, placeholder=[], onSelect=[], disableDayFn=[], firstDay=0, position=[],
-    reposition=[], yearRange=100}).
+    reposition=[], yearRange=100, update=[]}).
 
 -endif.

+ 3 - 1
include/comboLookup.hrl

@@ -5,7 +5,7 @@
 
 -record(comboKey,    { uid=[], value=[], dom=[], feed=[], delegate=[]}).
 -record(comboKeyup,  { value=[], dom=[], feed=[], delegate=[]}).
--record(comboSelect, { uid=[], value=[], dom=[], feed=[], delegate=[] }).
+-record(comboSelect, { uid=[], value=[], dom=[], feed=[], delegate=[], update=[]}).
 -record(comboNext,   { pos=[],  count=[], feed=[]}).
 -record(comboScroll, { uid=[], dom=[], delegate=[] }).
 -record(comboInsert, { uid=[], dom=[], rows=[], chunks=[], status=[], delegate=[], feed=[] }).
@@ -13,12 +13,14 @@
 -record(comboModify, { list_id=[], item_id=[], value=[], bind=[], modify_bind=[], delegate=[], pos=[], feed=[] }).
 -record(comboGroup,  { dom=[], value=[], delegate=[] }).
 -record(comboDraft,  { dom=[], list=[], values=[], group=[], subtitle=[], delegate=[] }).
+-record(comboUpdate, { id=[], fields=[], module=[], action=[], value=[] }).
 -record(comboLookup, { ?ELEMENT_BASE(element_comboLookup),
     value=[],
     disabled=false,
     feed=[],
     reader=[],
     chunk=20,
+    update=[],
     nested=[] }).
 
 -record(process, {name=[]}).

+ 2 - 2
include/nitro.hrl

@@ -68,13 +68,13 @@
 -record(option,       {?ELEMENT_BASE(element_select), disabled=[], label=[], selected=false, value=[]}).
 -record(output,       {?ELEMENT_BASE(element_output), for, form, name}).
 -record(progress,       {?ELEMENT_BASE(element_progress), max=[], value=[]}).
--record(select,       {?ELEMENT_BASE(element_select), autofocus=[], disabled=[], form=[], name=[], required=[], size=[]}).
+-record(select,       {?ELEMENT_BASE(element_select), autofocus=[], disabled=[], form=[], name=[], required=[], size=[], update=[]}).
 -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), required, autocomplete, autofocus, disabled, form, name, value, type=[], checked=false, placeholder, 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, label=true}).
+-record(checkbox,           {?ELEMENT_BASE(element_checkbox),  autofocus, checked=false, disabled, form, name, required, value, label=true, update=[]}).
 -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(datetime,           {?ELEMENT_BASE(element_datetime),  autocomplete, autofocus, disabled, form, list, max, min, name, step, readonly, required, value}).

+ 4 - 0
lib/combo.ex

@@ -76,6 +76,10 @@ defmodule NITRO.Combo do
     end
   end
 
+  def select(NITRO.comboSelect(uid: uid, dom: field, value: value, update: NITRO.comboUpdate() = update)) do
+    send(self(), {:direct, NITRO.comboUpdate(update, value: value)})
+    NITRO.Combo.Search.stop(uid, field)
+  end
   def select(NITRO.comboSelect(uid: uid, dom: field)), do:
     NITRO.Combo.Search.stop(uid, field)
 

+ 1 - 1
mix.exs

@@ -4,7 +4,7 @@ defmodule NITRO.Mixfile do
   def project do
     [
       app: :nitro,
-      version: "7.7.1",
+      version: "7.8.0",
       description: "NITRO Nitrogen Web Framework",
       package: package(),
       deps: deps()

+ 3 - 1
priv/js/comboLookup.js

@@ -65,13 +65,15 @@ function comboSelectDefault(uid, dom, row, feed, mod, id) {
   elem.value = row;
 
   let value = string(row);
+  let update = list();
   const selected = qi(id);
   if (selected) {
     elem.setAttribute('data-bind', selected.getAttribute('data-bind'));
     value = dec(unbase64(selected.getAttribute('data-bind')));
+    if (elem.getAttribute('data-update')) { update = dec(unbase64(elem.getAttribute('data-update'))); }
   }
 
-  direct(tuple(atom('comboSelect'), bin(uid), value, string(dom), string(feed), atom(mod)));
+  direct(tuple(atom('comboSelect'), bin(uid), value, string(dom), string(feed), atom(mod), update));
   comboLookupTextApply(dom);
 };
 

+ 9 - 9
src/elements/combo/element_calendar.erl

@@ -6,15 +6,15 @@
 
 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,
+    Id = case Recprd#calendar.id of [] -> nitro:temp_id(); I -> I end,
+    case Record#calendar.postback of
+      [] -> skip;
+      Postback -> nitro:wire(#event{type=click, postback=Postback, target=ID, source=Record#calendar.source, delegate=Record#calendar.delegate}),
+    end,
+    case Record#calendar.update of
+      [] -> skip;
+      Update -> nitro:wire(#event{type=click, postback=Update, target=ID, source=Record#calendar.source, delegate=Record#calendar.delegate}),
+    end,
 
     init(Id,Record),
 

+ 3 - 2
src/elements/combo/element_comboLookup.erl

@@ -14,15 +14,16 @@ proto(#comboGroup{delegate=Module}=Msg)  -> Module:proto(Msg);
 proto(#comboDraft{delegate=Module}=Msg)  -> Module:proto(Msg).
 
 render_element(#comboLookup{id=Id, style=Style, value = Val, bind = Object,
-  feed = Feed, disabled = Disabled, delegate = Module, class = Class, nested = Nested} = Data) ->
+  feed = Feed, disabled = Disabled, delegate = Module, class = Class, nested = Nested, update = Update} = Data) ->
   Uid = nitro_pi:uid([], []),
   DataNested = case Nested of [] -> []; _ -> [{<<"nested">>, Nested}] end,
   DataBind = case Object of [] -> []; _ -> [{<<"data-bind">>, base64:encode(term_to_binary(Object))}] end,
+  DataUpdate = case Update of [] -> []; _ -> [{<<"data-update">>, base64:encode(term_to_binary(Update))}] end,
   nitro:render(
     #panel{id=form:atom([lookup, Id]), class=lists:flatten([dropdown, Class]),
            body=[#input{id=Id, disabled = Disabled, type="comboLookup",
                         autocomplete = "off",
-                        data_fields = DataNested ++ DataBind,
+                        data_fields = DataNested ++ DataBind ++ DataUpdate,
                         onkeyup = nitro:jse("comboLookupKeyup('"
                                ++ nitro:to_list(Uid) ++ "','"
                                ++ nitro:to_list(Id) ++ "','"

+ 7 - 0
src/elements/form/element_select.erl

@@ -13,6 +13,13 @@ render_element(Record = #select{}) ->
                                 postback=Postback,
                                 source=[nitro:to_atom(ID)|Record#select.source],
                                 delegate=Record#select.delegate }) end,
+  case Record#select.update of
+    [] -> skip;
+    Update -> nitro:wire(#event{ type=change,
+                                target=ID,
+                                postback=Update,
+                                source=[nitro:to_atom(ID)|Record#select.source],
+                                delegate=Record#select.delegate }) end,
   Props = [
     {<<"id">>, ID},
     {<<"class">>, Record#select.class},

+ 4 - 0
src/elements/input/element_checkbox.erl

@@ -11,6 +11,10 @@ render_element(Record) ->
         [] -> ignore;
         Postback -> nitro:wire(#event { type=change, postback=Postback, target=Id, source=[Id|Record#checkbox.source], delegate=Record#checkbox.delegate })
     end,
+    case Record#checkbox.update of
+        [] -> ignore;
+        Update -> nitro:wire(#event { type=change, postback=Update, target=Id, source=[Id|Record#checkbox.source], delegate=Record#checkbox.delegate })
+    end,
    List = [
       % global
       {<<"accesskey">>, Record#checkbox.accesskey},

+ 1 - 1
src/nitro.app.src

@@ -1,6 +1,6 @@
 {application, nitro, [
     {description,  "NITRO Nitrogen Web Framework"},
-    {vsn,          "7.7.0"},
+    {vsn,          "7.8.0"},
     {applications, [kernel, stdlib]},
     {modules, []},
     {registered,   []},