lib/react_native/react.rb in isomorfeus-react-16.13.11 vs lib/react_native/react.rb in isomorfeus-react-16.13.12
- old
+ new
@@ -1,120 +1,120 @@
-module React
- %x{
- self.prop_dictionary = {
- on_click: 'onPress',
- onClick: 'onPress',
- on_touch: 'onPress',
- onTouch: 'onPress',
- on_change: 'onChangeText',
- onChange: 'onChangeText',
- on_blur: 'onSubmitText',
- onBlur: 'onSubmitText',
- };
-
- self.to_native_react_props = function(ruby_style_props) {
- let result = {};
- let keys = ruby_style_props.$$keys;
- let keys_length = keys.length;
- let key = '';
- for (let i = 0; i < keys_length; i++) {
- key = keys[i];
- let value = ruby_style_props.$$smap[key];
- if (key[0] === 'o' && key[1] === 'n' && key[2] === '_') {
- let type = typeof value;
- if (type === "function") {
- let active_c = self.active_component();
- result[self.lower_camelize(key)] = function(event, info) {
- let ruby_event = self.native_to_ruby_event(event);
- #{`active_c.__ruby_instance`.instance_exec(`ruby_event`, `info`, &`value`)};
- }
- } else if (type === "object" && typeof value.$call === "function" ) {
- if (!value.react_event_handler_function) {
- value.react_event_handler_function = function(event, info) {
- let ruby_event = self.native_to_ruby_event(event);
- value.$call(ruby_event, info)
- };
- }
- result[self.lower_camelize(key)] = value.react_event_handler_function;
- } else if (type === "string" ) {
- let active_component = self.active_component();
- let method_ref;
- let method_name = '$' + value;
- if (typeof active_component[method_name] === "function") {
- // got a ruby instance
- if (active_component.native && active_component.native.method_refs && active_component.native.method_refs[value]) { method_ref = active_component.native.method_refs[value]; } // ruby instance with native
- else if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; } // ruby function component
- else { method_ref = active_component.$method_ref(value); } // create the ref
- } else if (typeof active_component.__ruby_instance[method_name] === "function") {
- // got a native instance
- if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; }
- else { method_ref = active_component.__ruby_instance.$method_ref(value); } // create ref for native
- }
- if (method_ref) {
- if (!method_ref.react_event_handler_function) {
- method_ref.react_event_handler_function = function(event, info) {
- let ruby_event = self.native_to_ruby_event(event);
- method_ref.$call(ruby_event, info)
- };
- }
- result[self.lower_camelize(key)] = method_ref.react_event_handler_function;
- } else {
- let component_name;
- if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
- else { component_name = active_component.$to_s(); }
- #{Isomorfeus.raise_error(message: "Is #{`value`} a valid method of #{`component_name`}? If so then please use: #{`key`}: method_ref(:#{`value`}) within component: #{`component_name`}")}
- }
- } else {
- let active_component = self.active_component();
- let component_name;
- if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
- else { component_name = active_component.$to_s(); }
- #{Isomorfeus.raise_error(message: "Received invalid value for #{`key`} with #{`value`} within component: #{`component_name`}")}
- console.error( + key + " event handler:", value, " within component:", self.active_component());
- }
- } else if (key[0] === 'a' && key.startsWith("aria_")) {
- result[key.replace("_", "-")] = value;
- } else if (key === "style" || key === "theme") {
- if (typeof value.$to_n === "function") { value = value.$to_n() }
- result[key] = value;
- } else {
- result[self.lower_camelize(key)] = value;
- }
- }
- return result;
- };
-
- self.render_block_result = function(block_result, component) {
- if (block_result.constructor === String || block_result.constructor === Number) {
- if (component && component === Opal.global.Text) {
- self.render_buffer[self.render_buffer.length - 1].push(block_result);
- } else {
- self.render_buffer[self.render_buffer.length - 1].push(Opal.global.React.createElement(Opal.global.Text, {}, block_result));
- }
- }
- };
-
- self.internal_render = function(component, props, string_child, block) {
- const operabu = self.render_buffer;
- let native_props;
- if (props && props !== nil) { native_props = self.to_native_react_props(props); }
- if (string_child) {
- if (component && component === Opal.global.Text) {
- operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, string_child));
- } else {
- let child = [Opal.global.React.createElement(Opal.global.Text, {}, string_child)];
- operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, child));
- }
- } else if (block && block !== nil) {
- operabu.push([]);
- // console.log("internal_render pushed", Opal.React.render_buffer, Opal.React.render_buffer.toString());
- let block_result = block.$call();
- if (block_result && block_result !== nil) { Opal.React.render_block_result(block_result, component); }
- // console.log("internal_render popping", Opal.React.render_buffer, Opal.React.render_buffer.toString());
- let children = operabu.pop();
- operabu[operabu.length - 1].push(Opal.global.React.createElement.apply(this, [component, native_props].concat(children)));
- } else {
- operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props));
- }
- };
- }
-end
+module React
+ %x{
+ self.prop_dictionary = {
+ on_click: 'onPress',
+ onClick: 'onPress',
+ on_touch: 'onPress',
+ onTouch: 'onPress',
+ on_change: 'onChangeText',
+ onChange: 'onChangeText',
+ on_blur: 'onSubmitText',
+ onBlur: 'onSubmitText',
+ };
+
+ self.to_native_react_props = function(ruby_style_props) {
+ let result = {};
+ let keys = ruby_style_props.$$keys;
+ let keys_length = keys.length;
+ let key = '';
+ for (let i = 0; i < keys_length; i++) {
+ key = keys[i];
+ let value = ruby_style_props.$$smap[key];
+ if (key[0] === 'o' && key[1] === 'n' && key[2] === '_') {
+ let type = typeof value;
+ if (type === "function") {
+ let active_c = self.active_component();
+ result[self.lower_camelize(key)] = function(event, info) {
+ let ruby_event = self.native_to_ruby_event(event);
+ #{`active_c.__ruby_instance`.instance_exec(`ruby_event`, `info`, &`value`)};
+ }
+ } else if (type === "object" && typeof value.$call === "function" ) {
+ if (!value.react_event_handler_function) {
+ value.react_event_handler_function = function(event, info) {
+ let ruby_event = self.native_to_ruby_event(event);
+ value.$call(ruby_event, info)
+ };
+ }
+ result[self.lower_camelize(key)] = value.react_event_handler_function;
+ } else if (type === "string" ) {
+ let active_component = self.active_component();
+ let method_ref;
+ let method_name = '$' + value;
+ if (typeof active_component[method_name] === "function") {
+ // got a ruby instance
+ if (active_component.native && active_component.native.method_refs && active_component.native.method_refs[value]) { method_ref = active_component.native.method_refs[value]; } // ruby instance with native
+ else if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; } // ruby function component
+ else { method_ref = active_component.$method_ref(value); } // create the ref
+ } else if (typeof active_component.__ruby_instance[method_name] === "function") {
+ // got a native instance
+ if (active_component.method_refs && active_component.method_refs[value]) { method_ref = active_component.method_refs[value]; }
+ else { method_ref = active_component.__ruby_instance.$method_ref(value); } // create ref for native
+ }
+ if (method_ref) {
+ if (!method_ref.react_event_handler_function) {
+ method_ref.react_event_handler_function = function(event, info) {
+ let ruby_event = self.native_to_ruby_event(event);
+ method_ref.$call(ruby_event, info)
+ };
+ }
+ result[self.lower_camelize(key)] = method_ref.react_event_handler_function;
+ } else {
+ let component_name;
+ if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
+ else { component_name = active_component.$to_s(); }
+ #{Isomorfeus.raise_error(message: "Is #{`value`} a valid method of #{`component_name`}? If so then please use: #{`key`}: method_ref(:#{`value`}) within component: #{`component_name`}")}
+ }
+ } else {
+ let active_component = self.active_component();
+ let component_name;
+ if (active_component.__ruby_instance) { component_name = active_component.__ruby_instance.$to_s(); }
+ else { component_name = active_component.$to_s(); }
+ #{Isomorfeus.raise_error(message: "Received invalid value for #{`key`} with #{`value`} within component: #{`component_name`}")}
+ console.error( + key + " event handler:", value, " within component:", self.active_component());
+ }
+ } else if (key[0] === 'a' && key.startsWith("aria_")) {
+ result[key.replace("_", "-")] = value;
+ } else if (key === "style" || key === "theme") {
+ if (typeof value.$to_n === "function") { value = value.$to_n() }
+ result[key] = value;
+ } else {
+ result[self.lower_camelize(key)] = value;
+ }
+ }
+ return result;
+ };
+
+ self.render_block_result = function(block_result, component) {
+ if (block_result.constructor === String || block_result.constructor === Number) {
+ if (component && component === Opal.global.Text) {
+ self.render_buffer[self.render_buffer.length - 1].push(block_result);
+ } else {
+ self.render_buffer[self.render_buffer.length - 1].push(Opal.global.React.createElement(Opal.global.Text, {}, block_result));
+ }
+ }
+ };
+
+ self.internal_render = function(component, props, string_child, block) {
+ const operabu = self.render_buffer;
+ let native_props;
+ if (props && props !== nil) { native_props = self.to_native_react_props(props); }
+ if (string_child) {
+ if (component && component === Opal.global.Text) {
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, string_child));
+ } else {
+ let child = [Opal.global.React.createElement(Opal.global.Text, {}, string_child)];
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props, child));
+ }
+ } else if (block && block !== nil) {
+ operabu.push([]);
+ // console.log("internal_render pushed", Opal.React.render_buffer, Opal.React.render_buffer.toString());
+ let block_result = block.$call();
+ if (block_result && block_result !== nil) { Opal.React.render_block_result(block_result, component); }
+ // console.log("internal_render popping", Opal.React.render_buffer, Opal.React.render_buffer.toString());
+ let children = operabu.pop();
+ operabu[operabu.length - 1].push(Opal.global.React.createElement.apply(this, [component, native_props].concat(children)));
+ } else {
+ operabu[operabu.length - 1].push(Opal.global.React.createElement(component, native_props));
+ }
+ };
+ }
+end