framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
74 lines • 2.62 kB
JavaScript
import $ from '../../shared/dom7.js';
import { bindMethods, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';
const Treeview = {
open(itemEl) {
const app = this;
const $itemEl = $(itemEl).eq(0);
if (!$itemEl.length) return;
$itemEl.addClass('treeview-item-opened');
$itemEl.trigger('treeview:open');
app.emit('treeviewOpen', $itemEl[0]);
function done(cancel) {
if (cancel) {
$itemEl.removeClass('treeview-item-opened');
$itemEl.trigger('treeview:close');
app.emit('treeviewClose', $itemEl[0]);
} else {
$itemEl[0].f7TreeviewChildrenLoaded = true;
}
$itemEl.find('.treeview-toggle').removeClass('treeview-toggle-hidden');
$itemEl.find('.treeview-preloader').remove();
}
if ($itemEl.hasClass('treeview-load-children') && !$itemEl[0].f7TreeviewChildrenLoaded) {
const preloaders = {
iosPreloaderContent,
mdPreloaderContent
};
$itemEl.trigger('treeview:loadchildren', done);
app.emit('treeviewLoadChildren', $itemEl[0], done);
$itemEl.find('.treeview-toggle').addClass('treeview-toggle-hidden');
$itemEl.find('.treeview-item-root').prepend(`<div class="preloader treeview-preloader">${preloaders[`${app.theme}PreloaderContent`]}</div>`);
}
},
close(itemEl) {
const app = this;
const $itemEl = $(itemEl).eq(0);
if (!$itemEl.length) return;
$itemEl.removeClass('treeview-item-opened');
$itemEl.trigger('treeview:close');
app.emit('treeviewClose', $itemEl[0]);
},
toggle(itemEl) {
const app = this;
const $itemEl = $(itemEl).eq(0);
if (!$itemEl.length) return;
const wasOpened = $itemEl.hasClass('treeview-item-opened');
app.treeview[wasOpened ? 'close' : 'open']($itemEl);
}
};
export default {
name: 'treeview',
create() {
const app = this;
bindMethods(app, {
treeview: Treeview
});
},
clicks: {
'.treeview-toggle': function toggle($clickedEl, clickedData, e) {
const app = this;
if ($clickedEl.parents('.treeview-item-toggle').length) return;
const $treeviewItemEl = $clickedEl.parents('.treeview-item').eq(0);
if (!$treeviewItemEl.length) return;
e.preventF7Router = true;
app.treeview.toggle($treeviewItemEl[0]);
},
'.treeview-item-toggle': function toggle($clickedEl, clickedData, e) {
const app = this;
const $treeviewItemEl = $clickedEl.closest('.treeview-item').eq(0);
if (!$treeviewItemEl.length) return;
e.preventF7Router = true;
app.treeview.toggle($treeviewItemEl[0]);
}
}
};