diff options
author | Andrew Dolgov <[email protected]> | 2021-03-12 13:44:10 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2021-03-12 13:44:10 +0300 |
commit | 3d577bda6c003eb2a1b0938604d40b0bd2fb7285 (patch) | |
tree | 8381986b89e84cfa1d90917de9a646110eaf328e | |
parent | fe7e71133be7bebd909e5faf51daa612537937d3 (diff) |
attempt to perform less useless work
-rw-r--r-- | init.js | 40 |
1 files changed, 22 insertions, 18 deletions
@@ -4,11 +4,15 @@ require(['dojo/_base/kernel', 'dojo/ready'], function (dojo, ready) { ready(function() { Plugins.Grid_Masonry = { rows: [], + timeouts: [], resize_observer: new ResizeObserver((entries) => { entries.forEach((entry) => Plugins.Grid_Masonry.fit_row(entry.target)); }), mutation_observer: new MutationObserver((mutations) => { - mutations.forEach((mutation) => Plugins.Grid_Masonry.fit_row(mutation.target)) + mutations.forEach((mutation) => { + if (mutation.type == "attributes" && mutation.attributeName == "class") + Plugins.Grid_Masonry.fit_row(mutation.target) + }) }), intersection_observer: new IntersectionObserver( (entries, observer) => { @@ -35,6 +39,12 @@ require(['dojo/_base/kernel', 'dojo/ready'], function (dojo, ready) { }); }, fit_row: function(row) { + if (this.timeouts[row.id]) + window.clearTimeout(this.timeouts[row.id]); + + this.timeouts[row.id] = window.setTimeout(() => { this._fit_row(row) }, 500); + }, + _fit_row: function(row) { const num_columns = this.get_columns(); if (num_columns < 2 || !Headlines.isChildVisible(row)) @@ -44,16 +54,24 @@ require(['dojo/_base/kernel', 'dojo/ready'], function (dojo, ready) { if (row_idx != -1) { + const next = this.rows[row_idx + num_columns]; + if (window.getComputedStyle(row).gridColumn != "auto / auto") { row.style.marginTop = '0px'; - } - const next = this.rows[row_idx + num_columns]; + if (next) { + next.style.marginTop = '0px'; + } + + return; + } if (next) { - if (window.getComputedStyle(next).gridColumn == "auto / auto" && window.getComputedStyle(row).gridColumn == "auto / auto") { + if (window.getComputedStyle(next).gridColumn == "auto / auto") { const delta_height = row.offsetHeight - row.querySelector('.content').offsetHeight - row.querySelector('.header').offsetHeight; + console.log('grid_masonry', row.id, next.id, delta_height); + next.style.marginTop = `-${delta_height}px`; } else { next.style.marginTop = '0px'; @@ -77,20 +95,6 @@ require(['dojo/_base/kernel', 'dojo/ready'], function (dojo, ready) { } } - /*function fit_rows(rows) { - const num_columns = window.getComputedStyle(App.byId('headlines-frame')).gridTemplateColumns.split(' ').length; - - if (num_columns < 2) - return; - - rows.slice(num_columns).forEach((row, idx) => { - const prev = rows[idx]; - const delta_height = prev.offsetHeight - prev.querySelector('.content').offsetHeight - prev.querySelector('.header').offsetHeight; - - row.style.marginTop = `-${delta_height}px`; - }); - }*/ - /*PluginHost.register(PluginHost.HOOK_HEADLINES_SCROLL_HANDLER, function() { Plugins.Grid_Masonry.fit_all(); return true; |