';
};
AssetsPanel.prototype.renderBundles = function () {
var el = this.el && this.el.querySelector('#pw-asset-bundles');
if (!el) return;
var q = this._query;
var list = this._bundles.slice();
if (q) {
list = list.filter(function (b) {
return String(b.name).toLowerCase().indexOf(q) >= 0;
});
}
var maxMem = 1;
for (var i = 0; i < this._bundles.length; i++) {
maxMem = Math.max(maxMem, this._bundles[i].memMB || 0);
}
var html = ['
Bundle · ' + this._bundles.length + '
'];
var allActive = !this._bundleFilter;
html.push(
''
);
for (var j = 0; j < list.length; j++) {
var b = list[j];
var mem = Number(b.memMB) || 0;
var pct = maxMem > 0 ? Math.min(100, (mem / maxMem) * 100) : 0;
var act = this._bundleFilter === b.name ? ' active' : '';
var st = b.status || (b.assetCount > 0 ? 'loaded' : 'unloaded');
var stCls = st === 'loaded' ? 'st-loaded' : (st === 'loaded-empty' ? 'st-empty' : 'st-unloaded');
var stText = st === 'loaded' ? '已加载' : (st === 'loaded-empty' ? '空缓存' : '未加载');
html.push(
''
);
}
el.innerHTML = html.join('');
var self = this;
var btns = el.querySelectorAll('.pw-bundle-item');
for (var k = 0; k < btns.length; k++) {
btns[k].addEventListener('click', function (ev) {
var name = ev.currentTarget.getAttribute('data-bundle') || '';
self._bundleFilter = name;
self.renderBundles();
self.renderList();
});
}
};
AssetsPanel.prototype.renderList = function () {
if (!this.el) return;
var rows = this._rows.slice();
var q = this._query;
var bf = this._bundleFilter;
var tf = this._typeFilter;
rows = rows.filter(function (r) {
if (bf) {
var inBundle = r.bundle === bf;
var used = r.usedBy && r.usedBy.indexOf(bf) >= 0;
if (!inBundle && !used) return false;
}
if (tf && r.type !== tf && r.kind !== tf) return false;
if (q && String(r.name).toLowerCase().indexOf(q) < 0 && String(r.type).toLowerCase().indexOf(q) < 0) return false;
return true;
});
var sort = this._sort;
rows.sort(function (a, b) {
if (sort === 'name') return String(a.name).localeCompare(String(b.name));
if (sort === 'type') return String(a.type).localeCompare(String(b.type)) || String(a.name).localeCompare(String(b.name));
if (sort === 'ref') return (b.ref || 0) - (a.ref || 0);
return (b.mem || 0) - (a.mem || 0);
});
// 类型选项
var typeSel = this.el.querySelector('#pw-asset-type');
if (typeSel) {
var types = {};
for (var i = 0; i < this._rows.length; i++) types[this._rows[i].type] = 1;
var cur = this._typeFilter;
var html = '';
var keys = Object.keys(types).sort();
for (var t = 0; t < keys.length; t++) {
html += '';
}
typeSel.innerHTML = html;
}
var listEl = this.el.querySelector('#pw-asset-list');
if (!listEl) return;
if (!rows.length) {
listEl.innerHTML = '
无匹配资源
';
return;
}
var out = [];
out.push('
名称类型内存引用操作
');
var maxShow = Math.min(rows.length, 400);
for (var j = 0; j < maxShow; j++) {
var r = rows[j];
var sel = r.uuid === this._selectedUuid ? ' active' : '';
var memText = fmtMB(r.mem);
if (r.type === 'SpriteFrame') {
memText = (r.w && r.h) ? (r.w + '×' + r.h) : '共享纹理';
} else if (r.type === 'ImageAsset') {
memText = (r.w && r.h) ? (r.w + '×' + r.h) : '源像素';
}
var tag = '';
if (r.pack) tag += ' 图集';
if (r.type === 'Texture2D' && r.pack) tag += ' 合包';
if (r.via === 'dep') tag += ' 依赖';
out.push(
'
');
}
listEl.innerHTML = out.join('');
var self = this;
listEl.onclick = function (ev) {
var btn = ev.target.closest ? ev.target.closest('button[data-copy]') : null;
var item = (ev.target.closest && ev.target.closest('.pw-assets-row[data-uuid]')) || null;
if (btn && item) {
ev.stopPropagation();
var uuid = item.getAttribute('data-uuid') || '';
var name = (item.querySelector('.pw-assets-name') && item.querySelector('.pw-assets-name').textContent) || '';
if (btn.getAttribute('data-copy') === 'name') copyText(name.trim());
else copyText(uuid);
btn.classList.add('copied');
setTimeout(function () { btn.classList.remove('copied'); }, 600);
return;
}
if (!item) return;
var u = item.getAttribute('data-uuid');
self._selectedUuid = u;
self.renderList();
self.loadPreview(u);
};
};
AssetsPanel.prototype.loadPreview = function (uuid) {
var self = this;
var meta = this.el && this.el.querySelector('#pw-asset-meta');
var box = this.el && this.el.querySelector('#pw-asset-preview');
var refsEl = this.el && this.el.querySelector('#pw-asset-refs');
if (!this._bridge) return;
if (box) box.innerHTML = '加载预览…';
if (meta) meta.innerHTML = '';
if (refsEl) refsEl.innerHTML = '…';
this._bridge.call('assets.preview', { uuid: uuid }).then(function (d) {
if (!d) return;
if (box) {
if (d.kind === 'image' && d.url) {
box.innerHTML = '';
} else if (d.kind === 'url' && d.url) {
box.innerHTML = '';
} else {
box.innerHTML = '无预览 ' + escapeHtml(d.type || '') + '';
}
}
if (meta) {
meta.innerHTML =
'
名称' + escapeHtml(d.name || '') +
'
' +
'
UUID' + escapeHtml(d.uuid || '') +
'
' +
'
Bundle' + escapeHtml(d.bundle || '—') + '
' +
'
路径' + escapeHtml(d.path || '—') + '
' +
'
类型' + escapeHtml(d.type || '') + '
' +
'
引用计数' + (d.ref || 0) + '
' +
(d.w && d.h ? '
尺寸' + d.w + '×' + d.h + '
' : '');
meta.onclick = function (ev) {
var b = ev.target.closest ? ev.target.closest('[data-copy-val]') : null;
if (!b) return;
copyText(b.getAttribute('data-copy-val') || '');
};
}
if (refsEl) {
var refs = d.refs || [];
if (!refs.length) {
refsEl.innerHTML = '无反向引用';
} else {
var html = [];
for (var i = 0; i < refs.length; i++) {
html.push(
'