module.define('ext/tree', [jQuery, 'core/settings', 'core/resource', 'core/event', 'core/entry', 'core/parser'], function ($, allsettings, resource, event, entry, parser) { var defaults = { enabled: false, slide: true }, settings = _.extend({}, defaults, allsettings.tree), template = '
' + '' + '' + '' + '' + '' + '' + '' + '', statusHintTemplate = '', // updates the tree for this single entry update = function (entry) { var $html = $(template), $indicator = $html.find('.indicator'), $a = $html.find('a'), $img = $html.find('.icon img'), $label = $html.find('.label'); $html .addClass(entry.isFolder() ? 'folder' : 'file') .data('entry', entry) .data('status', entry.status); $a.attr('href', entry.absHref); $img.attr('src', resource.icon(entry.type)); $label.text(entry.label); if (entry.isFolder()) { var subfolders = entry.getSubfolders(); // indicator if (!entry.status || (entry.status === 'h5ai' && !entry.isContentFetched) || subfolders.length) { $indicator.removeClass('none'); if (!entry.status || (entry.status === 'h5ai' && !entry.isContentFetched)) { $indicator.addClass('unknown'); } else if (entry.isContentVisible) { $indicator.addClass('open'); } else { $indicator.addClass('close'); } } // is it the domain? if (entry.isDomain()) { $html.addClass('domain'); $img.attr('src', resource.icon('folder-home')); } // is it the current folder? if (entry.isCurrentFolder()) { $html.addClass('current'); $img.attr('src', resource.icon('folder-open')); } // does it have subfolders? if (subfolders.length) { var $ul = $('