mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-12 19:12:13 +02:00
172 lines
6.5 KiB
JavaScript
172 lines
6.5 KiB
JavaScript
// explore.js
|
|
//
|
|
// Created by Darlingnotin in 2019.
|
|
// Copyright 2019 Darlingnotin
|
|
// Copyright 2020 Vircadia contributors.
|
|
//
|
|
// Distributed under the ISC license.
|
|
// See the accompanying file LICENSE or https://opensource.org/licenses/ISC
|
|
|
|
(function () {
|
|
var defaultGoToJSON = "https://metaverse.vircadia.com/interim/d-goto/app/goto.json";
|
|
|
|
var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
|
Menu.menuItemEvent.connect(onMenuItemEvent);
|
|
var AppUi = Script.require('appUi');
|
|
var goToAddresses;
|
|
var permission;
|
|
Menu.addMenu("Explore");
|
|
Menu.addMenuItem("Explore", "Subscribe to new GoTo provider");
|
|
Menu.addMenu("Explore > Unsubscribe from GoTo provider");
|
|
var goToAddress = Settings.getValue("goToDecentral", "");
|
|
for (var i = 0; i < goToAddress.length; i++) {
|
|
Menu.addMenuItem("Explore > Unsubscribe from GoTo provider", goToAddress[i]);
|
|
}
|
|
var ui;
|
|
function startup() {
|
|
goToAddress = Settings.getValue("goToDecentral", "");
|
|
if (goToAddress == "") {
|
|
var initialGoToList = Script.resolvePath(defaultGoToJSON);
|
|
Menu.addMenuItem("Explore > Unsubscribe from GoTo provider", initialGoToList);
|
|
goToAddressNow = [
|
|
initialGoToList
|
|
];
|
|
Settings.setValue("goToDecentral", goToAddressNow);
|
|
}
|
|
|
|
var scriptDir = Script.resolvePath("");
|
|
scriptDir = scriptDir.slice(0, scriptDir.lastIndexOf("/") + 1);
|
|
|
|
ui = new AppUi({
|
|
buttonName: "EXPLORE",
|
|
home: Script.resolvePath("explore.html"),
|
|
graphicsDirectory: scriptDir,
|
|
sortOrder: 8
|
|
});
|
|
}
|
|
|
|
function onWebEventReceived(event) {
|
|
messageData = JSON.parse(event);
|
|
if (messageData.action === "requestAddressList") {
|
|
goToAddresses = Settings.getValue("goToDecentral", "");
|
|
for (var i = 0; i < goToAddresses.length; i++) {
|
|
|
|
try {
|
|
Script.require(goToAddresses[i] + "?" + Date.now());
|
|
}
|
|
catch (e) {
|
|
goToAddresses.remove(goToAddresses[i]);
|
|
}
|
|
}
|
|
var children = goToAddresses
|
|
.map(function (url) { return Script.require(url + '?' + Date.now()); })
|
|
.reduce(function (result, someChildren) { return result.concat(someChildren); }, []);
|
|
|
|
for (var z = 0; z < children.length; z++) {
|
|
delete children[z].age;
|
|
delete children[z].id;
|
|
children[z]["Domain Name"] = children[z]["Domain Name"].replace(/</g, '<').replace(/>/g, '<');
|
|
children[z].Owner = children[z].Owner.replace(/</g, '<').replace(/>/g, '<');
|
|
}
|
|
|
|
permission = Entities.canRez()
|
|
|
|
var readyEvent = {
|
|
"action": "addressListv2",
|
|
"myAddress": children,
|
|
"permission": permission,
|
|
"isHomeSet": LocationBookmarks.getHomeLocationAddress().length > 0
|
|
};
|
|
|
|
tablet.emitScriptEvent(JSON.stringify(readyEvent));
|
|
|
|
} else if (messageData.action === "goToUrl") {
|
|
Window.location = messageData.visit;
|
|
} else if (messageData.action === "navigateBack") {
|
|
location.goBack();
|
|
} else if (messageData.action === "navigateHome") {
|
|
if (LocationBookmarks.getHomeLocationAddress()) {
|
|
location.handleLookupString(LocationBookmarks.getHomeLocationAddress());
|
|
} else {
|
|
location.goToLocalSandbox();
|
|
}
|
|
} else if (messageData.action === "navigateForward") {
|
|
location.goForward();
|
|
} else if (messageData.action === "addLocation") {
|
|
|
|
var locationBoxUserData = {
|
|
owner: messageData.owner,
|
|
domainName: messageData.domainName,
|
|
port: messageData.Port,
|
|
ipAddress: null,
|
|
avatarCountRadius: null,
|
|
customPath: null,
|
|
grabbableKey: {
|
|
grabbable: false
|
|
}
|
|
};
|
|
|
|
var locationBoxName = "Explore Marker (" + messageData.domainName + ")";
|
|
|
|
locationboxID = Entities.addEntity({
|
|
position: Vec3.sum(MyAvatar.position, Quat.getFront(MyAvatar.orientation)),
|
|
userData: JSON.stringify(locationBoxUserData),
|
|
serverScripts: messageData.script,
|
|
color: { red: 255, green: 0, blue: 0 },
|
|
type: "Box",
|
|
name: locationBoxName,
|
|
collisionless: true,
|
|
grabbable: false
|
|
});
|
|
} else if (messageData.action === "retrievePortInformation") {
|
|
var readyEvent = {
|
|
"action": "retrievePortInformationResponse",
|
|
"goToAddresses": goToAddresses
|
|
};
|
|
|
|
tablet.emitScriptEvent(JSON.stringify(readyEvent));
|
|
|
|
}
|
|
}
|
|
|
|
function onMenuItemEvent(menuItem) {
|
|
var menuItemList = JSON.stringify(Settings.getValue("goToDecentral", ""));
|
|
var menuItemExists = menuItemList.indexOf(menuItem) !== -1;
|
|
if (menuItem == "Subscribe to new GoTo provider") {
|
|
goToAddress = Settings.getValue("goToDecentral", "");
|
|
var arrayLength = goToAddress.length;
|
|
var prom = Window.prompt("Enter URL to GoTo JSON.", "");
|
|
if (prom) {
|
|
goToAddress[arrayLength] = prom;
|
|
Settings.setValue("goToDecentral", goToAddress);
|
|
Menu.addMenuItem("Explore > Unsubscribe from GoTo provider", prom);
|
|
}
|
|
} else if (menuItemExists) {
|
|
goToAddresses = Settings.getValue("goToDecentral", "");
|
|
Menu.removeMenuItem("Explore > Unsubscribe from GoTo provider", menuItem);
|
|
goToAddresses.remove(menuItem);
|
|
Settings.setValue("goToDecentral", goToAddresses);
|
|
}
|
|
}
|
|
|
|
Array.prototype.remove = function () {
|
|
var what, a = arguments, L = a.length, ax;
|
|
while (L && this.length) {
|
|
what = a[--L];
|
|
while ((ax = this.indexOf(what)) !== -1) {
|
|
this.splice(ax, 1);
|
|
}
|
|
}
|
|
return this;
|
|
};
|
|
|
|
tablet.webEventReceived.connect(onWebEventReceived);
|
|
startup();
|
|
|
|
Script.scriptEnding.connect(function () {
|
|
Messages.unsubscribe("goTo");
|
|
Menu.removeMenu("Explore");
|
|
tablet.webEventReceived.disconnect(onWebEventReceived);
|
|
Menu.menuItemEvent.disconnect(onMenuItemEvent);
|
|
});
|
|
}());
|