full suport for models and hotloading Plugins

This commit is contained in:
2026-08-04 22:28:39 -05:00
parent be8c1a9ea8
commit 552f570efb
9 changed files with 236 additions and 7 deletions
+44 -2
View File
@@ -73,6 +73,7 @@
{% if models_manifest %}<button class="tab-btn" data-tab="models" role="tab">Models/Textures</button>{% endif %}
{% if logical_manifest %}<button class="tab-btn" data-tab="logical" role="tab">Logical</button>{% endif %}
{% if mods_manifest %}<button class="tab-btn" data-tab="mods" role="tab">Mods</button>{% endif %}
{% if plugins_manifest %}<button class="tab-btn" data-tab="plugins" role="tab">Plugins</button>{% endif %}
<button class="tab-btn" data-tab="gallery" role="tab">Gallery</button>
</div>
@@ -250,6 +251,8 @@
data-member="{{ model.member }}" data-name="{{ model.name }}"
data-model-format="{{ model.ext }}"
data-default-texture="{{ model.default_texture }}"
data-project-slug="{{ project.slug }}"
data-plugins="{{ autoload_plugins_json }}"
data-base-url="{% url 'library:pack_asset' project.slug versions.0.pk 'ASSET' %}"
data-vanilla-base-url="/static/vanilla/ASSET"><i class="fas fa-cube"></i> Render</button>
{% else %}
@@ -390,10 +393,37 @@
</section>
{% endif %}
{% if plugins_manifest %}
<section class="tab-panel" id="tab-plugins">
<div class="card">
<h2><i class="fas fa-puzzle-piece"></i> Plugins</h2>
<div class="plugins-warning">
<i class="fas fa-exclamation-triangle"></i> <strong>Caution:</strong> this pack contains Blockbench plugins — executable JavaScript that runs in your browser. Plugins can crash Blockbench or run arbitrary code. Only open models from packs you trust.
</div>
<div class="plugins-toggle">
<label class="switch">
<input type="checkbox" id="plugins-hotload-toggle" checked>
<span class="slider"></span>
</label>
<span>Hotload this pack's plugins when opening a model</span>
</div>
<ul class="plugins-list">
{% for plugin in plugins_manifest.plugins %}
<li>
<i class="fas fa-file-code"></i>
<span class="plugins-name">{{ plugin.name }}</span>
{% if plugin.autoload %}<span class="plugins-badge autoload">autoload</span>{% endif %}
<span class="plugins-size">{{ plugin.size|filesizeformat }}</span>
</li>
{% endfor %}
</ul>
</div>
</section>
{% endif %}
<section class="tab-panel" id="tab-gallery">
<div class="card">
<h2><i class="fas fa-images"></i> Gallery</h2>
<div class="gallery-grid">
<h2><i class="fas fa-images"></i> Gallery</h2> <div class="gallery-grid">
{% for asset in assets %}
<figure class="gallery-item" data-media-url="{{ asset.file_url }}" data-media-type="{% if asset.is_video %}video{% else %}image{% endif %}" data-caption="{{ asset.caption }}">
{% if asset.is_video or asset.is_gif %}
@@ -537,6 +567,18 @@
});
});
}
// Per-project "Don't hotload" switch for pack plugins.
const pluginsToggle = document.getElementById('plugins-hotload-toggle');
const pluginsSlug = document.querySelector('.model-render-btn')?.dataset.projectSlug;
if (pluginsToggle && pluginsSlug) {
const key = 'packs:no-hotload:' + pluginsSlug;
if (localStorage.getItem(key) === '1') pluginsToggle.checked = false;
pluginsToggle.addEventListener('change', () => {
if (pluginsToggle.checked) localStorage.removeItem(key);
else localStorage.setItem(key, '1');
});
}
})();
</script>
{% endblock %}