summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-03-12 13:44:10 +0300
committerAndrew Dolgov <[email protected]>2021-03-12 13:44:10 +0300
commit3d577bda6c003eb2a1b0938604d40b0bd2fb7285 (patch)
tree8381986b89e84cfa1d90917de9a646110eaf328e
parentfe7e71133be7bebd909e5faf51daa612537937d3 (diff)
attempt to perform less useless work
-rw-r--r--init.js40
1 files changed, 22 insertions, 18 deletions
diff --git a/init.js b/init.js
index d591991..ff4cfd0 100644
--- a/init.js
+++ b/init.js
@@ -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;