Added common files (geo layers, css, js and images) as well as the geo plot method and a mechanism to insert the mnr css etc files in the header
This commit is contained in:
@@ -12,5 +12,8 @@ RoxygenNote: 7.3.3
|
||||
Imports:
|
||||
AVSDevR.DBClient,
|
||||
dplyr,
|
||||
htmltools,
|
||||
magrittr,
|
||||
R6
|
||||
plotly,
|
||||
R6,
|
||||
shiny
|
||||
|
||||
@@ -7,7 +7,11 @@ export(MNR.DB.Applications)
|
||||
export(MNR.DB.Geometries)
|
||||
export(MNR.DB.Organisations)
|
||||
export(MNR.DB.Users)
|
||||
export(MNR.GeoPlot)
|
||||
export(resourcePrefix)
|
||||
export(use_mnr_ui)
|
||||
import(dplyr)
|
||||
import(plotly)
|
||||
importFrom(AVSDevR.DBClient,DBClient)
|
||||
importFrom(AVSDevR.DBClient,DBConnection)
|
||||
importFrom(R6,R6Class)
|
||||
|
||||
1
R/aaa.R
1
R/aaa.R
@@ -3,4 +3,5 @@
|
||||
#' @importFrom AVSDevR.DBClient DBClient
|
||||
#' @importFrom R6 R6Class
|
||||
#' @import dplyr
|
||||
#' @import plotly
|
||||
NULL
|
||||
|
||||
@@ -6,6 +6,7 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
public = list(
|
||||
getOrganisation = function(org_id, collect = TRUE) {
|
||||
private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(id == !!org_id) %>%
|
||||
private$db_client$collectOrReturn()
|
||||
},
|
||||
@@ -55,9 +56,37 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
}
|
||||
},
|
||||
|
||||
getUsersFromOrg = function(org_name = "", org_id = -1, collect = TRUE) {
|
||||
getOrganisationMembers = function(
|
||||
org_name = "", org_id = -1, collect = TRUE
|
||||
) {
|
||||
private$db_client$table("users") %>%
|
||||
dplyr::filter(flag_enabled == TRUE, flag_verified == TRUE) %>%
|
||||
dplyr::filter(flag_enabled == TRUE) %>%
|
||||
dplyr::filter(flag_verified == TRUE) %>%
|
||||
dplyr::mutate(known_as = paste(first_name, last_name)) %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisation_members") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::select(user_id, organisation_id),
|
||||
by = c(id = "user_id")
|
||||
) %>%
|
||||
dplyr::inner_join(
|
||||
private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter((id == !!org_id) | (name == !!org_name)) %>%
|
||||
dplyr::select(id),
|
||||
by = c(organisation_id = "id")
|
||||
) %>%
|
||||
dplyr::select(-organisation_id) %>%
|
||||
private$db_client$collectOrReturn()
|
||||
},
|
||||
|
||||
#' @depricated
|
||||
getUsersFromOrg = function(org_name = "", org_id = -1, collect = TRUE) {
|
||||
.Deprecated(new = "getOrganisationMembers")
|
||||
|
||||
private$db_client$table("users") %>%
|
||||
dplyr::filter(flag_enabled == TRUE) %>%
|
||||
dplyr::filter(flag_verified == TRUE) %>%
|
||||
dplyr::mutate(known_as = paste(first_name, last_name)) %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisation_members") %>%
|
||||
@@ -76,6 +105,7 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
|
||||
isAgent = function(user_id) {
|
||||
private$db_client$table("organisation_members") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(user_id == !!user_id) %>%
|
||||
dplyr::inner_join(
|
||||
private$db_client$table("organisation_agents") %>%
|
||||
@@ -87,9 +117,54 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
magrittr::is_greater_than(0)
|
||||
},
|
||||
|
||||
getOrganisationAgents = function(org_id, as_int = FALSE, collect = TRUE) {
|
||||
qry <- private$db_client$table("organisation_agents") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(organisation_id == !!org_id) %>%
|
||||
dplyr::select(id = agent_id) %>%
|
||||
dplyr::distinct() %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE),
|
||||
by = "id"
|
||||
)
|
||||
|
||||
if (as_int) {
|
||||
qry %>%
|
||||
dplyr::pull(id)
|
||||
} else {
|
||||
qry %>%
|
||||
private$db_client$collectOrReturn()
|
||||
}
|
||||
},
|
||||
|
||||
getAgentRecipients = function(agent_id, as_int = FALSE, collect = TRUE) {
|
||||
qry <- private$db_client$table("organisation_agents") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(agent_id == !!agent_id) %>%
|
||||
dplyr::select(id = organisation_id) %>%
|
||||
dplyr::distinct() %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE),
|
||||
by = "id"
|
||||
)
|
||||
|
||||
if (as_int) {
|
||||
qry %>%
|
||||
dplyr::pull(id)
|
||||
} else {
|
||||
qry %>%
|
||||
private$db_client$collectOrReturn()
|
||||
}
|
||||
},
|
||||
|
||||
#' @depricated
|
||||
getAgentForOrganisations = function(
|
||||
org_ids, as_int = FALSE, name_only = TRUE, collect = TRUE
|
||||
) {
|
||||
.Deprecated(new = "getOrganisationAgents")
|
||||
|
||||
qry <- private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::inner_join(
|
||||
@@ -113,9 +188,12 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
}
|
||||
},
|
||||
|
||||
#' @depricated
|
||||
getRecipientOrganisations = function(
|
||||
org_id, as_int = FALSE, name_only = TRUE, collect = TRUE
|
||||
) {
|
||||
.Deprecated(new = "getAgentRecipients")
|
||||
|
||||
qry <- private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::inner_join(
|
||||
@@ -139,16 +217,19 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
}
|
||||
},
|
||||
|
||||
#' @depricated
|
||||
getUserOrgs = function(
|
||||
user_id, as_int = TRUE, name_only = TRUE, collect = TRUE
|
||||
) {
|
||||
.Deprecated(new = "getUserOrganisation")
|
||||
|
||||
qry <- private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisation_members") %>%
|
||||
dplyr::select(user_id, organisation_id),
|
||||
by = c(id = "organisation_id")
|
||||
) %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(user_id == !!user_id)
|
||||
|
||||
if (as_int) {
|
||||
@@ -167,12 +248,13 @@ MNR.DB.Organisations <- R6::R6Class(
|
||||
user_id, as_int = TRUE, name_only = TRUE, collect = TRUE
|
||||
) {
|
||||
qry <- private$db_client$table("organisations") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::left_join(
|
||||
private$db_client$table("organisation_members") %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::select(user_id, organisation_id),
|
||||
by = c(id = "organisation_id")
|
||||
) %>%
|
||||
dplyr::filter(flag_approved == TRUE) %>%
|
||||
dplyr::filter(user_id == !!user_id) %>%
|
||||
dplyr::slice_min(user_id, n = 1)
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@ MNR.DB.Users <- R6::R6Class(
|
||||
},
|
||||
|
||||
getUser = function(user_id, collect = TRUE) {
|
||||
db_uf$getUser(user_id, collect)
|
||||
private$db_uf$getUser(user_id, collect)
|
||||
},
|
||||
getUserName = function(user_id) {
|
||||
db_uf$getUserName(user_id)
|
||||
private$db_uf$getUserName(user_id)
|
||||
},
|
||||
getUserRoles = function(user_id, collect = TRUE) {
|
||||
db_uf$getUserRoles(user_id, collect)
|
||||
private$db_uf$getUserRoles(user_id, collect)
|
||||
},
|
||||
|
||||
isApplicationsAdmin = function(user_id) {
|
||||
|
||||
382
R/geoPlot.R
Normal file
382
R/geoPlot.R
Normal file
@@ -0,0 +1,382 @@
|
||||
#' @export
|
||||
# nolint next: object_name_linter. R6Class
|
||||
MNR.GeoPlot <- R6::R6Class(
|
||||
"MNR.GeoPlot",
|
||||
public = list(
|
||||
initialize = function() {
|
||||
private$bootGridLines()
|
||||
},
|
||||
|
||||
bootLayers = function() {
|
||||
private$boundaryIoM <- sf::st_read(
|
||||
file.path(
|
||||
system.file(package = "AVSDevR.MarineNoiseRegistry"),
|
||||
"layers",
|
||||
"20230411_IoM"
|
||||
),
|
||||
quiet = TRUE
|
||||
)
|
||||
private$boundaryMSFD <- sf::st_read(
|
||||
file.path(
|
||||
system.file(package = "AVSDevR.MarineNoiseRegistry"),
|
||||
"layers",
|
||||
"20250123_MSFD_BoundaryLine"
|
||||
),
|
||||
quiet = TRUE
|
||||
)
|
||||
private$boundaryUKCS <- sf::st_read(
|
||||
file.path(
|
||||
system.file(package = "AVSDevR.MarineNoiseRegistry"),
|
||||
"layers",
|
||||
"20230411_UKCSBoundary"
|
||||
),
|
||||
quiet = TRUE
|
||||
)
|
||||
private$boundaryUKTerritorial <- sf::st_read(
|
||||
file.path(
|
||||
system.file(package = "AVSDevR.MarineNoiseRegistry"),
|
||||
"layers",
|
||||
"20250123_UK_Territorial_Sea_Limit"
|
||||
),
|
||||
quiet = TRUE
|
||||
)
|
||||
},
|
||||
|
||||
bootQuadrants = function() {
|
||||
old_opts <- options(sf_use_s2 = FALSE)
|
||||
on.exit({
|
||||
options(old_opts)
|
||||
})
|
||||
|
||||
private$quadrants <- sf::st_read(
|
||||
file.path(
|
||||
system.file(package = "AVSDevR.MarineNoiseRegistry"),
|
||||
"layers",
|
||||
"20230411_OGBQuadrants"
|
||||
),
|
||||
quiet = TRUE
|
||||
)
|
||||
private$quadrant_annotations <- suppressWarnings({
|
||||
private$quadrants %>%
|
||||
dplyr::select(quadrnt) %>%
|
||||
sf::st_centroid()
|
||||
})
|
||||
},
|
||||
|
||||
bootConservationAreas = function(db_client) {
|
||||
old_opts <- options(sf_use_s2 = FALSE)
|
||||
on.exit({
|
||||
options(old_opts)
|
||||
})
|
||||
|
||||
private$conservation_areas <- db_client$table("conservation_areas") %>%
|
||||
dplyr::select(name, season, geom) %>%
|
||||
db_client$collectGeometries() %>%
|
||||
sf::st_sf() %>%
|
||||
sf::st_cast("MULTIPOLYGON")
|
||||
|
||||
colour_palette <- private$conservation_areas %>%
|
||||
dplyr::mutate(
|
||||
colour = sapply(season, function(s) {
|
||||
switch(
|
||||
s,
|
||||
Winter = "rgba(30,203,225,0.3)",
|
||||
Summer = "rgba(225,52,30,0.3)",
|
||||
"rgba(235,175,20,0.3)"
|
||||
)
|
||||
})
|
||||
) %>%
|
||||
dplyr::pull(colour)
|
||||
|
||||
private$conservation_area_colours <- private$conservation_areas %>%
|
||||
sf::st_coordinates() %>%
|
||||
tibble::as_tibble() %>%
|
||||
dplyr::mutate(colour = colour_palette[L3]) %>%
|
||||
dplyr::pull(colour)
|
||||
},
|
||||
|
||||
makeBasePlot = function(
|
||||
..., with_jncc_layers = TRUE, with_quadrants = FALSE,
|
||||
with_conservation_areas = FALSE
|
||||
) {
|
||||
do.call(plotly::plot_ly, list(...)) %>%
|
||||
private$addGridLines() %>%
|
||||
private$addQuadrants(with_quadrants) %>%
|
||||
private$addJNCCLayers(with_jncc_layers) %>%
|
||||
private$addConservationAreas(with_conservation_areas) %>%
|
||||
plotly::layout(
|
||||
mapbox = list(style = "carto-positron"),
|
||||
legend = list(
|
||||
groupclick = "toggleitem",
|
||||
itemdoubleclick = FALSE
|
||||
),
|
||||
xaxis = list(
|
||||
title = list(text = "Longitude", font = list(size = 18)),
|
||||
visible = FALSE,
|
||||
# Grid:
|
||||
showgrid = TRUE,
|
||||
gridcolor = "#BEBEBE",
|
||||
# Line:
|
||||
showline = TRUE,
|
||||
linewidth = 2,
|
||||
linecolor = "#7F7F7F",
|
||||
mirror = TRUE,
|
||||
zeroline = FALSE,
|
||||
# Ticks:
|
||||
showticklabels = TRUE,
|
||||
tickmode = "linear",
|
||||
tick0 = 0,
|
||||
dtick = 5,
|
||||
ticksuffix = " ° W"
|
||||
),
|
||||
yaxis = list(
|
||||
title = list(text = "Latitude", font = list(size = 18)),
|
||||
visible = FALSE,
|
||||
# Grid:
|
||||
showgrid = TRUE,
|
||||
gridcolor = "#BEBEBE",
|
||||
# Line:
|
||||
showline = TRUE,
|
||||
linewidth = 2,
|
||||
linecolor = "#7F7F7F",
|
||||
mirror = TRUE,
|
||||
zeroline = FALSE,
|
||||
# Ticks:
|
||||
showticklabels = TRUE,
|
||||
tickmode = "linear",
|
||||
tick0 = 0,
|
||||
dtick = 5,
|
||||
ticksuffix = " ° N"
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
boundMap = function(
|
||||
p, c_lat = 56, c_lon = -5.5, zoom = 3.5, xmin = -25, ymin = 45, xmax = 5,
|
||||
ymax = 65
|
||||
) {
|
||||
p %>%
|
||||
plotly::layout(
|
||||
mapbox = list(
|
||||
zoom = zoom,
|
||||
center = list(lat = c_lat, lon = c_lon),
|
||||
`_fitBounds` = list(
|
||||
bounds = list(list(xmin, ymin), list(xmax, ymax)),
|
||||
options = list()
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
),
|
||||
private = list(
|
||||
major_lines = NULL,
|
||||
minor_lines = NULL,
|
||||
zero_lines = NULL,
|
||||
|
||||
boundaryIoM = NULL,
|
||||
boundaryMSFD = NULL,
|
||||
boundaryUKCS = NULL,
|
||||
boundaryUKTerritorial = NULL,
|
||||
|
||||
quadrants = NULL,
|
||||
quadrant_annotations = NULL,
|
||||
|
||||
conservation_areas = NULL,
|
||||
conservation_area_colours = NULL,
|
||||
|
||||
|
||||
bootGridLines = function() {
|
||||
old_opts <- options(sf_use_s2 = FALSE)
|
||||
on.exit({
|
||||
options(old_opts)
|
||||
})
|
||||
|
||||
points <- tibble::tibble()
|
||||
for (lat in seq(-90, +90, 5)) {
|
||||
points <- points %>%
|
||||
dplyr::bind_rows(
|
||||
tibble::tibble(
|
||||
grp = nrow(points) + 1,
|
||||
lat = lat,
|
||||
lon = c(-180, 180),
|
||||
is_major = (lat %% 10) == 0
|
||||
)
|
||||
)
|
||||
}
|
||||
for (lon in seq(-180, +175, 5)) {
|
||||
points <- points %>%
|
||||
dplyr::bind_rows(
|
||||
tibble::tibble(
|
||||
grp = nrow(points) + 1,
|
||||
lat = c(-90, 90),
|
||||
lon = lon,
|
||||
is_major = (lat %% 10) == 0
|
||||
)
|
||||
)
|
||||
}
|
||||
suppressMessages({
|
||||
private$major_lines <- points %>%
|
||||
dplyr::filter(is_major) %>%
|
||||
sf::st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
|
||||
dplyr::group_by(grp) %>%
|
||||
dplyr::summarise() %>%
|
||||
sf::st_cast("LINESTRING")
|
||||
private$minor_lines <- points %>%
|
||||
dplyr::filter(!is_major) %>%
|
||||
sf::st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
|
||||
dplyr::group_by(grp) %>%
|
||||
dplyr::summarise() %>%
|
||||
sf::st_cast("LINESTRING")
|
||||
private$zero_lines <- points %>%
|
||||
dplyr::filter((lat == 0) | (lon == 0)) %>%
|
||||
sf::st_as_sf(coords = c("lon", "lat"), crs = 4326) %>%
|
||||
dplyr::group_by(grp) %>%
|
||||
dplyr::summarise() %>%
|
||||
sf::st_cast("LINESTRING")
|
||||
})
|
||||
},
|
||||
|
||||
addGridLines = function(p) {
|
||||
p %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$minor_lines,
|
||||
name = "minor_grid_lines",
|
||||
line = list(width = 1),
|
||||
color = I("#6161ff20"),
|
||||
showlegend = FALSE,
|
||||
hoverinfo = I("skip")
|
||||
) %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$major_lines,
|
||||
name = "major_grid_lines",
|
||||
line = list(width = 2),
|
||||
color = I("#6161ff30"),
|
||||
showlegend = FALSE,
|
||||
hoverinfo = I("skip")
|
||||
) %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$zero_lines,
|
||||
name = "zero_grid_lines",
|
||||
line = list(width = 2),
|
||||
color = I("#3131ff40"),
|
||||
showlegend = FALSE,
|
||||
hoverinfo = I("skip")
|
||||
)
|
||||
},
|
||||
|
||||
addJNCCLayers = function(p, with_jncc_layers) {
|
||||
if (length(with_jncc_layers) == 0 || !with_jncc_layers) {
|
||||
return(p)
|
||||
}
|
||||
if (is.null(private$boundaryIoM)) {
|
||||
rlang::abort(
|
||||
"JNCC layers have not been loaded. Call bootLayers first!"
|
||||
)
|
||||
}
|
||||
p %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = dplyr::bind_rows(
|
||||
sf::st_cast(private$boundaryUKCS, "LINESTRING", warn = FALSE),
|
||||
sf::st_cast(private$boundaryIoM, "LINESTRING", warn = FALSE),
|
||||
sf::st_cast(private$boundaryMSFD, "LINESTRING", warn = FALSE)
|
||||
),
|
||||
fillcolor = "#96005b00",
|
||||
line = list(width = 1.5),
|
||||
color = I("#96005b"),
|
||||
name = "UKMS Sub-region Borders",
|
||||
legendgrouptitle = list(text = "<b>Regional Boundaries</b>"),
|
||||
legendgroup = "regional_boundaries",
|
||||
legendrank = 850,
|
||||
hoverinfo = I("skip")
|
||||
) %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$boundaryUKCS,
|
||||
fillcolor = "#00000000",
|
||||
line = list(width = 1.5),
|
||||
color = I("#000000"),
|
||||
name = "UK Continental Shelf",
|
||||
legendgrouptitle = list(text = "<b>Regional Boundaries</b>"),
|
||||
legendgroup = "regional_boundaries",
|
||||
legendrank = 800,
|
||||
hoverinfo = I("skip")
|
||||
) %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$boundaryUKTerritorial,
|
||||
fillcolor = "#008ac100",
|
||||
line = list(width = 1),
|
||||
color = I("#008ac1"),
|
||||
name = "UK Territorial Sea Limit",
|
||||
legendgrouptitle = list(text = "<b>Regional Boundaries</b>"),
|
||||
legendgroup = "regional_boundaries",
|
||||
legendrank = 800,
|
||||
hoverinfo = I("skip")
|
||||
)
|
||||
},
|
||||
|
||||
addQuadrants = function(p, with_quadrants) {
|
||||
if (length(with_quadrants) == 0 || !with_quadrants) {
|
||||
return(p)
|
||||
}
|
||||
if (is.null(private$quadrants)) {
|
||||
rlang::abort(
|
||||
"Quadrants have not been loaded. Call bootQuadrants first!"
|
||||
)
|
||||
}
|
||||
p %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$quadrants,
|
||||
fillcolor = "rgba(0,0,0,0)",
|
||||
line = list(width = 1),
|
||||
color = I("#bebebe"),
|
||||
name = "Oil & Gas Quadrants",
|
||||
legendgrouptitle = list(text = "<b>Oil & Gas</b>"),
|
||||
legendgroup = "oil_and_gas",
|
||||
legendrank = 900,
|
||||
hoverinfo = I("none")
|
||||
) %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$quadrant_annotations,
|
||||
color = I("#bebebe00"),
|
||||
name = "Oil & Gas Quadrant Labels",
|
||||
showlegend = FALSE,
|
||||
text = ~quadrnt,
|
||||
hoverinfo = I("text"),
|
||||
hovertemplate = I("O&G Quadrant: %{text}<extra></extra>")
|
||||
)
|
||||
},
|
||||
|
||||
addConservationAreas = function(p, with_conservation_areas) {
|
||||
if (length(with_conservation_areas) == 0 || !with_conservation_areas) {
|
||||
return(p)
|
||||
}
|
||||
if (is.null(private$conservation_areas)) {
|
||||
rlang::abort(
|
||||
"Conservation Areas have not been loaded. \
|
||||
Call bootConservationAreas first!"
|
||||
)
|
||||
}
|
||||
p %>%
|
||||
plotly::add_sf(
|
||||
type = "scattermapbox",
|
||||
data = private$conservation_areas,
|
||||
fillcolor = private$conservation_area_colours,
|
||||
line = list(width = 0),
|
||||
color = I(private$conservation_area_colours),
|
||||
name = ~paste0(name, " (", season, ")"),
|
||||
legendgrouptitle = list(
|
||||
text = "<b>Special Areas of Conservation</b>"
|
||||
),
|
||||
legendgroup = "conservation_areas",
|
||||
legendrank = 950
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
36
R/use_mnr_ui.R
Normal file
36
R/use_mnr_ui.R
Normal file
@@ -0,0 +1,36 @@
|
||||
#' @export
|
||||
use_mnr_ui <- function() {
|
||||
attachResourcePaths()
|
||||
htmltools::tags$head(
|
||||
htmltools::singleton(
|
||||
htmltools::HTML(paste0(
|
||||
"<link href='", resourcePrefix(), "/css/mnr.css' rel='stylesheet'>"
|
||||
))
|
||||
),
|
||||
htmltools::singleton(
|
||||
htmltools::HTML(paste0(
|
||||
"<link href='", resourcePrefix(),
|
||||
"/css/mnr-shiny.css' rel='stylesheet'>"
|
||||
))
|
||||
),
|
||||
htmltools::singleton(
|
||||
htmltools::HTML(paste0(
|
||||
"<script src='", resourcePrefix(), "js/frameHeight.js'></script>"
|
||||
))
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
#' @export
|
||||
resourcePrefix <- function() {
|
||||
paste0("avsdev_mnr_", utils::packageVersion("AVSDevR.MarineNoiseRegistry"))
|
||||
}
|
||||
|
||||
attachResourcePaths <- function() {
|
||||
if (!(resourcePrefix() %in% names(shiny::resourcePaths()))) {
|
||||
shiny::addResourcePath(
|
||||
resourcePrefix(),
|
||||
system.file("www", package = "AVSDevR.MarineNoiseRegistry")
|
||||
)
|
||||
}
|
||||
}
|
||||
3
R/zzz.R
Normal file
3
R/zzz.R
Normal file
@@ -0,0 +1,3 @@
|
||||
.onAttach <- function(libname, pkgname) {
|
||||
attachResourcePaths()
|
||||
}
|
||||
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.dbf
Normal file
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.dbf
Normal file
Binary file not shown.
1
inst/layers/20230411_IoM/20230411_IoM_WGS84.prj
Normal file
1
inst/layers/20230411_IoM/20230411_IoM_WGS84.prj
Normal file
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
|
||||
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.shp
Normal file
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.shp
Normal file
Binary file not shown.
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.shx
Normal file
BIN
inst/layers/20230411_IoM/20230411_IoM_WGS84.shx
Normal file
Binary file not shown.
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.dbf
Normal file
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.dbf
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],METADATA["World",-180.0,-90.0,180.0,90.0,0.0,0.0174532925199433,0.0,1262]]
|
||||
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.shp
Normal file
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.shp
Normal file
Binary file not shown.
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.shx
Normal file
BIN
inst/layers/20230411_OGBQuadrants/20230411_OGBQ_WGS84.shx
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
|
||||
Binary file not shown.
Binary file not shown.
8
inst/www/css/mnr-shiny.css
Normal file
8
inst/www/css/mnr-shiny.css
Normal file
@@ -0,0 +1,8 @@
|
||||
div.selectize-input > div.item {
|
||||
line-height: 41px;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], input[type="number"] {
|
||||
font-size: 12pt !important;
|
||||
height: 41px !important;
|
||||
}
|
||||
567
inst/www/css/mnr.css
Normal file
567
inst/www/css/mnr.css
Normal file
@@ -0,0 +1,567 @@
|
||||
/* JNCC preferred font */
|
||||
*, body, h1, h2, h3, h4, h5, h6, th {
|
||||
font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
body, th {
|
||||
/* font-size: 14.25pt; */
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 31.5pt;
|
||||
}
|
||||
h2 {
|
||||
font-size: 22.5pt;
|
||||
}
|
||||
h3 {
|
||||
font-size: 21pt;
|
||||
}
|
||||
h4 {
|
||||
font-size: 19pt;
|
||||
}
|
||||
h5 {
|
||||
font-size: 15pt;
|
||||
}
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
.tablesorter-bootstrap tfoot td, .tablesorter-bootstrap tfoot th, .tablesorter-bootstrap thead td, .tablesorter-bootstrap thead th {
|
||||
font-size: 12pt !important;
|
||||
}
|
||||
|
||||
/*
|
||||
* Skin: Green - JNCC
|
||||
* -----------
|
||||
*/
|
||||
.skin-green .main-header .navbar {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
||||
background-color: #36822c !important;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.skin-green .main-header .navbar .dropdown-menu li a:hover {
|
||||
background: #36822c !important;
|
||||
}
|
||||
}
|
||||
.skin-green .main-header .logo {
|
||||
background-color: #36822c !important;
|
||||
}
|
||||
.skin-green .main-header .logo:hover {
|
||||
background-color: #337a2a !important;
|
||||
}
|
||||
.skin-green .main-header li.user-header {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
.skin-green .sidebar-menu > li.active > a {
|
||||
border-left-color: #3f9c35 !important;
|
||||
}
|
||||
|
||||
.widget-user-header.bg-green {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
|
||||
.bg-success, .alert-success, .bg-green {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
|
||||
.box-success {
|
||||
border: 1px solid #3f9c35 !important;
|
||||
}
|
||||
|
||||
.box-success > .box-header {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
.btn-success:hover {
|
||||
background-color: #008d4c !important;
|
||||
}
|
||||
.box.box-solid > .box-header .btn:hover, .box.box-solid > .box-header a:hover {
|
||||
background: rgba(0, 0, 0, 0.1) !important;
|
||||
}
|
||||
|
||||
|
||||
.table.dataTable tbody td.active,
|
||||
.table.dataTable tbody tr.active td {
|
||||
background-color: #3f9c35 !important;
|
||||
}
|
||||
|
||||
table.dataTable tbody tr.selected > * {
|
||||
box-shadow: inset 0 0 0 9999px #3f9c35 !important;
|
||||
}
|
||||
|
||||
table.dataTable.hover tbody tr.selected:hover > *,
|
||||
table.dataTable.display tbody tr.selected:hover > * {
|
||||
box-shadow: inset 0 0 0 9999px #44a939 !important;
|
||||
}
|
||||
|
||||
/* Cookie control banner */
|
||||
.ccc-notify-text {
|
||||
margin-top: 7em;
|
||||
margin-bottom: 7em;
|
||||
padding-right: 2em;
|
||||
}
|
||||
|
||||
|
||||
/* AdminLTE overrides - Including for accessibility*/
|
||||
.callout.callout-warning, .callout.callout-info, .alert-warning, .alert-info {
|
||||
font-size: 18pt;
|
||||
}
|
||||
.callout.callout-success, .alert-success {
|
||||
font-size: 18pt;
|
||||
/* background-color: #36822c !important; */
|
||||
}
|
||||
.callout.callout-danger, .alert-danger, .alert-error {
|
||||
background-color: #DA3A25 !important;
|
||||
}
|
||||
|
||||
.alert .close {
|
||||
font-size: 30pt;
|
||||
top: -15px;
|
||||
}
|
||||
|
||||
.main-header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.main-header .logo {
|
||||
font-size: 15pt;
|
||||
width: 270px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.main-header .logo, .main-header .navbar {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.main-header .navbar {
|
||||
margin-left: 270px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.main-header .navbar {
|
||||
margin-left: 0px;
|
||||
}
|
||||
}
|
||||
.main-sidebar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 270px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.main-sidebar {
|
||||
-webkit-transform: translate(-270px, 0);
|
||||
-ms-transform: translate(-270px, 0);
|
||||
-o-transform: translate(-270px, 0);
|
||||
transform: translate(-270px, 0);
|
||||
}
|
||||
}
|
||||
.main-header .sidebar-toggle {
|
||||
line-height: 20px;
|
||||
}
|
||||
.main-sidebar .user-panel .info p {
|
||||
white-space: break-spaces;
|
||||
}
|
||||
.sidebar-menu {
|
||||
/* height: calc(100vh - 125px); */
|
||||
position: fixed;
|
||||
width: 270px;
|
||||
overflow-y: scroll;
|
||||
top: 125px;
|
||||
bottom: 0;
|
||||
height: auto;
|
||||
-webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
-o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
}
|
||||
.sidebar-menu:hover {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.sidebar-mini.sidebar-collapse .sidebar-menu {
|
||||
width: 50px;
|
||||
-webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
-moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
-o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.sidebar-menu {
|
||||
top: 175px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.sidebar-open .content-wrapper, .sidebar-open .main-footer {
|
||||
-webkit-transform: translate(270px, 0);
|
||||
-ms-transform: translate(270px, 0);
|
||||
-o-transform: translate(270px, 0);
|
||||
transform: translate(270px, 0);
|
||||
}
|
||||
}
|
||||
.content-header h1 {
|
||||
font-size: 30pt;
|
||||
}
|
||||
.content-wrapper {
|
||||
margin-top: 50px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.content-wrapper {
|
||||
margin-top: 100px;
|
||||
}
|
||||
}
|
||||
.content-wrapper, .main-footer {
|
||||
margin-left: 270px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.content-wrapper, .main-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.widget-user-desc a {
|
||||
font-size: 14pt;
|
||||
color: #FFFFFF;
|
||||
font-weight: bold;
|
||||
}
|
||||
.widget-user-desc a:hover {
|
||||
color: #BBBBFF;
|
||||
}
|
||||
|
||||
.widget-user-2 .widget-user-username {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/* AdminLTE extensions */
|
||||
.widget-user-3 .widget-user-header {
|
||||
padding: 20px;
|
||||
border-top-right-radius: 3px;
|
||||
border-top-left-radius: 3px;
|
||||
}
|
||||
.widget-user-3 h1 {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
font-size: 18pt;
|
||||
}
|
||||
|
||||
.login-box-footer {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* UF extensions */
|
||||
.page-description {
|
||||
font-size: 14pt;
|
||||
padding-top: 4px;
|
||||
color: #6D6D6D;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Navbar tweaks */
|
||||
.landing-nav > .container{
|
||||
display: flex;
|
||||
}
|
||||
.navbar-spacer {
|
||||
display: inline-block;
|
||||
flex-grow: 1;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
line-height: 20px;
|
||||
color: #ffffff;
|
||||
font-weight: bolder;
|
||||
z-index: 900;
|
||||
}
|
||||
.landing-nav .collapse {
|
||||
float: right;
|
||||
}
|
||||
.landing-nav .navbar-spacer {
|
||||
display: none;
|
||||
}
|
||||
.landing-nav > .container > .navbar-spacer {
|
||||
display: inline-block;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.landing-nav > .container{
|
||||
display: inherit;
|
||||
}
|
||||
.landing-nav .collapse {
|
||||
float: none;
|
||||
}
|
||||
.landing-nav .navbar-spacer {
|
||||
display: inline-block;
|
||||
}
|
||||
.landing-nav > .container > .navbar-spacer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.landing-nav > .container{
|
||||
display: flex;
|
||||
}
|
||||
.navbar-beta {
|
||||
display: inline-block;
|
||||
flex-grow: 1;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
line-height: 20px;
|
||||
color: #ffffff;
|
||||
font-weight: bolder;
|
||||
z-index: 900;
|
||||
}
|
||||
.navbar-brand .navbar-beta {
|
||||
font-size: 18pt;
|
||||
font-weight: normal;
|
||||
}
|
||||
.navbar-beta a {
|
||||
color: #ffffff;
|
||||
}
|
||||
.landing-nav .collapse {
|
||||
float: right;
|
||||
}
|
||||
.landing-nav.navbar-beta {
|
||||
font-size: 18pt;
|
||||
display: none;
|
||||
}
|
||||
.landing-nav > .container > .navbar-beta {
|
||||
display: inline-block;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.landing-nav > .container {
|
||||
display: inherit;
|
||||
}
|
||||
.landing-nav .collapse {
|
||||
float: none;
|
||||
}
|
||||
.landing-nav.navbar-beta {
|
||||
display: inline-block;
|
||||
}
|
||||
.navbar-brand .navbar-beta {
|
||||
display: none;
|
||||
}
|
||||
.landing-nav > .container > .navbar-beta {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 900px) {
|
||||
.public-app-frame {
|
||||
width: 90vw;
|
||||
}
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.public-app-frame {
|
||||
width: 100vw;
|
||||
}
|
||||
}
|
||||
|
||||
/* Cookies table */
|
||||
.table-cookies {
|
||||
border: 1px solid #888888 !important;
|
||||
max-width: 80%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.table-cookies th, .table-cookies td {
|
||||
border: 1px solid #888888 !important;
|
||||
}
|
||||
.table-cookies thead th, .table-cookies thead td {
|
||||
border-bottom-width: 2px !important;
|
||||
}
|
||||
|
||||
/* Good/Bad list styling */
|
||||
ul.good-list {
|
||||
list-style-type: '\2713';
|
||||
}
|
||||
ul.good-list li::marker {
|
||||
color: #3c763d;
|
||||
font-size: 24px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
ul.bad-list {
|
||||
list-style-type: '\2717';
|
||||
}
|
||||
ul.bad-list li::marker {
|
||||
color: #a94442;
|
||||
font-size: 24px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
/* */
|
||||
.anchor-location {
|
||||
padding-top: 60px;
|
||||
margin-top: -60px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.anchor-location {
|
||||
padding-top: 120px;
|
||||
margin-top: -120px;
|
||||
}
|
||||
}
|
||||
|
||||
.switch {
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.switch-label {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
font-size: 21pt;
|
||||
}
|
||||
|
||||
/* Accessibility overrides */
|
||||
a {
|
||||
color: #286080;
|
||||
}
|
||||
p a, h1 a, h2 a, h3 a, h4 a, td a, .content li a, .message-banner a, .link {
|
||||
color: #286080;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.dropdown-menu a {
|
||||
color: #286080;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
a:hover,
|
||||
a:active,
|
||||
a:focus {
|
||||
text-decoration: underline;
|
||||
color: #72afd2;
|
||||
}
|
||||
.login-box-footer a {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.btn {
|
||||
font-size: 14pt;
|
||||
/*
|
||||
font-size: 12pt;
|
||||
*/
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.btn-info {
|
||||
background-color: #009FC7;
|
||||
}
|
||||
.btn-warning {
|
||||
background-color: #CB820B;
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #6D6D6D;
|
||||
}
|
||||
|
||||
.login-box-body h2 {
|
||||
font-size: 16pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], input[type="number"] {
|
||||
/*
|
||||
font-size: 14pt !important;
|
||||
height: 41px !important;
|
||||
*/
|
||||
font-size: 12pt !important;
|
||||
height: 37px !important;
|
||||
}
|
||||
|
||||
.content-jump-link {
|
||||
position: absolute;
|
||||
left: -10000px;
|
||||
top: auto;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.content-jump-link:focus {
|
||||
position: static;
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.box-header > i {
|
||||
font-weight: bolder;
|
||||
font-size: 18pt !important;
|
||||
}
|
||||
|
||||
.box-title {
|
||||
font-weight: bolder;
|
||||
font-size: 18pt !important;
|
||||
}
|
||||
|
||||
.breadcrumb li {
|
||||
font-size: 14pt;
|
||||
color: #6B6B6B;
|
||||
}
|
||||
.breadcrumb li:active {
|
||||
font-size: 14pt;
|
||||
color: #6B6B6B;
|
||||
}
|
||||
.breadcrumb > .active {
|
||||
color: #6B6B6B;
|
||||
}
|
||||
.breadcrumb > li + li::before {
|
||||
content: "/\00a0" !important;
|
||||
color: #6B6B6B;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-size: 24pt;
|
||||
line-height: 27.15px;
|
||||
padding: 0px;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.navbar-brand {
|
||||
font-size: 20pt;
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
.navbar-brand a {
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.navbar .nav > li > a {
|
||||
font-size: 14pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.navbar .nav .dropdown-menu a {
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
.sidebar-toggle {
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
.login-logo a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.skin-green .sidebar-menu > li.header {
|
||||
color: #70979E;
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
.uf-table-info {
|
||||
color: #757575;
|
||||
}
|
||||
|
||||
.label {
|
||||
padding-top: 0.5em;
|
||||
}
|
||||
|
||||
.btn-xs, .btn-group-xs > .btn {
|
||||
padding: 1px 5px;
|
||||
}
|
||||
|
||||
.badge {
|
||||
padding: 6px 9px 3px 9px;
|
||||
}
|
||||
44
inst/www/images/dolphin.svg
Normal file
44
inst/www/images/dolphin.svg
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 469.608 469.608" style="enable-background:new 0 0 469.608 469.608;" xml:space="preserve">
|
||||
<g color="white">
|
||||
<path stroke="currentcolor" fill="currentcolor" d="M469.319,393.442c-6.666-23.331-32.769-68.993-37.333-76.886c-1.341-6.537-7.994-35.272-27.521-70.626
|
||||
c-19.823-35.888-57.234-85.49-123.144-119.301c-7.696-20.583,3.65-30.175,18.127-39.652c3.123-2.045,5.591-3.66,7.428-5.497
|
||||
c1.97-1.97,2.686-4.871,1.857-7.531c-0.827-2.661-3.063-4.643-5.803-5.148c-36.537-6.732-63.44,3.299-79.568,12.899
|
||||
c-12.168,7.243-20.183,15.305-24.095,19.763c-24.559-2.471-48.747-0.317-71.928,6.564c-52.111,15.468-81.911,48.536-92.304,62.036
|
||||
c-9.396,12.205-14.68,26.871-15.279,42.41l-0.007,0.179c-0.222,6.346-2.134,12.43-5.529,17.594
|
||||
c-20.086,30.542-15.226,46.029-7.611,53.644c14.286,14.285,35.165-0.543,51.941-12.459c8.523-6.053,17.337-12.312,22.859-13.393
|
||||
c1.928-0.377,4.279-0.926,7.255-1.622c6.936-1.62,17.006-3.968,29.851-5.962c2.775,3.399,7.632,9.11,13.555,15.066
|
||||
c12.931,13.001,24.302,20.469,33.799,22.195c0.446,0.081,0.896,0.121,1.342,0.121c1.742,0,3.446-0.607,4.806-1.742
|
||||
c1.708-1.425,2.694-3.534,2.694-5.758c0-7.312-0.833-23.804-1.372-33.694c3.846,0.053,7.793,0.175,11.836,0.371
|
||||
c6.305,5.807,12.969,10.405,18.001,13.523c16.243,10.066,34.749,16.83,46.047,16.83c3.803,0,7.004-2.847,7.448-6.624
|
||||
c0.443-3.763,0.249-7.71-0.548-11.825c42.339,12.464,82.526,34.395,119.732,65.351c-7.828,7.705-16.992,17.807-24.289,28.956
|
||||
c-9.89,15.109-13.937,28.575-12.029,40.023c0.374,2.24,1.741,4.19,3.721,5.303c1.979,1.113,4.355,1.27,6.463,0.427
|
||||
c3.34-1.335,6.953-3.429,11.137-5.854c20.232-11.723,50.808-29.442,96.482,8.17c1.378,1.135,3.069,1.71,4.769,1.71
|
||||
c1.426,0,2.856-0.406,4.109-1.227C468.964,399.976,470.22,396.599,469.319,393.442z M279.509,81.603
|
||||
c0.539,0,1.077,0.004,1.623,0.013c-4.094,3.333-8.215,7.426-11.386,12.477c-4.642,7.395-6.533,15.565-5.676,24.414
|
||||
c-15.406-6.558-30.883-11.33-46.278-14.316C228.647,94.735,249.173,81.603,279.509,81.603z M136.287,248.193
|
||||
c6.82-0.675,14.175-1.184,22.035-1.429c0.326,5.974,0.78,14.692,1.079,22.149C151.811,264.105,143.255,255.918,136.287,248.193z
|
||||
M355.505,378.89c4.15-13.778,17.18-31.573,36.634-49.405c1.576-1.445,2.46-3.494,2.431-5.632c-0.029-2.138-0.97-4.162-2.585-5.563
|
||||
c-43.679-37.89-91.55-63.678-142.334-76.705c-3.684-6.89-8.748-14.141-15.224-21.737c-11.65-13.667-23.588-23.441-24.091-23.851
|
||||
c-3.212-2.617-7.936-2.135-10.552,1.077c-2.616,3.211-2.134,7.935,1.077,10.552c0.112,0.091,11.375,9.313,22.15,21.954
|
||||
c10.222,11.991,16.422,22.74,18.294,31.599c-8.059-2.003-19.142-6.522-30.23-13.394c-16.235-10.061-27.028-21.757-29.611-32.087
|
||||
c-1.005-4.019-5.078-6.464-9.095-5.457c-4.019,1.004-6.462,5.077-5.457,9.095c1.084,4.336,2.938,8.444,5.286,12.291
|
||||
c-41.509-0.418-71.591,6.595-86.947,10.182c-2.83,0.661-5.064,1.183-6.726,1.508c-8.692,1.702-18.393,8.591-28.663,15.884
|
||||
c-12.174,8.646-27.323,19.407-32.65,14.082c-4.966-4.966-1.312-18.299,9.538-34.795c4.907-7.463,7.669-16.215,7.986-25.279
|
||||
l0.006-0.155c0.478-12.414,4.688-24.115,12.175-33.839c9.502-12.343,36.777-42.586,84.687-56.807
|
||||
c44.949-13.342,92.197-7.854,140.434,16.313c63.844,31.989,99.955,79.619,119.006,113.943c20.749,37.382,26.386,67.6,26.438,67.893
|
||||
c0.155,0.866,0.462,1.699,0.905,2.459c0.221,0.378,16.512,28.367,27.638,52.295C404.699,352.283,373.906,368.299,355.505,378.89z"
|
||||
/>
|
||||
<path stroke="currentcolor" fill="currentcolor" d="M179.239,125.68c-12.455-0.239-24.891,0.817-36.965,3.139c-4.068,0.782-6.731,4.714-5.949,8.781
|
||||
c0.69,3.589,3.833,6.085,7.357,6.085c0.47,0,0.946-0.044,1.424-0.136c11.048-2.125,22.432-3.089,33.846-2.872
|
||||
c4.117,0.066,7.563-3.214,7.642-7.355C186.673,129.181,183.38,125.759,179.239,125.68z"/>
|
||||
<path stroke="currentcolor" fill="currentcolor" d="M266.235,147.532c-18.506-8.885-37.251-15.145-55.715-18.605c-4.07-0.762-7.99,1.919-8.753,5.99
|
||||
c-0.763,4.071,1.919,7.99,5.99,8.753c17.173,3.218,34.664,9.067,51.986,17.384c58.37,28.029,91.331,69.762,108.703,99.836
|
||||
c1.39,2.405,3.909,3.75,6.501,3.75c1.272,0,2.563-0.325,3.744-1.007c3.587-2.072,4.815-6.659,2.743-10.246
|
||||
C363.004,221.483,328.058,177.219,266.235,147.532z"/>
|
||||
<circle stroke="currentcolor" fill="currentcolor" cx="59.208" cy="211.178" r="8.215"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
7
inst/www/js/frameHeight.js
Normal file
7
inst/www/js/frameHeight.js
Normal file
@@ -0,0 +1,7 @@
|
||||
window.addEventListener('message', function (event) {
|
||||
if (event.data == "FrameHeight") {
|
||||
var body = document.body, html = document.documentElement;
|
||||
var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
|
||||
event.source.postMessage({ "FrameHeight": height }, "*");
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user