2019-12-15 20:04:31 +01:00
|
|
|
function initializeWebApp() {
|
2019-07-17 18:02:07 +02:00
|
|
|
|
|
|
|
$(document.body).on('click', 'a[href]', (event) => {
|
|
|
|
event.preventDefault();
|
|
|
|
window.open(event.target.href, '_blank');
|
2018-10-17 19:50:25 +02:00
|
|
|
});
|
2021-02-21 16:46:06 +01:00
|
|
|
if (!Blockbench.isTouch && !Blockbench.isPWA) {
|
2019-07-17 18:02:07 +02:00
|
|
|
$('#web_download_button').show()
|
2017-10-26 19:00:52 +02:00
|
|
|
}
|
2020-09-27 17:18:15 +02:00
|
|
|
|
|
|
|
if (Blockbench.browser == 'firefox') {
|
|
|
|
document.body.style.imageRendering = 'crisp-edges'
|
|
|
|
}
|
|
|
|
}
|
2021-07-02 12:04:05 +02:00
|
|
|
try {
|
|
|
|
window.matchMedia('(display-mode: standalone)').addEventListener('change', (evt) => {
|
|
|
|
if (!Blockbench.isMobile) $('#web_download_button').toggle(!evt.matches);
|
|
|
|
});
|
|
|
|
} catch (err) {
|
|
|
|
if (!Blockbench.isMobile) $('#web_download_button').hide();
|
|
|
|
}
|
2020-09-27 17:18:15 +02:00
|
|
|
|
|
|
|
function loadInfoFromURL() {
|
2019-07-17 18:02:07 +02:00
|
|
|
if (location.hash.substr(1, 8) == 'session=') {
|
2021-07-24 13:51:42 +02:00
|
|
|
EditSession.token = location.hash.substr(9);
|
|
|
|
BarItems.edit_session.click();
|
2018-12-27 14:03:04 +01:00
|
|
|
}
|
2021-07-06 21:34:46 +02:00
|
|
|
|
2021-06-12 00:07:23 +02:00
|
|
|
if (location.hash.substr(1, 2) == 'm=') {
|
2020-11-13 20:43:22 +01:00
|
|
|
$.getJSON(`https://blckbn.ch/api/models/${location.hash.substr(3)}`, (model) => {
|
2021-07-06 21:34:46 +02:00
|
|
|
Codecs.project.load(model, {path: ''});
|
2020-11-13 20:43:22 +01:00
|
|
|
})
|
2020-03-04 20:56:17 +01:00
|
|
|
}
|
2019-12-15 20:04:31 +01:00
|
|
|
}
|
2020-09-27 17:18:15 +02:00
|
|
|
|
2017-10-26 19:00:52 +02:00
|
|
|
//Misc
|
|
|
|
window.onbeforeunload = function() {
|
2021-09-15 17:50:46 +02:00
|
|
|
let unsaved_projects = ModelProject.all.find(project => {
|
|
|
|
return !project.saved || project.textures.find(tex => !tex.saved)
|
|
|
|
})
|
|
|
|
if (unsaved_projects) {
|
2019-07-17 18:02:07 +02:00
|
|
|
return 'Unsaved Changes';
|
2019-04-12 22:39:53 +02:00
|
|
|
} else {
|
2020-07-16 09:32:59 +02:00
|
|
|
Blockbench.dispatchEvent('before_closing')
|
2021-07-24 13:51:42 +02:00
|
|
|
if (Project.EditSession) Project.EditSession.quit()
|
2017-10-26 19:00:52 +02:00
|
|
|
}
|
|
|
|
}
|
2019-07-17 18:02:07 +02:00
|
|
|
|
2020-10-11 16:54:52 +02:00
|
|
|
function setupMobilePanelSelector() {
|
2019-07-17 18:02:07 +02:00
|
|
|
if (Blockbench.isMobile) {
|
2020-10-11 16:54:52 +02:00
|
|
|
Interface.PanelSelectorVue = new Vue({
|
|
|
|
el: '#panel_selector_bar',
|
|
|
|
data: {
|
|
|
|
all_panels: Interface.Panels,
|
|
|
|
selected: null,
|
2021-05-28 23:42:35 +02:00
|
|
|
modifiers: Pressing.overrides
|
2020-10-11 16:54:52 +02:00
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
panels() {
|
|
|
|
let arr = [];
|
|
|
|
arr.push({
|
|
|
|
icon: '3d_rotation',
|
|
|
|
name: tl('data.preview'),
|
|
|
|
id: 'preview'
|
|
|
|
})
|
|
|
|
for (var id in this.all_panels) {
|
|
|
|
let panel = this.all_panels[id];
|
|
|
|
if (Condition(panel.condition)) {
|
|
|
|
arr.push(panel)
|
|
|
|
}
|
2019-12-15 20:04:31 +01:00
|
|
|
}
|
2020-10-11 16:54:52 +02:00
|
|
|
return arr;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
select(panel) {
|
|
|
|
this.selected = panel && panel.id;
|
|
|
|
let overlay = $('#mobile_panel_overlay');
|
|
|
|
$('#left_bar').append(overlay.children());
|
|
|
|
if (panel instanceof Panel) {
|
|
|
|
overlay.append(panel.node);
|
|
|
|
overlay.show();
|
2020-10-26 15:27:07 +01:00
|
|
|
$(panel.node).show();
|
2020-12-30 16:37:16 +01:00
|
|
|
if (panel.onResize) panel.onResize();
|
2019-12-15 20:04:31 +01:00
|
|
|
} else {
|
2020-10-11 16:54:52 +02:00
|
|
|
overlay.hide();
|
2019-12-15 20:04:31 +01:00
|
|
|
}
|
2021-05-28 23:42:35 +02:00
|
|
|
},
|
|
|
|
openKeyboardMenu(event) {
|
|
|
|
let menu = new Menu([
|
|
|
|
{icon: Pressing.overrides.ctrl ? 'check_box' : 'check_box_outline_blank', name: 'keys.ctrl', click() {Pressing.overrides.ctrl = !Pressing.overrides.ctrl}},
|
|
|
|
{icon: Pressing.overrides.shift ? 'check_box' : 'check_box_outline_blank', name: 'keys.shift', click() {Pressing.overrides.shift = !Pressing.overrides.shift}},
|
|
|
|
{icon: Pressing.overrides.alt ? 'check_box' : 'check_box_outline_blank', name: 'keys.alt', click() {Pressing.overrides.alt = !Pressing.overrides.alt}},
|
|
|
|
'_',
|
|
|
|
{icon: 'clear_all', name: 'menu.mobile_keyboard.disable_all', condition: () => {
|
|
|
|
let {length} = [Pressing.overrides.ctrl, Pressing.overrides.shift, Pressing.overrides.alt].filter(key => key);
|
|
|
|
return length;
|
|
|
|
}, click() {
|
|
|
|
Pressing.overrides.ctrl = false; Pressing.overrides.shift = false; Pressing.overrides.alt = false;
|
|
|
|
}},
|
|
|
|
])
|
|
|
|
menu.open(this.$refs.mobile_keyboard_menu)
|
2019-12-15 20:04:31 +01:00
|
|
|
}
|
2021-05-28 23:42:35 +02:00
|
|
|
},
|
|
|
|
template: `
|
|
|
|
<div id="panel_selector_bar">
|
|
|
|
<div class="panel_selector" :class="{selected: selected == null}" @click="select(null)">
|
|
|
|
<div class="icon_wrapper"><i class="material-icons icon">3d_rotation</i></div>
|
|
|
|
</div>
|
|
|
|
<div class="panel_selector" :class="{selected: selected == panel.id}" v-for="panel in all_panels" v-if="Condition(panel.condition)" @click="select(panel)">
|
|
|
|
<div class="icon_wrapper" v-html="Blockbench.getIconNode(panel.icon).outerHTML"></div>
|
|
|
|
</div>
|
|
|
|
<div id="mobile_keyboard_menu" @click="openKeyboardMenu($event)" ref="mobile_keyboard_menu" :class="{enabled: modifiers.ctrl || modifiers.shift || modifiers.alt}">
|
|
|
|
<i class="material-icons">keyboard</i>
|
|
|
|
</div>
|
|
|
|
</div>`
|
2020-10-11 16:54:52 +02:00
|
|
|
})
|
2019-07-17 18:02:07 +02:00
|
|
|
}
|
2020-10-11 16:54:52 +02:00
|
|
|
}
|