mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-14 00:47:17 +02:00
commit
7612b71455
93 changed files with 148680 additions and 1430 deletions
|
@ -154,18 +154,18 @@ public class EndpointUsersProvider implements UsersProvider {
|
|||
}
|
||||
|
||||
public interface EndpointUsersProviderService {
|
||||
@GET("api/v1/users")
|
||||
@GET("/api/v1/users")
|
||||
Call<UsersResponse> getUsers(@Query("filter") String filter,
|
||||
@Query("per_page") int perPage,
|
||||
@Query("online") Boolean online);
|
||||
|
||||
@DELETE("api/v1/user/connections/{connectionUserName}")
|
||||
@DELETE("/api/v1/user/connections/{connectionUserName}")
|
||||
Call<UsersResponse> removeConnection(@Path("connectionUserName") String connectionUserName);
|
||||
|
||||
@DELETE("api/v1/user/friends/{friendUserName}")
|
||||
@DELETE("/api/v1/user/friends/{friendUserName}")
|
||||
Call<UsersResponse> removeFriend(@Path("friendUserName") String friendUserName);
|
||||
|
||||
@POST("api/v1/user/friends")
|
||||
@POST("/api/v1/user/friends")
|
||||
Call<UsersResponse> addFriend(@Body BodyAddFriend friendUserName);
|
||||
|
||||
/* response
|
||||
|
|
|
@ -169,7 +169,7 @@ public class UserStoryDomainProvider implements DomainProvider {
|
|||
}
|
||||
|
||||
public interface UserStoryDomainProviderService {
|
||||
@GET("api/v1/user_stories")
|
||||
@GET("/api/v1/user_stories")
|
||||
Call<UserStories> getUserStories(@Query("include_actions") String includeActions,
|
||||
@Query("restriction") String restriction,
|
||||
@Query("require_online") boolean requireOnline,
|
||||
|
|
|
@ -14,7 +14,10 @@
|
|||
|
||||
#include <queue>
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
// Work around https://bugreports.qt.io/browse/QTBUG-80990
|
||||
#include <tbb/concurrent_vector.h>
|
||||
#endif
|
||||
|
||||
#include <QtCore/QJsonObject>
|
||||
|
||||
|
|
|
@ -12,7 +12,10 @@
|
|||
#ifndef hifi_AudioMixerSlave_h
|
||||
#define hifi_AudioMixerSlave_h
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
// Work around https://bugreports.qt.io/browse/QTBUG-80990
|
||||
#include <tbb/concurrent_vector.h>
|
||||
#endif
|
||||
|
||||
#include <AABox.h>
|
||||
#include <AudioHRTF.h>
|
||||
|
|
|
@ -8,20 +8,20 @@
|
|||
{
|
||||
"name": "access_token",
|
||||
"label": "Access Token",
|
||||
"help": "This is your OAuth access token to connect this domain-server with your High Fidelity account. <br/>It can be generated by clicking the 'Connect Account' button above.<br/>You can also go to the <a href='https://metaverse.highfidelity.com/user/security' target='_blank'>My Security</a> page of your account and generate a token with the 'domains' scope and paste it here.",
|
||||
"help": "This is your OAuth access token to connect this domain-server with your Metaverse account. <br/>It can be generated by clicking the 'Connect Account' button above.<br/>You can also go to the Security page of your account on your Metaverse Server and generate a token with the 'domains' scope and paste it here.",
|
||||
"advanced": true,
|
||||
"backup": false
|
||||
},
|
||||
{
|
||||
"name": "id",
|
||||
"label": "Domain ID",
|
||||
"help": "This is your High Fidelity domain ID. If you do not want your domain to be registered in the High Fidelity metaverse you can leave this blank.",
|
||||
"help": "This is your Metaverse domain ID. If you do not want your domain to be registered in the Metaverse you can leave this blank.",
|
||||
"advanced": true
|
||||
},
|
||||
{
|
||||
"name": "automatic_networking",
|
||||
"label": "Automatic Networking",
|
||||
"help": "This defines how other nodes in the High Fidelity metaverse will be able to reach your domain-server.<br/>If you don't want to deal with any network settings, use full automatic networking.",
|
||||
"help": "This defines how other nodes in the Metaverse will be able to reach your domain-server.<br/>If you don't want to deal with any network settings, use full automatic networking.",
|
||||
"default": "disabled",
|
||||
"type": "select",
|
||||
"options": [
|
||||
|
@ -35,7 +35,7 @@
|
|||
},
|
||||
{
|
||||
"value": "disabled",
|
||||
"label": "None: use the network information I have entered for this domain at metaverse.highfidelity.com"
|
||||
"label": "None: use the network information I have entered for this domain at in the Metaverse Server."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -50,7 +50,7 @@
|
|||
{
|
||||
"name": "enable_packet_verification",
|
||||
"label": "Enable Packet Verification",
|
||||
"help": "Enable secure checksums on communication that uses the High Fidelity protocol. Increases security with possibly a small performance penalty.",
|
||||
"help": "Enable secure checksums on communication that uses the Metaverse protocol. Increases security with possibly a small performance penalty.",
|
||||
"default": true,
|
||||
"type": "checkbox",
|
||||
"advanced": true
|
||||
|
@ -160,7 +160,7 @@
|
|||
"name": "descriptors",
|
||||
"label": "Description",
|
||||
"restart": false,
|
||||
"help": "This data will be queryable from your server. It may be collected by High Fidelity and used to share your domain with others.",
|
||||
"help": "This data will be queryable from your server. It may be collected by the Metaverse and used to share your domain with others.",
|
||||
"settings": [
|
||||
{
|
||||
"name": "world_name",
|
||||
|
|
|
@ -51,9 +51,9 @@ $.extend(Settings, {
|
|||
var URLs = {
|
||||
// STABLE METAVERSE_URL: https://metaverse.highfidelity.com
|
||||
// STAGING METAVERSE_URL: https://staging.highfidelity.com
|
||||
METAVERSE_URL: 'https://metaverse.highfidelity.com',
|
||||
CDN_URL: 'https://cdn.highfidelity.com',
|
||||
PLACE_URL: 'https://hifi.place',
|
||||
DEFAULT_METAVERSE_URL: "https://metaverse.vircadia.com/live",
|
||||
CDN_URL: 'https://content.vircadia.com/eu-c-1',
|
||||
PLACE_URL: 'https://xr.place'
|
||||
};
|
||||
|
||||
var Strings = {
|
||||
|
@ -61,7 +61,7 @@ var Strings = {
|
|||
|
||||
CHOOSE_DOMAIN_BUTTON: "Choose from my domains",
|
||||
CREATE_DOMAIN_BUTTON: "Create new domain ID",
|
||||
CREATE_DOMAIN_SUCCESS_JUST_CONNECTED: "We connnected your High Fidelity account and created a new domain ID for this machine.",
|
||||
CREATE_DOMAIN_SUCCESS_JUST_CONNECTED: "We connnected your Metaverse account and created a new domain ID for this machine.",
|
||||
CREATE_DOMAIN_SUCCESS: "We created a new domain ID for this machine.",
|
||||
|
||||
// When a place modification fails, they will be brought back to the previous
|
||||
|
@ -92,7 +92,7 @@ var Strings = {
|
|||
ADD_PLACE_LOADING_DIALOG: "Loading your places...",
|
||||
|
||||
ADD_PLACE_NOT_CONNECTED_TITLE: "Access token required",
|
||||
ADD_PLACE_NOT_CONNECTED_MESSAGE: "You must have an access token to query your High Fidelity places.<br><br>Please follow the instructions on the settings page to add an access token.",
|
||||
ADD_PLACE_NOT_CONNECTED_MESSAGE: "You must have an access token to query your Metaverse places.<br><br>Please follow the instructions on the settings page to add an access token.",
|
||||
};
|
||||
|
||||
var DOMAIN_ID_TYPE_NONE = 0;
|
||||
|
@ -230,213 +230,212 @@ function getDomainFromAPI(callback) {
|
|||
|
||||
function chooseFromHighFidelityPlaces(accessToken, forcePathTo, onSuccessfullyAdded) {
|
||||
if (accessToken) {
|
||||
getMetaverseUrl(function(metaverse_url) {
|
||||
|
||||
var loadingDialog = showLoadingDialog(Strings.ADD_PLACE_LOADING_DIALOG);
|
||||
var loadingDialog = showLoadingDialog(Strings.ADD_PLACE_LOADING_DIALOG);
|
||||
|
||||
function loadPlaces() {
|
||||
$.ajax("/api/places", {
|
||||
dataType: 'json',
|
||||
jsonp: false,
|
||||
success: function(data) {
|
||||
if (data.status == 'success') {
|
||||
var modal_buttons = {
|
||||
cancel: {
|
||||
label: Strings.ADD_PLACE_CANCEL_BUTTON,
|
||||
className: 'add-place-cancel-button btn-default'
|
||||
}
|
||||
};
|
||||
|
||||
var dialog;
|
||||
var modal_body;
|
||||
|
||||
if (data.data.places.length) {
|
||||
var places_by_id = {};
|
||||
|
||||
modal_body = $('<div>');
|
||||
|
||||
modal_body.append($("<p>Choose a place name that you own or <a href='" + URLs.METAVERSE_URL + "/user/places' target='_blank'>register a new place name</a></p>"));
|
||||
|
||||
var currentDomainIDType = getCurrentDomainIDType();
|
||||
if (currentDomainIDType === DOMAIN_ID_TYPE_TEMP) {
|
||||
var warning = "<div class='domain-loading-error alert alert-warning'>";
|
||||
warning += "If you choose a place name it will replace your current temporary place name.";
|
||||
warning += "</div>";
|
||||
modal_body.append(warning);
|
||||
}
|
||||
|
||||
// setup a select box for the returned places
|
||||
modal_body.append($("<label for='place-name-select'>Places</label>"));
|
||||
place_select = $("<select id='place-name-select' class='form-control'></select>");
|
||||
_.each(data.data.places, function(place) {
|
||||
places_by_id[place.id] = place;
|
||||
place_select.append("<option value='" + place.id + "'>" + place.name + "</option>");
|
||||
})
|
||||
modal_body.append(place_select);
|
||||
modal_body.append($("<p id='place-name-warning' class='warning-text' style='display: none'>This place name already points to a place or path. Saving this would overwrite the previous settings associated with it.</p>"));
|
||||
|
||||
if (forcePathTo === undefined || forcePathTo === null) {
|
||||
var path = "<div class='form-group'>";
|
||||
path += "<label for='place-path-input' class='control-label'>Path or Viewpoint</label>";
|
||||
path += "<input type='text' id='place-path-input' class='form-control' value='/'>";
|
||||
path += "</div>";
|
||||
modal_body.append($(path));
|
||||
}
|
||||
|
||||
var place_select = modal_body.find("#place-name-select")
|
||||
place_select.change(function(ev) {
|
||||
var warning = modal_body.find("#place-name-warning");
|
||||
var place = places_by_id[$(this).val()];
|
||||
if (place === undefined || place.pointee === null) {
|
||||
warning.hide();
|
||||
} else {
|
||||
warning.show();
|
||||
function loadPlaces() {
|
||||
$.ajax("/api/places", {
|
||||
dataType: 'json',
|
||||
jsonp: false,
|
||||
success: function(data) {
|
||||
if (data.status == 'success') {
|
||||
var modal_buttons = {
|
||||
cancel: {
|
||||
label: Strings.ADD_PLACE_CANCEL_BUTTON,
|
||||
className: 'add-place-cancel-button btn-default'
|
||||
}
|
||||
});
|
||||
place_select.trigger('change');
|
||||
};
|
||||
|
||||
modal_buttons["success"] = {
|
||||
label: Strings.ADD_PLACE_CONFIRM_BUTTON,
|
||||
className: 'add-place-confirm-button btn btn-primary',
|
||||
callback: function() {
|
||||
var placeID = $('#place-name-select').val();
|
||||
// set the place ID on the form
|
||||
$(Settings.place_ID_SELECTOR).val(placeID).change();
|
||||
var dialog;
|
||||
var modal_body;
|
||||
if (data.data.places.length) {
|
||||
var places_by_id = {};
|
||||
|
||||
if (forcePathTo === undefined || forcePathTo === null) {
|
||||
var placePath = $('#place-path-input').val();
|
||||
modal_body = $('<div>');
|
||||
|
||||
modal_body.append($("<p>Choose a place name that you own or <a href='" + metaverse_url + "/user/places' target='_blank'>register a new place name</a></p>"));
|
||||
|
||||
var currentDomainIDType = getCurrentDomainIDType();
|
||||
if (currentDomainIDType === DOMAIN_ID_TYPE_TEMP) {
|
||||
var warning = "<div class='domain-loading-error alert alert-warning'>";
|
||||
warning += "If you choose a place name it will replace your current temporary place name.";
|
||||
warning += "</div>";
|
||||
modal_body.append(warning);
|
||||
}
|
||||
|
||||
// setup a select box for the returned places
|
||||
modal_body.append($("<label for='place-name-select'>Places</label>"));
|
||||
place_select = $("<select id='place-name-select' class='form-control'></select>");
|
||||
_.each(data.data.places, function(place) {
|
||||
places_by_id[place.id] = place;
|
||||
place_select.append("<option value='" + place.id + "'>" + place.name + "</option>");
|
||||
})
|
||||
modal_body.append(place_select);
|
||||
modal_body.append($("<p id='place-name-warning' class='warning-text' style='display: none'>This place name already points to a place or path. Saving this would overwrite the previous settings associated with it.</p>"));
|
||||
|
||||
if (forcePathTo === undefined || forcePathTo === null) {
|
||||
var path = "<div class='form-group'>";
|
||||
path += "<label for='place-path-input' class='control-label'>Path or Viewpoint</label>";
|
||||
path += "<input type='text' id='place-path-input' class='form-control' value='/'>";
|
||||
path += "</div>";
|
||||
modal_body.append($(path));
|
||||
}
|
||||
|
||||
var place_select = modal_body.find("#place-name-select")
|
||||
place_select.change(function(ev) {
|
||||
var warning = modal_body.find("#place-name-warning");
|
||||
var place = places_by_id[$(this).val()];
|
||||
if (place === undefined || place.pointee === null) {
|
||||
warning.hide();
|
||||
} else {
|
||||
var placePath = forcePathTo;
|
||||
warning.show();
|
||||
}
|
||||
});
|
||||
place_select.trigger('change');
|
||||
|
||||
$('.add-place-confirm-button').attr('disabled', 'disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON_PENDING);
|
||||
$('.add-place-cancel-button').attr('disabled', 'disabled');
|
||||
modal_buttons["success"] = {
|
||||
label: Strings.ADD_PLACE_CONFIRM_BUTTON,
|
||||
className: 'add-place-confirm-button btn btn-primary',
|
||||
callback: function() {
|
||||
var placeID = $('#place-name-select').val();
|
||||
// set the place ID on the form
|
||||
$(Settings.place_ID_SELECTOR).val(placeID).change();
|
||||
|
||||
function finalizeSaveDomainID(domainID) {
|
||||
var jsonSettings = {
|
||||
metaverse: {
|
||||
id: domainID
|
||||
}
|
||||
}
|
||||
var dialog = showLoadingDialog("Waiting for Domain Server to restart...");
|
||||
$.ajax('/settings.json', {
|
||||
data: JSON.stringify(jsonSettings),
|
||||
contentType: 'application/json',
|
||||
type: 'POST'
|
||||
}).done(function(data) {
|
||||
if (data.status == "success") {
|
||||
waitForDomainServerRestart(function() {
|
||||
dialog.modal('hide');
|
||||
if (onSuccessfullyAdded) {
|
||||
onSuccessfullyAdded(places_by_id[placeID].name, domainID);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bootbox.alert("Failed to add place");
|
||||
}
|
||||
}).fail(function() {
|
||||
bootbox.alert("Failed to add place");
|
||||
});
|
||||
}
|
||||
|
||||
// If domainID is not specified, the current domain id will be used.
|
||||
function finishSettingUpPlace(domainID) {
|
||||
sendUpdatePlaceRequest(
|
||||
placeID,
|
||||
placePath,
|
||||
domainID,
|
||||
false,
|
||||
function(data) {
|
||||
dialog.modal('hide')
|
||||
if (domainID) {
|
||||
$(Settings.DOMAIN_ID_SELECTOR).val(domainID).change();
|
||||
finalizeSaveDomainID(domainID);
|
||||
} else {
|
||||
if (onSuccessfullyAdded) {
|
||||
onSuccessfullyAdded(places_by_id[placeID].name);
|
||||
}
|
||||
}
|
||||
},
|
||||
function(data) {
|
||||
$('.add-place-confirm-button').removeAttr('disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
|
||||
$('.add-place-cancel-button').removeAttr('disabled');
|
||||
bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function maybeCreateNewDomainID() {
|
||||
console.log("Maybe creating domain id", currentDomainIDType)
|
||||
if (currentDomainIDType === DOMAIN_ID_TYPE_FULL) {
|
||||
finishSettingUpPlace();
|
||||
if (forcePathTo === undefined || forcePathTo === null) {
|
||||
var placePath = $('#place-path-input').val();
|
||||
} else {
|
||||
sendCreateDomainRequest(function(domainID) {
|
||||
console.log("Created domain", domainID);
|
||||
finishSettingUpPlace(domainID);
|
||||
}, function() {
|
||||
$('.add-place-confirm-button').removeAttr('disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
|
||||
$('.add-place-cancel-button').removeAttr('disabled');
|
||||
bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
|
||||
var placePath = forcePathTo;
|
||||
}
|
||||
|
||||
$('.add-place-confirm-button').attr('disabled', 'disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON_PENDING);
|
||||
$('.add-place-cancel-button').attr('disabled', 'disabled');
|
||||
|
||||
function finalizeSaveDomainID(domainID) {
|
||||
var jsonSettings = {
|
||||
metaverse: {
|
||||
id: domainID
|
||||
}
|
||||
}
|
||||
var dialog = showLoadingDialog("Waiting for Domain Server to restart...");
|
||||
$.ajax('/settings.json', {
|
||||
data: JSON.stringify(jsonSettings),
|
||||
contentType: 'application/json',
|
||||
type: 'POST'
|
||||
}).done(function(data) {
|
||||
if (data.status == "success") {
|
||||
waitForDomainServerRestart(function() {
|
||||
dialog.modal('hide');
|
||||
if (onSuccessfullyAdded) {
|
||||
onSuccessfullyAdded(places_by_id[placeID].name, domainID);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bootbox.alert("Failed to add place");
|
||||
}
|
||||
}).fail(function() {
|
||||
bootbox.alert("Failed to add place");
|
||||
});
|
||||
}
|
||||
|
||||
// If domainID is not specified, the current domain id will be used.
|
||||
function finishSettingUpPlace(domainID) {
|
||||
sendUpdatePlaceRequest(
|
||||
placeID,
|
||||
placePath,
|
||||
domainID,
|
||||
false,
|
||||
function(data) {
|
||||
dialog.modal('hide')
|
||||
if (domainID) {
|
||||
$(Settings.DOMAIN_ID_SELECTOR).val(domainID).change();
|
||||
finalizeSaveDomainID(domainID);
|
||||
} else {
|
||||
if (onSuccessfullyAdded) {
|
||||
onSuccessfullyAdded(places_by_id[placeID].name);
|
||||
}
|
||||
}
|
||||
},
|
||||
function(data) {
|
||||
$('.add-place-confirm-button').removeAttr('disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
|
||||
$('.add-place-cancel-button').removeAttr('disabled');
|
||||
bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function maybeCreateNewDomainID() {
|
||||
console.log("Maybe creating domain id", currentDomainIDType)
|
||||
if (currentDomainIDType === DOMAIN_ID_TYPE_FULL) {
|
||||
finishSettingUpPlace();
|
||||
} else {
|
||||
sendCreateDomainRequest(function(domainID) {
|
||||
console.log("Created domain", domainID);
|
||||
finishSettingUpPlace(domainID);
|
||||
}, function() {
|
||||
$('.add-place-confirm-button').removeAttr('disabled');
|
||||
$('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
|
||||
$('.add-place-cancel-button').removeAttr('disabled');
|
||||
bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
maybeCreateNewDomainID();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
maybeCreateNewDomainID();
|
||||
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
modal_buttons["success"] = {
|
||||
label: Strings.ADD_PLACE_NO_PLACES_BUTTON,
|
||||
callback: function() {
|
||||
window.open(metaverse_url + "/user/places", '_blank');
|
||||
}
|
||||
}
|
||||
modal_body = Strings.ADD_PLACE_NO_PLACES_MESSAGE;
|
||||
}
|
||||
dialog = bootbox.dialog({
|
||||
title: Strings.ADD_PLACE_TITLE,
|
||||
message: modal_body,
|
||||
closeButton: false,
|
||||
buttons: modal_buttons,
|
||||
onEscape: true
|
||||
});
|
||||
} else {
|
||||
modal_buttons["success"] = {
|
||||
label: Strings.ADD_PLACE_NO_PLACES_BUTTON,
|
||||
callback: function() {
|
||||
window.open(URLs.METAVERSE_URL + "/user/places", '_blank');
|
||||
}
|
||||
}
|
||||
modal_body = Strings.ADD_PLACE_NO_PLACES_MESSAGE;
|
||||
bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
|
||||
}
|
||||
|
||||
dialog = bootbox.dialog({
|
||||
title: Strings.ADD_PLACE_TITLE,
|
||||
message: modal_body,
|
||||
closeButton: false,
|
||||
buttons: modal_buttons,
|
||||
onEscape: true
|
||||
});
|
||||
} else {
|
||||
},
|
||||
error: function() {
|
||||
bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
|
||||
},
|
||||
complete: function() {
|
||||
loadingDialog.modal('hide');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
|
||||
},
|
||||
complete: function() {
|
||||
loadingDialog.modal('hide');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var domainType = getCurrentDomainIDType();
|
||||
if (domainType !== DOMAIN_ID_TYPE_UNKNOWN) {
|
||||
loadPlaces();
|
||||
} else {
|
||||
getDomainFromAPI(function(data) {
|
||||
if (data.status === 'success') {
|
||||
var domainType = getCurrentDomainIDType();
|
||||
loadPlaces();
|
||||
} else {
|
||||
loadingDialog.modal('hide');
|
||||
bootbox.confirm("We were not able to load your domain information from the Metaverse. Would you like to retry?", function(response) {
|
||||
if (response) {
|
||||
chooseFromHighFidelityPlaces(accessToken, forcePathTo, onSuccessfullyAdded);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var domainType = getCurrentDomainIDType();
|
||||
if (domainType !== DOMAIN_ID_TYPE_UNKNOWN) {
|
||||
loadPlaces();
|
||||
} else {
|
||||
getDomainFromAPI(function(data) {
|
||||
if (data.status === 'success') {
|
||||
var domainType = getCurrentDomainIDType();
|
||||
loadPlaces();
|
||||
} else {
|
||||
loadingDialog.modal('hide');
|
||||
bootbox.confirm("We were not able to load your domain information from the Metaverse. Would you like to retry?", function(response) {
|
||||
if (response) {
|
||||
chooseFromHighFidelityPlaces(accessToken, forcePathTo, onSuccessfullyAdded);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
} else {
|
||||
bootbox.alert({
|
||||
title: Strings.ADD_PLACE_NOT_CONNECTED_TITLE,
|
||||
|
@ -507,8 +506,7 @@ function getMetaverseUrl(callback) {
|
|||
callback(data.metaverse_url);
|
||||
},
|
||||
error: function() {
|
||||
callback(URLs.METAVERSE_URL);
|
||||
callback(URLs.DEFAULT_METAVERSE_URL);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ $(document).ready(function(){
|
|||
|
||||
Settings.extraGroupsAtEnd = Settings.extraDomainGroupsAtEnd;
|
||||
Settings.extraGroupsAtIndex = Settings.extraDomainGroupsAtIndex;
|
||||
var METAVERSE_URL = URLs.METAVERSE_URL;
|
||||
var METAVERSE_URL = URLs.DEFAULT_METAVERSE_URL;
|
||||
|
||||
var SSL_PRIVATE_KEY_FILE_ID = 'ssl-private-key-file';
|
||||
var SSL_PRIVATE_KEY_CONTENTS_ID = 'key-contents';
|
||||
|
@ -277,7 +277,7 @@ $(document).ready(function(){
|
|||
swal({
|
||||
title: '',
|
||||
type: 'error',
|
||||
text: "There was a problem retrieving domain information from High Fidelity API.",
|
||||
text: "There was a problem retrieving domain information from the Metaverse API.",
|
||||
confirmButtonText: 'Try again',
|
||||
showCancelButton: true,
|
||||
closeOnConfirm: false
|
||||
|
@ -306,7 +306,7 @@ $(document).ready(function(){
|
|||
|
||||
if (hasAccessToken) {
|
||||
el = "<p>";
|
||||
el += "<span class='account-connected-header'>High Fidelity Account Connected</span>";
|
||||
el += "<span class='account-connected-header'>Metaverse Account Connected</span>";
|
||||
el += "<button id='" + Settings.DISCONNECT_ACCOUNT_BTN_ID + "' class='btn'>Disconnect</button>";
|
||||
el += "</p>";
|
||||
el = $(el);
|
||||
|
@ -319,7 +319,7 @@ $(document).ready(function(){
|
|||
}
|
||||
buttonSetting.help = "";
|
||||
buttonSetting.classes = "btn-primary";
|
||||
buttonSetting.button_label = "Connect High Fidelity Account";
|
||||
buttonSetting.button_label = "Connect Metaverse Account";
|
||||
buttonSetting.html_id = Settings.CONNECT_ACCOUNT_BTN_ID;
|
||||
|
||||
buttonSetting.href = METAVERSE_URL + "/user/tokens/new?for_domain_server=true";
|
||||
|
@ -713,7 +713,7 @@ $(document).ready(function(){
|
|||
html_id: Settings.PLACES_TABLE_ID,
|
||||
help: "The following places currently point to this domain.</br>To point places to this domain, "
|
||||
+ " go to the <a href='" + METAVERSE_URL + "/user/places'>My Places</a> "
|
||||
+ "page in your High Fidelity Metaverse account.",
|
||||
+ "page in your Metaverse account.",
|
||||
read_only: true,
|
||||
can_add_new_rows: false,
|
||||
columns: [
|
||||
|
@ -997,7 +997,7 @@ $(document).ready(function(){
|
|||
|
||||
if (data.data.domains.length) {
|
||||
// setup a select box for the returned domains
|
||||
modal_body = "<p>Choose the High Fidelity domain you want this domain-server to represent.<br/>This will set your domain ID on the settings page.</p>";
|
||||
modal_body = "<p>Choose the Metaverse domain you want this domain-server to represent.<br/>This will set your domain ID on the settings page.</p>";
|
||||
domain_select = $("<select id='domain-name-select' class='form-control'></select>");
|
||||
_.each(data.data.domains, function(domain){
|
||||
var domainString = "";
|
||||
|
@ -1026,7 +1026,7 @@ $(document).ready(function(){
|
|||
window.open(METAVERSE_URL + "/user/domains", '_blank');
|
||||
}
|
||||
}
|
||||
modal_body = "<p>You do not have any domains in your High Fidelity account." +
|
||||
modal_body = "<p>You do not have any domains in your Metaverse account." +
|
||||
"<br/><br/>Go to your domains page to create a new one. Once your domain is created re-open this dialog to select it.</p>"
|
||||
}
|
||||
|
||||
|
@ -1038,7 +1038,7 @@ $(document).ready(function(){
|
|||
})
|
||||
},
|
||||
error: function() {
|
||||
bootbox.alert("Failed to retrieve your domains from the High Fidelity Metaverse");
|
||||
bootbox.alert("Failed to retrieve your domains from the Metaverse");
|
||||
},
|
||||
complete: function() {
|
||||
// remove the spinner from the choose button
|
||||
|
@ -1049,7 +1049,7 @@ $(document).ready(function(){
|
|||
|
||||
} else {
|
||||
bootbox.alert({
|
||||
message: "You must have an access token to query your High Fidelity domains.<br><br>" +
|
||||
message: "You must have an access token to query your Metaverse domains.<br><br>" +
|
||||
"Please follow the instructions on the settings page to add an access token.",
|
||||
title: "Access token required"
|
||||
})
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
<h4 class="step-title"></h4>
|
||||
<dl class="row">
|
||||
<dd class="col-md-12">
|
||||
<span class='step-description'>By connecting your High Fidelity Account you will be granting access to your account information.</span>
|
||||
<span class='step-description'>By connecting your Metaverse Account you will be granting access to your account information.</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="row">
|
||||
<dd class="col-md-12">
|
||||
<a id="connect-account-btn" role="button" class="btn btn-primary btn-md btn-block" target="_blank">Connect your High Fidelity account</a>
|
||||
<a id="connect-account-btn" role="button" class="btn btn-primary btn-md btn-block" target="_blank">Connect your Metaverse account</a>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
|||
<div class="col-md-12">
|
||||
<span class='step-description'>
|
||||
<a target='_blank' href='https://docs.vircadia.dev/create-and-explore/start-working-in-your-sandbox/place-names'>Place names</a> are similar to web addresses. Users who want to visit your domain can
|
||||
enter its Place Name in High Fidelity's Interface. You can choose a Place Name for your domain.</br>
|
||||
enter its Place Name in Vircadia's Interface. You can choose a Place Name for your domain.</br>
|
||||
Your domain may also be reachable by <b>IP address</b>.
|
||||
</span>
|
||||
</div>
|
||||
|
@ -56,11 +56,11 @@
|
|||
<div class="wizard-step col-md-9 col-centered" style="display: none;">
|
||||
<h4 class="step-title"></h4>
|
||||
<div class="row">
|
||||
<p id="permissions-description" class="col-md-12 step-info"><b>Localhost</b> has been granted administrator privileges to this domain. (Localhost is any</br>user on the same machine as the High Fidelity Server)</p>
|
||||
<p id="permissions-description" class="col-md-12 step-info"><b>Localhost</b> has been granted administrator privileges to this domain. (Localhost is any</br>user on the same machine as the Vircadia Server)</p>
|
||||
</div>
|
||||
<div id="admin-row" class="row">
|
||||
<p class="col-md-6">
|
||||
<span class="step-info"><span id="admin-description"><b>Add your High Fidelity username</b> and any other usernames</span> to grant <span class='wizard-link' data-toggle="tooltip" title="Users who will have all the permissions for this domain.">administrator privileges</span></span>
|
||||
<span class="step-info"><span id="admin-description"><b>Add your Metaverse username</b> and any other usernames</span> to grant <span class='wizard-link' data-toggle="tooltip" title="Users who will have all the permissions for this domain.">administrator privileges</span></span>
|
||||
</p>
|
||||
<div class="col-md-6">
|
||||
<input id="admin-usernames" type="text" class="form-control">
|
||||
|
@ -95,7 +95,7 @@
|
|||
</p>
|
||||
<p class="col-md-5">
|
||||
<label>
|
||||
<input id="connect-logged-in" name="connect-radio" type="radio" value="logged-in"> Users logged into High Fidelity
|
||||
<input id="connect-logged-in" name="connect-radio" type="radio" value="logged-in"> Users logged into the Metaverse
|
||||
</label>
|
||||
</p>
|
||||
<p class="col-md-2">
|
||||
|
@ -126,7 +126,7 @@
|
|||
</p>
|
||||
<p class="col-md-5">
|
||||
<label>
|
||||
<input id="rez-logged-in" name="rez-radio" type="radio" value="logged-in" disabled> Users logged into High Fidelity
|
||||
<input id="rez-logged-in" name="rez-radio" type="radio" value="logged-in" disabled> Users logged into the Metaverse
|
||||
</label>
|
||||
</p>
|
||||
<p class="col-md-2">
|
||||
|
@ -164,14 +164,14 @@
|
|||
<dt class="col-md-4 step-info">Username</dt>
|
||||
<dd class="col-md-8">
|
||||
<input id="http_username" type="text" class="form-control">
|
||||
<span class='help-block'>This does not have to be your High Fidelity username</span>
|
||||
<span class='help-block'>This does not have to be your Metaverse username</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="row">
|
||||
<dt class="col-md-4 step-info">Enter password</dt>
|
||||
<dd class="col-md-8">
|
||||
<input id="http_password" type="password" class="form-control">
|
||||
<span class='help-block'>This should not be the same as your High Fidelity password</span>
|
||||
<span class='help-block'>This should not be the same as your Metaverse password</span>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl id="verify-password-row" class="row">
|
||||
|
@ -262,4 +262,5 @@
|
|||
<script src='/js/bootbox.min.js'></script>
|
||||
<script src='/js/sha256.js'></script>
|
||||
<script src='js/wizard.js'></script>
|
||||
<script src='../js/shared.js'></script>
|
||||
<!--#include virtual="page-end.html"-->
|
||||
|
|
|
@ -2,121 +2,127 @@ var Metaverse = {
|
|||
accessToken: null
|
||||
}
|
||||
|
||||
var CURRENT_METAVERSE_URL;
|
||||
|
||||
var currentStepNumber;
|
||||
|
||||
$(document).ready(function(){
|
||||
Strings.ADD_PLACE_NOT_CONNECTED_MESSAGE = "You must have an access token to query your High Fidelity places.<br><br>" +
|
||||
"Please go back and connect your account.";
|
||||
getMetaverseUrl(function(metaverse_url) {
|
||||
CURRENT_METAVERSE_URL = metaverse_url;
|
||||
|
||||
$('#connect-account-btn').attr('href', URLs.METAVERSE_URL + "/user/tokens/new?for_domain_server=true");
|
||||
Strings.ADD_PLACE_NOT_CONNECTED_MESSAGE = "You must have an access token to query your Metaverse places.<br><br>" +
|
||||
"Please go back and connect your account.";
|
||||
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
$('#connect-account-btn').attr('href', CURRENT_METAVERSE_URL + "/user/tokens/new?for_domain_server=true");
|
||||
|
||||
$('.perms-link').on('click', function() {
|
||||
var modal_body = '<div>';
|
||||
modal_body += '<b>None</b> - No one will have permissions. Only you and the users your have given administrator privileges to will have permissions.</br></br>';
|
||||
modal_body += '<b>Friends</b> - Users who are your Friends in High Fidelity.</br></br>';
|
||||
modal_body += '<b>Users logged into High Fidelity</b> - Users who are currently logged into High Fidelity.</br></br>';
|
||||
modal_body += '<b>Everyone</b> - Anyone who uses High Fidelity.';
|
||||
modal_body += '</div>';
|
||||
$('[data-toggle="tooltip"]').tooltip();
|
||||
|
||||
dialog = bootbox.dialog({
|
||||
title: "User definition",
|
||||
message: modal_body,
|
||||
closeButton: true
|
||||
});
|
||||
return false;
|
||||
});
|
||||
$('.perms-link').on('click', function() {
|
||||
var modal_body = '<div>';
|
||||
modal_body += '<b>None</b> - No one will have permissions. Only you and the users your have given administrator privileges to will have permissions.</br></br>';
|
||||
modal_body += '<b>Friends</b> - Users who are your Friends in the Metaverse.</br></br>';
|
||||
modal_body += '<b>Users logged into the Metaverse</b> - Users who are currently logged into the Metaverse.</br></br>';
|
||||
modal_body += '<b>Everyone</b> - Anyone who uses the Metaverse.';
|
||||
modal_body += '</div>';
|
||||
|
||||
$('body').on('click', '.next-button', function() {
|
||||
goToNextStep();
|
||||
});
|
||||
|
||||
$('body').on('click', '.back-button', function() {
|
||||
goToPreviousStep();
|
||||
});
|
||||
|
||||
$('body').on('click', '#skip-wizard-button', function() {
|
||||
skipWizard();
|
||||
})
|
||||
|
||||
$('body').on('click', '#connect-account-btn', function() {
|
||||
$(this).blur();
|
||||
prepareAccessTokenPrompt(function(accessToken) {
|
||||
Metaverse.accessToken = accessToken;
|
||||
saveAccessToken();
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '#save-permissions', function() {
|
||||
savePermissions();
|
||||
});
|
||||
|
||||
function triggerSaveUsernamePassword(event) {
|
||||
if (event.keyCode === 13) {
|
||||
$("#save-username-password").click();
|
||||
}
|
||||
}
|
||||
$("#http_username").keyup(triggerSaveUsernamePassword);
|
||||
$("#http_password").keyup(triggerSaveUsernamePassword);
|
||||
$("#verify_http_password").keyup(triggerSaveUsernamePassword);
|
||||
$('body').on('click', '#save-username-password', function() {
|
||||
saveUsernamePassword();
|
||||
});
|
||||
|
||||
$('body').on('click', '#change-place-name', function() {
|
||||
chooseFromHighFidelityPlaces(Settings.data.values.metaverse.access_token, "/0,-10,0", function(placeName) {
|
||||
updatePlaceNameLink(placeName);
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '#visit-domain', function() {
|
||||
$('#share-link')[0].click();
|
||||
});
|
||||
|
||||
$('input[type=radio][name=connect-radio]').change(function() {
|
||||
var inputs = $('input[type=radio][name=rez-radio]');
|
||||
var disabled = [];
|
||||
|
||||
switch (this.value) {
|
||||
case 'none':
|
||||
disabled = inputs.splice(1);
|
||||
break;
|
||||
case 'friends':
|
||||
disabled = inputs.splice(2);
|
||||
break;
|
||||
case 'logged-in':
|
||||
disabled = inputs.splice(3);
|
||||
break;
|
||||
case 'everyone':
|
||||
disabled = inputs.splice(4);
|
||||
break;
|
||||
}
|
||||
|
||||
$.each(inputs, function() {
|
||||
$(this).prop('disabled', false);
|
||||
});
|
||||
$.each(disabled, function() {
|
||||
if ($(this).prop('checked')) {
|
||||
$(inputs.last()).prop('checked', true);
|
||||
}
|
||||
$(this).prop('disabled', true);
|
||||
});
|
||||
});
|
||||
|
||||
reloadSettings(function(success) {
|
||||
if (success) {
|
||||
getDomainFromAPI();
|
||||
setupWizardSteps();
|
||||
updatePlaceNameDisplay();
|
||||
updateUsernameDisplay();
|
||||
} else {
|
||||
swal({
|
||||
title: '',
|
||||
type: 'error',
|
||||
text: "There was a problem loading the domain settings.\nPlease refresh the page to try again.",
|
||||
dialog = bootbox.dialog({
|
||||
title: "User definition",
|
||||
message: modal_body,
|
||||
closeButton: true
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$('body').on('click', '.next-button', function() {
|
||||
goToNextStep();
|
||||
});
|
||||
|
||||
$('body').on('click', '.back-button', function() {
|
||||
goToPreviousStep();
|
||||
});
|
||||
|
||||
$('body').on('click', '#skip-wizard-button', function() {
|
||||
skipWizard();
|
||||
})
|
||||
|
||||
$('body').on('click', '#connect-account-btn', function() {
|
||||
$(this).blur();
|
||||
prepareAccessTokenPrompt(function(accessToken) {
|
||||
Metaverse.accessToken = accessToken;
|
||||
saveAccessToken();
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '#save-permissions', function() {
|
||||
savePermissions();
|
||||
});
|
||||
|
||||
function triggerSaveUsernamePassword(event) {
|
||||
if (event.keyCode === 13) {
|
||||
$("#save-username-password").click();
|
||||
}
|
||||
}
|
||||
$("#http_username").keyup(triggerSaveUsernamePassword);
|
||||
$("#http_password").keyup(triggerSaveUsernamePassword);
|
||||
$("#verify_http_password").keyup(triggerSaveUsernamePassword);
|
||||
$('body').on('click', '#save-username-password', function() {
|
||||
saveUsernamePassword();
|
||||
});
|
||||
|
||||
$('body').on('click', '#change-place-name', function() {
|
||||
chooseFromHighFidelityPlaces(Settings.data.values.metaverse.access_token, "/0,-10,0", function(placeName) {
|
||||
updatePlaceNameLink(placeName);
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '#visit-domain', function() {
|
||||
$('#share-link')[0].click();
|
||||
});
|
||||
|
||||
$('input[type=radio][name=connect-radio]').change(function() {
|
||||
var inputs = $('input[type=radio][name=rez-radio]');
|
||||
var disabled = [];
|
||||
|
||||
switch (this.value) {
|
||||
case 'none':
|
||||
disabled = inputs.splice(1);
|
||||
break;
|
||||
case 'friends':
|
||||
disabled = inputs.splice(2);
|
||||
break;
|
||||
case 'logged-in':
|
||||
disabled = inputs.splice(3);
|
||||
break;
|
||||
case 'everyone':
|
||||
disabled = inputs.splice(4);
|
||||
break;
|
||||
}
|
||||
|
||||
$.each(inputs, function() {
|
||||
$(this).prop('disabled', false);
|
||||
});
|
||||
$.each(disabled, function() {
|
||||
if ($(this).prop('checked')) {
|
||||
$(inputs.last()).prop('checked', true);
|
||||
}
|
||||
$(this).prop('disabled', true);
|
||||
});
|
||||
});
|
||||
|
||||
reloadSettings(function(success) {
|
||||
if (success) {
|
||||
getDomainFromAPI();
|
||||
setupWizardSteps();
|
||||
updatePlaceNameDisplay();
|
||||
updateUsernameDisplay();
|
||||
} else {
|
||||
swal({
|
||||
title: '',
|
||||
type: 'error',
|
||||
text: "There was a problem loading the domain settings.\nPlease refresh the page to try again.",
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -142,7 +148,7 @@ function setupWizardSteps() {
|
|||
});
|
||||
|
||||
$('#permissions-description').html('You <span id="username-display"></span>have been assigned administrator privileges to this domain.');
|
||||
$('#admin-description').html('Add more High Fidelity usernames');
|
||||
$('#admin-description').html('Add more Metaverse usernames');
|
||||
} else {
|
||||
$('.cloud-only').remove();
|
||||
$('#save-permissions').text("Finish");
|
||||
|
@ -171,7 +177,7 @@ function updatePlaceNameLink(address) {
|
|||
|
||||
function updatePlaceNameDisplay() {
|
||||
if (Settings.data.values.metaverse.id) {
|
||||
$.getJSON(URLs.METAVERSE_URL + '/api/v1/domains/' + Settings.data.values.metaverse.id, function(data) {
|
||||
$.getJSON(CURRENT_METAVERSE_URL + '/api/v1/domains/' + Settings.data.values.metaverse.id, function(data) {
|
||||
|
||||
if (data.status === 'success') {
|
||||
if (data.domain.default_place_name) {
|
||||
|
|
|
@ -821,7 +821,7 @@ void DomainGatekeeper::requestUserPublicKey(const QString& username, bool isOpti
|
|||
callbackParams.errorCallbackMethod = "publicKeyJSONErrorCallback";
|
||||
|
||||
|
||||
const QString USER_PUBLIC_KEY_PATH = "api/v1/users/%1/public_key";
|
||||
const QString USER_PUBLIC_KEY_PATH = "/api/v1/users/%1/public_key";
|
||||
|
||||
qDebug().nospace() << "Requesting " << (isOptimistic ? "optimistic " : " ") << "public key for user " << username;
|
||||
|
||||
|
@ -1048,7 +1048,7 @@ void DomainGatekeeper::getGroupMemberships(const QString& username) {
|
|||
callbackParams.jsonCallbackMethod = "getIsGroupMemberJSONCallback";
|
||||
callbackParams.errorCallbackMethod = "getIsGroupMemberErrorCallback";
|
||||
|
||||
const QString GET_IS_GROUP_MEMBER_PATH = "api/v1/groups/members/%2";
|
||||
const QString GET_IS_GROUP_MEMBER_PATH = "/api/v1/groups/members/%2";
|
||||
DependencyManager::get<AccountManager>()->sendRequest(GET_IS_GROUP_MEMBER_PATH.arg(username),
|
||||
AccountManagerAuth::Required,
|
||||
QNetworkAccessManager::PostOperation, callbackParams,
|
||||
|
@ -1114,7 +1114,7 @@ void DomainGatekeeper::getDomainOwnerFriendsList() {
|
|||
callbackParams.jsonCallbackMethod = "getDomainOwnerFriendsListJSONCallback";
|
||||
callbackParams.errorCallbackMethod = "getDomainOwnerFriendsListErrorCallback";
|
||||
|
||||
const QString GET_FRIENDS_LIST_PATH = "api/v1/user/friends";
|
||||
const QString GET_FRIENDS_LIST_PATH = "/api/v1/user/friends";
|
||||
if (DependencyManager::get<AccountManager>()->hasValidAccessToken()) {
|
||||
DependencyManager::get<AccountManager>()->sendRequest(GET_FRIENDS_LIST_PATH, AccountManagerAuth::Required,
|
||||
QNetworkAccessManager::GetOperation, callbackParams, QByteArray(),
|
||||
|
@ -1196,7 +1196,7 @@ Node::LocalID DomainGatekeeper::findOrCreateLocalID(const QUuid& uuid) {
|
|||
return existingLocalIDIt->second;
|
||||
}
|
||||
|
||||
assert(_localIDs.size() < std::numeric_limits<LocalIDs::value_type>::max() - 2);
|
||||
assert(_localIDs.size() < (size_t)(std::numeric_limits<LocalIDs::value_type>::max() - 2));
|
||||
|
||||
Node::LocalID newLocalID;
|
||||
do {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Stephen Birarda on 9/26/13.
|
||||
// Copyright 2013 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -118,7 +119,7 @@ bool DomainServer::forwardMetaverseAPIRequest(HTTPConnection* connection,
|
|||
root.insert(requestSubobjectKey, subobject);
|
||||
QJsonDocument doc { root };
|
||||
|
||||
QUrl url{ MetaverseAPI::getCurrentMetaverseServerURL().toString() + metaversePath };
|
||||
QUrl url { MetaverseAPI::getCurrentMetaverseServerURL().toString() + metaversePath };
|
||||
|
||||
QNetworkRequest req(url);
|
||||
req.setHeader(QNetworkRequest::UserAgentHeader, NetworkingConstants::VIRCADIA_USER_AGENT);
|
||||
|
@ -1156,7 +1157,7 @@ QUrl DomainServer::oauthAuthorizationURL(const QUuid& stateUUID) {
|
|||
QUrl authorizationURL = _oauthProviderURL;
|
||||
|
||||
const QString OAUTH_AUTHORIZATION_PATH = "/oauth/authorize";
|
||||
authorizationURL.setPath(OAUTH_AUTHORIZATION_PATH);
|
||||
authorizationURL.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + OAUTH_AUTHORIZATION_PATH);
|
||||
|
||||
QUrlQuery authorizationQuery;
|
||||
|
||||
|
@ -1434,7 +1435,7 @@ void DomainServer::sendPendingTransactionsToServer() {
|
|||
transactionCallbackParams.jsonCallbackMethod = "transactionJSONCallback";
|
||||
|
||||
while (i != _pendingAssignmentCredits.end()) {
|
||||
accountManager->sendRequest("api/v1/transactions",
|
||||
accountManager->sendRequest("/api/v1/transactions",
|
||||
AccountManagerAuth::Required,
|
||||
QNetworkAccessManager::PostOperation,
|
||||
transactionCallbackParams, i.value()->postJson().toJson());
|
||||
|
@ -1620,7 +1621,7 @@ void DomainServer::sendICEServerAddressToMetaverseAPI() {
|
|||
callbackParameters.errorCallbackMethod = "handleFailedICEServerAddressUpdate";
|
||||
callbackParameters.jsonCallbackMethod = "handleSuccessfulICEServerAddressUpdate";
|
||||
|
||||
qCDebug(domain_server_ice) << "Updating ice-server address in High Fidelity Metaverse API to"
|
||||
qCDebug(domain_server_ice) << "Updating ice-server address in Metaverse API to"
|
||||
<< (_iceServerSocket.isNull() ? "" : _iceServerSocket.getAddress().toString());
|
||||
|
||||
static const QString DOMAIN_ICE_ADDRESS_UPDATE = "/api/v1/domains/%1/ice_server_address";
|
||||
|
@ -1979,6 +1980,7 @@ const QString URI_OAUTH = "/oauth";
|
|||
bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url, bool skipSubHandler) {
|
||||
const QString JSON_MIME_TYPE = "application/json";
|
||||
|
||||
const QString URI_ID = "/id";
|
||||
const QString URI_ASSIGNMENT = "/assignment";
|
||||
const QString URI_NODES = "/nodes";
|
||||
const QString URI_SETTINGS = "/settings";
|
||||
|
@ -2055,7 +2057,6 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
|
|||
}
|
||||
|
||||
// check if this is a request for our domain ID
|
||||
const QString URI_ID = "/id";
|
||||
if (connection->requestOperation() == QNetworkAccessManager::GetOperation
|
||||
&& url.path() == URI_ID) {
|
||||
QUuid domainID = nodeList->getSessionUUID();
|
||||
|
@ -2562,7 +2563,7 @@ bool DomainServer::handleHTTPSRequest(HTTPSConnection* connection, const QUrl &u
|
|||
|
||||
const QString OAUTH_TOKEN_REQUEST_PATH = "/oauth/token";
|
||||
QUrl tokenRequestUrl = _oauthProviderURL;
|
||||
tokenRequestUrl.setPath(OAUTH_TOKEN_REQUEST_PATH);
|
||||
tokenRequestUrl.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + OAUTH_TOKEN_REQUEST_PATH);
|
||||
|
||||
const QString OAUTH_GRANT_TYPE_POST_STRING = "grant_type=authorization_code";
|
||||
QString tokenPostBody = OAUTH_GRANT_TYPE_POST_STRING;
|
||||
|
@ -2876,7 +2877,7 @@ QNetworkReply* DomainServer::profileRequestGivenTokenReply(QNetworkReply* tokenR
|
|||
|
||||
// fire off a request to get this user's identity so we can see if we will let them in
|
||||
QUrl profileURL = _oauthProviderURL;
|
||||
profileURL.setPath("/api/v1/user/profile");
|
||||
profileURL.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + "/api/v1/user/profile");
|
||||
profileURL.setQuery(QString("%1=%2").arg(OAUTH_JSON_ACCESS_TOKEN_KEY, accessToken));
|
||||
|
||||
qDebug() << "Sending profile request to: " << profileURL;
|
||||
|
@ -3725,7 +3726,7 @@ void DomainServer::screensharePresence(QString roomname, QUuid avatarID, int exp
|
|||
callbackData.insert("roomname", roomname);
|
||||
callbackData.insert("avatarID", avatarID.toString());
|
||||
callbackParams.callbackData = callbackData;
|
||||
const QString PATH = "api/v1/domains/%1/screenshare";
|
||||
const QString PATH = "/api/v1/domains/%1/screenshare";
|
||||
QString domain_id = uuidStringWithoutCurlyBraces(getID());
|
||||
QJsonObject json, screenshare;
|
||||
screenshare["username"] = verifiedUsername;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Stephen Birarda on 2014-06-24.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -1998,7 +1999,7 @@ void DomainServerSettingsManager::apiGetGroupID(const QString& groupName) {
|
|||
callbackParams.jsonCallbackMethod = "apiGetGroupIDJSONCallback";
|
||||
callbackParams.errorCallbackMethod = "apiGetGroupIDErrorCallback";
|
||||
|
||||
const QString GET_GROUP_ID_PATH = "api/v1/groups/names/%1";
|
||||
const QString GET_GROUP_ID_PATH = "/api/v1/groups/names/%1";
|
||||
DependencyManager::get<AccountManager>()->sendRequest(GET_GROUP_ID_PATH.arg(groupName),
|
||||
AccountManagerAuth::Required,
|
||||
QNetworkAccessManager::GetOperation, callbackParams);
|
||||
|
@ -2064,7 +2065,7 @@ void DomainServerSettingsManager::apiGetGroupRanks(const QUuid& groupID) {
|
|||
callbackParams.jsonCallbackMethod = "apiGetGroupRanksJSONCallback";
|
||||
callbackParams.errorCallbackMethod = "apiGetGroupRanksErrorCallback";
|
||||
|
||||
const QString GET_GROUP_RANKS_PATH = "api/v1/groups/%1/ranks";
|
||||
const QString GET_GROUP_RANKS_PATH = "/api/v1/groups/%1/ranks";
|
||||
DependencyManager::get<AccountManager>()->sendRequest(GET_GROUP_RANKS_PATH.arg(groupID.toString().mid(1,36)),
|
||||
AccountManagerAuth::Required,
|
||||
QNetworkAccessManager::GetOperation, callbackParams);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Stephen Birarda on 2014-06-24.
|
||||
// Copyright 2014 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -108,7 +109,7 @@ public:
|
|||
QStringList getDomainServerGroupNames();
|
||||
QStringList getDomainServerBlacklistGroupNames();
|
||||
|
||||
// these are used to locally cache the result of calling "api/v1/groups/.../is_member/..." on metaverse's api
|
||||
// these are used to locally cache the result of calling "/api/v1/groups/.../is_member/..." on metaverse's api
|
||||
void clearGroupMemberships(const QString& name) { _groupMembership[name.toLower()].clear(); }
|
||||
void recordGroupMembership(const QString& name, const QUuid groupID, QUuid rankID);
|
||||
QUuid isGroupMember(const QString& name, const QUuid& groupID); // returns rank or -1 if not a member
|
||||
|
|
|
@ -211,8 +211,15 @@ void IceServer::requestDomainPublicKey(const QUuid& domainID) {
|
|||
auto& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
|
||||
QUrl publicKeyURL{ MetaverseAPI::getCurrentMetaverseServerURL() };
|
||||
// qDebug() << "publicKeyURL" << publicKeyURL;
|
||||
// qDebug() << "MetaverseAPI::getCurrentMetaverseServerURLPath()" << MetaverseAPI::getCurrentMetaverseServerURLPath();
|
||||
QString publicKeyPath = QString("/api/v1/domains/%1/public_key").arg(uuidStringWithoutCurlyBraces(domainID));
|
||||
publicKeyURL.setPath(publicKeyPath);
|
||||
publicKeyURL.setPath("/" + MetaverseAPI::getCurrentMetaverseServerURLPath() + publicKeyPath);
|
||||
// qDebug() << "publicKeyPath" << publicKeyPath;
|
||||
// qDebug() << "publicKeyURL.setPath" << "/" + MetaverseAPI::getCurrentMetaverseServerURLPath() + publicKeyPath;
|
||||
// qDebug() << "publicKeyURL" << publicKeyURL;
|
||||
// qDebug() << "publicKeyURL.isValid()" << publicKeyURL.isValid();
|
||||
// qDebug() << "publicKeyURL.errorString()" << publicKeyURL.errorString();
|
||||
|
||||
QNetworkRequest publicKeyRequest { publicKeyURL };
|
||||
publicKeyRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
|
|
|
@ -148,7 +148,7 @@ Windows.ScrollingWindow {
|
|||
}
|
||||
|
||||
function canAddToWorld(path) {
|
||||
var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i, /\.gltf\b/i];
|
||||
var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i, /\.gltf\b/i, /\.glb\b/i];
|
||||
|
||||
if (selectedItemCount > 1) {
|
||||
return false;
|
||||
|
|
|
@ -148,7 +148,7 @@ Rectangle {
|
|||
}
|
||||
|
||||
function canAddToWorld(path) {
|
||||
var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i, /\.gltf\b/i];
|
||||
var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i, /\.gltf\b/i, /\.glb\b/i];
|
||||
|
||||
if (selectedItemCount > 1) {
|
||||
return false;
|
||||
|
|
|
@ -7123,7 +7123,7 @@ void Application::updateWindowTitle() const {
|
|||
|
||||
QString metaverseDetails;
|
||||
if (isMetaverseLoggedIn) {
|
||||
metaverseDetails = " (Metaverse: Logged in as " + metaverseUsername + ")";
|
||||
metaverseDetails = " (Metaverse: Connected to " + MetaverseAPI::getCurrentMetaverseServerURL().toString() + " as " + metaverseUsername + ")";
|
||||
} else {
|
||||
metaverseDetails = " (Metaverse: Not Logged In)";
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Gabriel Calero on 9/28/18.
|
||||
// Copyright 2015 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -12,4 +13,4 @@
|
|||
#pragma once
|
||||
#include <QString>
|
||||
|
||||
static const QString API_SIGNUP_PATH = "api/v1/users";
|
||||
static const QString API_SIGNUP_PATH = "/api/v1/users";
|
||||
|
|
|
@ -168,6 +168,7 @@ const btCollisionShape* OtherAvatar::createCollisionShape(int32_t jointIndex, bo
|
|||
}
|
||||
// Note: MultiSphereLow case really means: "skip fingers and use spheres for hands,
|
||||
// else fall through to MultiSphereHigh case"
|
||||
/* fall-thru */
|
||||
case BodyLOD::MultiSphereHigh:
|
||||
computeDetailedShapeInfo(shapeInfo, jointIndex);
|
||||
break;
|
||||
|
|
|
@ -30,7 +30,7 @@ QNetworkRequest createNetworkRequest() {
|
|||
QNetworkRequest request;
|
||||
|
||||
QUrl requestURL = MetaverseAPI::getCurrentMetaverseServerURL();
|
||||
requestURL.setPath(USER_ACTIVITY_URL);
|
||||
requestURL.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + USER_ACTIVITY_URL);
|
||||
|
||||
request.setUrl(requestURL);
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ void ScreenshareScriptingInterface::requestScreenshareInfo() {
|
|||
// See `DomainServer::screensharePresence()` for more info about that.
|
||||
|
||||
QString currentDomainID = uuidStringWithoutCurlyBraces(addressManager->getDomainID());
|
||||
QString requestURLPath = "api/v1/domains/%1/screenshare";
|
||||
QString requestURLPath = "/api/v1/domains/%1/screenshare";
|
||||
JSONCallbackParameters callbackParams;
|
||||
callbackParams.callbackReceiver = this;
|
||||
callbackParams.jsonCallbackMethod = "handleSuccessfulScreenshareInfoGet";
|
||||
|
|
|
@ -172,7 +172,7 @@ void LoginDialog::linkOculus() {
|
|||
callbackParams.callbackReceiver = this;
|
||||
callbackParams.jsonCallbackMethod = "linkCompleted";
|
||||
callbackParams.errorCallbackMethod = "linkFailed";
|
||||
const QString LINK_OCULUS_PATH = "api/v1/user/oculus/link";
|
||||
const QString LINK_OCULUS_PATH = "/api/v1/user/oculus/link";
|
||||
|
||||
QJsonObject payload;
|
||||
payload["oculus_nonce"] = nonce;
|
||||
|
@ -200,7 +200,7 @@ void LoginDialog::createAccountFromOculus(QString email, QString username, QStri
|
|||
callbackParams.jsonCallbackMethod = "createCompleted";
|
||||
callbackParams.errorCallbackMethod = "createFailed";
|
||||
|
||||
const QString CREATE_ACCOUNT_FROM_OCULUS_PATH = "api/v1/user/oculus/create";
|
||||
const QString CREATE_ACCOUNT_FROM_OCULUS_PATH = "/api/v1/user/oculus/create";
|
||||
|
||||
QJsonObject payload;
|
||||
payload["oculus_nonce"] = nonce;
|
||||
|
@ -251,7 +251,7 @@ void LoginDialog::linkSteam() {
|
|||
callbackParams.jsonCallbackMethod = "linkCompleted";
|
||||
callbackParams.errorCallbackMethod = "linkFailed";
|
||||
|
||||
const QString LINK_STEAM_PATH = "api/v1/user/steam/link";
|
||||
const QString LINK_STEAM_PATH = "/api/v1/user/steam/link";
|
||||
|
||||
QJsonObject payload;
|
||||
payload["steam_auth_ticket"] = QJsonValue::fromVariant(QVariant(ticket));
|
||||
|
@ -278,7 +278,7 @@ void LoginDialog::createAccountFromSteam(QString username) {
|
|||
callbackParams.jsonCallbackMethod = "createCompleted";
|
||||
callbackParams.errorCallbackMethod = "createFailed";
|
||||
|
||||
const QString CREATE_ACCOUNT_FROM_STEAM_PATH = "api/v1/user/steam/create";
|
||||
const QString CREATE_ACCOUNT_FROM_STEAM_PATH = "/api/v1/user/steam/create";
|
||||
|
||||
QJsonObject payload;
|
||||
payload["steam_auth_ticket"] = QJsonValue::fromVariant(QVariant(ticket));
|
||||
|
|
|
@ -424,6 +424,7 @@ void OctreeStatsDialog::showOctreeServersOfType(NodeType_t serverType) {
|
|||
extraDetails << "<br/>" << itemInfo.caption << " " << stats.getItemValue(item);
|
||||
}
|
||||
} // fall through... since MOST has all of MORE
|
||||
/* fall-thru */
|
||||
case MORE: {
|
||||
QString totalString = locale.toString((uint)stats.getTotalElements());
|
||||
QString internalString = locale.toString((uint)stats.getTotalInternal());
|
||||
|
|
|
@ -154,7 +154,6 @@ protected:
|
|||
std::mutex _materialsLock;
|
||||
|
||||
quint64 _created;
|
||||
QUuid _entityID;
|
||||
|
||||
// The base class relies on comparing the model transform to the entity transform in order
|
||||
// to trigger an update, so the member must not be visible to derived classes as a modifiable
|
||||
|
@ -164,6 +163,8 @@ protected:
|
|||
// i.e. to see if the rendering code needs to update because of a change in state of the
|
||||
// entity. This forces all the rendering code itself to be independent of the entity
|
||||
const EntityItemPointer _entity;
|
||||
|
||||
QUuid _entityID;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -166,7 +166,7 @@ void ParticleEffectEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEn
|
|||
particleUniforms.rotateWithEntity = _particleProperties.rotateWithEntity ? 1 : 0;
|
||||
});
|
||||
// Update particle uniforms
|
||||
memcpy(&_uniformBuffer.edit<ParticleUniforms>(), &particleUniforms, sizeof(ParticleUniforms));
|
||||
_uniformBuffer.edit<ParticleUniforms>() = particleUniforms;
|
||||
}
|
||||
|
||||
ItemKey ParticleEffectEntityRenderer::getKey() {
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Brad Hefta-Gaub on 12/4/13.
|
||||
// Copyright 2013 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -1040,7 +1041,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
|||
* @property {boolean} groupCulled=false - <code>true</code> if the mesh parts of the model are LOD culled as a group,
|
||||
* <code>false</code> if separate mesh parts are LOD culled individually.
|
||||
*
|
||||
* @example <caption>Rez a Vive tracker puck.</caption>
|
||||
* @example <caption>Rez a cowboy hat.</caption>
|
||||
* var entity = Entities.addEntity({
|
||||
* type: "Model",
|
||||
* position: Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, { x: 0, y: 0.75, z: -2 })),
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Brad Hefta-Gaub on 12/4/13.
|
||||
// Copyright 2013 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -1492,7 +1493,7 @@ void EntityTree::startDynamicDomainVerificationOnServer(float minimumAgeToRemove
|
|||
networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
QUrl requestURL = MetaverseAPI::getCurrentMetaverseServerURL();
|
||||
requestURL.setPath("/api/v1/commerce/proof_of_purchase_status/location");
|
||||
requestURL.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + "/api/v1/commerce/proof_of_purchase_status/location");
|
||||
QJsonObject request;
|
||||
request["certificate_id"] = certificateID;
|
||||
networkRequest.setUrl(requestURL);
|
||||
|
@ -1724,7 +1725,7 @@ void EntityTree::validatePop(const QString& certID, const EntityItemID& entityIt
|
|||
networkRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
QUrl requestURL = MetaverseAPI::getCurrentMetaverseServerURL();
|
||||
requestURL.setPath("/api/v1/commerce/proof_of_purchase_status/transfer");
|
||||
requestURL.setPath(MetaverseAPI::getCurrentMetaverseServerURLPath() + "/api/v1/commerce/proof_of_purchase_status/transfer");
|
||||
QJsonObject request;
|
||||
request["certificate_id"] = certID;
|
||||
networkRequest.setUrl(requestURL);
|
||||
|
|
|
@ -378,10 +378,10 @@ protected:
|
|||
TransformCamera _cams[2];
|
||||
|
||||
Cameras(){};
|
||||
Cameras(const TransformCamera& cam) { memcpy(_cams, &cam, sizeof(TransformCamera)); };
|
||||
Cameras(const TransformCamera& cam) { _cams[0] = cam; };
|
||||
Cameras(const TransformCamera& camL, const TransformCamera& camR) {
|
||||
memcpy(_cams, &camL, sizeof(TransformCamera));
|
||||
memcpy(_cams + 1, &camR, sizeof(TransformCamera));
|
||||
_cams[0] = camL;
|
||||
_cams[1] = camR;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -331,8 +331,7 @@ void GLBackend::do_setStateBlendFactor(const Batch& batch, size_t paramOffset) {
|
|||
|
||||
void GLBackend::do_setStateScissorRect(const Batch& batch, size_t paramOffset) {
|
||||
Vec4i rect;
|
||||
memcpy(&rect, batch.readData(batch._params[paramOffset]._uint), sizeof(Vec4i));
|
||||
|
||||
memcpy(glm::value_ptr(rect), batch.readData(batch._params[paramOffset]._uint), sizeof(Vec4i));
|
||||
if (_stereo.isStereo()) {
|
||||
rect.z /= 2;
|
||||
if (_stereo._pass) {
|
||||
|
|
|
@ -24,7 +24,7 @@ void GLBackend::do_setViewTransform(const Batch& batch, size_t paramOffset) {
|
|||
}
|
||||
|
||||
void GLBackend::do_setProjectionTransform(const Batch& batch, size_t paramOffset) {
|
||||
memcpy(&_transform._projection, batch.readData(batch._params[paramOffset]._uint), sizeof(Mat4));
|
||||
memcpy(glm::value_ptr(_transform._projection), batch.readData(batch._params[paramOffset]._uint), sizeof(Mat4));
|
||||
_transform._invalidProj = true;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ void GLBackend::do_setProjectionJitter(const Batch& batch, size_t paramOffset) {
|
|||
}
|
||||
|
||||
void GLBackend::do_setViewportTransform(const Batch& batch, size_t paramOffset) {
|
||||
memcpy(&_transform._viewport, batch.readData(batch._params[paramOffset]._uint), sizeof(Vec4i));
|
||||
memcpy(glm::value_ptr(_transform._viewport), batch.readData(batch._params[paramOffset]._uint), sizeof(Vec4i));
|
||||
|
||||
#ifdef GPU_STEREO_DRAWCALL_INSTANCED
|
||||
{
|
||||
|
|
|
@ -440,6 +440,7 @@ QVector<glm::uint32> scriptable::ScriptableMeshPart::getFace(glm::uint32 faceInd
|
|||
if (faceIndex < getNumFaces()) {
|
||||
return getIndices().mid(faceIndex * getTopologyLength(), getTopologyLength());
|
||||
}
|
||||
/* fall-thru */
|
||||
default: return QVector<glm::uint32>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,10 +99,10 @@ public:
|
|||
const size_t offsetHL = hiCoords.x + loCoords.y * _lineStride;
|
||||
const size_t offsetLH = loCoords.x + hiCoords.y * _lineStride;
|
||||
const size_t offsetHH = hiCoords.x + hiCoords.y * _lineStride;
|
||||
assert(offsetLL >= 0 && offsetLL < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetHL >= 0 && offsetHL < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetLH >= 0 && offsetLH < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetHH >= 0 && offsetHH < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetLL < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetHL < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetLH < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
assert(offsetHH < _lineStride * (_dims.y + 2 * EDGE_WIDTH));
|
||||
glm::vec4 colorLL = pixels[offsetLL];
|
||||
glm::vec4 colorHL = pixels[offsetHL];
|
||||
glm::vec4 colorLH = pixels[offsetLH];
|
||||
|
|
|
@ -15,7 +15,12 @@
|
|||
#include <controllers/InputDevice.h>
|
||||
#include "InputPlugin.h"
|
||||
#include <QtGui/qtouchdevice.h>
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
|
||||
#include <QtGui/QList>
|
||||
#else
|
||||
#include <QTouchEvent>
|
||||
#include <QtCore/QList>
|
||||
#endif
|
||||
#include "VirtualPadManager.h"
|
||||
|
||||
class QTouchEvent;
|
||||
|
|
|
@ -223,12 +223,14 @@ public:
|
|||
};
|
||||
|
||||
namespace std {
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
|
||||
template <>
|
||||
struct hash<QByteArray> {
|
||||
size_t operator()(const QByteArray& byteArray) const {
|
||||
return qHash(byteArray);
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
template <>
|
||||
struct hash<TextureExtra> {
|
||||
|
|
|
@ -221,17 +221,24 @@ QNetworkRequest AccountManager::createRequest(QString path, AccountManagerAuth::
|
|||
uuidStringWithoutCurlyBraces(_sessionID).toLocal8Bit());
|
||||
|
||||
QUrl requestURL = _authURL;
|
||||
|
||||
if (requestURL.isEmpty()) { // Assignment client doesn't set _authURL.
|
||||
requestURL = getMetaverseServerURL();
|
||||
}
|
||||
|
||||
// qCDebug(networking) << "Received path" << path;
|
||||
// qCDebug(networking) << "path.left(path.indexOf(\" ? \"))" << path.left(path.indexOf("?"));
|
||||
// qCDebug(networking) << "getMetaverseServerURLPath(true)" << getMetaverseServerURLPath(true);
|
||||
|
||||
int queryStringLocation = path.indexOf("?");
|
||||
if (path.startsWith("/")) {
|
||||
requestURL.setPath(path.left(queryStringLocation));
|
||||
requestURL.setPath(getMetaverseServerURLPath(false) + path.left(queryStringLocation));
|
||||
} else {
|
||||
requestURL.setPath("/" + path.left(queryStringLocation));
|
||||
requestURL.setPath(getMetaverseServerURLPath(true) + path.left(queryStringLocation));
|
||||
}
|
||||
|
||||
// qCDebug(networking) << "Creating request path" << requestURL;
|
||||
// qCDebug(networking) << "requestURL.isValid()" << requestURL.isValid();
|
||||
// qCDebug(networking) << "requestURL.errorString()" << requestURL.errorString();
|
||||
|
||||
if (queryStringLocation >= 0) {
|
||||
QUrlQuery query(path.mid(queryStringLocation+1));
|
||||
|
@ -556,7 +563,7 @@ void AccountManager::requestAccessToken(const QString& login, const QString& pas
|
|||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
grantURL.setPath(getMetaverseServerURLPath() + "/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=password&");
|
||||
|
@ -579,7 +586,7 @@ void AccountManager::requestAccessTokenWithAuthCode(const QString& authCode, con
|
|||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
grantURL.setPath(getMetaverseServerURLPath() + "/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=authorization_code&");
|
||||
|
@ -602,7 +609,7 @@ void AccountManager::requestAccessTokenWithSteam(QByteArray authSessionTicket) {
|
|||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
grantURL.setPath(getMetaverseServerURLPath() + "/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=password&");
|
||||
|
@ -624,7 +631,7 @@ void AccountManager::requestAccessTokenWithOculus(const QString& nonce, const QS
|
|||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
grantURL.setPath(getMetaverseServerURLPath() + "/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=password&");
|
||||
|
@ -655,7 +662,7 @@ void AccountManager::refreshAccessToken() {
|
|||
request.setHeader(QNetworkRequest::UserAgentHeader, _userAgentGetter());
|
||||
|
||||
QUrl grantURL = _authURL;
|
||||
grantURL.setPath("/oauth/token");
|
||||
grantURL.setPath(getMetaverseServerURLPath() + "/oauth/token");
|
||||
|
||||
QByteArray postData;
|
||||
postData.append("grant_type=refresh_token&");
|
||||
|
@ -688,7 +695,7 @@ void AccountManager::setAccessTokens(const QString& response) {
|
|||
} else {
|
||||
// clear the path from the response URL so we have the right root URL for this access token
|
||||
QUrl rootURL = rootObject.contains("url") ? rootObject["url"].toString() : _authURL;
|
||||
rootURL.setPath("");
|
||||
rootURL.setPath(getMetaverseServerURLPath());
|
||||
|
||||
qCDebug(networking) << "Storing an account with access-token for" << qPrintable(rootURL.toString());
|
||||
|
||||
|
@ -723,7 +730,7 @@ void AccountManager::requestAccessTokenFinished() {
|
|||
} else {
|
||||
// clear the path from the response URL so we have the right root URL for this access token
|
||||
QUrl rootURL = requestReply->url();
|
||||
rootURL.setPath("");
|
||||
rootURL.setPath(getMetaverseServerURLPath());
|
||||
|
||||
qCDebug(networking) << "Storing an account with access-token for" << qPrintable(rootURL.toString());
|
||||
|
||||
|
@ -759,7 +766,7 @@ void AccountManager::refreshAccessTokenFinished() {
|
|||
} else {
|
||||
// clear the path from the response URL so we have the right root URL for this access token
|
||||
QUrl rootURL = requestReply->url();
|
||||
rootURL.setPath("");
|
||||
rootURL.setPath(getMetaverseServerURLPath());
|
||||
|
||||
qCDebug(networking) << "Storing an account with a refreshed access-token for" << qPrintable(rootURL.toString());
|
||||
|
||||
|
@ -784,7 +791,7 @@ void AccountManager::requestProfile() {
|
|||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
|
||||
QUrl profileURL = _authURL;
|
||||
profileURL.setPath("/api/v1/user/profile");
|
||||
profileURL.setPath(getMetaverseServerURLPath() + "/api/v1/user/profile");
|
||||
|
||||
QNetworkRequest profileRequest(profileURL);
|
||||
profileRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
|
@ -834,7 +841,7 @@ void AccountManager::requestAccountSettings() {
|
|||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
|
||||
QUrl lockerURL = _authURL;
|
||||
lockerURL.setPath("/api/v1/user/locker");
|
||||
lockerURL.setPath(getMetaverseServerURLPath() + "/api/v1/user/locker");
|
||||
|
||||
QNetworkRequest lockerRequest(lockerURL);
|
||||
lockerRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
|
@ -905,7 +912,7 @@ void AccountManager::postAccountSettings() {
|
|||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||
|
||||
QUrl lockerURL = _authURL;
|
||||
lockerURL.setPath("/api/v1/user/locker");
|
||||
lockerURL.setPath(getMetaverseServerURLPath() + "/api/v1/user/locker");
|
||||
|
||||
QNetworkRequest lockerRequest(lockerURL);
|
||||
lockerRequest.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
|
||||
|
@ -1003,8 +1010,8 @@ void AccountManager::uploadPublicKey() {
|
|||
qCDebug(networking) << "Attempting upload of public key";
|
||||
|
||||
// upload the public key so data-web has an up-to-date key
|
||||
const QString USER_PUBLIC_KEY_UPDATE_PATH = "api/v1/user/public_key";
|
||||
const QString DOMAIN_PUBLIC_KEY_UPDATE_PATH = "api/v1/domains/%1/public_key";
|
||||
const QString USER_PUBLIC_KEY_UPDATE_PATH = "/api/v1/user/public_key";
|
||||
const QString DOMAIN_PUBLIC_KEY_UPDATE_PATH = "/api/v1/domains/%1/public_key";
|
||||
|
||||
QString uploadPath;
|
||||
const auto& domainID = _accountInfo.getDomainID();
|
||||
|
|
|
@ -101,6 +101,9 @@ public:
|
|||
const QString& getTemporaryDomainKey(const QUuid& domainID) { return _accountInfo.getTemporaryDomainKey(domainID); }
|
||||
|
||||
QUrl getMetaverseServerURL() { return MetaverseAPI::getCurrentMetaverseServerURL(); }
|
||||
QString getMetaverseServerURLPath(bool appendForwardSlash = false) {
|
||||
return MetaverseAPI::getCurrentMetaverseServerURLPath(appendForwardSlash);
|
||||
}
|
||||
|
||||
void removeAccountFromFile();
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
// MetaverseAPI.cpp
|
||||
// libraries/networking/src
|
||||
//
|
||||
// Created by Kalila (kasenvr) on 2019-12-16.
|
||||
// Copyright 2019 Vircadia
|
||||
// Created by Kalila L. on 2019-12-16.
|
||||
// Copyright 2019 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -23,7 +23,7 @@ namespace MetaverseAPI {
|
|||
QUrl getCurrentMetaverseServerURL() {
|
||||
QUrl selectedMetaverseURL;
|
||||
Setting::Handle<QUrl> selectedMetaverseURLSetting("private/selectedMetaverseURL",
|
||||
NetworkingConstants::METAVERSE_SERVER_URL_STABLE);
|
||||
NetworkingConstants::METAVERSE_SERVER_URL_STABLE);
|
||||
|
||||
selectedMetaverseURL = selectedMetaverseURLSetting.get();
|
||||
|
||||
|
@ -32,7 +32,17 @@ namespace MetaverseAPI {
|
|||
if (QProcessEnvironment::systemEnvironment().contains(HIFI_METAVERSE_URL_ENV)) {
|
||||
return QUrl(QProcessEnvironment::systemEnvironment().value(HIFI_METAVERSE_URL_ENV));
|
||||
}
|
||||
|
||||
|
||||
return selectedMetaverseURL;
|
||||
};
|
||||
}
|
||||
|
||||
QString getCurrentMetaverseServerURLPath(bool appendForwardSlash){
|
||||
QString path = getCurrentMetaverseServerURL().path();
|
||||
|
||||
if (!path.isEmpty() && appendForwardSlash) {
|
||||
path.append("/");
|
||||
}
|
||||
|
||||
return path;
|
||||
};
|
||||
} // namespace MetaverseAPI
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
// MetaverseAPI.h
|
||||
// libraries/networking/src
|
||||
//
|
||||
// Created by Kalila (kasenvr) on 2019-12-16.
|
||||
// Copyright 2019 Vircadia
|
||||
// Created by Kalila L. on 2019-12-16.
|
||||
// Copyright 2019 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -17,6 +17,7 @@
|
|||
|
||||
namespace MetaverseAPI {
|
||||
QUrl getCurrentMetaverseServerURL();
|
||||
QString getCurrentMetaverseServerURLPath(bool appendForwardSlash = false);
|
||||
}
|
||||
|
||||
#endif // athena_MetaverseAPI_h
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Stephen Birarda on 2015-03-31.
|
||||
// Copyright 2015 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -19,14 +20,15 @@ namespace NetworkingConstants {
|
|||
// If you want to use STAGING instead of STABLE,
|
||||
// links from the Domain Server web interface (like the connect account token generation)
|
||||
// will still point at stable unless you ALSO change the Domain Server Metaverse Server URL inside of:
|
||||
// <hifi repo>\domain-server\resources\web\js\shared.js
|
||||
// <vircadia repo>\domain-server\resources\web\js\shared.js
|
||||
|
||||
// You can avoid changing that and still effectively use a connected domain on staging
|
||||
// if you manually generate a personal access token for the domains scope
|
||||
// at https://staging.highfidelity.com/user/tokens/new?for_domain_server=true
|
||||
|
||||
const QUrl METAVERSE_SERVER_URL_STABLE { "https://metaverse.highfidelity.com" };
|
||||
const QUrl METAVERSE_SERVER_URL_STAGING { "https://staging-metaverse.vircadia.com" };
|
||||
// For now we only have one Metaverse server.
|
||||
const QUrl METAVERSE_SERVER_URL_STABLE { "https://metaverse.vircadia.com/live" };
|
||||
const QUrl METAVERSE_SERVER_URL_STAGING { "https://metaverse.vircadia.com/live" };
|
||||
|
||||
// Web Engine requests to this parent domain have an account authorization header added
|
||||
const QString AUTH_HOSTNAME_BASE = "highfidelity.com";
|
||||
|
@ -42,11 +44,11 @@ namespace NetworkingConstants {
|
|||
const QUrl BUILDS_XML_URL("https://highfidelity.com/builds.xml");
|
||||
const QUrl MASTER_BUILDS_XML_URL("https://highfidelity.com/dev-builds.xml");
|
||||
|
||||
|
||||
// For now we only have one ice server.
|
||||
#if USE_STABLE_GLOBAL_SERVICES
|
||||
const QString ICE_SERVER_DEFAULT_HOSTNAME = "ice.highfidelity.com";
|
||||
const QString ICE_SERVER_DEFAULT_HOSTNAME = "ice.vircadia.com";
|
||||
#else
|
||||
const QString ICE_SERVER_DEFAULT_HOSTNAME = "dev-ice.highfidelity.com";
|
||||
const QString ICE_SERVER_DEFAULT_HOSTNAME = "ice.vircadia.com";
|
||||
#endif
|
||||
|
||||
const QString MARKETPLACE_CDN_HOSTNAME = "mpassets.highfidelity.com";
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//
|
||||
// Created by Simon Walton on Oct 15, 2018.
|
||||
// Copyright 2018 High Fidelity, Inc.
|
||||
// Copyright 2020 Vircadia contributors.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
@ -247,8 +248,7 @@ bool OctreeEntitiesFileParser::readEntitiesArray(QVariantList& entitiesArray) {
|
|||
// model
|
||||
"modelURL",
|
||||
"animation.url",
|
||||
// FIXME: Handle models' "textures" and "originalTextures" properties which include URLs. Note that Particles
|
||||
// also has a "textures" property.
|
||||
"textures",
|
||||
// image
|
||||
"imageURL",
|
||||
// web
|
||||
|
@ -258,7 +258,7 @@ bool OctreeEntitiesFileParser::readEntitiesArray(QVariantList& entitiesArray) {
|
|||
"ambientLight.ambientURL",
|
||||
"skybox.url",
|
||||
// particles
|
||||
"textures",
|
||||
//"textures", Already specified for model entity type.
|
||||
// materials
|
||||
"materialURL",
|
||||
// ...shared
|
||||
|
@ -292,11 +292,30 @@ bool OctreeEntitiesFileParser::readEntitiesArray(QVariantList& entitiesArray) {
|
|||
}
|
||||
} else {
|
||||
if (entityObject.contains(key) && entityObject[key].isString()) {
|
||||
const QString url = entityObject[key].toString();
|
||||
const QString value = entityObject[key].toString();
|
||||
|
||||
if (url.startsWith("./") || url.startsWith("../")) {
|
||||
entityObject[key] = _relativeURL.resolved(url).toString();
|
||||
if (value.startsWith("./") || value.startsWith("../")) {
|
||||
// URL value.
|
||||
entityObject[key] = _relativeURL.resolved(value).toString();
|
||||
isDirty = true;
|
||||
} else if (value.startsWith("{")) {
|
||||
// Object with URL values.
|
||||
auto document = QJsonDocument::fromJson(value.toUtf8());
|
||||
if (!document.isNull()) {
|
||||
auto object = document.object();
|
||||
bool isObjectUpdated = false;
|
||||
for (const QString& key : object.keys()) {
|
||||
auto value = object[key].toString();
|
||||
if (value.startsWith("./") || value.startsWith("../")) {
|
||||
object[key] = _relativeURL.resolved(value).toString();
|
||||
isObjectUpdated = true;
|
||||
}
|
||||
}
|
||||
if (isObjectUpdated) {
|
||||
entityObject[key] = QString(QJsonDocument(object).toJson());
|
||||
isDirty = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "OctreeLogging.h"
|
||||
#include "NumericalConstants.h"
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
bool OctreePacketData::_debug = false;
|
||||
AtomicUIntStat OctreePacketData::_totalBytesOfOctalCodes { 0 };
|
||||
|
@ -702,17 +703,17 @@ void OctreePacketData::debugBytes() {
|
|||
}
|
||||
|
||||
int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, glm::vec2& result) {
|
||||
memcpy(&result, dataBytes, sizeof(result));
|
||||
memcpy(glm::value_ptr(result), dataBytes, sizeof(result));
|
||||
return sizeof(result);
|
||||
}
|
||||
|
||||
int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, glm::vec3& result) {
|
||||
memcpy(&result, dataBytes, sizeof(result));
|
||||
memcpy(glm::value_ptr(result), dataBytes, sizeof(result));
|
||||
return sizeof(result);
|
||||
}
|
||||
|
||||
int OctreePacketData::unpackDataFromBytes(const unsigned char* dataBytes, glm::u8vec3& result) {
|
||||
memcpy(&result, dataBytes, sizeof(result));
|
||||
memcpy(glm::value_ptr(result), dataBytes, sizeof(result));
|
||||
return sizeof(result);
|
||||
}
|
||||
|
||||
|
@ -743,7 +744,12 @@ int OctreePacketData::unpackDataFromBytes(const unsigned char *dataBytes, QVecto
|
|||
memcpy(&length, dataBytes, sizeof(uint16_t));
|
||||
dataBytes += sizeof(length);
|
||||
result.resize(length);
|
||||
memcpy(result.data(), dataBytes, length * sizeof(glm::vec3));
|
||||
|
||||
for(int i=0;i<length;i++) {
|
||||
memcpy(glm::value_ptr(result[i]), dataBytes, sizeof(glm::vec3));
|
||||
dataBytes += sizeof(glm::vec3);
|
||||
}
|
||||
|
||||
return sizeof(uint16_t) + length * sizeof(glm::vec3);
|
||||
}
|
||||
|
||||
|
|
|
@ -691,6 +691,7 @@ void RenderPipelines::updateMultiMaterial(graphics::MultiMaterial& multiMaterial
|
|||
break;
|
||||
case graphics::Material::CULL_FACE_MODE:
|
||||
multiMaterial.setCullFaceMode(graphics::Material::DEFAULT_CULL_FACE_MODE);
|
||||
break;
|
||||
case graphics::MaterialKey::ALBEDO_MAP_BIT:
|
||||
if (schemaKey.isAlbedoMap()) {
|
||||
drawMaterialTextures->setTexture(gr::Texture::MaterialAlbedo, textureCache->getWhiteTexture());
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "GLMHelpers.h"
|
||||
#include "ByteCountCoding.h"
|
||||
#include "PropertyFlags.h"
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
class BufferParser {
|
||||
public:
|
||||
|
@ -98,7 +99,10 @@ template<>
|
|||
inline void BufferParser::readValue(QVector<glm::vec3>& result) {
|
||||
uint16_t length; readValue(length);
|
||||
result.resize(length);
|
||||
memcpy(result.data(), _data + _offset, sizeof(glm::vec3) * length);
|
||||
for (int i=0; i<length; i++) {
|
||||
memcpy(glm::value_ptr(result[i]), _data + _offset + (sizeof(glm::vec3)*i), sizeof(glm::vec3) * length);
|
||||
}
|
||||
|
||||
_offset += sizeof(glm::vec3) * length;
|
||||
}
|
||||
|
||||
|
|
|
@ -620,7 +620,9 @@ void PolygonClip::clipToScreen(const glm::vec2* inputVertexArray, int inLength,
|
|||
glm::vec2* tempVertexArrayB = new glm::vec2[maxLength];
|
||||
|
||||
// set up our temporary arrays
|
||||
memcpy(tempVertexArrayA, inputVertexArray, sizeof(glm::vec2) * inLength);
|
||||
for (int i=0; i<inLength; i++) {
|
||||
tempVertexArrayA[i] = inputVertexArray[i];
|
||||
}
|
||||
|
||||
// Left edge
|
||||
LineSegment2 edge;
|
||||
|
|
|
@ -597,12 +597,14 @@ namespace std {
|
|||
}
|
||||
};
|
||||
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
|
||||
template <>
|
||||
struct hash<QString> {
|
||||
size_t operator()(const QString& a) const {
|
||||
return qHash(a);
|
||||
}
|
||||
};
|
||||
#endif
|
||||
}
|
||||
|
||||
/**jsdoc
|
||||
|
|
|
@ -15,12 +15,15 @@
|
|||
#pragma warning( disable : 4334 )
|
||||
#endif
|
||||
|
||||
#if !defined(Q_MOC_RUN)
|
||||
// Work around https://bugreports.qt.io/browse/QTBUG-80990
|
||||
#include <tbb/concurrent_queue.h>
|
||||
#include <tbb/concurrent_unordered_map.h>
|
||||
#include <tbb/concurrent_unordered_set.h>
|
||||
#include <tbb/concurrent_vector.h>
|
||||
#include <tbb/parallel_for.h>
|
||||
#include <tbb/blocked_range2d.h>
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma warning( pop )
|
||||
|
|
|
@ -153,13 +153,13 @@ void packBlendshapeOffsets_AVX2(float (*unpacked)[9], uint32_t (*packed)[4], int
|
|||
__m256 s7 = _mm256_setzero_ps();
|
||||
|
||||
switch (rem) {
|
||||
case 7: s6 = _mm256_loadu_ps(unpacked[i+6]);
|
||||
case 6: s5 = _mm256_loadu_ps(unpacked[i+5]);
|
||||
case 5: s4 = _mm256_loadu_ps(unpacked[i+4]);
|
||||
case 4: s3 = _mm256_loadu_ps(unpacked[i+3]);
|
||||
case 3: s2 = _mm256_loadu_ps(unpacked[i+2]);
|
||||
case 2: s1 = _mm256_loadu_ps(unpacked[i+1]);
|
||||
case 1: s0 = _mm256_loadu_ps(unpacked[i+0]);
|
||||
case 7: s6 = _mm256_loadu_ps(unpacked[i+6]); /* fall-thru */
|
||||
case 6: s5 = _mm256_loadu_ps(unpacked[i+5]); /* fall-thru */
|
||||
case 5: s4 = _mm256_loadu_ps(unpacked[i+4]); /* fall-thru */
|
||||
case 4: s3 = _mm256_loadu_ps(unpacked[i+3]); /* fall-thru */
|
||||
case 3: s2 = _mm256_loadu_ps(unpacked[i+2]); /* fall-thru */
|
||||
case 2: s1 = _mm256_loadu_ps(unpacked[i+1]); /* fall-thru */
|
||||
case 1: s0 = _mm256_loadu_ps(unpacked[i+0]); /* fall-thru */
|
||||
}
|
||||
|
||||
__m256 t0 = _mm256_unpacklo_ps(s0, s1);
|
||||
|
@ -269,13 +269,13 @@ void packBlendshapeOffsets_AVX2(float (*unpacked)[9], uint32_t (*packed)[4], int
|
|||
|
||||
// store pack x 8
|
||||
switch (rem) {
|
||||
case 7: _mm_storeu_si128((__m128i*)packed[i+6], _mm256_extractf128_si256(v2, 1));
|
||||
case 6: _mm_storeu_si128((__m128i*)packed[i+5], _mm256_extractf128_si256(v1, 1));
|
||||
case 5: _mm_storeu_si128((__m128i*)packed[i+4], _mm256_extractf128_si256(v0, 1));
|
||||
case 4: _mm_storeu_si128((__m128i*)packed[i+3], _mm256_castsi256_si128(v3));
|
||||
case 3: _mm_storeu_si128((__m128i*)packed[i+2], _mm256_castsi256_si128(v2));
|
||||
case 2: _mm_storeu_si128((__m128i*)packed[i+1], _mm256_castsi256_si128(v1));
|
||||
case 1: _mm_storeu_si128((__m128i*)packed[i+0], _mm256_castsi256_si128(v0));
|
||||
case 7: _mm_storeu_si128((__m128i*)packed[i+6], _mm256_extractf128_si256(v2, 1)); /* fall-thru */
|
||||
case 6: _mm_storeu_si128((__m128i*)packed[i+5], _mm256_extractf128_si256(v1, 1)); /* fall-thru */
|
||||
case 5: _mm_storeu_si128((__m128i*)packed[i+4], _mm256_extractf128_si256(v0, 1)); /* fall-thru */
|
||||
case 4: _mm_storeu_si128((__m128i*)packed[i+3], _mm256_castsi256_si128(v3)); /* fall-thru */
|
||||
case 3: _mm_storeu_si128((__m128i*)packed[i+2], _mm256_castsi256_si128(v2)); /* fall-thru */
|
||||
case 2: _mm_storeu_si128((__m128i*)packed[i+1], _mm256_castsi256_si128(v1)); /* fall-thru */
|
||||
case 1: _mm_storeu_si128((__m128i*)packed[i+0], _mm256_castsi256_si128(v0)); /* fall-thru */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
#include "../NumericalConstants.h"
|
||||
#include "../ViewFrustum.h"
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
void ConicalViewFrustum::set(const ViewFrustum& viewFrustum) {
|
||||
// The ConicalViewFrustum has two parts: a central sphere (same as ViewFrustum) and a circular cone that bounds the frustum part.
|
||||
|
@ -131,9 +132,9 @@ int ConicalViewFrustum::serialize(unsigned char* destinationBuffer) const {
|
|||
int ConicalViewFrustum::deserialize(const unsigned char* sourceBuffer) {
|
||||
const unsigned char* startPosition = sourceBuffer;
|
||||
|
||||
memcpy(&_position, sourceBuffer, sizeof(_position));
|
||||
memcpy(glm::value_ptr(_position), sourceBuffer, sizeof(_position));
|
||||
sourceBuffer += sizeof(_position);
|
||||
memcpy(&_direction, sourceBuffer, sizeof(_direction));
|
||||
memcpy(glm::value_ptr(_direction), sourceBuffer, sizeof(_direction));
|
||||
sourceBuffer += sizeof(_direction);
|
||||
sourceBuffer += unpackFloatAngleFromTwoByte((uint16_t*)sourceBuffer, &_angle);
|
||||
sourceBuffer += unpackClipValueFromTwoByte(sourceBuffer, _farClip);
|
||||
|
|
|
@ -7,7 +7,7 @@ logfile_maxbytes=0
|
|||
pidfile=/var/run/supervisord.pid
|
||||
|
||||
[program:domain-server]
|
||||
command=/opt/vircadia/domain-server
|
||||
command=/opt/vircadia/domain-server --get-temp-name
|
||||
autorestart=unexpected
|
||||
directory=/opt/vircadia
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ private:
|
|||
static QVariantMap zipNonZeroValues(const QStringList& keys, const QVector<float>& values) {
|
||||
QVariantMap out;
|
||||
for (int i=1; i < values.size(); i++) {
|
||||
if (fabs(values[i]) > 1.0e-6) {
|
||||
if (fabs(values[i]) > 1.0e-6f) {
|
||||
out[keys.value(i)] = values[i];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
|
||||
return elContent;
|
||||
}
|
||||
|
||||
|
||||
// For any URLs present, unless they are already identified within
|
||||
// an `a` element, linkify them.
|
||||
function _linkifyUrls(matches, $el) {
|
||||
|
@ -181,47 +181,53 @@
|
|||
case ext == "JPG":
|
||||
case ext == "GIF":
|
||||
case ext == "JPEG":
|
||||
elContent = elContent.replace(this, "<br/><img src='" + this
|
||||
+ "'class=\"responsive z-depth-2\"><br/><a href=\"javascript:gotoClipboard('" + this + "');\" target='_blank'>" + this
|
||||
+ "</a><a onclick=\"gotoExternalURL('" + this
|
||||
+ "');return false;\"href=\"" + this
|
||||
+ "\">📲</a>");
|
||||
var replaceWith = "<br/>";
|
||||
replaceWith += "<img src='" + this + "'class=\"responsive z-depth-2\"><br/>";
|
||||
replaceWith += "<a onclick=\"gotoClipboard('" + this + "');return false;\" href=\"" + this + "\" target=\"_blank\">" + this + "</a>";
|
||||
replaceWith += "<a onclick=\"gotoExternalURL('" + this + "');return false;\"href=\"" + this + "\">📲</a>";
|
||||
|
||||
elContent = elContent.replace(this, replaceWith);
|
||||
break;
|
||||
case ext == "iframe":
|
||||
elContent = elContent.replace(this, "<br/><iframe class=\"z-depth-2\" src='" + this
|
||||
+ "'width=\"440\" height=\"248\" frameborder=\"0\"></iframe>");
|
||||
var replaceWith = "<br/>";
|
||||
replaceWith += "<iframe class=\"z-depth-2\" src='" + this;
|
||||
replaceWith += "'width=\"440\" height=\"248\" frameborder=\"0\"></iframe>";
|
||||
|
||||
elContent = elContent.replace(this, replaceWith);
|
||||
break;
|
||||
case ext == "webm":
|
||||
elContent = elContent.replace(this, "<br/><video controls class=\"z-depth-2 responsive\"><source src='" + this
|
||||
+ "' type='video/" + ext + "'></video><br/><a href=\"javascript:gotoClipboard('" + this
|
||||
+ "');\">" + this
|
||||
+ "</a><a onclick=\"gotoExternalURL('" + this
|
||||
+ "');return false;\"href=\"" + this
|
||||
+ "\">📲</a>");
|
||||
var replaceWith = "<br/>";
|
||||
replaceWith += "<video controls class=\"z-depth-2 responsive\"><source src='" + this;
|
||||
replaceWith += "' type='video/" + ext + "'></video>";
|
||||
replaceWith += "<br/>";
|
||||
replaceWith += "<a onclick=\"gotoClipboard('" + this + "');return false;\" href=\"" + this + "\">" + this + "</a>";
|
||||
replaceWith += "<a onclick=\"gotoExternalURL('" + this + "');return false;\"href=\"" + this + "\">📲</a>";
|
||||
|
||||
elContent = elContent.replace(this, replaceWith);
|
||||
break;
|
||||
case protocol === "HIFI":
|
||||
case protocol === "hifi":
|
||||
elContent = elContent.replace(this, "<br/><a href=\"javascript:gotoHiFi('" + this + "');\">" + this + "</a>");
|
||||
break;
|
||||
case !!this.match(/(https?:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)([^& \n<]+)(?:[^ \n<]+)?/g):
|
||||
case !!this.match(/(https?:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)([^& \n<]+)(?:[^ \n<]+)?/g):
|
||||
var youtubeMatch = this.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);
|
||||
if (youtubeMatch && youtubeMatch[2].length == 11) {
|
||||
elContent = "<br/><iframe class=\"z-depth-2\" width='420' height='236' src='https://www.youtube.com/embed/" + youtubeMatch[2]
|
||||
+ "' frameborder='0'></iframe><br/><a href=\"javascript:gotoURL('" + this
|
||||
+ "');\">" + this
|
||||
+ "</a><a onclick=\"gotoExternalURL('" + this
|
||||
+ "');return false;\"href=\"" + this
|
||||
+ "\">📲</a>";
|
||||
var replaceWith = "<br/>";
|
||||
replaceWith += "<iframe class=\"z-depth-2\" width='420' height='236' src='https://www.youtube.com/embed/" + youtubeMatch[2] + "' frameborder='0'></iframe>";
|
||||
replaceWith += "<br/>";
|
||||
replaceWith += "<a onclick=\"gotoExternalURL('" + this + "');return false;\" href=\"" + this + "\">" + this + "</a>";
|
||||
replaceWith += "<a onclick=\"gotoExternalURL('" + this + "');return false;\" href=\"" + this + "\">📲</a>";
|
||||
|
||||
elContent = replaceWith;
|
||||
break;
|
||||
}
|
||||
// else fall through to default
|
||||
default:
|
||||
elContent = elContent.replace(this, "<br/><a onclick=\"gotoURL('" + this
|
||||
+ "');return false;\" href=\"" + this
|
||||
+ "\">" + this
|
||||
+ "</a><a onclick=\"gotoExternalURL('" + this
|
||||
+ "');return false;\"href=\"" + this
|
||||
+ "\">📲</a>");
|
||||
var replaceWith = "<br/>";
|
||||
replaceWith += "<a onclick=\"gotoURL('" + this + "');return false;\" href=\"" + this + "\">" + this + "</a>";
|
||||
replaceWith += "<a onclick=\"gotoExternalURL('" + this + "');return false;\"href=\"" + this + "\">📲</a>";
|
||||
|
||||
elContent = elContent.replace(this, replaceWith);
|
||||
break;
|
||||
|
||||
}
|
||||
|
|
|
@ -1,178 +0,0 @@
|
|||
<!--
|
||||
// addLocation.html
|
||||
//
|
||||
// Created by Darlingnotin in 2019.
|
||||
// Copyright 2019 Darlingnotin
|
||||
//
|
||||
// Distributed under the ISC license.
|
||||
// See the accompanying file LICENSE or https://opensource.org/licenses/ISC
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Explore</title>
|
||||
<link href="bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
.myButton {
|
||||
box-shadow: 3px 4px 0px 0px #899599;
|
||||
background: linear-gradient(to bottom, #ededed 5%, #bab1ba 100%);
|
||||
background-color: #ededed;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #d6bcd6;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #3a8a9e;
|
||||
font-family: Arial;
|
||||
font-size: 17px;
|
||||
padding: 2px 19px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #e1e2ed;
|
||||
}
|
||||
|
||||
.myButton:hover {
|
||||
background: linear-gradient(to bottom, #bab1ba 5%, #ededed 100%);
|
||||
background-color: #bab1ba;
|
||||
}
|
||||
|
||||
.myButton:active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.myButtonB {
|
||||
box-shadow: 3px 4px 0px 0px #899599;
|
||||
background: linear-gradient(to bottom, #ededed 5%, #bab1ba 100%);
|
||||
background-color: #ededed;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #d6bcd6;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #3a8a9e;
|
||||
font-family: Arial;
|
||||
font-size: 17px;
|
||||
padding: 2px 19px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #e1e2ed;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.myButtonB:hover {
|
||||
background: linear-gradient(to bottom, #bab1ba 5%, #ededed 100%);
|
||||
background-color: #bab1ba;
|
||||
}
|
||||
|
||||
.myButtonB:active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
table {
|
||||
font-family: arial, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background-color: #EFEFEF;
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
select {
|
||||
width: 450px;
|
||||
padding: 12px 20px;
|
||||
margin: 8px 0;
|
||||
display: inline-block;
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body onload="retrieveInformation()">
|
||||
|
||||
<h1>Add Location</h1><br>
|
||||
<h3>Location List Provider URL</h3>
|
||||
<select id="javascriptURL">
|
||||
</select>
|
||||
|
||||
<h3>Domain Name</h3>
|
||||
<input type="text" id="domainName" placeholder="Enter Domain Name here">
|
||||
|
||||
<h3>Owner</h3>
|
||||
<input type="text" id="owner" placeholder="Enter Owner here">
|
||||
|
||||
<h3>Port</h3>
|
||||
<input type="text" id="port" placeholder="Enter Port here (default 40102)"><br><br>
|
||||
|
||||
<button class="myButton" onclick="addLocation()">Add</button>
|
||||
|
||||
<script>
|
||||
var retrievePortInformationResponse;
|
||||
var metaverseProviderList = [];
|
||||
function retrieveInformation() {
|
||||
var readyEvent = {
|
||||
"action": "retrievePortInformation",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
function addToSelect() {
|
||||
for (let i = 0; i < metaverseProviderList.length; i++) {
|
||||
var x = document.getElementById("javascriptURL");
|
||||
var option = document.createElement("option");
|
||||
option.text = metaverseProviderList[i];
|
||||
x.add(option);
|
||||
}
|
||||
}
|
||||
|
||||
function addLocation() {
|
||||
var domainName = document.getElementById("domainName").value;
|
||||
if (domainName == "") {
|
||||
domainName = "Enter domain name";
|
||||
}
|
||||
var owner = document.getElementById("owner").value;
|
||||
if (owner == "") {
|
||||
owner = "Enter owner of domain";
|
||||
}
|
||||
var port = document.getElementById("port").value;
|
||||
var javascriptURL = document.getElementById("javascriptURL").value;
|
||||
if (port == "") {
|
||||
port = 40102;
|
||||
}
|
||||
var readyEvent = {
|
||||
"action": "addLocation",
|
||||
"domainName": domainName,
|
||||
"owner": owner,
|
||||
"Port": port,
|
||||
"script": javascriptURL
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
EventBridge.scriptEventReceived.connect(function (message) {
|
||||
var messageData = JSON.parse(message);
|
||||
if (messageData.action == "retrievePortInformationResponse") {
|
||||
retrievePortInformationResponse = messageData.goToAddresses;
|
||||
for (let i = 0; i < retrievePortInformationResponse.length; i++) {
|
||||
metaverseProvider = retrievePortInformationResponse[i].split("/")[2].split(":")[0];
|
||||
metaverseProviderList[metaverseProviderList.length] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
||||
}
|
||||
addToSelect();
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
</bodyonload="retrieveAddressList()">
|
||||
|
||||
</html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,59 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 50 50"
|
||||
style="enable-background:new 0 0 50 50;"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="explore-a.svg"><metadata
|
||||
id="metadata18"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs16" /><sodipodi:namedview
|
||||
pagecolor="#ff0000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1062"
|
||||
inkscape:window-height="481"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.72"
|
||||
inkscape:cx="29.375221"
|
||||
inkscape:cy="25"
|
||||
inkscape:window-x="759"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" /><style
|
||||
type="text/css"
|
||||
id="style3">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style><g
|
||||
id="Layer_2" /><g
|
||||
style="display:inline;fill:#aaccff;stroke:#000000"
|
||||
id="g5138"
|
||||
transform="matrix(0.09456523,0,0,0.09456523,5.5165215,5.1539559)"><path
|
||||
id="path5124"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:26" /><path
|
||||
id="path5126"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:18" /></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24">
|
||||
<path d="M17.9,17.39C17.64,16.59 16.89,16 16,16H15V13A1,1 0 0,0 14,12H8V10H10A1,1 0 0,0 11,9V7H13A2,2 0 0,0 15,5V4.59C17.93,5.77 20,8.64 20,12C20,14.08 19.2,15.97 17.9,17.39M11,19.93C7.05,19.44 4,16.08 4,12C4,11.38 4.08,10.78 4.21,10.21L9,15V16A2,2 0 0,0 11,18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
|
||||
</svg>
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 437 B |
|
@ -1,59 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 50 50"
|
||||
style="enable-background:new 0 0 50 50;"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="explore-a.svg"><metadata
|
||||
id="metadata18"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs16" /><sodipodi:namedview
|
||||
pagecolor="#ff0000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1062"
|
||||
inkscape:window-height="481"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.72"
|
||||
inkscape:cx="29.375221"
|
||||
inkscape:cy="25"
|
||||
inkscape:window-x="759"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Layer_1" /><style
|
||||
type="text/css"
|
||||
id="style3">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style><g
|
||||
id="Layer_2" /><g
|
||||
style="display:inline;fill:#aaccff;stroke:#FFFFFF"
|
||||
id="g5138"
|
||||
transform="matrix(0.09456523,0,0,0.09456523,5.5165215,5.1539559)"><path
|
||||
id="path5124"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:26" /><path
|
||||
id="path5126"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:18" /></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24">
|
||||
<path fill="#ffffff" d="M17.9,17.39C17.64,16.59 16.89,16 16,16H15V13A1,1 0 0,0 14,12H8V10H10A1,1 0 0,0 11,9V7H13A2,2 0 0,0 15,5V4.59C17.93,5.77 20,8.64 20,12C20,14.08 19.2,15.97 17.9,17.39M11,19.93C7.05,19.44 4,16.08 4,12C4,11.38 4.08,10.78 4.21,10.21L9,15V16A2,2 0 0,0 11,18M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
|
||||
</svg>
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 451 B |
|
@ -1,212 +1,568 @@
|
|||
<!--
|
||||
// explore.html
|
||||
//
|
||||
// Created by Darlingnotin in 2019.
|
||||
// Copyright 2019 Darlingnotin
|
||||
//
|
||||
// Distributed under the ISC license.
|
||||
// See the accompanying file LICENSE or https://opensource.org/licenses/ISC
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Explore</title>
|
||||
<link href="bootstrap.min.css" rel="stylesheet">
|
||||
<link href="../libraries/materialdesignicons/css/materialdesignicons.min.css" rel="stylesheet" />
|
||||
<link href="../libraries/vuetify/vuetify-v2.3.9.min.css" rel="stylesheet" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
|
||||
<style>
|
||||
.myButton {
|
||||
box-shadow: 3px 4px 0px 0px #899599;
|
||||
background: linear-gradient(to bottom, #ededed 5%, #bab1ba 100%);
|
||||
background-color: #ededed;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #d6bcd6;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #3a8a9e;
|
||||
font-family: Arial;
|
||||
font-size: 17px;
|
||||
padding: 2px 19px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #e1e2ed;
|
||||
html {
|
||||
overflow: hidden;
|
||||
background: black;
|
||||
}
|
||||
|
||||
.myButton:hover {
|
||||
background: linear-gradient(to bottom, #bab1ba 5%, #ededed 100%);
|
||||
background-color: #bab1ba;
|
||||
}
|
||||
|
||||
.myButton:active {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
table {
|
||||
font-family: arial, sans-serif;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
border: 1px solid #dddddd;
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
background-color: #EFEFEF;
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
select {
|
||||
width: 100%;
|
||||
padding: 12px 20px;
|
||||
margin: 8px 0;
|
||||
display: inline-block;
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
#component-templates {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<!--<script src="js/TestEventBridge.js"></script>-->
|
||||
</head>
|
||||
<body>
|
||||
<div id="component-templates">
|
||||
<div id="add-location-template">
|
||||
<v-dialog v-model="dialog" fullscreen hide-overlay transition="dialog-bottom-transition">
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn color="grey darken-3" class="ml-5" v-show="permission" value="animations" v-bind="attrs" v-on="on" fab small>
|
||||
<v-icon color="purple">mdi-map-plus</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-card>
|
||||
<v-toolbar dark color="purple">
|
||||
<v-btn icon dark @click="closeDialog();">
|
||||
<v-icon>mdi-close</v-icon>
|
||||
</v-btn>
|
||||
<v-toolbar-title>Add Location</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-toolbar-items>
|
||||
<v-btn dark text @click="addLocation()">Save</v-btn>
|
||||
</v-toolbar-items>
|
||||
</v-toolbar>
|
||||
<v-card-text>
|
||||
<v-container>
|
||||
<v-form ref="form"
|
||||
v-model="valid"
|
||||
lazy-validation>
|
||||
<v-row>
|
||||
<v-col cols="12" sm="6" md="4">
|
||||
<v-text-field v-model="domainName" :rules="domainNameRules" label="Domain Display Name *" required hint="This is the name that shows on the listing" persistent-hint></v-text-field>
|
||||
</v-col>
|
||||
<v-col cols="12" sm="6" md="4">
|
||||
<v-text-field v-model="owner" :rules="ownerRules" label="Owner *" hint="Owner name to show in listing" required persistent-hint></v-text-field>
|
||||
</v-col>
|
||||
<v-col cols="12">
|
||||
<v-text-field v-model="port" :rules="portRules" label="Port *" hint="Domain server port number (default 40102)" required persistent-hint></v-text-field>
|
||||
</v-col>
|
||||
<v-col cols="12">
|
||||
<v-select v-model="locationProvider" :rules="locationProviderRules" :items="locationProviders"
|
||||
label="Location Provider *" required persistent-hint hint="The location provider to use when adding domain."></v-select>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</v-form>
|
||||
</v-container>
|
||||
<small>*indicates required field</small>
|
||||
</v-card-text>
|
||||
<v-card-text>
|
||||
When you add a location, you are actually creating a location beacon wherever you are currently standing. By default this will show up as a red cube.
|
||||
If you need to amend the details of your listing at a later date, simply open the Create app in your domain, find the entity with the name "Explore Marker (Your domain name)"
|
||||
and modify its userData values.
|
||||
You can also hide the marker easily by toggling the entity's visibility. It will still function when hidden.
|
||||
</v-card-text>
|
||||
</v-card>
|
||||
</v-dialog>
|
||||
</div>
|
||||
<div id="add-bookmark-template"></div>
|
||||
<div id="explore-template">
|
||||
<div>
|
||||
<v-container fluid class="pa-0">
|
||||
<v-data-iterator :items="items"
|
||||
:items-per-page.sync="itemsPerPage"
|
||||
:page.sync="page"
|
||||
:search="visit"
|
||||
:sort-by="sortBy"
|
||||
:sort-desc="sortDesc"
|
||||
:loading="loading"
|
||||
@page-count="pageCount = $event"
|
||||
hide-default-footer>
|
||||
<template v-slot:header>
|
||||
<v-row dense>
|
||||
<v-text-field v-model="visit" clearable
|
||||
flat
|
||||
solo-inverted
|
||||
hide-details
|
||||
label="Visit"
|
||||
class="pb-3"
|
||||
append-icon="mdi-location-enter"
|
||||
v-on:keyup.enter="visitIconCallback"
|
||||
@click:append="visitIconCallback">
|
||||
|
||||
<body onload="retrieveAddressList()">
|
||||
</v-text-field>
|
||||
</v-row>
|
||||
</template>
|
||||
|
||||
<h3>Explore</h3>
|
||||
<button class="myButton" onclick="navigateBack()">< Back</button>
|
||||
<button class="myButton" onclick="navigateHome()">Home</button>
|
||||
<button class="myButton" onclick="navigateForward()">Forward ></button>
|
||||
<template v-slot:default="props">
|
||||
<v-row dense>
|
||||
<v-col v-for="item in props.items"
|
||||
:key="item.name"
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="4"
|
||||
lg="3">
|
||||
<v-hover
|
||||
v-slot:default="{ hover }"
|
||||
>
|
||||
<v-card
|
||||
@click.native="openLocation(item['Visit'])"
|
||||
:color="hover ? 'grey darken-3' : 'grey darken-4'"
|
||||
>
|
||||
<!--<v-card-title class="headline">{{ item["Domain Name"] }}</v-card-title>-->
|
||||
<div class="d-flex flex-no-wrap justify-space-between">
|
||||
<div>
|
||||
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['Domain Name']" style="max-width: 400px;"></v-card-title>
|
||||
<v-card-subtitle class="pa-2 d-block text-truncate" style="max-width: 400px;" v-text="item.Owner"></v-card-subtitle>
|
||||
</div>
|
||||
<div style="text-align: right;">
|
||||
<v-card-title align-right class="align-right" v-text="item['People']"></v-card-title>
|
||||
</div>
|
||||
</div>
|
||||
</v-card>
|
||||
</hover>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</template>
|
||||
|
||||
<input type="text" id="domainAddressInput" placeholder="Type domain address here">
|
||||
<template v-slot:footer>
|
||||
<v-footer absolute dense class="font-weight-medium " color="black">
|
||||
<v-col class="text-center pa-0"
|
||||
cols="12">
|
||||
<v-pagination v-model="page"
|
||||
color="purple"
|
||||
:total-visible="8"
|
||||
:length="pageCount"
|
||||
prev-icon="mdi-menu-left"
|
||||
next-icon="mdi-menu-right"></v-pagination>
|
||||
</v-col>
|
||||
|
||||
<button class="myButton" onclick="myDomainAddressInputGoTo()">Visit</button>
|
||||
|
||||
<p id="showData"></p>
|
||||
</v-footer>
|
||||
</template>
|
||||
</v-data-iterator>
|
||||
</v-container>
|
||||
</div>
|
||||
</div>
|
||||
<div id="bookmarks-template">
|
||||
<div>
|
||||
<v-container fluid class="pa-0">
|
||||
<v-data-iterator :items="items"
|
||||
:items-per-page.sync="itemsPerPage"
|
||||
:page.sync="page"
|
||||
:search="search"
|
||||
:sort-by="sortBy"
|
||||
:sort-desc="sortDesc"
|
||||
:loading="loading"
|
||||
@page-count="pageCount = $event"
|
||||
hide-default-footer>
|
||||
<template v-slot:header>
|
||||
<v-row dense>
|
||||
<v-col cols="12"
|
||||
sm="6"
|
||||
md="4"
|
||||
lg="3">
|
||||
<v-text-field v-model="search"
|
||||
clearable
|
||||
flat
|
||||
solo-inverted
|
||||
hide-details
|
||||
label="Search"
|
||||
class="pb-3"></v-text-field>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</template>
|
||||
|
||||
<p id="addLocation"></p>
|
||||
<template v-slot:default="props">
|
||||
<v-row dense>
|
||||
<v-col v-for="item in props.items"
|
||||
:key="item.name"
|
||||
cols="12"
|
||||
sm="6"
|
||||
md="4"
|
||||
lg="3">
|
||||
<v-card hover @click.native="openLocation(item['location'])">
|
||||
<div class="d-flex flex-no-wrap justify-space-between">
|
||||
<div>
|
||||
<v-card-title class="text-h6 d-block text-truncate pa-2" v-text="item['name']" style="max-width: 400px;"></v-card-title>
|
||||
</div>
|
||||
</div>
|
||||
</v-card>
|
||||
</v-col>
|
||||
</v-row>
|
||||
</template>
|
||||
|
||||
<template v-slot:footer>
|
||||
<v-footer absolute dense class="font-weight-medium " color="black">
|
||||
<v-col class="text-center pa-0"
|
||||
cols="12">
|
||||
<v-pagination v-model="page"
|
||||
color="purple"
|
||||
:total-visible="8"
|
||||
:length="pageCount"
|
||||
prev-icon="mdi-menu-left"
|
||||
next-icon="mdi-menu-right"></v-pagination>
|
||||
</v-col>
|
||||
|
||||
</v-footer>
|
||||
</template>
|
||||
</v-data-iterator>
|
||||
</v-container>
|
||||
</div>
|
||||
</div>
|
||||
<div id="events-template">
|
||||
<div>events from template</div>
|
||||
</div>
|
||||
<div id="settings-template">
|
||||
<div>settings from template</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="app">
|
||||
<v-app>
|
||||
<div>
|
||||
<v-app-bar dense>
|
||||
<v-toolbar-title>Explore</v-toolbar-title>
|
||||
<v-spacer></v-spacer>
|
||||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" v-show="isHomeSet" value="animations" fab small @click="navigateHome()">
|
||||
<v-icon color="purple">mdi-home</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Home</span>
|
||||
</v-tooltip>
|
||||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateBack()">
|
||||
<v-icon color="purple">mdi-arrow-left-bold</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Back</span>
|
||||
</v-tooltip>
|
||||
<v-tooltip bottom>
|
||||
<template v-slot:activator="{ on, attrs }">
|
||||
<v-btn v-bind="attrs" v-on="on" color="grey darken-3" class="mx-1" value="animations" fab small @click="navigateForward()">
|
||||
<v-icon color="purple">mdi-arrow-right-bold</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<span>Go Forward</span>
|
||||
</v-tooltip>
|
||||
<!--<v-btn value="animations" fab small>
|
||||
<v-icon color="purple">mdi-map-marker-plus</v-icon>
|
||||
</v-btn>-->
|
||||
<add-location ref="addLocation" :permission="permission"></add-location>
|
||||
</v-app-bar>
|
||||
</div>
|
||||
<v-main>
|
||||
<v-container>
|
||||
<router-view></router-view>
|
||||
</v-container>
|
||||
</v-main>
|
||||
<v-bottom-navigation grow color="purple lighten-1" shift v-model="activeItem">
|
||||
<v-btn value="explore" :to="{ path: '/'}">
|
||||
<span>Explore</span>
|
||||
<v-icon>mdi-map-search-outline</v-icon>
|
||||
</v-btn>
|
||||
<!--<v-btn value="bookmarks" :to="{ path: '/bookmarks'}">
|
||||
<span>Bookmarks</span>
|
||||
<v-icon>mdi-map-marker</v-icon>
|
||||
</v-btn>-->
|
||||
<!--<v-btn value="events" :to="{ path: '/events'}" >
|
||||
<span>Events</span>
|
||||
<v-icon>mdi-calendar-month</v-icon>
|
||||
</v-btn>-->
|
||||
<!--<v-btn value="settings" :to="{ path: '/settings'}">
|
||||
<span>Settings</span>
|
||||
<v-icon>mdi-cog</v-icon>
|
||||
</v-btn>-->
|
||||
</v-bottom-navigation>
|
||||
</v-app>
|
||||
</div>
|
||||
|
||||
<script src="../libraries/vue/vue.min.js"></script>
|
||||
<script src="../libraries/vue-router/vue-router.js"></script>
|
||||
<script src="../libraries/vuetify/vuetify-v2.3.9.js"></script>
|
||||
|
||||
<script>
|
||||
var exploreComponent = null;
|
||||
var locationData = null;
|
||||
function getAddressListData(component) {
|
||||
exploreComponent = component;
|
||||
|
||||
function myDomainAddressInputGoTo() {
|
||||
var vircadiaUrl = document.getElementById("domainAddressInput").value;
|
||||
if (vircadiaUrl !== "") {
|
||||
var readyEvent = {
|
||||
"action": "goToUrl",
|
||||
"visit": vircadiaUrl,
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
if (locationData != null) {
|
||||
exploreComponent.updateData(locationData);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function navigateBack() {
|
||||
var readyEvent = {
|
||||
"action": "navigateBack"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
function navigateHome() {
|
||||
var readyEvent = {
|
||||
"action": "navigateHome"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
function navigateForward() {
|
||||
var readyEvent = {
|
||||
"action": "navigateForward"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
function navigateTo(url) {
|
||||
var readyEvent = {
|
||||
"action": "goToUrl",
|
||||
"visit": url,
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
function retrieveAddressList() {
|
||||
var readyEvent = {
|
||||
"action": "requestAddressList",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
EventBridge.scriptEventReceived.connect(function (message) {
|
||||
var messageData = JSON.parse(message);
|
||||
if (messageData.action == "addressList") {
|
||||
myAddress = messageData.myAddress;
|
||||
createTableFromJSON();
|
||||
if (messageData.permission) {
|
||||
document.getElementById("addLocation").innerHTML = "<button class=\"myButton\" onclick=\"window.location.href = 'addLocation.html';\">Add Location To Explore</button>";
|
||||
var bookmarksComponent = null;
|
||||
var bookmarksData = null;
|
||||
function getBookmarkListData(component) {
|
||||
bookmarksComponent = component;
|
||||
|
||||
if (bookmarksData != null) {
|
||||
bookmarksComponent.updateData(bookmarksData);
|
||||
return;
|
||||
}
|
||||
|
||||
var readyEvent = {
|
||||
"action": "requestBookmarksList",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
var addLocationComponent = null;
|
||||
var addLocationData = null;
|
||||
function getAddLocationData(component) {
|
||||
addLocationComponent = component;
|
||||
|
||||
if (addLocationData != null) {
|
||||
addLocationComponent.updateData(addLocationData);
|
||||
return;
|
||||
}
|
||||
|
||||
var readyEvent = {
|
||||
"action": "retrievePortInformation",
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
|
||||
const Explore = {
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
visit: '',
|
||||
filter: {},
|
||||
sortDesc: true,
|
||||
page: 1,
|
||||
pageCount: 0,
|
||||
itemsPerPage: 6,
|
||||
sortBy: 'People',
|
||||
items: [],
|
||||
}
|
||||
},
|
||||
template: document.getElementById("explore-template").innerHTML,
|
||||
created() {
|
||||
this.fetchData();
|
||||
},
|
||||
methods: {
|
||||
openLocation(url) {
|
||||
var readyEvent = {
|
||||
"action": "goToUrl",
|
||||
"visit": url,
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
},
|
||||
visitIconCallback() {
|
||||
if (this.visit !== "") {
|
||||
this.openLocation(this.visit);
|
||||
}
|
||||
},
|
||||
fetchData() {
|
||||
this.error = this.post = null;
|
||||
this.loading = true;
|
||||
getAddressListData(this);
|
||||
},
|
||||
updateData(data) {
|
||||
this.items = data;
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const Bookmarks =
|
||||
{
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
search: '',
|
||||
visit: '',
|
||||
filter: {},
|
||||
sortDesc: true,
|
||||
page: 1,
|
||||
pageCount: 0,
|
||||
itemsPerPage: 6,
|
||||
sortBy: 'name',
|
||||
items: [], //testLocationData,
|
||||
}
|
||||
},
|
||||
template: document.getElementById("bookmarks-template").innerHTML,
|
||||
created() {
|
||||
this.fetchData();
|
||||
},
|
||||
methods: {
|
||||
openLocation(url) {
|
||||
var readyEvent = {
|
||||
"action": "goToUrl",
|
||||
"visit": url,
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
},
|
||||
fetchData() {
|
||||
this.error = this.post = null;
|
||||
this.loading = true;
|
||||
getBookmarkListData(this);
|
||||
},
|
||||
updateData(data) {
|
||||
this.items = data;
|
||||
this.loading = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
const Events = { template: document.getElementById("events-template").innerHTML };
|
||||
const Settings = { template: document.getElementById("settings-template").innerHTML }
|
||||
const AddLocation = {
|
||||
data() {
|
||||
return {
|
||||
valid: true,
|
||||
//permission: false,
|
||||
dialog: false,
|
||||
domainName: "",
|
||||
domainNameRules: [
|
||||
v => !!v || 'Domain Display Name is required',
|
||||
],
|
||||
owner: "",
|
||||
ownerRules: [
|
||||
v => !!v || 'Owner is required',
|
||||
],
|
||||
port: "40102",
|
||||
portRules: [
|
||||
v => !!v || 'Port is required',
|
||||
v => /^[0-9]{1,5}$/.test(v) || 'Must be a valid port number'
|
||||
],
|
||||
locationProvider: "",
|
||||
locationProviderRules: [
|
||||
v => !!v || 'Location Provider is required',
|
||||
],
|
||||
locationProviders: []
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
dialog: function (val) {
|
||||
if (val) {
|
||||
this.opening();
|
||||
}
|
||||
},
|
||||
},
|
||||
props: {
|
||||
permission: false
|
||||
},
|
||||
template: document.getElementById("add-location-template").innerHTML,
|
||||
methods: {
|
||||
opening() {
|
||||
getAddLocationData(this);
|
||||
},
|
||||
updateData(data) {
|
||||
this.locationProviders = data;
|
||||
this.locationProvider = data[0];
|
||||
},
|
||||
addLocation() {
|
||||
if (this.$refs.form.validate()) {
|
||||
var readyEvent = {
|
||||
"action": "addLocation",
|
||||
"domainName": this.domainName,
|
||||
"owner": this.owner,
|
||||
"Port": this.port,
|
||||
"script": this.locationProvider
|
||||
};
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
|
||||
this.closeDialog();
|
||||
}
|
||||
},
|
||||
closeDialog() {
|
||||
this.domainName = "";
|
||||
this.owner = "";
|
||||
this.port = "40102";
|
||||
this.locationProvider = "Current";
|
||||
this.dialog = false;
|
||||
this.$refs.form.resetValidation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const routes = [
|
||||
{ path: '/', component: Explore },
|
||||
{ path: '/bookmarks', component: Bookmarks },
|
||||
{ path: '/events', component: Events },
|
||||
{ path: '/settings', component: Settings }
|
||||
];
|
||||
|
||||
const router = new VueRouter({ routes });
|
||||
|
||||
const vm = new Vue({
|
||||
router,
|
||||
el: '#app',
|
||||
data: {
|
||||
activeItem: string = 'explore',
|
||||
permission: false,
|
||||
isHomeSet: false,
|
||||
},
|
||||
vuetify: new Vuetify({
|
||||
theme: {
|
||||
dark: true,
|
||||
},
|
||||
}),
|
||||
components: {
|
||||
'add-location': AddLocation
|
||||
},
|
||||
methods: {
|
||||
navigateHome() {
|
||||
var readyEvent = {
|
||||
"action": "navigateHome"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
},
|
||||
navigateBack() {
|
||||
var readyEvent = {
|
||||
"action": "navigateBack"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
},
|
||||
navigateForward() {
|
||||
var readyEvent = {
|
||||
"action": "navigateForward"
|
||||
}
|
||||
EventBridge.emitWebEvent(JSON.stringify(readyEvent));
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
|
||||
const self = this;
|
||||
|
||||
EventBridge.scriptEventReceived.connect(function (message) {
|
||||
var messageData = JSON.parse(message);
|
||||
if (messageData.action == "addressListv2") {
|
||||
self.permission = messageData.permission;
|
||||
locationData = messageData.myAddress;
|
||||
exploreComponent.updateData(locationData);
|
||||
self.isHomeSet = messageData.isHomeSet;
|
||||
}
|
||||
if (messageData.action == "bookmarksList") {
|
||||
bookmarksData = messageData.bookmarks;
|
||||
bookmarksComponent.updateData(bookmarksData);
|
||||
}
|
||||
if (messageData.action == "retrievePortInformationResponse") {
|
||||
addLocationData = messageData.goToAddresses;
|
||||
for (let i = 0; i < addLocationData.length; i++) {
|
||||
var metaverseProvider = addLocationData[i].split("/")[2].split(":")[0];
|
||||
addLocationData[i] = "https://" + metaverseProvider + "/interim/d-goto/app/decentralizedGoToServerScript.js";
|
||||
}
|
||||
addLocationComponent.updateData(addLocationData);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var myAddress = [{}];
|
||||
|
||||
function createTableFromJSON() {
|
||||
|
||||
var col = [];
|
||||
for (var i = 0; i < myAddress.length; i++) {
|
||||
for (var key in myAddress[i]) {
|
||||
if (col.indexOf(key) === -1) {
|
||||
col.push(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var table = document.createElement("table");
|
||||
table.setAttribute('id', 'domains');
|
||||
table.setAttribute('class', 'table table-striped sampleTable domains');
|
||||
|
||||
var thead = table.createTHead();
|
||||
|
||||
//var tr = table.insertRow(-1);
|
||||
|
||||
for (var i = 0; i < col.length; i++) {
|
||||
var th = document.createElement("th");
|
||||
if (col[i] === 'People') th.setAttribute('data-sortas', 'numeric');
|
||||
th.innerHTML = col[i];
|
||||
thead.appendChild(th);
|
||||
}
|
||||
|
||||
var tbdy = document.createElement('tbody');
|
||||
for (var i = 0; i < myAddress.length; i++) {
|
||||
|
||||
tr = table.insertRow(-1);
|
||||
|
||||
for (var j = 0; j < col.length; j++) {
|
||||
var tabCell = tr.insertCell(-1);
|
||||
if (j == 2) {
|
||||
var url = "<input id=\"Button\" class=\"myButton\" type=\"button\" onclick=\"navigateTo('" + myAddress[i][col[j]] + "')\" value=\"Visit\" />";
|
||||
tabCell.innerHTML = url;
|
||||
} else {
|
||||
tabCell.innerHTML = myAddress[i][col[j]];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var divContainer = document.getElementById("showData");
|
||||
divContainer.innerHTML = "";
|
||||
divContainer.appendChild(table);
|
||||
$("#domains").fancyTable({
|
||||
sortColumn: 3, // column number for initial sorting
|
||||
sortOrder: 'desc', // 'desc', 'descending', 'asc', 'ascending', -1 (descending) and 1 (ascending)
|
||||
sortable: true,
|
||||
pagination: true, // default: false
|
||||
perPage: 7,
|
||||
searchable: true,
|
||||
globalSearch: true,
|
||||
globalSearchExcludeColumns: [3] // exclude column 2 & 5
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<script src="jquery.min.js"></script>
|
||||
<script src="bootstrap.min.js"></script>
|
||||
<script src="fancyTable.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
@ -74,9 +74,10 @@
|
|||
permission = Entities.canRez()
|
||||
|
||||
var readyEvent = {
|
||||
"action": "addressList",
|
||||
"action": "addressListv2",
|
||||
"myAddress": children,
|
||||
"permission": permission
|
||||
"permission": permission,
|
||||
"isHomeSet": LocationBookmarks.getHomeLocationAddress().length > 0
|
||||
};
|
||||
|
||||
tablet.emitScriptEvent(JSON.stringify(readyEvent));
|
||||
|
|
|
@ -1,260 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 50 200.1"
|
||||
style="enable-background:new 0 0 50 200.1;"
|
||||
xml:space="preserve"
|
||||
id="svg125"
|
||||
sodipodi:docname="Explore.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
|
||||
id="metadata131"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs129" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
id="namedview127"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:zoom="5.6568542"
|
||||
inkscape:cx="18.340874"
|
||||
inkscape:cy="67.670896"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer6"><sodipodi:guide
|
||||
position="14.125,99.999998"
|
||||
orientation="0,1"
|
||||
id="guide204"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="-85.689885,150"
|
||||
orientation="0,1"
|
||||
id="guide206"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="-93.693885,49.999999"
|
||||
orientation="0,1"
|
||||
id="guide208"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="-93.458473,0"
|
||||
orientation="0,1"
|
||||
id="guide210"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="-62.619531,200"
|
||||
orientation="0,1"
|
||||
id="guide212"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="20.995787,157.79945"
|
||||
orientation="0,1"
|
||||
id="guide214"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="22.746663,107.80388"
|
||||
orientation="0,1"
|
||||
id="guide216"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="22.776089,57.704999"
|
||||
orientation="0,1"
|
||||
id="guide218"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="20.716236,7.5989999"
|
||||
orientation="0,1"
|
||||
id="guide220"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,0,255)" /><sodipodi:guide
|
||||
position="13.21875,164.20312"
|
||||
orientation="0,1"
|
||||
id="guide230"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="18.292969,164.20703"
|
||||
orientation="0,1"
|
||||
id="guide5167"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="19.776893,114.21984"
|
||||
orientation="0,1"
|
||||
id="guide5169"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="18.473165,64.114696"
|
||||
orientation="0,1"
|
||||
id="guide5171"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="18.649941,14.009553"
|
||||
orientation="0,1"
|
||||
id="guide5173"
|
||||
inkscape:locked="false" /></sodipodi:namedview>
|
||||
<style
|
||||
type="text/css"
|
||||
id="style10">
|
||||
.st0{fill:#414042;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
.st2{fill:#1E1E1E;}
|
||||
.st3{fill:#333333;}
|
||||
</style>
|
||||
|
||||
<g
|
||||
id="Layer_3">
|
||||
</g>
|
||||
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="Base"
|
||||
style="display:inline"><g
|
||||
id="Layer_2">
|
||||
<g
|
||||
id="g16">
|
||||
<g
|
||||
id="g14">
|
||||
<path
|
||||
class="st0"
|
||||
d="m 50.1,146.1 c 0,2.2 -1.8,4 -4,4 h -42 c -2.2,0 -4,-1.8 -4,-4 v -42 c 0,-2.2 1.8,-4 4,-4 h 42 c 2.2,0 4,1.8 4,4 z"
|
||||
id="path12"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#414042" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g22">
|
||||
<g
|
||||
id="g20">
|
||||
<path
|
||||
class="st0"
|
||||
d="m 50,196.1 c 0,2.2 -1.8,4 -4,4 H 4 c -2.2,0 -4,-1.8 -4,-4 v -42 c 0,-2.2 1.8,-4 4,-4 h 42 c 2.2,0 4,1.8 4,4 z"
|
||||
id="path18"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#414042" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g28">
|
||||
<g
|
||||
id="g26">
|
||||
<path
|
||||
class="st1"
|
||||
d="m 50,46 c 0,2.2 -1.8,4 -4,4 H 4 C 1.8,50 0,48.2 0,46 V 4 C 0,1.8 1.8,0 4,0 h 42 c 2.2,0 4,1.8 4,4 z"
|
||||
id="path24"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g32">
|
||||
<path
|
||||
class="st2"
|
||||
d="m 50,96.1 c 0,2.2 -1.8,4 -4,4 H 4 c -2.2,0 -4,-1.8 -4,-4 v -42 c 0,-2.2 1.8,-4 4,-4 h 42 c 2.2,0 4,1.8 4,4 z"
|
||||
id="path30"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#1e1e1e" />
|
||||
</g>
|
||||
</g></g><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="Text"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true" /><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="World"
|
||||
style="display:inline"><g
|
||||
style="fill:#aaccff;stroke:#000000"
|
||||
id="g5138"
|
||||
transform="matrix(0.06304349,0,0,0.06304349,11.1413,6.36036)"><path
|
||||
id="path5124"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:26;fill:#aaccff" /><path
|
||||
id="path5126"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:18;fill:#aaccff" /></g><g
|
||||
transform="matrix(0.06304349,0,0,0.06304349,11.1413,56.347551)"
|
||||
id="g5155"
|
||||
style="fill:#aaccff;stroke:#000000"><path
|
||||
style="fill:#aaccff;stroke-width:26"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
id="path5151" /><path
|
||||
style="fill:#aaccff;stroke-width:18"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
id="path5153" /></g><g
|
||||
style="fill:#aaccff;stroke:#000000"
|
||||
id="g5161"
|
||||
transform="matrix(0.06304349,0,0,0.06304349,12.025183,106.4527)"><path
|
||||
id="path5157"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:26" /><path
|
||||
id="path5159"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#aaccff;stroke-width:18" /></g><g
|
||||
transform="matrix(0.06304349,0,0,0.06304349,12.025183,156.55784)"
|
||||
id="g5190"
|
||||
style="fill:#aaccff;stroke:#000000"><path
|
||||
style="fill:#aaccff;stroke-width:26"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 209,15 a 195,195 0 1 0 2,0 z"
|
||||
id="path5186" /><path
|
||||
style="fill:#aaccff;stroke-width:18"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 210,15 V 405 M 405,210 H 15 M 59,90 a 260,260 0 0 0 302,0 m 0,240 A 260,260 0 0 0 59,330 M 195,20 a 250,250 0 0 0 0,382 m 30,0 a 250,250 0 0 0 0,-382"
|
||||
id="path5188" /></g></g><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:53.33333206px;line-height:1.5;font-family:Verdana;-inkscape-font-specification:Verdana;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="3.625"
|
||||
y="42.300552"
|
||||
id="text236"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan234"
|
||||
x="3.625"
|
||||
y="97.624832" /></text>
|
||||
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.22626972px;line-height:1.5;font-family:Verdana;-inkscape-font-specification:Verdana;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.31582576"
|
||||
d="m 30.032087,35.765146 c -0.941155,0 -1.679424,0.297877 -2.214236,0.897073 -0.534805,0.59633 -0.803088,1.408963 -0.803088,2.438204 0,1.020642 0.268283,1.831959 0.803088,2.434022 0.534812,0.599197 1.273081,0.899166 2.214236,0.899166 0.943776,0 1.683255,-0.299969 2.218061,-0.899166 0.534805,-0.602063 0.801179,-1.41338 0.801179,-2.434022 0,-1.029241 -0.267577,-1.841874 -0.805004,-2.438204 -0.537428,-0.599196 -1.275703,-0.897073 -2.214236,-0.897073 z M 4.6754597,35.896884 v 6.404989 H 8.9108061 V 41.06186 H 6.1783862 v -1.582951 h 2.535472 v -1.237921 h -2.535472 v -1.104092 h 2.7324199 v -1.240012 z m 4.8950284,0 2.0344959,3.178447 -2.0765627,3.226542 h 1.6673697 l 1.284944,-2.107813 1.261999,2.107813 h 1.747679 l -2.076563,-3.291366 2.044056,-3.113623 h -1.671192 l -1.254351,1.996984 -1.218021,-1.996984 z m 6.7612579,0 v 6.404989 h 1.508663 v -2.086901 h 0.940763 c 0.427322,0 0.78312,-0.06337 1.068875,-0.19238 0.288377,-0.129014 0.550647,-0.320664 0.783969,-0.572957 0.170406,-0.186354 0.300229,-0.415605 0.391986,-0.687967 0.09175,-0.275228 0.137672,-0.55601 0.137672,-0.842708 0,-0.369839 -0.06155,-0.687681 -0.187386,-0.951442 C 20.853071,36.703757 20.673012,36.488432 20.437067,36.319282 20.240449,36.178801 20.01327,36.074426 19.756353,36.00562 19.502058,35.93395 19.187858,35.896884 18.81559,35.896884 Z m 5.898892,0 v 6.404989 H 26.4526 V 41.06186 h -2.7133 v -5.164976 z m 11.96987,0 v 6.404989 h 1.501016 v -2.348287 h 0.696013 l 1.59662,2.348287 h 1.845202 l -1.954193,-2.745594 c 0.372269,-0.197819 0.657391,-0.44417 0.856629,-0.742334 0.201861,-0.298166 0.302115,-0.685411 0.302115,-1.15846 0,-0.344036 -0.06395,-0.628763 -0.195036,-0.855253 -0.128457,-0.229358 -0.303703,-0.414972 -0.523913,-0.558321 -0.217597,-0.143348 -0.450791,-0.237199 -0.699839,-0.280205 -0.249056,-0.04301 -0.546916,-0.06483 -0.892962,-0.06483 z m 6.306174,0 v 6.404989 h 4.235349 V 41.06186 h -2.732419 v -1.582951 h 2.537381 v -1.237921 h -2.537381 v -1.104092 h 2.732419 v -1.240012 z m -10.47077,1.074817 c 0.18876,0 0.370017,0.03969 0.543047,0.1171 0.175645,0.07741 0.329031,0.202285 0.462731,0.374303 0.131078,0.166285 0.238053,0.385016 0.31932,0.65451 0.08127,0.269496 0.12238,0.594454 0.12238,0.978628 0,0.358371 -0.03627,0.672267 -0.107079,0.938896 -0.07075,0.263762 -0.180163,0.493012 -0.326977,0.687967 -0.131079,0.172017 -0.283263,0.299526 -0.458907,0.382668 -0.175644,0.08027 -0.360513,0.119192 -0.554515,0.119192 -0.193995,0 -0.378864,-0.03892 -0.554516,-0.119192 -0.175644,-0.08027 -0.32974,-0.205152 -0.460818,-0.374304 -0.131078,-0.169152 -0.23614,-0.387881 -0.317415,-0.654509 -0.07864,-0.269495 -0.118547,-0.59523 -0.118547,-0.976537 0,-0.372706 0.04113,-0.697664 0.122372,-0.978627 0.0839,-0.28383 0.190155,-0.506505 0.32124,-0.667055 0.141565,-0.172019 0.296865,-0.29558 0.464644,-0.370124 0.170402,-0.07454 0.351665,-0.112916 0.54304,-0.112916 z m 5.665612,0.104557 h 0.546865 c 0.180896,0 0.339799,0.0052 0.476121,0.01673 0.136327,0.0086 0.255325,0.03568 0.357565,0.08155 0.146807,0.06594 0.251382,0.157162 0.311677,0.27184 0.06026,0.114679 0.08987,0.251394 0.08987,0.411944 0,0.18062 -0.02473,0.326001 -0.07457,0.434946 -0.04719,0.106078 -0.122675,0.203875 -0.227537,0.292751 -0.110113,0.09175 -0.246664,0.149848 -0.4092,0.175651 -0.162536,0.0258 -0.36495,0.03974 -0.606141,0.03974 H 35.70153 Z m -17.861115,0.01673 h 0.260049 c 0.249052,0 0.449062,0.0039 0.598493,0.01255 0.149431,0.0058 0.301612,0.04411 0.458909,0.112918 0.117972,0.05161 0.222541,0.142051 0.311676,0.273932 0.08914,0.129013 0.133847,0.283602 0.133847,0.464221 0,0.183485 -0.02236,0.34148 -0.06693,0.470494 -0.04193,0.126146 -0.111421,0.234466 -0.208421,0.326208 -0.112729,0.103209 -0.252883,0.172614 -0.420667,0.207018 -0.165161,0.0344 -0.375994,0.05019 -0.632911,0.05019 h -0.434052 z"
|
||||
id="text240"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.22626972px;line-height:1.5;font-family:Verdana;-inkscape-font-specification:Verdana;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31582576"
|
||||
d="m 30.03125,85.759766 c -0.941155,0 -1.678079,0.297288 -2.212891,0.896484 -0.534805,0.59633 -0.802734,1.408259 -0.802734,2.4375 0,1.020642 0.267929,1.833484 0.802734,2.435547 0.534812,0.599197 1.271736,0.898437 2.212891,0.898437 0.943776,0 1.683944,-0.29924 2.21875,-0.898437 0.534805,-0.602063 0.800781,-1.414905 0.800781,-2.435547 0,-1.029241 -0.26726,-1.84117 -0.804687,-2.4375 -0.537428,-0.599196 -1.276311,-0.896484 -2.214844,-0.896484 z M 4.6757812,85.890625 v 6.40625 h 4.234375 V 91.056641 H 6.1777344 V 89.472656 H 8.7128906 V 88.234375 H 6.1777344 v -1.103516 h 2.7324218 v -1.240234 z m 4.8945313,0 2.0351565,3.179687 -2.0761721,3.226563 h 1.6660151 l 1.285157,-2.109375 1.261719,2.109375 h 1.748046 l -2.076172,-3.292969 2.042969,-3.113281 h -1.669922 l -1.253906,1.998047 -1.21875,-1.998047 z m 6.7617185,0 v 6.40625 h 1.507813 v -2.087891 h 0.941406 c 0.427322,0 0.782604,-0.0624 1.068359,-0.191406 0.288377,-0.129014 0.551835,-0.321926 0.785157,-0.574219 0.170406,-0.186354 0.298868,-0.415138 0.390625,-0.6875 0.09175,-0.275228 0.138672,-0.555099 0.138671,-0.841797 0,-0.369838 -0.06166,-0.689363 -0.1875,-0.953124 C 20.853345,86.697176 20.673445,86.483603 20.4375,86.314453 20.240882,86.173972 20.012776,86.068806 19.755859,86 19.501564,85.92833 19.188674,85.890625 18.816406,85.890625 Z m 5.898438,0 v 6.40625 h 4.222656 v -1.240234 h -2.712891 v -5.166016 z m 11.970703,0 v 6.40625 h 1.5 v -2.349609 h 0.697266 l 1.595703,2.349609 h 1.845703 l -1.955078,-2.746094 c 0.372269,-0.197819 0.658183,-0.444023 0.857422,-0.742187 0.201861,-0.298166 0.300781,-0.685154 0.300781,-1.158203 0,-0.344036 -0.06227,-0.628979 -0.19336,-0.855469 -0.128457,-0.229358 -0.30518,-0.415245 -0.52539,-0.558594 -0.217597,-0.143348 -0.450171,-0.238244 -0.699219,-0.28125 -0.249056,-0.04301 -0.546532,-0.06445 -0.892578,-0.06445 z m 6.304687,0 v 6.40625 h 4.236329 v -1.240234 h -2.732422 v -1.583985 h 2.537109 v -1.238281 h -2.537109 v -1.103516 h 2.732422 v -1.240234 z m -10.470703,1.076172 c 0.18876,0 0.369939,0.03978 0.542969,0.117187 0.175645,0.07741 0.329191,0.201029 0.462891,0.373047 0.131078,0.166285 0.239045,0.384803 0.320312,0.654297 0.08127,0.269496 0.121094,0.594342 0.121094,0.978516 0,0.358371 -0.03466,0.672824 -0.105469,0.939453 -0.07075,0.263762 -0.181311,0.492545 -0.328125,0.6875 -0.131079,0.172017 -0.28334,0.29967 -0.458984,0.382812 -0.175644,0.08027 -0.360686,0.119141 -0.554688,0.119141 -0.193995,0 -0.379035,-0.03887 -0.554687,-0.119141 -0.175644,-0.08027 -0.327907,-0.203894 -0.458985,-0.373047 -0.131078,-0.169151 -0.237084,-0.389621 -0.318359,-0.65625 -0.07864,-0.269495 -0.119141,-0.595255 -0.119141,-0.976562 0,-0.372706 0.04181,-0.697553 0.123047,-0.978516 0.0839,-0.28383 0.189228,-0.505465 0.320313,-0.666015 0.141565,-0.172019 0.297065,-0.29655 0.464844,-0.371094 0.170401,-0.07454 0.351593,-0.111328 0.542968,-0.111328 z m 5.666016,0.103515 h 0.546875 c 0.180896,0 0.34024,0.006 0.476562,0.01758 0.136327,0.0086 0.255182,0.03421 0.357422,0.08008 0.146807,0.06594 0.252205,0.158759 0.3125,0.273437 0.06026,0.114679 0.08984,0.25156 0.08984,0.41211 0,0.18062 -0.02633,0.324648 -0.07617,0.433593 -0.04719,0.106078 -0.1217,0.204093 -0.226562,0.292969 -0.110113,0.09175 -0.247621,0.149978 -0.410157,0.175781 -0.162536,0.0258 -0.364277,0.03906 -0.605468,0.03906 H 35.70117 Z m -17.861328,0.01758 h 0.259765 c 0.249052,0 0.450179,0.0031 0.59961,0.01172 0.149431,0.0058 0.301687,0.04447 0.458984,0.113282 0.117972,0.05161 0.221412,0.141556 0.310547,0.273437 0.08914,0.129013 0.134766,0.284225 0.134766,0.464844 0,0.183485 -0.02184,0.341689 -0.06641,0.470703 -0.04193,0.126146 -0.111984,0.23443 -0.208984,0.326172 -0.112729,0.103209 -0.252138,0.172627 -0.419922,0.207031 -0.165161,0.0344 -0.375895,0.04883 -0.632812,0.04883 h -0.435547 z"
|
||||
id="path4755"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4758"
|
||||
d="m 30.03125,135.8579 c -0.941155,0 -1.678079,0.29729 -2.212891,0.89648 -0.534805,0.59633 -0.802734,1.40826 -0.802734,2.4375 0,1.02064 0.267929,1.83349 0.802734,2.43555 0.534812,0.5992 1.271736,0.89844 2.212891,0.89844 0.943776,0 1.683944,-0.29924 2.21875,-0.89844 0.534805,-0.60206 0.800781,-1.41491 0.800781,-2.43555 0,-1.02924 -0.26726,-1.84117 -0.804687,-2.4375 -0.537428,-0.59919 -1.276311,-0.89648 -2.214844,-0.89648 z m -25.3554688,0.13086 v 6.40625 h 4.234375 v -1.24024 H 6.1777344 v -1.58398 h 2.5351562 v -1.23828 H 6.1777344 v -1.10352 h 2.7324218 v -1.24023 z m 4.8945313,0 2.0351565,3.17968 -2.0761721,3.22657 h 1.6660151 l 1.285157,-2.10938 1.261719,2.10938 h 1.748046 l -2.076172,-3.29297 2.042969,-3.11328 h -1.669922 l -1.253906,1.99804 -1.21875,-1.99804 z m 6.7617185,0 v 6.40625 h 1.507813 v -2.08789 h 0.941406 c 0.427322,0 0.782604,-0.0624 1.068359,-0.19141 0.288377,-0.12901 0.551835,-0.32193 0.785157,-0.57422 0.170406,-0.18635 0.298868,-0.41514 0.390625,-0.6875 0.09175,-0.27523 0.138672,-0.5551 0.138671,-0.8418 0,-0.36983 -0.06166,-0.68936 -0.1875,-0.95312 -0.123217,-0.26376 -0.303117,-0.47734 -0.539062,-0.64649 -0.196618,-0.14048 -0.424724,-0.24564 -0.681641,-0.31445 -0.254295,-0.0717 -0.567185,-0.10937 -0.939453,-0.10937 z m 5.898438,0 v 6.40625 h 4.222656 v -1.24024 h -2.712891 v -5.16601 z m 11.970703,0 v 6.40625 h 1.5 v -2.34961 h 0.697266 l 1.595703,2.34961 h 1.845703 l -1.955078,-2.7461 c 0.372269,-0.19782 0.658183,-0.44402 0.857422,-0.74218 0.201861,-0.29817 0.300781,-0.68516 0.300781,-1.15821 0,-0.34403 -0.06227,-0.62898 -0.19336,-0.85547 -0.128457,-0.22935 -0.30518,-0.41524 -0.52539,-0.55859 -0.217597,-0.14335 -0.450171,-0.23824 -0.699219,-0.28125 -0.249056,-0.043 -0.546532,-0.0644 -0.892578,-0.0644 z m 6.304687,0 v 6.40625 h 4.236329 v -1.24024 h -2.732422 v -1.58398 h 2.537109 v -1.23828 h -2.537109 v -1.10352 h 2.732422 v -1.24023 z m -10.470703,1.07617 c 0.18876,0 0.369939,0.0398 0.542969,0.11719 0.175645,0.0774 0.329191,0.20102 0.462891,0.37304 0.131078,0.16629 0.239045,0.38481 0.320312,0.6543 0.08127,0.2695 0.121094,0.59434 0.121094,0.97852 0,0.35837 -0.03466,0.67282 -0.105469,0.93945 -0.07075,0.26376 -0.181311,0.49254 -0.328125,0.6875 -0.131079,0.17202 -0.28334,0.29967 -0.458984,0.38281 -0.175644,0.0803 -0.360686,0.11914 -0.554688,0.11914 -0.193995,0 -0.379035,-0.0389 -0.554687,-0.11914 -0.175644,-0.0803 -0.327907,-0.20389 -0.458985,-0.37305 -0.131078,-0.16915 -0.237084,-0.38962 -0.318359,-0.65625 -0.07864,-0.26949 -0.119141,-0.59525 -0.119141,-0.97656 0,-0.3727 0.04181,-0.69755 0.123047,-0.97851 0.0839,-0.28383 0.189228,-0.50547 0.320313,-0.66602 0.141565,-0.17202 0.297065,-0.29655 0.464844,-0.37109 0.170401,-0.0745 0.351593,-0.11133 0.542968,-0.11133 z m 5.666016,0.10351 h 0.546875 c 0.180896,0 0.34024,0.006 0.476562,0.0176 0.136327,0.009 0.255182,0.0342 0.357422,0.0801 0.146807,0.0659 0.252205,0.15876 0.3125,0.27344 0.06026,0.11468 0.08984,0.25156 0.08984,0.41211 0,0.18062 -0.02633,0.32465 -0.07617,0.43359 -0.04719,0.10608 -0.1217,0.2041 -0.226562,0.29297 -0.110113,0.0917 -0.247621,0.14998 -0.410157,0.17578 -0.162536,0.0258 -0.364277,0.0391 -0.605468,0.0391 H 35.70117 Z m -17.861328,0.0176 h 0.259765 c 0.249052,0 0.450179,0.003 0.59961,0.0117 0.149431,0.006 0.301687,0.0445 0.458984,0.11329 0.117972,0.0516 0.221412,0.14155 0.310547,0.27343 0.08914,0.12902 0.134766,0.28423 0.134766,0.46485 0,0.18348 -0.02184,0.34169 -0.06641,0.4707 -0.04193,0.12615 -0.111984,0.23443 -0.208984,0.32617 -0.112729,0.10321 -0.252138,0.17263 -0.419922,0.20703 -0.165161,0.0344 -0.375895,0.0488 -0.632812,0.0488 h -0.435547 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.22626972px;line-height:1.5;font-family:Verdana;-inkscape-font-specification:Verdana;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31582576" /><path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.22626972px;line-height:1.5;font-family:Verdana;-inkscape-font-specification:Verdana;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31582576"
|
||||
d="m 30.03125,185.9639 c -0.941155,0 -1.678079,0.29729 -2.212891,0.89648 -0.534805,0.59633 -0.802734,1.40826 -0.802734,2.4375 0,1.02064 0.267929,1.83349 0.802734,2.43555 0.534812,0.5992 1.271736,0.89844 2.212891,0.89844 0.943776,0 1.683944,-0.29924 2.21875,-0.89844 0.534805,-0.60206 0.800781,-1.41491 0.800781,-2.43555 0,-1.02924 -0.26726,-1.84117 -0.804687,-2.4375 -0.537428,-0.59919 -1.276311,-0.89648 -2.214844,-0.89648 z m -25.3554688,0.13086 v 6.40625 h 4.234375 v -1.24024 H 6.1777344 v -1.58398 h 2.5351562 v -1.23828 H 6.1777344 v -1.10352 h 2.7324218 v -1.24023 z m 4.8945313,0 2.0351565,3.17968 -2.0761721,3.22657 h 1.6660151 l 1.285157,-2.10938 1.261719,2.10938 h 1.748046 l -2.076172,-3.29297 2.042969,-3.11328 h -1.669922 l -1.253906,1.99804 -1.21875,-1.99804 z m 6.7617185,0 v 6.40625 h 1.507813 v -2.08789 h 0.941406 c 0.427322,0 0.782604,-0.0624 1.068359,-0.19141 0.288377,-0.12901 0.551835,-0.32193 0.785157,-0.57422 0.170406,-0.18635 0.298868,-0.41514 0.390625,-0.6875 0.09175,-0.27523 0.138672,-0.5551 0.138671,-0.8418 0,-0.36983 -0.06166,-0.68936 -0.1875,-0.95312 -0.123217,-0.26376 -0.303117,-0.47734 -0.539062,-0.64649 -0.196618,-0.14048 -0.424724,-0.24564 -0.681641,-0.31445 -0.254295,-0.0717 -0.567185,-0.10937 -0.939453,-0.10937 z m 5.898438,0 v 6.40625 h 4.222656 v -1.24024 h -2.712891 v -5.16601 z m 11.970703,0 v 6.40625 h 1.5 v -2.34961 h 0.697266 l 1.595703,2.34961 h 1.845703 l -1.955078,-2.7461 c 0.372269,-0.19782 0.658183,-0.44402 0.857422,-0.74218 0.201861,-0.29817 0.300781,-0.68516 0.300781,-1.15821 0,-0.34403 -0.06227,-0.62898 -0.19336,-0.85547 -0.128457,-0.22935 -0.30518,-0.41524 -0.52539,-0.55859 -0.217597,-0.14335 -0.450171,-0.23824 -0.699219,-0.28125 -0.249056,-0.043 -0.546532,-0.0644 -0.892578,-0.0644 z m 6.304687,0 v 6.40625 h 4.236329 v -1.24024 h -2.732422 v -1.58398 h 2.537109 v -1.23828 h -2.537109 v -1.10352 h 2.732422 v -1.24023 z m -10.470703,1.07617 c 0.18876,0 0.369939,0.0398 0.542969,0.11719 0.175645,0.0774 0.329191,0.20102 0.462891,0.37304 0.131078,0.16629 0.239045,0.38481 0.320312,0.6543 0.08127,0.2695 0.121094,0.59434 0.121094,0.97852 0,0.35837 -0.03466,0.67282 -0.105469,0.93945 -0.07075,0.26376 -0.181311,0.49254 -0.328125,0.6875 -0.131079,0.17202 -0.28334,0.29967 -0.458984,0.38281 -0.175644,0.0803 -0.360686,0.11914 -0.554688,0.11914 -0.193995,0 -0.379035,-0.0389 -0.554687,-0.11914 -0.175644,-0.0803 -0.327907,-0.20389 -0.458985,-0.37305 -0.131078,-0.16915 -0.237084,-0.38962 -0.318359,-0.65625 -0.07864,-0.26949 -0.119141,-0.59525 -0.119141,-0.97656 0,-0.3727 0.04181,-0.69755 0.123047,-0.97851 0.0839,-0.28383 0.189228,-0.50547 0.320313,-0.66602 0.141565,-0.17202 0.297065,-0.29655 0.464844,-0.37109 0.170401,-0.0745 0.351593,-0.11133 0.542968,-0.11133 z m 5.666016,0.10351 h 0.546875 c 0.180896,0 0.34024,0.006 0.476562,0.0176 0.136327,0.009 0.255182,0.0342 0.357422,0.0801 0.146807,0.0659 0.252205,0.15876 0.3125,0.27344 0.06026,0.11468 0.08984,0.25156 0.08984,0.41211 0,0.18062 -0.02633,0.32465 -0.07617,0.43359 -0.04719,0.10608 -0.1217,0.2041 -0.226562,0.29297 -0.110113,0.0917 -0.247621,0.14998 -0.410157,0.17578 -0.162536,0.0258 -0.364277,0.0391 -0.605468,0.0391 H 35.70117 Z m -17.861328,0.0176 h 0.259765 c 0.249052,0 0.450179,0.003 0.59961,0.0117 0.149431,0.006 0.301687,0.0445 0.458984,0.11329 0.117972,0.0516 0.221412,0.14155 0.310547,0.27343 0.08914,0.12902 0.134766,0.28423 0.134766,0.46485 0,0.18348 -0.02184,0.34169 -0.06641,0.4707 -0.04193,0.12615 -0.111984,0.23443 -0.208984,0.32617 -0.112729,0.10321 -0.252138,0.17263 -0.419922,0.20703 -0.165161,0.0344 -0.375895,0.0488 -0.632812,0.0488 h -0.435547 z"
|
||||
id="path4760"
|
||||
inkscape:connector-curvature="0" /></svg>
|
Before Width: | Height: | Size: 24 KiB |
|
@ -1,217 +0,0 @@
|
|||
/*!
|
||||
* jQuery fancyTable plugin
|
||||
* https://github.com/myspace-nu
|
||||
*
|
||||
* Copyright 2018 Johan Johansson
|
||||
* Released under the MIT license
|
||||
*/
|
||||
(function($) {
|
||||
$.fn.fancyTable = function(options) {
|
||||
var settings = $.extend({
|
||||
inputStyle: "",
|
||||
inputPlaceholder: "Search...",
|
||||
pagination: false,
|
||||
paginationClass: "btn btn-light",
|
||||
paginationClassActive: "active",
|
||||
pagClosest: 3,
|
||||
perPage: 10,
|
||||
sortable: true,
|
||||
searchable: true,
|
||||
onInit: function(){ },
|
||||
onUpdate: function(){ },
|
||||
testing: false
|
||||
}, options);
|
||||
var instance = this;
|
||||
this.settings = settings;
|
||||
this.tableUpdate = function (elm) {
|
||||
elm.fancyTable.matches = 0;
|
||||
$(elm).find("tbody tr").each(function() {
|
||||
var n=0;
|
||||
var match = true;
|
||||
var globalMatch = false;
|
||||
$(this).find("td").each(function() {
|
||||
if(!settings.globalSearch && elm.fancyTable.searchArr[n] && !(new RegExp(elm.fancyTable.searchArr[n],"i").test($(this).html()))){
|
||||
match = false;
|
||||
} else if(settings.globalSearch && (!elm.fancyTable.search || (new RegExp(elm.fancyTable.search,"i").test($(this).html())))){
|
||||
if(!Array.isArray(settings.globalSearchExcludeColumns) || !settings.globalSearchExcludeColumns.includes(n+1)){
|
||||
globalMatch = true;
|
||||
}
|
||||
}
|
||||
n++;
|
||||
});
|
||||
if((settings.globalSearch && globalMatch) || (!settings.globalSearch && match)){
|
||||
elm.fancyTable.matches++
|
||||
if(!settings.pagination || (elm.fancyTable.matches>(elm.fancyTable.perPage*(elm.fancyTable.page-1)) && elm.fancyTable.matches<=(elm.fancyTable.perPage*elm.fancyTable.page))){
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
elm.fancyTable.pages = Math.ceil(elm.fancyTable.matches/elm.fancyTable.perPage);
|
||||
if(settings.pagination){
|
||||
var paginationElement = (elm.fancyTable.paginationElement) ? $(elm.fancyTable.paginationElement) : $(elm).find(".pag");
|
||||
paginationElement.empty();
|
||||
for(var n=1; n<=elm.fancyTable.pages; n++){
|
||||
if(n==1 || (n>(elm.fancyTable.page-(settings.pagClosest+1)) && n<(elm.fancyTable.page+(settings.pagClosest+1))) || n==elm.fancyTable.pages){
|
||||
var a = $("<a>",{
|
||||
html:n,
|
||||
"data-n": n,
|
||||
style:"margin:0.2em",
|
||||
class:settings.paginationClass+" "+((n==elm.fancyTable.page)?settings.paginationClassActive:"")
|
||||
}).css("cursor","pointer").bind("click",function(){
|
||||
elm.fancyTable.page = $(this).data("n");
|
||||
instance.tableUpdate(elm);
|
||||
});
|
||||
if(n==elm.fancyTable.pages && elm.fancyTable.page<(elm.fancyTable.pages-settings.pagClosest-1)){
|
||||
paginationElement.append($("<span>...</span>"));
|
||||
}
|
||||
paginationElement.append(a);
|
||||
if(n==1 && elm.fancyTable.page>settings.pagClosest+2){
|
||||
paginationElement.append($("<span>...</span>"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
settings.onUpdate.call(this,elm);
|
||||
};
|
||||
this.reinit = function(elm){
|
||||
$(this).each(function(){
|
||||
$(this).find("th a").contents().unwrap();
|
||||
$(this).find("tr.fancySearchRow").remove();
|
||||
});
|
||||
$(this).fancyTable(this.settings);
|
||||
};
|
||||
this.tableSort = function (elm) {
|
||||
if(typeof elm.fancyTable.sortColumn !== "undefined" && elm.fancyTable.sortColumn < elm.fancyTable.nColumns){
|
||||
$(elm).find("thead th div.sortArrow").each(function(){
|
||||
$(this).remove();
|
||||
});
|
||||
var sortArrow = $("<div>",{"class":"sortArrow"}).css({"margin":"0.1em","display":"inline-block","width":0,"height":0,"border-left":"0.4em solid transparent","border-right":"0.4em solid transparent"});
|
||||
sortArrow.css(
|
||||
(elm.fancyTable.sortOrder>0) ?
|
||||
{"border-top":"0.4em solid #000"} :
|
||||
{"border-bottom":"0.4em solid #000"}
|
||||
);
|
||||
$(elm).find("thead th a").eq(elm.fancyTable.sortColumn).append(sortArrow);
|
||||
var rows = $(elm).find("tbody tr").toArray().sort(
|
||||
function(a, b) {
|
||||
var stra = $(a).find("td").eq(elm.fancyTable.sortColumn).html();
|
||||
var strb = $(b).find("td").eq(elm.fancyTable.sortColumn).html();
|
||||
if(elm.fancyTable.sortAs[elm.fancyTable.sortColumn] == 'numeric'){
|
||||
return((elm.fancyTable.sortOrder>0) ? parseFloat(stra)-parseFloat(strb) : parseFloat(strb)-parseFloat(stra));
|
||||
} else {
|
||||
return((stra<strb)?-elm.fancyTable.sortOrder:(stra>strb)?elm.fancyTable.sortOrder:0);
|
||||
}
|
||||
}
|
||||
);
|
||||
$(elm).find("tbody").empty().append(rows);
|
||||
}
|
||||
};
|
||||
this.each(function() {
|
||||
if($(this).prop("tagName")!=="TABLE"){
|
||||
console.warn("fancyTable: Element is not a table.");
|
||||
return true;
|
||||
}
|
||||
var elm = this;
|
||||
elm.fancyTable = {
|
||||
nColumns: $(elm).find("td").first().parent().find("td").length,
|
||||
nRows : $(this).find("tbody tr").length,
|
||||
perPage : settings.perPage,
|
||||
page : 1,
|
||||
pages : 0,
|
||||
matches : 0,
|
||||
searchArr : [],
|
||||
search : "",
|
||||
sortColumn : settings.sortColumn,
|
||||
sortOrder : (typeof settings.sortOrder === "undefined") ? 1 : (new RegExp("desc","i").test(settings.sortOrder) || settings.sortOrder == -1) ? -1 : 1,
|
||||
sortAs:[], // undefined or numeric
|
||||
paginationElement : settings.paginationElement
|
||||
};
|
||||
if($(elm).find("tbody").length==0){
|
||||
var content = $(elm).html();
|
||||
$(elm).empty();
|
||||
$(elm).append("<tbody>").append($(content));
|
||||
}
|
||||
if($(elm).find("thead").length==0){
|
||||
$(elm).prepend($("<thead>"));
|
||||
// Maybe add generated headers at some point
|
||||
//var c=$(elm).find("tr").first().find("td").length;
|
||||
//for(var n=0; n<c; n++){
|
||||
// $(elm).find("thead").append($("<th></th>"));
|
||||
//}
|
||||
}
|
||||
if(settings.sortable){
|
||||
var n=0;
|
||||
$(elm).find("thead th").each(function() {
|
||||
elm.fancyTable.sortAs.push(($(this).data('sortas')=='numeric')?'numeric':'');
|
||||
var content = $(this).html();
|
||||
var a = $("<a>",{
|
||||
html:content,
|
||||
"data-n": n,
|
||||
class:""
|
||||
}).css("cursor","pointer").bind("click",function(){
|
||||
if(elm.fancyTable.sortColumn == $(this).data("n")){
|
||||
elm.fancyTable.sortOrder=-elm.fancyTable.sortOrder;
|
||||
} else {
|
||||
elm.fancyTable.sortOrder=1;
|
||||
}
|
||||
elm.fancyTable.sortColumn = $(this).data("n");
|
||||
instance.tableSort(elm);
|
||||
instance.tableUpdate(elm);
|
||||
});
|
||||
$(this).empty();
|
||||
$(this).append(a);
|
||||
n++;
|
||||
});
|
||||
}
|
||||
if(settings.searchable){
|
||||
var searchHeader = $("<tr>").addClass("fancySearchRow");
|
||||
if(settings.globalSearch){
|
||||
var searchField = $("<input>",{
|
||||
"placeholder": settings.inputPlaceholder,
|
||||
style:"width:100%;"+settings.inputStyle
|
||||
}).bind("change paste keyup",function(){
|
||||
elm.fancyTable.search = $(this).val();
|
||||
elm.fancyTable.page = 1;
|
||||
instance.tableUpdate(elm);
|
||||
});
|
||||
var th = $("<th>",{ style:"padding:2px;" }).attr("colspan",elm.fancyTable.nColumns);
|
||||
$(searchField).appendTo($(th));
|
||||
$(th).appendTo($(searchHeader));
|
||||
} else {
|
||||
var n=0;
|
||||
$(elm).find("td").first().parent().find("td").each(function() {
|
||||
elm.fancyTable.searchArr.push("");
|
||||
var searchField = $("<input>",{
|
||||
"data-n": n,
|
||||
"placeholder": settings.inputPlaceholder,
|
||||
style:"width:100%;"+settings.inputStyle
|
||||
}).bind("change paste keyup",function(){
|
||||
elm.fancyTable.searchArr[$(this).data("n")] = $(this).val();
|
||||
elm.fancyTable.page = 1;
|
||||
instance.tableUpdate(elm);
|
||||
});
|
||||
var th = $("<th>",{ style:"padding:2px;" });
|
||||
$(searchField).appendTo($(th));
|
||||
$(th).appendTo($(searchHeader));
|
||||
n++;
|
||||
});
|
||||
}
|
||||
searchHeader.appendTo($(elm).find("thead"));
|
||||
}
|
||||
// Sort
|
||||
instance.tableSort(elm);
|
||||
if(settings.pagination && !settings.paginationElement){
|
||||
$(elm).find("tfoot").remove();
|
||||
$(elm).append($("<tfoot><tr></tr></tfoot>"));
|
||||
$(elm).find("tfoot tr").append($("<td class='pag'></td>",{ }).attr("colspan",elm.fancyTable.nColumns));
|
||||
}
|
||||
instance.tableUpdate(elm);
|
||||
settings.onInit.call(this,elm);
|
||||
});
|
||||
return this;
|
||||
};
|
||||
}(jQuery));
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,25 @@
|
|||
> *Note:* Please use the main [MaterialDesign](https://github.com/Templarian/MaterialDesign/issues) repo to report issues. This repo is for distribution of the Webfont files only.
|
||||
|
||||
# Webfont - Material Design Icons
|
||||
|
||||
Webfont distribution for the [Material Design Icons](https://materialdesignicons.com).
|
||||
|
||||
```
|
||||
npm install @mdi/font
|
||||
```
|
||||
|
||||
> Package built with [@mdi/font-build](https://github.com/Templarian/MaterialDesign-Font-Build).
|
||||
|
||||
## Related Packages
|
||||
|
||||
[NPM @MDI Organization](https://npmjs.com/org/mdi)
|
||||
|
||||
- JavaScript/Typescript: [MaterialDesign-JS](https://github.com/Templarian/MaterialDesign-JS)
|
||||
- SVG: [MaterialDesign-SVG](https://github.com/Templarian/MaterialDesign-SVG)
|
||||
- Font-Build [MaterialDesign-Font-Build](https://github.com/Templarian/MaterialDesign-Font-Build)
|
||||
- Desktop Font: [MaterialDesign-Font](https://github.com/Templarian/MaterialDesign-Font)
|
||||
|
||||
## Learn More
|
||||
|
||||
- [MaterialDesignIcons.com](https://materialdesignicons.com)
|
||||
- https://github.com/Templarian/MaterialDesign
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
3
scripts/communityScripts/libraries/materialdesignicons/css/materialdesignicons.min.css
vendored
Normal file
3
scripts/communityScripts/libraries/materialdesignicons/css/materialdesignicons.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,97 @@
|
|||
Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/),
|
||||
with Reserved Font Name Material Design Icons.
|
||||
|
||||
Copyright (c) 2014, Google (http://www.google.com/design/)
|
||||
uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"name": "@mdi/font",
|
||||
"version": "5.5.55",
|
||||
"description": "Dist for Material Design Webfont. This includes the Stock and Community icons in a single webfont collection.",
|
||||
"style": "css/materialdesignicons.css",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Templarian/MaterialDesign-Webfont.git"
|
||||
},
|
||||
"keywords": [
|
||||
"material",
|
||||
"design",
|
||||
"icons",
|
||||
"webfont"
|
||||
],
|
||||
"author": {
|
||||
"name": "Austin Andrews",
|
||||
"web": "http://twitter.com/templarian"
|
||||
},
|
||||
"license": "(OFL-1.1 AND MIT)",
|
||||
"bugs": {
|
||||
"url": "https://github.com/Templarian/MaterialDesign/issues"
|
||||
},
|
||||
"homepage": "https://materialdesignicons.com"
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,27 @@
|
|||
// From Font Awesome
|
||||
.#{$mdi-css-prefix}-spin:before {
|
||||
-webkit-animation: #{$mdi-css-prefix}-spin 2s infinite linear;
|
||||
animation: #{$mdi-css-prefix}-spin 2s infinite linear;
|
||||
}
|
||||
|
||||
@-webkit-keyframes #{$mdi-css-prefix}-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes #{$mdi-css-prefix}-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
.#{$mdi-css-prefix}:before,
|
||||
.#{$mdi-css-prefix}-set {
|
||||
display: inline-block;
|
||||
font: normal normal normal #{$mdi-font-size-base}/1 '#{$mdi-font-name}'; // shortening font declaration
|
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
||||
line-height: inherit;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
$mdi-sizes: 18 24 36 48 !default;
|
||||
@each $mdi-size in $mdi-sizes {
|
||||
.#{$mdi-css-prefix}-#{$mdi-size}px {
|
||||
&.#{$mdi-css-prefix}-set,
|
||||
&.#{$mdi-css-prefix}:before {
|
||||
font-size: $mdi-size * 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.#{$mdi-css-prefix}-dark {
|
||||
&:before {
|
||||
color: rgba(0, 0, 0, 0.54);
|
||||
}
|
||||
&.#{$mdi-css-prefix}-inactive:before {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
}
|
||||
.#{$mdi-css-prefix}-light {
|
||||
&:before {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
&.#{$mdi-css-prefix}-inactive:before {
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
$mdi-degrees: 45 90 135 180 225 270 315 !default;
|
||||
@each $mdi-degree in $mdi-degrees {
|
||||
.#{$mdi-css-prefix}-rotate-#{$mdi-degree}{
|
||||
&:before {
|
||||
-webkit-transform: rotate(#{$mdi-degree}deg);
|
||||
-ms-transform: rotate(#{$mdi-degree}deg);
|
||||
transform: rotate(#{$mdi-degree}deg);
|
||||
}
|
||||
/*
|
||||
// Not included in production
|
||||
&.#{$mdi-css-prefix}-flip-h:before {
|
||||
-webkit-transform: scaleX(-1) rotate(#{$mdi-degree}deg);
|
||||
transform: scaleX(-1) rotate(#{$mdi-degree}deg);
|
||||
filter: FlipH;
|
||||
-ms-filter: "FlipH";
|
||||
}
|
||||
&.#{$mdi-css-prefix}-flip-v:before {
|
||||
-webkit-transform: scaleY(-1) rotate(#{$mdi-degree}deg);
|
||||
-ms-transform: rotate(#{$mdi-degree}deg);
|
||||
transform: scaleY(-1) rotate(#{$mdi-degree}deg);
|
||||
filter: FlipV;
|
||||
-ms-filter: "FlipV";
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
.#{$mdi-css-prefix}-flip-h:before {
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
filter: FlipH;
|
||||
-ms-filter: "FlipH";
|
||||
}
|
||||
.#{$mdi-css-prefix}-flip-v:before {
|
||||
-webkit-transform: scaleY(-1);
|
||||
transform: scaleY(-1);
|
||||
filter: FlipV;
|
||||
-ms-filter: "FlipV";
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
@function char($character-code) {
|
||||
@if function-exists("selector-append") {
|
||||
@return unquote("\"\\#{$character-code}\"");
|
||||
}
|
||||
|
||||
@if "\\#{'x'}" == "\\x" {
|
||||
@return str-slice("\x", 1, 1) + $character-code;
|
||||
}
|
||||
@else {
|
||||
@return #{"\"\\"}#{$character-code + "\""};
|
||||
}
|
||||
}
|
||||
|
||||
@function mdi($name) {
|
||||
@if map-has-key($mdi-icons, $name) == false {
|
||||
@warn "Icon #{$name} not found.";
|
||||
@return "";
|
||||
}
|
||||
@return char(map-get($mdi-icons, $name));
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
@each $key, $value in $mdi-icons {
|
||||
.#{$mdi-css-prefix}-#{$key}::before {
|
||||
content: char($value);
|
||||
}
|
||||
}
|
||||
|
||||
.#{$mdi-css-prefix}-blank::before {
|
||||
content: "\F68C";
|
||||
visibility: hidden;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
@font-face {
|
||||
font-family: '#{$mdi-font-name}';
|
||||
src: url('#{$mdi-font-path}/#{$mdi-filename}-webfont.eot?v=#{$mdi-version}');
|
||||
src: url('#{$mdi-font-path}/#{$mdi-filename}-webfont.eot?#iefix&v=#{$mdi-version}') format('embedded-opentype'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.woff2?v=#{$mdi-version}') format('woff2'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.woff?v=#{$mdi-version}') format('woff'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.ttf?v=#{$mdi-version}') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,8 @@
|
|||
/* MaterialDesignIcons.com */
|
||||
@import "variables";
|
||||
@import "functions";
|
||||
@import "path";
|
||||
@import "core";
|
||||
@import "icons";
|
||||
@import "extras";
|
||||
@import "animated";
|
3061
scripts/communityScripts/libraries/vue-router/vue-router.js
Normal file
3061
scripts/communityScripts/libraries/vue-router/vue-router.js
Normal file
File diff suppressed because it is too large
Load diff
6
scripts/communityScripts/libraries/vue/vue.min.js
vendored
Normal file
6
scripts/communityScripts/libraries/vue/vue.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
9690
scripts/communityScripts/libraries/vuetify/attributes.json
Normal file
9690
scripts/communityScripts/libraries/vuetify/attributes.json
Normal file
File diff suppressed because it is too large
Load diff
3201
scripts/communityScripts/libraries/vuetify/tags.json
Normal file
3201
scripts/communityScripts/libraries/vuetify/tags.json
Normal file
File diff suppressed because it is too large
Load diff
29209
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.css
Normal file
29209
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.css
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
43728
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.js
Normal file
43728
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.js
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
12
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.min.css
vendored
Normal file
12
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.min.js
vendored
Normal file
6
scripts/communityScripts/libraries/vuetify/vuetify-v2.3.9.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
29548
scripts/communityScripts/libraries/vuetify/web-types.json
Normal file
29548
scripts/communityScripts/libraries/vuetify/web-types.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -183,7 +183,7 @@ Controller.mousePressEvent.connect(function (event) {
|
|||
for (var i = 0; i < notificationList.length; i++) {
|
||||
if (overlay === notificationList[i].id) {
|
||||
Overlays.deleteOverlay(notificationList[i].id)
|
||||
Messages.sendMessage(MAIN_CHAT_APP_CHANNEL, JSON.stringify({
|
||||
Messages.sendLocalMessage(MAIN_CHAT_APP_CHANNEL, JSON.stringify({
|
||||
type: "ShowChatWindow",
|
||||
}));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue