@xuda.io/runtime-bundle 1.0.1252 → 1.0.1253

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36937,6 +36937,93 @@ func.UI.screen.render_ui_tree = async function (SESSION_ID, $container, nodeP, p
36937
36937
  return await fx[nodeTag]();
36938
36938
  }
36939
36939
 
36940
+ // Old rendering path (when glb.new_xu_render is false)
36941
+ const draw_html_element_org = async function (element) {
36942
+ const done = async function (ret = {}) {
36943
+ return $div;
36944
+ };
36945
+
36946
+ if (!element || element === 'script') return await done();
36947
+
36948
+ const $div = await func.UI.screen.create_container(SESSION_ID, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, prop, null, null, element, null, '');
36949
+
36950
+ $div.hover(
36951
+ (e) => hover_in($div, e),
36952
+ (e) => hover_out(),
36953
+ );
36954
+
36955
+ if (paramsP.paramsP === 'grid' || parent_infoP?.iterate_info) {
36956
+ $div.on('click contextmenu', (e) => hover_in($div, e));
36957
+ }
36958
+
36959
+ const ret = await func.UI.screen.set_attributes_new(SESSION_ID, is_skeleton, $root_container, nodeP, $container, paramsP, parent_infoP, jobNoP, keyP, parent_nodeP, $div, true);
36960
+
36961
+ if (ret.abort || nodeTag === 'svg' || !_.isEmpty(nodeP?.attributes?.['xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-html']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-text']) || !_.isEmpty(nodeP?.attributes?.['xu-exp:xu-html'])) {
36962
+ return await done(ret);
36963
+ }
36964
+
36965
+ if (nodeP?.attributes?.['xu-viewport'] === 'true') {
36966
+ const xu_viewport = function () {
36967
+ const observer_inViewport = new IntersectionObserver(
36968
+ (entries) => {
36969
+ entries.forEach((entry) => {
36970
+ if (entry.isIntersecting) {
36971
+ $(entry.target).trigger('inViewport');
36972
+ observer_inViewport.unobserve(entry.target);
36973
+ }
36974
+ });
36975
+ },
36976
+ { threshold: 0.1 },
36977
+ );
36978
+
36979
+ const observer_outViewport = new IntersectionObserver(
36980
+ (entries) => {
36981
+ entries.forEach((entry) => {
36982
+ if (!entry.isIntersecting) {
36983
+ $(entry.target).trigger('outViewport');
36984
+ }
36985
+ });
36986
+ },
36987
+ { threshold: 0 },
36988
+ );
36989
+
36990
+ let ui_job_id;
36991
+
36992
+ $div.on('inViewport', function () {
36993
+ if ($div.children().length) {
36994
+ $div.removeClass('skeleton');
36995
+ return;
36996
+ }
36997
+
36998
+ hover_in($div);
36999
+ ui_job_id = func.UI.worker.add_to_queue(SESSION_ID, 'gui event', 'render_viewport', { $div, nodeP, parent_infoP, $root_container, paramsP, jobNoP, is_skeleton, keyP, refreshed_ds, parent_nodeP, check_existP, $container }, null, null, paramsP.dsSessionP);
37000
+ observer_outViewport.observe($div[0]);
37001
+ });
37002
+
37003
+ $div.on('outViewport', function () {
37004
+ func.UI.worker.delete_job(SESSION_ID, ui_job_id);
37005
+
37006
+ if ($div.children().length) {
37007
+ $div.empty();
37008
+ const height = $div?.data()?.xuData?.viewport_height || 10;
37009
+ if (height !== undefined) {
37010
+ $div.css('height', height);
37011
+ }
37012
+ }
37013
+ observer_inViewport.observe($div[0]);
37014
+ });
37015
+
37016
+ $div.addClass('skeleton');
37017
+ observer_inViewport.observe($div[0]);
37018
+ };
37019
+ xu_viewport();
37020
+ } else {
37021
+ await iterate_child($div, nodeP, parent_infoP, $root_container);
37022
+ }
37023
+
37024
+ return await done(ret);
37025
+ };
37026
+
36940
37027
  // Render HTML element
36941
37028
  if (!glb.new_xu_render) {
36942
37029
  return await draw_html_element_org(nodeTag);