Compare commits
22 Commits
d995683b55
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4fb8dc2b62 | |||
| 270ea2b771 | |||
| b682c7b324 | |||
| 35af7fd3e3 | |||
| a088ad8a19 | |||
| cbe5695fac | |||
| 3c0e7765ed | |||
| 84963aa166 | |||
| 104ca6bc27 | |||
| 2eac970e7f | |||
| 7ad163c642 | |||
| 53e1b58383 | |||
| a3466c52f2 | |||
| 167396e26a | |||
| 8f5b75fae7 | |||
| 3c8a48dceb | |||
| 11733b992c | |||
| 075673da73 | |||
| a1adc4b15d | |||
| 3d05e54943 | |||
| b67ee1e979 | |||
| e3ad003bcb |
4
.gitignore
vendored
@@ -9,3 +9,7 @@ data/
|
|||||||
lidar/
|
lidar/
|
||||||
tiles/
|
tiles/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
standpunkt1/
|
||||||
|
standpunkt2/
|
||||||
|
standpunkt3/
|
||||||
|
output/
|
||||||
50
cloudcompare_workflow.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#-------------------------------------------------------------------------
|
||||||
|
# automatischer Workflow für die Vorverarbeitung einer las/laz-Datei mit CloudCompare
|
||||||
|
#
|
||||||
|
# Arbeitsschritte:
|
||||||
|
# 1. Subsample - Punktdichte verringern
|
||||||
|
# 2. NOISE FILTER - Isolierte Punkte/Inseln entfernen
|
||||||
|
#
|
||||||
|
# zur Benutzung muss die Variable "cloudComprePath" korrekt gesetzt werden!
|
||||||
|
#
|
||||||
|
# Die Ausgabedatei wird in dem Verzeichnis gespeichert, in dem sich dieses Skript befindet!
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
from tkinter import Tk
|
||||||
|
from tkinter.filedialog import askopenfilename
|
||||||
|
|
||||||
|
# die Punktwolken Datei, die verarbeitet wird bestimmen
|
||||||
|
Tk().withdraw()
|
||||||
|
filename = askopenfilename()
|
||||||
|
print("Datei: " + filename)
|
||||||
|
|
||||||
|
# Name der Ausgabedatei
|
||||||
|
outname = filename.rsplit('/', 1)[-1].rsplit('.', 1)[0] + "_processed.laz"
|
||||||
|
outname = outname.replace(" ", "_")
|
||||||
|
|
||||||
|
# Wo ist CloudCompare auf diesem Rechner gespeichert?
|
||||||
|
cloudComprePath = "C:\Program Files\CloudCompare\CloudCompare.exe"
|
||||||
|
|
||||||
|
|
||||||
|
#----- Variablen für die Verarbeitungstools -----
|
||||||
|
|
||||||
|
# minimale Distanz zwischen zwei Punkten (in Meter)
|
||||||
|
subSampleDistance = "0.01"
|
||||||
|
# Radius für Suche nach Nachbarn (in Meter)
|
||||||
|
noiseRadius = "0.02"
|
||||||
|
|
||||||
|
# Verarbeitungsbefehl
|
||||||
|
command = [
|
||||||
|
cloudComprePath,
|
||||||
|
"-O", filename,
|
||||||
|
"-SS", "SPATIAL", subSampleDistance,
|
||||||
|
"-NOISE", "RADIUS", noiseRadius, "REL", "1.0", "RIP",
|
||||||
|
"-C_EXPORT_FMT", "LAS",
|
||||||
|
"-SAVE_CLOUDS", "FILE", outname
|
||||||
|
]
|
||||||
|
|
||||||
|
subprocess.run(command)
|
||||||
|
|
||||||
|
print("Verarbeitung fertig - Datei exportiert")
|
||||||
|
input("")
|
||||||
65
index.html
@@ -4,27 +4,60 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>LiDAR App</title>
|
<title>LiDAR App</title>
|
||||||
<link href="https://unpkg.com/maplibre-gl/dist/maplibre-gl.css" rel="stylesheet" />
|
<link href="https://unpkg.com/maplibre-gl/dist/maplibre-gl.css" rel="stylesheet" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./libs/potree/potree.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="./libs/jquery-ui/jquery-ui.min.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
<script type="module" src="/main.js"></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header id="title">
|
<header id="header">
|
||||||
3D-LiDAR Visualisierung
|
<span>3D-LiDAR Visualisierung</span>
|
||||||
<img id="logoJadeHs" src="logoJadeHs.png" />
|
|
||||||
<img id="logoLbeg" src="logoLbeg.svg" />
|
|
||||||
</header>
|
</header>
|
||||||
<button id="resetBtn">Zurück auf Nord</button>
|
|
||||||
<select name="basemap" id="basemap">
|
|
||||||
<option value="" disabled selected>Hintergrundkarte</option>
|
|
||||||
<option value="openfree_bright">OpenFreeMap hell</option>
|
|
||||||
<option value="openfree_dark">OpenFreeMap dunkel</option>
|
|
||||||
<option value="openfree_liberty">OpenFreeMap Liberty</option>
|
|
||||||
<option value="google_satellite">Satellit</option>
|
|
||||||
<option value="terrain">Terrain</option>
|
|
||||||
<option value="satellite_terrain">Terrain mit Satellitenbild</option>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<div id="map"></div>
|
<aside id="sidebar">
|
||||||
|
|
||||||
|
<select name="basemap" id="basemap">
|
||||||
|
<option value="" disabled selected>Hintergrundkarte</option>
|
||||||
|
<option value="openfree_bright">OpenFreeMap hell</option>
|
||||||
|
<option value="openfree_dark">OpenFreeMap dunkel</option>
|
||||||
|
<option value="openfree_liberty">OpenFreeMap Liberty</option>
|
||||||
|
<option value="google_satellite">Satellit</option>
|
||||||
|
<option value="terrain">Terrain</option>
|
||||||
|
<option value="satellite_terrain">Terrain mit Satellitenbild</option>
|
||||||
|
</select>
|
||||||
|
<select name="pointcloud" id="pointcloud">
|
||||||
|
<option value="" disabled selected>Punktwolke auswählen</option>
|
||||||
|
<option value="first">1. Fläche unten</option>
|
||||||
|
<option value="second">2. Felswand</option>
|
||||||
|
<option value="third">3. Fläche oben mit Spuren</option>
|
||||||
|
</select>
|
||||||
|
<p>
|
||||||
|
<input type="checkbox">Punktwolke ausblenden
|
||||||
|
</p>
|
||||||
|
<div class="logos">
|
||||||
|
<a href="http://www.jade-hs.de">
|
||||||
|
<img id="logoJadeHs" src="logoJadeHs.png" />
|
||||||
|
</a>
|
||||||
|
<a href="https://www.lbeg.niedersachsen.de/startseite/">
|
||||||
|
<img id="logoLbeg" src="logoLbeg.svg" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<main id="main">
|
||||||
|
<img id="location" src="standort.png"/>
|
||||||
|
<div id="map"></div>
|
||||||
|
<div id="potree_render_area"></div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script src="./libs/jquery/jquery-3.1.1.min.js"></script>
|
||||||
|
<script src="./libs/other/BinaryHeap.js"></script>
|
||||||
|
<script src="./libs/tween/tween.min.js"></script>
|
||||||
|
<script src="./libs/d3/d3.js"></script>
|
||||||
|
<script src="./libs/proj4/proj4.js"></script>
|
||||||
|
<script src="./libs/potree/potree.js"></script>
|
||||||
|
<script src="./libs/plasio/js/laslaz.js"></script>
|
||||||
|
|
||||||
|
<script type="module" src="/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
BIN
libs/CPotree/filter.exe
Normal file
21
libs/MeshLine/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2016 Jaume Sanchez
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
137
libs/MeshLine/README.md
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
# MeshLine
|
||||||
|
Mesh replacement for ```THREE.Line```
|
||||||
|
|
||||||
|
Instead of using GL_LINE, it uses a strip of triangles billboarded. Some examples:
|
||||||
|
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html)
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html)
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html)
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html)
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html)
|
||||||
|
[](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html)
|
||||||
|
|
||||||
|
* [Demo](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html): play with the different settings of materials
|
||||||
|
* [Graph](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html): example of using ```MeshLine``` to plot graphs
|
||||||
|
* [Spinner](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html): example of dynamic ```MeshLine``` with texture
|
||||||
|
* [SVG](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html): example of ```MeshLine``` rendering SVG Paths
|
||||||
|
* [Shape](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html): example of ```MeshLine``` created from a mesh
|
||||||
|
* [Birds](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html): example of ```MeshLine.advance()``` by @caramelcode (Jared Sprague) and @mwcz (Michael Clayton)
|
||||||
|
|
||||||
|
### How to use ####
|
||||||
|
|
||||||
|
* Include script
|
||||||
|
* Create and populate a geometry
|
||||||
|
* Create a MeshLine and assign the geometry
|
||||||
|
* Create a MeshLineMaterial
|
||||||
|
* Use MeshLine and MeshLineMaterial to create a THREE.Mesh
|
||||||
|
|
||||||
|
#### Include the script
|
||||||
|
|
||||||
|
Include script after THREE is included
|
||||||
|
```js
|
||||||
|
<script src="THREE.MeshLine.js"></script>
|
||||||
|
```
|
||||||
|
or use npm to install it
|
||||||
|
```
|
||||||
|
npm i three.meshline
|
||||||
|
```
|
||||||
|
and include it in your code (don't forget to require three.js)
|
||||||
|
```js
|
||||||
|
var THREE = require( 'three' );
|
||||||
|
var MeshLine = require( 'three.meshline' );
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Create and populate a geometry #####
|
||||||
|
|
||||||
|
First, create the list of vertices that will define the line. ```MeshLine``` accepts ```THREE.Geometry``` (looking up the ```.vertices``` in it) and ```Array```/```Float32Array```. ```THREE.BufferGeometry``` coming soon, and may be others like ```Array``` of ```THREE.Vector3```.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var geometry = new THREE.Geometry();
|
||||||
|
for( var j = 0; j < Math.PI; j += 2 * Math.PI / 100 ) {
|
||||||
|
var v = new THREE.Vector3( Math.cos( j ), Math.sin( j ), 0 );
|
||||||
|
geometry.vertices.push( v );
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Create a MeshLine and assign the geometry #####
|
||||||
|
|
||||||
|
Once you have that, you can create a new ```MeshLine```, and call ```.setGeometry()``` passing the vertices.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var line = new MeshLine();
|
||||||
|
line.setGeometry( geometry );
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: ```.setGeometry``` accepts a second parameter, which is a function to define the width in each point along the line. By default that value is 1, making the line width 1 * lineWidth.
|
||||||
|
|
||||||
|
```js
|
||||||
|
line.setGeometry( geometry, function( p ) { return 2; } ); // makes width 2 * lineWidth
|
||||||
|
line.setGeometry( geometry, function( p ) { return 1 - p; } ); // makes width taper
|
||||||
|
line.setGeometry( geometry, function( p ) { return 2 + Math.sin( 50 * p ); } ); // makes width sinusoidal
|
||||||
|
```
|
||||||
|
|
||||||
|
##### Create a MeshLineMaterial #####
|
||||||
|
|
||||||
|
A ```MeshLine``` needs a ```MeshLineMaterial```:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var material = new MeshLineMaterial();
|
||||||
|
```
|
||||||
|
|
||||||
|
By default it's a white material of width 1 unit.
|
||||||
|
|
||||||
|
```MeshLineMaterial``` has several attributes to control the appereance of the ```MeshLine```:
|
||||||
|
|
||||||
|
* ```map``` - a ```THREE.Texture``` to paint along the line (requires ```useMap``` set to true)
|
||||||
|
* ```useMap``` - tells the material to use ```map``` (0 - solid color, 1 use texture)
|
||||||
|
* ```alphaMap``` - a ```THREE.Texture``` to use as alpha along the line (requires ```useAlphaMap``` set to true)
|
||||||
|
* ```useAlphaMap``` - tells the material to use ```alphaMap``` (0 - no alpha, 1 modulate alpha)
|
||||||
|
* ```repeat``` - THREE.Vector2 to define the texture tiling (applies to map and alphaMap - MIGHT CHANGE IN THE FUTURE)
|
||||||
|
* ```color``` - ```THREE.Color``` to paint the line width, or tint the texture with
|
||||||
|
* ```opacity``` - alpha value from 0 to 1 (requires ```transparent``` set to ```true```)
|
||||||
|
* ```alphaTest``` - cutoff value from 0 to 1
|
||||||
|
* ```dashArray``` - THREE.Vector2 to define the dashing (NOT IMPLEMENTED YET)
|
||||||
|
* ```resolution``` - ```THREE.Vector2``` specifying the canvas size (REQUIRED)
|
||||||
|
* ```sizeAttenuation``` - makes the line width constant regardless distance (1 unit is 1px on screen) (0 - attenuate, 1 - don't attenuate)
|
||||||
|
* ```lineWidth``` - float defining width (if ```sizeAttenuation``` is true, it's world units; else is screen pixels)
|
||||||
|
* ```near``` - camera near clip plane distance (REQUIRED if ```sizeAttenuation``` set to false)
|
||||||
|
* ```far``` - camera far clip plane distance (REQUIRED if ```sizeAttenuation``` set to false)
|
||||||
|
|
||||||
|
If you're rendering transparent lines or using a texture with alpha map, you should set ```depthTest``` to ```false```, ```transparent``` to ```true``` and ```blending``` to an appropriate blending mode, or use ```alphaTest```.
|
||||||
|
|
||||||
|
##### Use MeshLine and MeshLineMaterial to create a THREE.Mesh #####
|
||||||
|
|
||||||
|
Finally, we create a mesh and add it to the scene:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var mesh = new THREE.Mesh( line.geometry, material ); // this syntax could definitely be improved!
|
||||||
|
scene.add( mesh );
|
||||||
|
```
|
||||||
|
|
||||||
|
### TODO ###
|
||||||
|
|
||||||
|
* Better miters
|
||||||
|
* Proper sizes
|
||||||
|
* Support for dashArray
|
||||||
|
|
||||||
|
### Support ###
|
||||||
|
|
||||||
|
Tested successfully on
|
||||||
|
|
||||||
|
* Chrome OSX, Windows, Android
|
||||||
|
* Firefox OSX, Windows, Anroid
|
||||||
|
* Safari OSX, iOS
|
||||||
|
* Internet Explorer 11 (SVG and Shape demo won't work because they use Promises)
|
||||||
|
* Opera OSX, Windows
|
||||||
|
|
||||||
|
### References ###
|
||||||
|
|
||||||
|
* [Drawing lines is hard](http://mattdesl.svbtle.com/drawing-lines-is-hard)
|
||||||
|
* [WebGL rendering of solid trails](http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/)
|
||||||
|
* [Drawing Antialiased Lines with OpenGL](https://www.mapbox.com/blog/drawing-antialiased-lines/)
|
||||||
|
|
||||||
|
#### License ####
|
||||||
|
|
||||||
|
MIT licensed
|
||||||
|
|
||||||
|
Copyright (C) 2015-2016 Jaume Sanchez Elias, http://www.clicktorelease.com
|
||||||
477
libs/MeshLine/src/THREE.MeshLine.js
Normal file
@@ -0,0 +1,477 @@
|
|||||||
|
;(function() {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var root = this
|
||||||
|
|
||||||
|
var has_require = typeof require !== 'undefined'
|
||||||
|
|
||||||
|
var THREE = root.THREE || has_require && require('three')
|
||||||
|
if( !THREE )
|
||||||
|
throw new Error( 'MeshLine requires three.js' )
|
||||||
|
|
||||||
|
function MeshLine() {
|
||||||
|
|
||||||
|
this.positions = [];
|
||||||
|
|
||||||
|
this.previous = [];
|
||||||
|
this.next = [];
|
||||||
|
this.side = [];
|
||||||
|
this.width = [];
|
||||||
|
this.indices_array = [];
|
||||||
|
this.uvs = [];
|
||||||
|
this.counters = [];
|
||||||
|
this.geometry = new THREE.BufferGeometry();
|
||||||
|
|
||||||
|
this.widthCallback = null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MeshLine.prototype.setGeometry = function( g, c ) {
|
||||||
|
|
||||||
|
this.widthCallback = c;
|
||||||
|
|
||||||
|
this.positions = [];
|
||||||
|
this.counters = [];
|
||||||
|
|
||||||
|
if( g instanceof THREE.Geometry ) {
|
||||||
|
for( var j = 0; j < g.vertices.length; j++ ) {
|
||||||
|
var v = g.vertices[ j ];
|
||||||
|
var c = j/g.vertices.length;
|
||||||
|
this.positions.push( v.x, v.y, v.z );
|
||||||
|
this.positions.push( v.x, v.y, v.z );
|
||||||
|
this.counters.push(c);
|
||||||
|
this.counters.push(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( g instanceof THREE.BufferGeometry ) {
|
||||||
|
// read attribute positions ?
|
||||||
|
}
|
||||||
|
|
||||||
|
if( g instanceof Float32Array || g instanceof Array ) {
|
||||||
|
for( var j = 0; j < g.length; j += 3 ) {
|
||||||
|
var c = j/g.length;
|
||||||
|
this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] );
|
||||||
|
this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] );
|
||||||
|
this.counters.push(c);
|
||||||
|
this.counters.push(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.process();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MeshLine.prototype.compareV3 = function( a, b ) {
|
||||||
|
|
||||||
|
var aa = a * 6;
|
||||||
|
var ab = b * 6;
|
||||||
|
return ( this.positions[ aa ] === this.positions[ ab ] ) && ( this.positions[ aa + 1 ] === this.positions[ ab + 1 ] ) && ( this.positions[ aa + 2 ] === this.positions[ ab + 2 ] );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MeshLine.prototype.copyV3 = function( a ) {
|
||||||
|
|
||||||
|
var aa = a * 6;
|
||||||
|
return [ this.positions[ aa ], this.positions[ aa + 1 ], this.positions[ aa + 2 ] ];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MeshLine.prototype.process = function() {
|
||||||
|
|
||||||
|
var l = this.positions.length / 6;
|
||||||
|
|
||||||
|
this.previous = [];
|
||||||
|
this.next = [];
|
||||||
|
this.side = [];
|
||||||
|
this.width = [];
|
||||||
|
this.indices_array = [];
|
||||||
|
this.uvs = [];
|
||||||
|
|
||||||
|
for( var j = 0; j < l; j++ ) {
|
||||||
|
this.side.push( 1 );
|
||||||
|
this.side.push( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
var w;
|
||||||
|
for( var j = 0; j < l; j++ ) {
|
||||||
|
if( this.widthCallback ) w = this.widthCallback( j / ( l -1 ) );
|
||||||
|
else w = 1;
|
||||||
|
this.width.push( w );
|
||||||
|
this.width.push( w );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( var j = 0; j < l; j++ ) {
|
||||||
|
this.uvs.push( j / ( l - 1 ), 0 );
|
||||||
|
this.uvs.push( j / ( l - 1 ), 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
var v;
|
||||||
|
|
||||||
|
if( this.compareV3( 0, l - 1 ) ){
|
||||||
|
v = this.copyV3( l - 2 );
|
||||||
|
} else {
|
||||||
|
v = this.copyV3( 0 );
|
||||||
|
}
|
||||||
|
this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
for( var j = 0; j < l - 1; j++ ) {
|
||||||
|
v = this.copyV3( j );
|
||||||
|
this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( var j = 1; j < l; j++ ) {
|
||||||
|
v = this.copyV3( j );
|
||||||
|
this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( this.compareV3( l - 1, 0 ) ){
|
||||||
|
v = this.copyV3( 1 );
|
||||||
|
} else {
|
||||||
|
v = this.copyV3( l - 1 );
|
||||||
|
}
|
||||||
|
this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );
|
||||||
|
|
||||||
|
for( var j = 0; j < l - 1; j++ ) {
|
||||||
|
var n = j * 2;
|
||||||
|
this.indices_array.push( n, n + 1, n + 2 );
|
||||||
|
this.indices_array.push( n + 2, n + 1, n + 3 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.attributes) {
|
||||||
|
this.attributes = {
|
||||||
|
position: new THREE.BufferAttribute( new Float32Array( this.positions ), 3 ),
|
||||||
|
previous: new THREE.BufferAttribute( new Float32Array( this.previous ), 3 ),
|
||||||
|
next: new THREE.BufferAttribute( new Float32Array( this.next ), 3 ),
|
||||||
|
side: new THREE.BufferAttribute( new Float32Array( this.side ), 1 ),
|
||||||
|
width: new THREE.BufferAttribute( new Float32Array( this.width ), 1 ),
|
||||||
|
uv: new THREE.BufferAttribute( new Float32Array( this.uvs ), 2 ),
|
||||||
|
index: new THREE.BufferAttribute( new Uint16Array( this.indices_array ), 1 ),
|
||||||
|
counters: new THREE.BufferAttribute( new Float32Array( this.counters ), 1 )
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.attributes.position.copyArray(new Float32Array(this.positions));
|
||||||
|
this.attributes.position.needsUpdate = true;
|
||||||
|
this.attributes.previous.copyArray(new Float32Array(this.previous));
|
||||||
|
this.attributes.previous.needsUpdate = true;
|
||||||
|
this.attributes.next.copyArray(new Float32Array(this.next));
|
||||||
|
this.attributes.next.needsUpdate = true;
|
||||||
|
this.attributes.side.copyArray(new Float32Array(this.side));
|
||||||
|
this.attributes.side.needsUpdate = true;
|
||||||
|
this.attributes.width.copyArray(new Float32Array(this.width));
|
||||||
|
this.attributes.width.needsUpdate = true;
|
||||||
|
this.attributes.uv.copyArray(new Float32Array(this.uvs));
|
||||||
|
this.attributes.uv.needsUpdate = true;
|
||||||
|
this.attributes.index.copyArray(new Uint16Array(this.indices_array));
|
||||||
|
this.attributes.index.needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.geometry.addAttribute( 'position', this.attributes.position );
|
||||||
|
this.geometry.addAttribute( 'previous', this.attributes.previous );
|
||||||
|
this.geometry.addAttribute( 'next', this.attributes.next );
|
||||||
|
this.geometry.addAttribute( 'side', this.attributes.side );
|
||||||
|
this.geometry.addAttribute( 'width', this.attributes.width );
|
||||||
|
this.geometry.addAttribute( 'uv', this.attributes.uv );
|
||||||
|
this.geometry.addAttribute( 'counters', this.attributes.counters );
|
||||||
|
|
||||||
|
this.geometry.setIndex( this.attributes.index );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function memcpy (src, srcOffset, dst, dstOffset, length) {
|
||||||
|
var i
|
||||||
|
|
||||||
|
src = src.subarray || src.slice ? src : src.buffer
|
||||||
|
dst = dst.subarray || dst.slice ? dst : dst.buffer
|
||||||
|
|
||||||
|
src = srcOffset ? src.subarray ?
|
||||||
|
src.subarray(srcOffset, length && srcOffset + length) :
|
||||||
|
src.slice(srcOffset, length && srcOffset + length) : src
|
||||||
|
|
||||||
|
if (dst.set) {
|
||||||
|
dst.set(src, dstOffset)
|
||||||
|
} else {
|
||||||
|
for (i=0; i<src.length; i++) {
|
||||||
|
dst[i + dstOffset] = src[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fast method to advance the line by one position. The oldest position is removed.
|
||||||
|
* @param position
|
||||||
|
*/
|
||||||
|
MeshLine.prototype.advance = function(position) {
|
||||||
|
|
||||||
|
var positions = this.attributes.position.array;
|
||||||
|
var previous = this.attributes.previous.array;
|
||||||
|
var next = this.attributes.next.array;
|
||||||
|
var l = positions.length;
|
||||||
|
|
||||||
|
// PREVIOUS
|
||||||
|
memcpy( positions, 0, previous, 0, l );
|
||||||
|
|
||||||
|
// POSITIONS
|
||||||
|
memcpy( positions, 6, positions, 0, l - 6 );
|
||||||
|
|
||||||
|
positions[l - 6] = position.x;
|
||||||
|
positions[l - 5] = position.y;
|
||||||
|
positions[l - 4] = position.z;
|
||||||
|
positions[l - 3] = position.x;
|
||||||
|
positions[l - 2] = position.y;
|
||||||
|
positions[l - 1] = position.z;
|
||||||
|
|
||||||
|
// NEXT
|
||||||
|
memcpy( positions, 6, next, 0, l - 6 );
|
||||||
|
|
||||||
|
next[l - 6] = position.x;
|
||||||
|
next[l - 5] = position.y;
|
||||||
|
next[l - 4] = position.z;
|
||||||
|
next[l - 3] = position.x;
|
||||||
|
next[l - 2] = position.y;
|
||||||
|
next[l - 1] = position.z;
|
||||||
|
|
||||||
|
this.attributes.position.needsUpdate = true;
|
||||||
|
this.attributes.previous.needsUpdate = true;
|
||||||
|
this.attributes.next.needsUpdate = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
function MeshLineMaterial( parameters ) {
|
||||||
|
|
||||||
|
var vertexShaderSource = [
|
||||||
|
'precision highp float;',
|
||||||
|
'',
|
||||||
|
'attribute vec3 position;',
|
||||||
|
'attribute vec3 previous;',
|
||||||
|
'attribute vec3 next;',
|
||||||
|
'attribute float side;',
|
||||||
|
'attribute float width;',
|
||||||
|
'attribute vec2 uv;',
|
||||||
|
'attribute float counters;',
|
||||||
|
'',
|
||||||
|
'uniform mat4 projectionMatrix;',
|
||||||
|
'uniform mat4 modelViewMatrix;',
|
||||||
|
'uniform vec2 resolution;',
|
||||||
|
'uniform float lineWidth;',
|
||||||
|
'uniform vec3 color;',
|
||||||
|
'uniform float opacity;',
|
||||||
|
'uniform float near;',
|
||||||
|
'uniform float far;',
|
||||||
|
'uniform float sizeAttenuation;',
|
||||||
|
'',
|
||||||
|
'varying vec2 vUV;',
|
||||||
|
'varying vec4 vColor;',
|
||||||
|
'varying float vCounters;',
|
||||||
|
'',
|
||||||
|
'vec2 fix( vec4 i, float aspect ) {',
|
||||||
|
'',
|
||||||
|
' vec2 res = i.xy / i.w;',
|
||||||
|
' res.x *= aspect;',
|
||||||
|
' vCounters = counters;',
|
||||||
|
' return res;',
|
||||||
|
'',
|
||||||
|
'}',
|
||||||
|
'',
|
||||||
|
'void main() {',
|
||||||
|
'',
|
||||||
|
' float aspect = resolution.x / resolution.y;',
|
||||||
|
' float pixelWidthRatio = 1. / (resolution.x * projectionMatrix[0][0]);',
|
||||||
|
'',
|
||||||
|
' vColor = vec4( color, opacity );',
|
||||||
|
' vUV = uv;',
|
||||||
|
'',
|
||||||
|
' mat4 m = projectionMatrix * modelViewMatrix;',
|
||||||
|
' vec4 finalPosition = m * vec4( position, 1.0 );',
|
||||||
|
' vec4 prevPos = m * vec4( previous, 1.0 );',
|
||||||
|
' vec4 nextPos = m * vec4( next, 1.0 );',
|
||||||
|
'',
|
||||||
|
' vec2 currentP = fix( finalPosition, aspect );',
|
||||||
|
' vec2 prevP = fix( prevPos, aspect );',
|
||||||
|
' vec2 nextP = fix( nextPos, aspect );',
|
||||||
|
'',
|
||||||
|
' float pixelWidth = finalPosition.w * pixelWidthRatio;',
|
||||||
|
' float w = 1.8 * pixelWidth * lineWidth * width;',
|
||||||
|
'',
|
||||||
|
' if( sizeAttenuation == 1. ) {',
|
||||||
|
' w = 1.8 * lineWidth * width;',
|
||||||
|
' }',
|
||||||
|
'',
|
||||||
|
' vec2 dir;',
|
||||||
|
' if( nextP == currentP ) dir = normalize( currentP - prevP );',
|
||||||
|
' else if( prevP == currentP ) dir = normalize( nextP - currentP );',
|
||||||
|
' else {',
|
||||||
|
' vec2 dir1 = normalize( currentP - prevP );',
|
||||||
|
' vec2 dir2 = normalize( nextP - currentP );',
|
||||||
|
' dir = normalize( dir1 + dir2 );',
|
||||||
|
'',
|
||||||
|
' vec2 perp = vec2( -dir1.y, dir1.x );',
|
||||||
|
' vec2 miter = vec2( -dir.y, dir.x );',
|
||||||
|
' //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );',
|
||||||
|
'',
|
||||||
|
' }',
|
||||||
|
'',
|
||||||
|
' //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;',
|
||||||
|
' vec2 normal = vec2( -dir.y, dir.x );',
|
||||||
|
' normal.x /= aspect;',
|
||||||
|
' normal *= .5 * w;',
|
||||||
|
'',
|
||||||
|
' vec4 offset = vec4( normal * side, 0.0, 1.0 );',
|
||||||
|
' finalPosition.xy += offset.xy;',
|
||||||
|
'',
|
||||||
|
' gl_Position = finalPosition;',
|
||||||
|
'',
|
||||||
|
'}' ];
|
||||||
|
|
||||||
|
var fragmentShaderSource = [
|
||||||
|
'#extension GL_OES_standard_derivatives : enable',
|
||||||
|
'precision mediump float;',
|
||||||
|
'',
|
||||||
|
'uniform sampler2D map;',
|
||||||
|
'uniform sampler2D alphaMap;',
|
||||||
|
'uniform float useMap;',
|
||||||
|
'uniform float useAlphaMap;',
|
||||||
|
'uniform float useDash;',
|
||||||
|
'uniform vec2 dashArray;',
|
||||||
|
'uniform float visibility;',
|
||||||
|
'uniform float alphaTest;',
|
||||||
|
'uniform vec2 repeat;',
|
||||||
|
'',
|
||||||
|
'varying vec2 vUV;',
|
||||||
|
'varying vec4 vColor;',
|
||||||
|
'varying float vCounters;',
|
||||||
|
'',
|
||||||
|
'void main() {',
|
||||||
|
'',
|
||||||
|
' vec4 c = vColor;',
|
||||||
|
' if( useMap == 1. ) c *= texture2D( map, vUV * repeat );',
|
||||||
|
' if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;',
|
||||||
|
' if( c.a < alphaTest ) discard;',
|
||||||
|
' if( useDash == 1. ){',
|
||||||
|
' ',
|
||||||
|
' }',
|
||||||
|
' gl_FragColor = c;',
|
||||||
|
' gl_FragColor.a *= step(vCounters,visibility);',
|
||||||
|
'}' ];
|
||||||
|
|
||||||
|
function check( v, d ) {
|
||||||
|
if( v === undefined ) return d;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
THREE.Material.call( this );
|
||||||
|
|
||||||
|
parameters = parameters || {};
|
||||||
|
|
||||||
|
this.lineWidth = check( parameters.lineWidth, 1 );
|
||||||
|
this.map = check( parameters.map, null );
|
||||||
|
this.useMap = check( parameters.useMap, 0 );
|
||||||
|
this.alphaMap = check( parameters.alphaMap, null );
|
||||||
|
this.useAlphaMap = check( parameters.useAlphaMap, 0 );
|
||||||
|
this.color = check( parameters.color, new THREE.Color( 0xffffff ) );
|
||||||
|
this.opacity = check( parameters.opacity, 1 );
|
||||||
|
this.resolution = check( parameters.resolution, new THREE.Vector2( 1, 1 ) );
|
||||||
|
this.sizeAttenuation = check( parameters.sizeAttenuation, 1 );
|
||||||
|
this.near = check( parameters.near, 1 );
|
||||||
|
this.far = check( parameters.far, 1 );
|
||||||
|
this.dashArray = check( parameters.dashArray, [] );
|
||||||
|
this.useDash = ( this.dashArray !== [] ) ? 1 : 0;
|
||||||
|
this.visibility = check( parameters.visibility, 1 );
|
||||||
|
this.alphaTest = check( parameters.alphaTest, 0 );
|
||||||
|
this.repeat = check( parameters.repeat, new THREE.Vector2( 1, 1 ) );
|
||||||
|
|
||||||
|
var material = new THREE.RawShaderMaterial( {
|
||||||
|
uniforms:{
|
||||||
|
lineWidth: { type: 'f', value: this.lineWidth },
|
||||||
|
map: { type: 't', value: this.map },
|
||||||
|
useMap: { type: 'f', value: this.useMap },
|
||||||
|
alphaMap: { type: 't', value: this.alphaMap },
|
||||||
|
useAlphaMap: { type: 'f', value: this.useAlphaMap },
|
||||||
|
color: { type: 'c', value: this.color },
|
||||||
|
opacity: { type: 'f', value: this.opacity },
|
||||||
|
resolution: { type: 'v2', value: this.resolution },
|
||||||
|
sizeAttenuation: { type: 'f', value: this.sizeAttenuation },
|
||||||
|
near: { type: 'f', value: this.near },
|
||||||
|
far: { type: 'f', value: this.far },
|
||||||
|
dashArray: { type: 'v2', value: new THREE.Vector2( this.dashArray[ 0 ], this.dashArray[ 1 ] ) },
|
||||||
|
useDash: { type: 'f', value: this.useDash },
|
||||||
|
visibility: {type: 'f', value: this.visibility},
|
||||||
|
alphaTest: {type: 'f', value: this.alphaTest},
|
||||||
|
repeat: { type: 'v2', value: this.repeat }
|
||||||
|
},
|
||||||
|
vertexShader: vertexShaderSource.join( '\r\n' ),
|
||||||
|
fragmentShader: fragmentShaderSource.join( '\r\n' )
|
||||||
|
});
|
||||||
|
|
||||||
|
delete parameters.lineWidth;
|
||||||
|
delete parameters.map;
|
||||||
|
delete parameters.useMap;
|
||||||
|
delete parameters.alphaMap;
|
||||||
|
delete parameters.useAlphaMap;
|
||||||
|
delete parameters.color;
|
||||||
|
delete parameters.opacity;
|
||||||
|
delete parameters.resolution;
|
||||||
|
delete parameters.sizeAttenuation;
|
||||||
|
delete parameters.near;
|
||||||
|
delete parameters.far;
|
||||||
|
delete parameters.dashArray;
|
||||||
|
delete parameters.visibility;
|
||||||
|
delete parameters.alphaTest;
|
||||||
|
delete parameters.repeat;
|
||||||
|
|
||||||
|
material.type = 'MeshLineMaterial';
|
||||||
|
|
||||||
|
material.setValues( parameters );
|
||||||
|
|
||||||
|
return material;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
MeshLineMaterial.prototype = Object.create( THREE.Material.prototype );
|
||||||
|
MeshLineMaterial.prototype.constructor = MeshLineMaterial;
|
||||||
|
|
||||||
|
MeshLineMaterial.prototype.copy = function ( source ) {
|
||||||
|
|
||||||
|
THREE.Material.prototype.copy.call( this, source );
|
||||||
|
|
||||||
|
this.lineWidth = source.lineWidth;
|
||||||
|
this.map = source.map;
|
||||||
|
this.useMap = source.useMap;
|
||||||
|
this.alphaMap = source.alphaMap;
|
||||||
|
this.useAlphaMap = source.useAlphaMap;
|
||||||
|
this.color.copy( source.color );
|
||||||
|
this.opacity = source.opacity;
|
||||||
|
this.resolution.copy( source.resolution );
|
||||||
|
this.sizeAttenuation = source.sizeAttenuation;
|
||||||
|
this.near = source.near;
|
||||||
|
this.far = source.far;
|
||||||
|
this.dashArray.copy( source.dashArray );
|
||||||
|
this.useDash = source.useDash;
|
||||||
|
this.visibility = source.visibility;
|
||||||
|
this.alphaTest = source.alphaTest;
|
||||||
|
this.repeat.copy( source.repeat );
|
||||||
|
|
||||||
|
return this;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if( typeof exports !== 'undefined' ) {
|
||||||
|
if( typeof module !== 'undefined' && module.exports ) {
|
||||||
|
exports = module.exports = { MeshLine: MeshLine, MeshLineMaterial: MeshLineMaterial };
|
||||||
|
}
|
||||||
|
exports.MeshLine = MeshLine;
|
||||||
|
exports.MeshLineMaterial = MeshLineMaterial;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
root.MeshLine = MeshLine;
|
||||||
|
root.MeshLineMaterial = MeshLineMaterial;
|
||||||
|
}
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
|
|
||||||
34
libs/PotreeConverter/LICENSE_laszip
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
LICENSE AGREEMENT (for LASzip LiDAR compression):
|
||||||
|
|
||||||
|
LASzip is open-source and is licensed with the standard LGPL version 2.1
|
||||||
|
(see COPYING.txt) modified by the following static linking exception.
|
||||||
|
|
||||||
|
As a special exception, the copyright holders of this library give you
|
||||||
|
permission to link this library with independent modules to produce an
|
||||||
|
executable, regardless of the license terms of these independent modules,
|
||||||
|
and to copy and distribute the resulting executable under terms of your
|
||||||
|
choice, provided that you also meet, for each linked independent module,
|
||||||
|
the terms and conditions of the license of that module. An independent
|
||||||
|
module is a module which is not derived from or based on this library.
|
||||||
|
If you modify this library, you may extend this exception to your version
|
||||||
|
of the library, but you are not obliged to do so. If you do not wish to
|
||||||
|
do so, delete this exception statement from your version.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY and without even the
|
||||||
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
PROGRAMMERS:
|
||||||
|
|
||||||
|
martin@rapidlasso.com
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
COPYRIGHT:
|
||||||
|
|
||||||
|
(c) 2007-2015, martin isenburg, rapidlasso - fast tools to catch reality
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
BIN
libs/PotreeConverter/PotreeConverter.exe
Normal file
BIN
libs/PotreeConverter/laszip.dll
Normal file
BIN
libs/PotreeConverter2/PotreeConverter.exe
Normal file
114
libs/PotreeConverter2/README.md
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
|
||||||
|
# About
|
||||||
|
|
||||||
|
PotreeConverter generates an octree LOD structure for streaming and real-time rendering of massive point clouds. The results can be viewed in web browsers with [Potree](https://github.com/potree/potree) or as a desktop application with [PotreeDesktop](https://github.com/potree/PotreeDesktop).
|
||||||
|
|
||||||
|
Version 2.0 is a complete rewrite with following differences over the previous version 1.7:
|
||||||
|
|
||||||
|
* About 10 to 50 times faster than PotreeConverter 1.7 on SSDs.
|
||||||
|
* Produces a total of 3 files instead of thousands to tens of millions of files. The reduction of the number of files improves file system operations such as copy, delete and upload to servers from hours and days to seconds and minutes.
|
||||||
|
* Better support for standard LAS attributes and arbitrary extra attributes. Full support (e.g. int64 and uint64) in development.
|
||||||
|
* Optional compression is not yet available in the new converter but on the roadmap for a future update.
|
||||||
|
|
||||||
|
Altough the converter made a major step to version 2.0, the format it produces is also supported by Potree 1.7. The Potree viewer is scheduled to make the major step to version 2.0 in 2021, with a rewrite in WebGPU.
|
||||||
|
|
||||||
|
# Publications
|
||||||
|
|
||||||
|
* [Potree: Rendering Large Point Clouds in Web Browsers](https://www.cg.tuwien.ac.at/research/publications/2016/SCHUETZ-2016-POT/SCHUETZ-2016-POT-thesis.pdf)
|
||||||
|
* [Fast Out-of-Core Octree Generation for Massive Point Clouds](https://www.cg.tuwien.ac.at/research/publications/2020/SCHUETZ-2020-MPC/), _Schütz M., Ohrhallinger S., Wimmer M._
|
||||||
|
|
||||||
|
# Getting Started
|
||||||
|
|
||||||
|
1. Download windows binaries or
|
||||||
|
* Download source code
|
||||||
|
* Install [CMake](https://cmake.org/) 3.16 or later
|
||||||
|
* Create and jump into folder "build"
|
||||||
|
```
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
```
|
||||||
|
* run
|
||||||
|
```
|
||||||
|
cmake ../
|
||||||
|
```
|
||||||
|
* On linux, run: ```make```
|
||||||
|
* On windows, open Visual Studio 2019 Project ./Converter/Converter.sln and compile it in release mode
|
||||||
|
2. run ```PotreeConverter.exe <input> -o <outputDir>```
|
||||||
|
* Optionally specify the sampling strategy:
|
||||||
|
* Poisson-disk sampling (default): ```PotreeConverter.exe <input> -o <outputDir> -m poisson```
|
||||||
|
* Random sampling: ```PotreeConverter.exe <input> -o <outputDir> -m random```
|
||||||
|
|
||||||
|
In Potree, modify one of the examples with following load command:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let url = "../pointclouds/D/temp/test/metadata.json";
|
||||||
|
Potree.loadPointCloud(url).then(e => {
|
||||||
|
let pointcloud = e.pointcloud;
|
||||||
|
let material = pointcloud.material;
|
||||||
|
|
||||||
|
material.activeAttributeName = "rgba";
|
||||||
|
material.minSize = 2;
|
||||||
|
material.pointSizeType = Potree.PointSizeType.ADAPTIVE;
|
||||||
|
|
||||||
|
viewer.scene.addPointCloud(pointcloud);
|
||||||
|
viewer.fitToScreen();
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Alternatives
|
||||||
|
|
||||||
|
PotreeConverter 2.0 produces a very different format than previous iterations. If you find issues, you can still try previous converters or alternatives:
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th>PotreeConverter 2.0</th>
|
||||||
|
<th><a href="https://github.com/potree/PotreeConverter/releases/tag/1.7">PotreeConverter 1.7</a></th>
|
||||||
|
<th><a href="https://entwine.io/">Entwine</a></th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>license</th>
|
||||||
|
<td>
|
||||||
|
free, BSD 2-clause
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
free, BSD 2-clause
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
free, LGPL
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>#generated files</th>
|
||||||
|
<td>
|
||||||
|
3 files total
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
1 per node
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
1 per node
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>compression</th>
|
||||||
|
<td>
|
||||||
|
none (TODO)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
LAZ (optional)
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
LAZ
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Performance comparison (Ryzen 2700, NVMe SSD):
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
# License
|
||||||
|
|
||||||
|
PotreeConverter is available under the [BSD 2-clause license](./LICENSE).
|
||||||
BIN
libs/PotreeConverter2/laszip.dll
Normal file
19
libs/PotreeConverter2/licenses/license_brotli.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
21
libs/PotreeConverter2/licenses/license_json.txt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013-2020 Niels Lohmann
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
511
libs/PotreeConverter2/licenses/license_laszip.txt
Normal file
@@ -0,0 +1,511 @@
|
|||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 2.1, February 1999
|
||||||
|
|
||||||
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the Lesser GPL. It also counts
|
||||||
|
as the successor of the GNU Library Public License, version 2, hence
|
||||||
|
the version number 2.1.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Lesser General Public License, applies to some
|
||||||
|
specially designated software packages--typically libraries--of the
|
||||||
|
Free Software Foundation and other authors who decide to use it. You
|
||||||
|
can use it too, but we suggest you first think carefully about whether
|
||||||
|
this license or the ordinary General Public License is the better
|
||||||
|
strategy to use in any particular case, based on the explanations below.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom of use,
|
||||||
|
not price. Our General Public Licenses are designed to make sure that
|
||||||
|
you have the freedom to distribute copies of free software (and charge
|
||||||
|
for this service if you wish); that you receive source code or can get
|
||||||
|
it if you want it; that you can change the software and use pieces of
|
||||||
|
it in new free programs; and that you are informed that you can do
|
||||||
|
these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
distributors to deny you these rights or to ask you to surrender these
|
||||||
|
rights. These restrictions translate to certain responsibilities for
|
||||||
|
you if you distribute copies of the library or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link other code with the library, you must provide
|
||||||
|
complete object files to the recipients, so that they can relink them
|
||||||
|
with the library after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with a two-step method: (1) we copyright the
|
||||||
|
library, and (2) we offer you this license, which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
To protect each distributor, we want to make it very clear that
|
||||||
|
there is no warranty for the free library. Also, if the library is
|
||||||
|
modified by someone else and passed on, the recipients should know
|
||||||
|
that what they have is not the original version, so that the original
|
||||||
|
author's reputation will not be affected by problems that might be
|
||||||
|
introduced by others.
|
||||||
|
|
||||||
|
|
||||||
|
Finally, software patents pose a constant threat to the existence of
|
||||||
|
any free program. We wish to make sure that a company cannot
|
||||||
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
restrictive license from a patent holder. Therefore, we insist that
|
||||||
|
any patent license obtained for a version of the library must be
|
||||||
|
consistent with the full freedom of use specified in this license.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the
|
||||||
|
ordinary GNU General Public License. This license, the GNU Lesser
|
||||||
|
General Public License, applies to certain designated libraries, and
|
||||||
|
is quite different from the ordinary General Public License. We use
|
||||||
|
this license for certain libraries in order to permit linking those
|
||||||
|
libraries into non-free programs.
|
||||||
|
|
||||||
|
When a program is linked with a library, whether statically or using
|
||||||
|
a shared library, the combination of the two is legally speaking a
|
||||||
|
combined work, a derivative of the original library. The ordinary
|
||||||
|
General Public License therefore permits such linking only if the
|
||||||
|
entire combination fits its criteria of freedom. The Lesser General
|
||||||
|
Public License permits more lax criteria for linking other code with
|
||||||
|
the library.
|
||||||
|
|
||||||
|
We call this license the "Lesser" General Public License because it
|
||||||
|
does Less to protect the user's freedom than the ordinary General
|
||||||
|
Public License. It also provides other free software developers Less
|
||||||
|
of an advantage over competing non-free programs. These disadvantages
|
||||||
|
are the reason we use the ordinary General Public License for many
|
||||||
|
libraries. However, the Lesser license provides advantages in certain
|
||||||
|
special circumstances.
|
||||||
|
|
||||||
|
For example, on rare occasions, there may be a special need to
|
||||||
|
encourage the widest possible use of a certain library, so that it becomes
|
||||||
|
a de-facto standard. To achieve this, non-free programs must be
|
||||||
|
allowed to use the library. A more frequent case is that a free
|
||||||
|
library does the same job as widely used non-free libraries. In this
|
||||||
|
case, there is little to gain by limiting the free library to free
|
||||||
|
software only, so we use the Lesser General Public License.
|
||||||
|
|
||||||
|
In other cases, permission to use a particular library in non-free
|
||||||
|
programs enables a greater number of people to use a large body of
|
||||||
|
free software. For example, permission to use the GNU C Library in
|
||||||
|
non-free programs enables many more people to use the whole GNU
|
||||||
|
operating system, as well as its variant, the GNU/Linux operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Although the Lesser General Public License is Less protective of the
|
||||||
|
users' freedom, it does ensure that the user of a program that is
|
||||||
|
linked with the Library has the freedom and the wherewithal to run
|
||||||
|
that program using a modified version of the Library.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, whereas the latter must
|
||||||
|
be combined with the library in order to run.
|
||||||
|
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library or other
|
||||||
|
program which contains a notice placed by the copyright holder or
|
||||||
|
other authorized party saying it may be distributed under the terms of
|
||||||
|
this Lesser General Public License (also called "this License").
|
||||||
|
Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also combine or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (1) uses at run time a
|
||||||
|
copy of the library already present on the user's computer system,
|
||||||
|
rather than copying library functions into the executable, and (2)
|
||||||
|
will operate properly with a modified version of the library, if
|
||||||
|
the user installs one, as long as the modified version is
|
||||||
|
interface-compatible with the version that the work was made with.
|
||||||
|
|
||||||
|
c) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
d) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
e) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the materials to be distributed need not include anything that is
|
||||||
|
normally distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties with
|
||||||
|
this License.
|
||||||
|
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Lesser General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
possible use to the public, we recommend making it free software that
|
||||||
|
everyone can redistribute and change. You can do so by permitting
|
||||||
|
redistribution under these terms (or, alternatively, under the terms of the
|
||||||
|
ordinary General Public License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is
|
||||||
|
safest to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least the
|
||||||
|
"copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the library's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||||
|
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1990
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
||||||
10
libs/PotreeConverter2/licenses/license_potree_converter.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
Copyright 2020 Markus Schütz
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
48
libs/ZoomableSlider/ZoomableSlider.css
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
.zs_widget{
|
||||||
|
padding: 2px;
|
||||||
|
height: 30px;
|
||||||
|
border: 1px solid green;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.zs_core{
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.zs_handle{
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
border: 1px solid green;
|
||||||
|
background-color: green;
|
||||||
|
width: 8px;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.zs_handle:hover{
|
||||||
|
background-color: lightgreen;
|
||||||
|
}
|
||||||
|
.zs_inside{
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.zs_outside{
|
||||||
|
position: absolute !important;
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
background-color: black;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label_left{
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label_right{
|
||||||
|
right: 0px;
|
||||||
|
}
|
||||||
|
.zs_chosen_range_label{
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
31
libs/ZoomableSlider/ZoomableSlider.html
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<title>Document</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="ZoomableSlider.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="target" style="position: absolute; left: 10px; top: 10px; width: 300px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="ZoomableSlider.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
let el = document.getElementById("target");
|
||||||
|
let slider = new ZoomableSlider();
|
||||||
|
|
||||||
|
el.appendChild(slider.element);
|
||||||
|
slider.update();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
133
libs/ZoomableSlider/ZoomableSlider.js
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
|
||||||
|
class ZoomableSlider{
|
||||||
|
constructor(){
|
||||||
|
this.visibleRange = [0, 10];
|
||||||
|
this.chosenRange = [2, 7];
|
||||||
|
this.step = 0.01;
|
||||||
|
this.clipDragToVisible = true;
|
||||||
|
this.element = document.createElement("div");
|
||||||
|
this.element.innerHTML = `
|
||||||
|
<div name="zoomable_slider_widget" class="zs_widget">
|
||||||
|
<div name="core" class="zs_core">
|
||||||
|
<span name="outside" class="zs_outside"> </span>
|
||||||
|
<span name="inside" class="zs_inside"> </span>
|
||||||
|
<span name="left" class="zs_handle"> </span>
|
||||||
|
<span name="right" class="zs_handle"> </span>
|
||||||
|
<span name="label_visible_left" class="zs_visible_range_label zs_visible_range_label_left"></span>
|
||||||
|
<span name="label_visible_right" class="zs_visible_range_label zs_visible_range_label_right"></span>
|
||||||
|
<span name="label_chosen_left" class="zs_chosen_range_label zs_chosen_range_label_left"></span>
|
||||||
|
<span name="label_chosen_right" class="zs_chosen_range_label zs_chosen_range_label_right"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
this.elCore = this.element.querySelector('[name=core]');
|
||||||
|
this.elLeft = this.element.querySelector('[name=left]');
|
||||||
|
this.elRight = this.element.querySelector('[name=right]');
|
||||||
|
this.elInside = this.element.querySelector('[name=inside]');
|
||||||
|
this.elOutside = this.element.querySelector('[name=outside]');
|
||||||
|
this.elLabelVisibleLeft = this.element.querySelector('[name=label_visible_left]');
|
||||||
|
this.elLabelVisibleRight = this.element.querySelector('[name=label_visible_right]');
|
||||||
|
this.elLabelChosenLeft = this.element.querySelector('[name=label_chosen_left]');
|
||||||
|
this.elLabelChosenRight = this.element.querySelector('[name=label_chosen_right]');
|
||||||
|
this.elRight.style.left = "100px";
|
||||||
|
let dragStart = null;
|
||||||
|
let onMouseDown = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
let value = (e.target === this.elLeft) ?
|
||||||
|
this.chosenRange[0] :
|
||||||
|
this.chosenRange[1];
|
||||||
|
dragStart = {
|
||||||
|
x: e.clientX,
|
||||||
|
y: e.clientY,
|
||||||
|
handle: e.target,
|
||||||
|
value: value,
|
||||||
|
};
|
||||||
|
document.onmouseup = onMouseUp;
|
||||||
|
document.onmousemove = onMouseMove;
|
||||||
|
};
|
||||||
|
let onMouseUp = (e) => {
|
||||||
|
document.onmouseup = null;
|
||||||
|
document.onmousemove = null;
|
||||||
|
};
|
||||||
|
let onMouseMove = (e) => {
|
||||||
|
let dx = e.clientX - dragStart.x;
|
||||||
|
let dy = e.clientY - dragStart.y;
|
||||||
|
let normalizedDelta = dx / this.elCore.clientWidth;
|
||||||
|
let valueDelta = (this.visibleRange[1] - this.visibleRange[0]) * normalizedDelta;
|
||||||
|
let newValue = dragStart.value + valueDelta;
|
||||||
|
newValue = Math.round(newValue / this.step) * this.step;
|
||||||
|
|
||||||
|
let newRange;
|
||||||
|
if(dragStart.handle === this.elLeft){
|
||||||
|
newRange = [newValue, this.chosenRange[1]];
|
||||||
|
}else{
|
||||||
|
newRange = [this.chosenRange[0], newValue];
|
||||||
|
}
|
||||||
|
if(this.clipDragToVisible){
|
||||||
|
newRange[0] = Math.max(newRange[0], this.visibleRange[0]);
|
||||||
|
newRange[1] = Math.min(newRange[1], this.visibleRange[1]);
|
||||||
|
}
|
||||||
|
this.setRange(newRange);
|
||||||
|
};
|
||||||
|
for(let handle of [this.elLeft, this.elRight]){
|
||||||
|
handle.onmousedown = onMouseDown;
|
||||||
|
}
|
||||||
|
let onWheel = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
let delta = Math.sign(e.deltaY);
|
||||||
|
|
||||||
|
let zoom = 1;
|
||||||
|
if(delta < 0){
|
||||||
|
zoom = 0.8;
|
||||||
|
}else if(delta > 0){
|
||||||
|
zoom = 1.2;
|
||||||
|
}
|
||||||
|
let oldRangeWidth = this.visibleRange[1] - this.visibleRange[0];
|
||||||
|
let rect = this.elCore.getBoundingClientRect();
|
||||||
|
let pivotPixels = e.clientX - rect.left;
|
||||||
|
let pivotNormalized = (pivotPixels / this.elCore.clientWidth);
|
||||||
|
let pivot = (oldRangeWidth * pivotNormalized) + this.visibleRange[0];
|
||||||
|
let leftRatio = (pivot - this.visibleRange[0]) / oldRangeWidth;
|
||||||
|
let rightRatio = (this.visibleRange[1] - pivot) / oldRangeWidth;
|
||||||
|
let newRangeWidth = oldRangeWidth * zoom;
|
||||||
|
let newVisibleRange = [
|
||||||
|
pivot - (newRangeWidth * leftRatio),
|
||||||
|
pivot + (newRangeWidth * rightRatio),
|
||||||
|
];
|
||||||
|
this.setVisibleRange(newVisibleRange);
|
||||||
|
};
|
||||||
|
this.elCore.onmousewheel = onWheel;
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
setRange(range){
|
||||||
|
this.chosenRange = range;
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
setVisibleRange(range){
|
||||||
|
this.visibleRange = range;
|
||||||
|
this.update();
|
||||||
|
}
|
||||||
|
update(){
|
||||||
|
let {elLeft, elRight, visibleRange, chosenRange} = this;
|
||||||
|
let pixelWidth = this.elCore.clientWidth;
|
||||||
|
let normalizedLeft = (chosenRange[0] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]);
|
||||||
|
let normalizedRight = (chosenRange[1] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]);
|
||||||
|
let pixelLeft = Math.round(normalizedLeft * pixelWidth) - elLeft.clientWidth;
|
||||||
|
let pixelRight = Math.round(normalizedRight * pixelWidth) - elRight.clientWidth;
|
||||||
|
|
||||||
|
elLeft.style.left = `${pixelLeft}px`;
|
||||||
|
elRight.style.left = `${pixelRight}px`;
|
||||||
|
let precision = Math.ceil(Math.log(1 / this.step) / Math.log(10));
|
||||||
|
this.elLabelVisibleLeft.style.left = "0px";
|
||||||
|
this.elLabelVisibleLeft.innerHTML = `${visibleRange[0].toFixed(precision)}`;
|
||||||
|
this.elLabelVisibleRight.style.right = "0px";
|
||||||
|
this.elLabelVisibleRight.innerHTML = `${visibleRange[1].toFixed(precision)}`;
|
||||||
|
this.elLabelChosenLeft.style.left = `${pixelLeft}px`;
|
||||||
|
this.elLabelChosenLeft.innerHTML = `${chosenRange[0].toFixed(precision)}`;
|
||||||
|
this.elLabelChosenRight.style.left = `${pixelRight}px`;
|
||||||
|
this.elLabelChosenRight.innerHTML = `${chosenRange[1].toFixed(precision)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
43
libs/brotli/BUILD
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package(
|
||||||
|
default_visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
licenses(["notice"]) # MIT
|
||||||
|
|
||||||
|
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library")
|
||||||
|
|
||||||
|
# Not a real polyfill. Do NOT use for anything, but tests.
|
||||||
|
closure_js_library(
|
||||||
|
name = "polyfill",
|
||||||
|
srcs = ["polyfill.js"],
|
||||||
|
suppress = [
|
||||||
|
"JSC_INVALID_OPERAND_TYPE",
|
||||||
|
"JSC_MISSING_JSDOC",
|
||||||
|
"JSC_STRICT_INEXISTENT_PROPERTY",
|
||||||
|
"JSC_TYPE_MISMATCH",
|
||||||
|
"JSC_UNKNOWN_EXPR_TYPE",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Do NOT use this artifact; it is for test purposes only.
|
||||||
|
closure_js_library(
|
||||||
|
name = "decode",
|
||||||
|
srcs = ["decode.js"],
|
||||||
|
suppress = [
|
||||||
|
"JSC_DUP_VAR_DECLARATION",
|
||||||
|
"JSC_USELESS_BLOCK",
|
||||||
|
],
|
||||||
|
deps = [":polyfill"],
|
||||||
|
)
|
||||||
|
|
||||||
|
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_test")
|
||||||
|
|
||||||
|
closure_js_test(
|
||||||
|
name = "all_tests",
|
||||||
|
srcs = ["decode_test.js"],
|
||||||
|
deps = [
|
||||||
|
":decode",
|
||||||
|
":polyfill",
|
||||||
|
"@io_bazel_rules_closure//closure/library:testing",
|
||||||
|
],
|
||||||
|
)
|
||||||
19
libs/brotli/LICENSE
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
12
libs/brotli/WORKSPACE
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
workspace(name = "org_brotli_js")
|
||||||
|
|
||||||
|
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
|
||||||
|
|
||||||
|
git_repository(
|
||||||
|
name = "io_bazel_rules_closure",
|
||||||
|
commit = "29ec97e7c85d607ba9e41cab3993fbb13f812c4b",
|
||||||
|
remote = "https://github.com/bazelbuild/rules_closure.git",
|
||||||
|
)
|
||||||
|
|
||||||
|
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_repositories")
|
||||||
|
closure_repositories()
|
||||||
2031
libs/brotli/decode.js
Normal file
2
libs/brotli/decode.min.js
vendored
Normal file
79
libs/brotli/decode_test.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
goog.require('goog.testing.asserts');
|
||||||
|
goog.require('goog.testing.jsunit');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {!Int8Array} bytes
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
|
function bytesToString(bytes) {
|
||||||
|
return String.fromCharCode.apply(null, new Uint16Array(bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testMetadata() {
|
||||||
|
assertEquals("", bytesToString(BrotliDecode(Int8Array.from([1, 11, 0, 42, 3]))));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testEmpty() {
|
||||||
|
assertEquals("", bytesToString(BrotliDecode(Int8Array.from([6]))));
|
||||||
|
assertEquals("", bytesToString(BrotliDecode(Int8Array.from([0x81, 1]))));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBaseDictWord() {
|
||||||
|
var input = Int8Array.from([
|
||||||
|
0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,
|
||||||
|
0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02
|
||||||
|
]);
|
||||||
|
/** @type {!Int8Array} */
|
||||||
|
var output = BrotliDecode(input);
|
||||||
|
assertEquals("time", bytesToString(output));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testBlockCountMessage() {
|
||||||
|
var input = Int8Array.from([
|
||||||
|
0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,
|
||||||
|
0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,
|
||||||
|
0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00, 0x00
|
||||||
|
]);
|
||||||
|
/** @type {!Int8Array} */
|
||||||
|
var output = BrotliDecode(input);
|
||||||
|
assertEquals("aabbaaaaabab", bytesToString(output));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testCompressedUncompressedShortCompressedSmallWindow() {
|
||||||
|
var input = Int8Array.from([
|
||||||
|
0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,
|
||||||
|
0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,
|
||||||
|
0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,
|
||||||
|
0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00
|
||||||
|
]);
|
||||||
|
/** @type {!Int8Array} */
|
||||||
|
var output = BrotliDecode(input);
|
||||||
|
assertEquals(
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
|
||||||
|
"aaaaaaaaaaaaaabbbbbbbbbb", bytesToString(output));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testIntactDistanceRingBuffer0() {
|
||||||
|
var input = Int8Array.from([
|
||||||
|
0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,
|
||||||
|
0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,
|
||||||
|
0x20, 0x00
|
||||||
|
]);
|
||||||
|
/** @type {!Int8Array} */
|
||||||
|
var output = BrotliDecode(input);
|
||||||
|
assertEquals("himselfself", bytesToString(output));
|
||||||
|
}
|
||||||
65
libs/brotli/polyfill.js
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
if (!Int32Array.__proto__.from) {
|
||||||
|
Object.defineProperty(Int32Array.__proto__, 'from', {
|
||||||
|
value: function(obj) {
|
||||||
|
obj = Object(obj);
|
||||||
|
if (!obj['length']) {
|
||||||
|
return new this(0);
|
||||||
|
}
|
||||||
|
var typed_array = new this(obj.length);
|
||||||
|
for(var i = 0; i < typed_array.length; i++) {
|
||||||
|
typed_array[i] = obj[i];
|
||||||
|
}
|
||||||
|
return typed_array;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Array.prototype.copyWithin) {
|
||||||
|
Array.prototype.copyWithin = function(target, start, end) {
|
||||||
|
var O = Object(this);
|
||||||
|
var len = O.length >>> 0;
|
||||||
|
var to = target | 0;
|
||||||
|
var from = start | 0;
|
||||||
|
var count = Math.min(Math.min(end | 0, len) - from, len - to);
|
||||||
|
var direction = 1;
|
||||||
|
if (from < to && to < (from + count)) {
|
||||||
|
direction = -1;
|
||||||
|
from += count - 1;
|
||||||
|
to += count - 1;
|
||||||
|
}
|
||||||
|
while (count > 0) {
|
||||||
|
O[to] = O[from];
|
||||||
|
from += direction;
|
||||||
|
to += direction;
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
return O;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Array.prototype.fill) {
|
||||||
|
Object.defineProperty(Array.prototype, 'fill', {
|
||||||
|
value: function(value, start, end) {
|
||||||
|
end = end | 0;
|
||||||
|
var O = Object(this);
|
||||||
|
var k = start | 0;
|
||||||
|
while (k < end) {
|
||||||
|
O[k] = value;
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
return O;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Int8Array.prototype.copyWithin) {
|
||||||
|
Int8Array.prototype.copyWithin = Array.prototype.copyWithin;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Int8Array.prototype.fill) {
|
||||||
|
Int8Array.prototype.fill = Array.prototype.fill;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Int32Array.prototype.fill) {
|
||||||
|
Int32Array.prototype.fill = Array.prototype.fill;
|
||||||
|
}
|
||||||
26
libs/d3/LICENSE
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
Copyright (c) 2010-2017, Michael Bostock
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* The name Michael Bostock may not be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||||
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
9504
libs/d3/d3.js
vendored
Normal file
5
libs/d3/d3.min.js
vendored
Normal file
207
libs/ept/ParseBuffer.js
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
function parseEpt(event) {
|
||||||
|
let buffer = event.data.buffer;
|
||||||
|
let view = new DataView(buffer);
|
||||||
|
let schema = event.data.schema;
|
||||||
|
let scale = event.data.scale;
|
||||||
|
let offset = event.data.offset;
|
||||||
|
let mins = event.data.mins;
|
||||||
|
|
||||||
|
let dimensions = schema.reduce((p, c) => {
|
||||||
|
p[c.name] = c;
|
||||||
|
return p;
|
||||||
|
}, { });
|
||||||
|
|
||||||
|
let dimOffset = (name) => {
|
||||||
|
let offset = 0;
|
||||||
|
for (var i = 0; i < schema.length; ++i) {
|
||||||
|
if (schema[i].name == name) return offset;
|
||||||
|
offset += schema[i].size;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
let getExtractor = (name) => {
|
||||||
|
let offset = dimOffset(name);
|
||||||
|
let type = dimensions[name].type;
|
||||||
|
let size = dimensions[name].size;
|
||||||
|
|
||||||
|
if (type == 'signed') switch (size) {
|
||||||
|
case 1: return (p) => view.getInt8(p + offset);
|
||||||
|
case 2: return (p) => view.getInt16(p + offset, true);
|
||||||
|
case 4: return (p) => view.getInt32(p + offset, true);
|
||||||
|
case 8: return (p) => view.getInt64(p + offset, true);
|
||||||
|
}
|
||||||
|
if (type == 'unsigned') switch (size) {
|
||||||
|
case 1: return (p) => view.getUint8(p + offset);
|
||||||
|
case 2: return (p) => view.getUint16(p + offset, true);
|
||||||
|
case 4: return (p) => view.getUint32(p + offset, true);
|
||||||
|
case 8: return (p) => view.getUint64(p + offset, true);
|
||||||
|
}
|
||||||
|
if (type == 'float') switch (size) {
|
||||||
|
case 4: return (p) => view.getFloat32(p + offset, true);
|
||||||
|
case 8: return (p) => view.getFloat64(p + offset, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
let str = JSON.stringify(dimensions[name]);
|
||||||
|
throw new Error(`Invalid dimension specification for ${name}: ${str}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
let pointSize = schema.reduce((p, c) => p + c.size, 0);
|
||||||
|
let numPoints = buffer.byteLength / pointSize;
|
||||||
|
|
||||||
|
let xyzBuffer, rgbBuffer, intensityBuffer, classificationBuffer,
|
||||||
|
returnNumberBuffer, numberOfReturnsBuffer, pointSourceIdBuffer;
|
||||||
|
let xyz, rgb, intensity, classification, returnNumber, numberOfReturns,
|
||||||
|
pointSourceId;
|
||||||
|
let xyzExtractor, rgbExtractor, intensityExtractor, classificationExtractor,
|
||||||
|
returnNumberExtractor, numberOfReturnsExtractor, pointSourceIdExtractor;
|
||||||
|
let twoByteColor = false;
|
||||||
|
|
||||||
|
if (dimensions['X'] && dimensions['Y'] && dimensions['Z']) {
|
||||||
|
xyzBuffer = new ArrayBuffer(numPoints * 4 * 3);
|
||||||
|
xyz = new Float32Array(xyzBuffer);
|
||||||
|
xyzExtractor = [
|
||||||
|
getExtractor('X'),
|
||||||
|
getExtractor('Y'),
|
||||||
|
getExtractor('Z')
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['Red'] && dimensions['Green'] && dimensions['Blue']) {
|
||||||
|
rgbBuffer = new ArrayBuffer(numPoints * 4);
|
||||||
|
rgb = new Uint8Array(rgbBuffer);
|
||||||
|
rgbExtractor = [
|
||||||
|
getExtractor('Red'),
|
||||||
|
getExtractor('Green'),
|
||||||
|
getExtractor('Blue')
|
||||||
|
];
|
||||||
|
|
||||||
|
let r, g, b, pos;
|
||||||
|
for (let i = 0; i < numPoints && !twoByteColor; ++i) {
|
||||||
|
pos = i * pointSize;
|
||||||
|
r = rgbExtractor[0](pos);
|
||||||
|
g = rgbExtractor[1](pos);
|
||||||
|
b = rgbExtractor[2](pos);
|
||||||
|
if (r > 255 || g > 255 || b > 255) twoByteColor = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['Intensity']) {
|
||||||
|
intensityBuffer = new ArrayBuffer(numPoints * 4);
|
||||||
|
intensity = new Float32Array(intensityBuffer);
|
||||||
|
intensityExtractor = getExtractor('Intensity');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['Classification']) {
|
||||||
|
classificationBuffer = new ArrayBuffer(numPoints);
|
||||||
|
classification = new Uint8Array(classificationBuffer);
|
||||||
|
classificationExtractor = getExtractor('Classification');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['ReturnNumber']) {
|
||||||
|
returnNumberBuffer = new ArrayBuffer(numPoints);
|
||||||
|
returnNumber = new Uint8Array(returnNumberBuffer);
|
||||||
|
returnNumberExtractor = getExtractor('ReturnNumber');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['NumberOfReturns']) {
|
||||||
|
numberOfReturnsBuffer = new ArrayBuffer(numPoints);
|
||||||
|
numberOfReturns = new Uint8Array(numberOfReturnsBuffer);
|
||||||
|
numberOfReturnsExtractor = getExtractor('NumberOfReturns');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimensions['PointSourceId']) {
|
||||||
|
pointSourceIdBuffer = new ArrayBuffer(numPoints * 2);
|
||||||
|
pointSourceId = new Uint16Array(pointSourceIdBuffer);
|
||||||
|
pointSourceIdExtractor = getExtractor('PointSourceId');
|
||||||
|
}
|
||||||
|
|
||||||
|
let mean = [0, 0, 0];
|
||||||
|
let bounds = {
|
||||||
|
min: [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE],
|
||||||
|
max: [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE],
|
||||||
|
};
|
||||||
|
|
||||||
|
let x, y, z, r, g, b;
|
||||||
|
for (let i = 0; i < numPoints; ++i) {
|
||||||
|
let pos = i * pointSize;
|
||||||
|
if (xyz) {
|
||||||
|
x = xyzExtractor[0](pos) * scale.x + offset.x - mins[0];
|
||||||
|
y = xyzExtractor[1](pos) * scale.y + offset.y - mins[1];
|
||||||
|
z = xyzExtractor[2](pos) * scale.z + offset.z - mins[2];
|
||||||
|
|
||||||
|
mean[0] += x / numPoints;
|
||||||
|
mean[1] += y / numPoints;
|
||||||
|
mean[2] += z / numPoints;
|
||||||
|
|
||||||
|
bounds.min[0] = Math.min(bounds.min[0], x);
|
||||||
|
bounds.min[1] = Math.min(bounds.min[1], y);
|
||||||
|
bounds.min[2] = Math.min(bounds.min[2], z);
|
||||||
|
|
||||||
|
bounds.max[0] = Math.max(bounds.max[0], x);
|
||||||
|
bounds.max[1] = Math.max(bounds.max[1], y);
|
||||||
|
bounds.max[2] = Math.max(bounds.max[2], z);
|
||||||
|
|
||||||
|
xyz[3 * i + 0] = x;
|
||||||
|
xyz[3 * i + 1] = y;
|
||||||
|
xyz[3 * i + 2] = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rgb) {
|
||||||
|
r = rgbExtractor[0](pos);
|
||||||
|
g = rgbExtractor[1](pos);
|
||||||
|
b = rgbExtractor[2](pos);
|
||||||
|
|
||||||
|
if (twoByteColor) {
|
||||||
|
r /= 256;
|
||||||
|
g /= 256;
|
||||||
|
b /= 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
rgb[4 * i + 0] = r;
|
||||||
|
rgb[4 * i + 1] = g;
|
||||||
|
rgb[4 * i + 2] = b;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity) intensity[i] = intensityExtractor(pos);
|
||||||
|
if (classification) classification[i] = classificationExtractor(pos);
|
||||||
|
if (returnNumber) returnNumber[i] = returnNumberExtractor(pos);
|
||||||
|
if (numberOfReturns) numberOfReturns[i] = numberOfReturnsExtractor(pos);
|
||||||
|
if (pointSourceId) pointSourceId[i] = pointSourceIdExtractor(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
let indicesBuffer = new ArrayBuffer(numPoints * 4);
|
||||||
|
let indices = new Uint32Array(indicesBuffer);
|
||||||
|
for (let i = 0; i < numPoints; ++i) {
|
||||||
|
indices[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
let message = {
|
||||||
|
numPoints: numPoints,
|
||||||
|
tightBoundingBox: bounds,
|
||||||
|
mean: mean,
|
||||||
|
|
||||||
|
position: xyzBuffer,
|
||||||
|
color: rgbBuffer,
|
||||||
|
intensity: intensityBuffer,
|
||||||
|
classification: classificationBuffer,
|
||||||
|
returnNumber: returnNumberBuffer,
|
||||||
|
numberOfReturns: numberOfReturnsBuffer,
|
||||||
|
pointSourceId: pointSourceIdBuffer,
|
||||||
|
indices: indicesBuffer
|
||||||
|
};
|
||||||
|
|
||||||
|
let transferables = [
|
||||||
|
message.position,
|
||||||
|
message.color,
|
||||||
|
message.intensity,
|
||||||
|
message.classification,
|
||||||
|
message.returnNumber,
|
||||||
|
message.numberOfReturns,
|
||||||
|
message.pointSourceId,
|
||||||
|
message.indices
|
||||||
|
].filter((v) => v);
|
||||||
|
|
||||||
|
postMessage(message, transferables);
|
||||||
|
}
|
||||||
|
|
||||||
22
libs/geopackage/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 National Geospatial-Intelligence Agency
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
259
libs/geopackage/README.md
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
# GeoPackage JS
|
||||||
|
|
||||||
|
GeoPackage JS is an implementation of the OGC GeoPackage spec. This library works in both the browser and Node 4+.
|
||||||
|
|
||||||
|
### Demo ###
|
||||||
|
[GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/)
|
||||||
|
|
||||||
|
Cloning this repository and opening the docs/index.html in your browser will run the demo locally.
|
||||||
|
|
||||||
|
### Installation ###
|
||||||
|
|
||||||
|
[](https://travis-ci.org/ngageoint/geopackage-js)
|
||||||
|
[](https://www.npmjs.com/package/@ngageoint/geopackage)
|
||||||
|
[](https://coveralls.io/github/ngageoint/geopackage-js)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install @ngageoint/geopackage
|
||||||
|
```
|
||||||
|
|
||||||
|
#### GeoPackage JS Library ####
|
||||||
|
|
||||||
|
The [GeoPackage Libraries](http://ngageoint.github.io/GeoPackage/) were developed at the [National Geospatial-Intelligence Agency (NGA)](http://www.nga.mil/) in collaboration with [BIT Systems](http://www.bit-sys.com/). The government has "unlimited rights" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT license](http://choosealicense.com/licenses/mit/).
|
||||||
|
|
||||||
|
### Pull Requests ###
|
||||||
|
If you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.
|
||||||
|
|
||||||
|
Software source code previously released under an open source license and then modified by NGA staff is considered a "joint work" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.
|
||||||
|
|
||||||
|
### About ###
|
||||||
|
|
||||||
|
[GeoPackage JS](https://github.com/ngageoint/geopackage-js) is a [GeoPackage Library](http://ngageoint.github.io/GeoPackage/) JavaScript implementation of the Open Geospatial Consortium [GeoPackage](http://www.geopackage.org/) [spec](http://www.geopackage.org/spec/). It is listed as an [OGC GeoPackage Implementation](http://www.geopackage.org/#implementations_nga) by the National Geospatial-Intelligence Agency.
|
||||||
|
|
||||||
|
The GeoPackage JavaScript library currently provides the ability to read GeoPackage files. This library works both in the browser and in Node. In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using [sql.js](https://github.com/kripken/sql.js/). In Node tiles are rendered [PureImage](https://github.com/joshmarinacci/node-pureimage) and GeoPackages are read using [node-sqlite3](https://github.com/mapbox/node-sqlite3).
|
||||||
|
|
||||||
|
### Changelog
|
||||||
|
|
||||||
|
##### 2.1.0
|
||||||
|
|
||||||
|
- Implementation of the Feature Style Extension and Contents ID Extension
|
||||||
|
|
||||||
|
##### 2.0.8
|
||||||
|
|
||||||
|
- Checks for Electron when returning a tile creator
|
||||||
|
|
||||||
|
##### 2.0
|
||||||
|
|
||||||
|
- All new API utilizing Promises
|
||||||
|
|
||||||
|
##### 1.1.4
|
||||||
|
|
||||||
|
- Adds a method to retrieve tiles in EPSG:4326
|
||||||
|
|
||||||
|
##### 1.1.3
|
||||||
|
|
||||||
|
- Fixes issue #115
|
||||||
|
|
||||||
|
##### 1.1.2
|
||||||
|
|
||||||
|
- fix case where GeoPackage Zoom does not correspond to the web map zoom
|
||||||
|
|
||||||
|
##### 1.1.1
|
||||||
|
|
||||||
|
- fix more instances of proj4 bug for react
|
||||||
|
- fixed tile generation for images with different x and y pixel densities
|
||||||
|
|
||||||
|
##### 1.1.0
|
||||||
|
|
||||||
|
- accept pull request adding support for react
|
||||||
|
- fix bug with projected tiles that spanned the date line
|
||||||
|
|
||||||
|
##### 1.0.25
|
||||||
|
|
||||||
|
- ensure we use proj4 2.4.3 instead of 2.4.4
|
||||||
|
|
||||||
|
##### 1.0.22
|
||||||
|
|
||||||
|
- Fixed bug where querying for indexed features only returned the geometry instead of the entire feature
|
||||||
|
|
||||||
|
##### 1.0.19
|
||||||
|
|
||||||
|
- Remove dependency on Lwip
|
||||||
|
|
||||||
|
### Usage ###
|
||||||
|
|
||||||
|
View examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs)
|
||||||
|
|
||||||
|
View the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated).
|
||||||
|
|
||||||
|
#### Browser Usage ####
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
// attach this method to a file input onchange event
|
||||||
|
window.loadGeoPackage = function(files) {
|
||||||
|
var f = files[0];
|
||||||
|
var r = new FileReader();
|
||||||
|
r.onload = function() {
|
||||||
|
var array = new Uint8Array(r.result);
|
||||||
|
loadByteArray(array);
|
||||||
|
}
|
||||||
|
r.readAsArrayBuffer(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadByteArray(array, callback) {
|
||||||
|
var db = new SQL.Database(array);
|
||||||
|
GeoPackageConnection.connectWithDatabase(db, function(err, connection) {
|
||||||
|
var geoPackage = new GeoPackage('', '', connection);
|
||||||
|
|
||||||
|
// Now you can operate on the GeoPackage
|
||||||
|
|
||||||
|
// get the tile table names
|
||||||
|
geoPackage.getTileTables(function(err, tileTableNames) {
|
||||||
|
// tileTableNames is an array of all tile table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {
|
||||||
|
geoPackage.getInfoForTable(tileDao, function(err, info) {
|
||||||
|
// do something with the tile table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// draw a tile into a canvas for an XYZ tile
|
||||||
|
var canvas = canvasFromSomewhere;
|
||||||
|
var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var zoom = 0;
|
||||||
|
|
||||||
|
console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
gpr.drawTileIn(x, y, zoom, canvas, function() {
|
||||||
|
console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile base64 data URL for an XYZ tile
|
||||||
|
gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {
|
||||||
|
console.log('got the base64 data url');
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile from a GeoPackage tile column and tile row
|
||||||
|
tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {
|
||||||
|
var tileData = tile.getTileData(); // the raw bytes from the GeoPackage
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// get the feature table names
|
||||||
|
geoPackage.getFeatureTables(function(err, featureTableNames) {
|
||||||
|
// featureTableNames is an array of all feature table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {
|
||||||
|
geoPackage.getInfoForTable(featureDao, function(err, info) {
|
||||||
|
// do something with the feature table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// query for all features
|
||||||
|
featureDao.queryForEach(function(err, row, rowDone) {
|
||||||
|
var feature = featureDao.getFeatureRow(row);
|
||||||
|
var geometry = currentRow.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
var geom = geometry.geometry;
|
||||||
|
var geoJson = geometry.geometry.toGeoJSON();
|
||||||
|
|
||||||
|
geoJson.properties = {};
|
||||||
|
for (var key in feature.values) {
|
||||||
|
if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {
|
||||||
|
var column = info.columnMap[key];
|
||||||
|
geoJson.properties[column.displayName] = currentRow.values[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rowDone();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### NodeJS Usage ####
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var GeoPackageAPI = require('@ngageoint/geopackage')
|
||||||
|
, GeoPackageManager = GeoPackageAPI.GeoPackageManager
|
||||||
|
, GeoPackageConnection = GeoPackageAPI.GeoPackageConnection
|
||||||
|
, GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever;
|
||||||
|
|
||||||
|
GeoPackageAPI.open(filename, function(err, geoPackage) {
|
||||||
|
|
||||||
|
// Now you can operate on the GeoPackage
|
||||||
|
|
||||||
|
// get the tile table names
|
||||||
|
geoPackage.getTileTables(function(err, tileTableNames) {
|
||||||
|
// tileTableNames is an array of all tile table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {
|
||||||
|
geoPackage.getInfoForTable(tileDao, function(err, info) {
|
||||||
|
// do something with the tile table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// draw a tile into a canvas for an XYZ tile
|
||||||
|
var canvas = canvasFromSomewhere;
|
||||||
|
var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var zoom = 0;
|
||||||
|
|
||||||
|
console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
gpr.drawTileIn(x, y, zoom, canvas, function() {
|
||||||
|
console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile base64 data URL for an XYZ tile
|
||||||
|
gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {
|
||||||
|
console.log('got the base64 data url');
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile from a GeoPackage tile column and tile row
|
||||||
|
tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {
|
||||||
|
var tileData = tile.getTileData(); // the raw bytes from the GeoPackage
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// get the feature table names
|
||||||
|
geoPackage.getFeatureTables(function(err, featureTableNames) {
|
||||||
|
// featureTableNames is an array of all feature table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {
|
||||||
|
geoPackage.getInfoForTable(featureDao, function(err, info) {
|
||||||
|
// do something with the feature table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// query for all features
|
||||||
|
featureDao.queryForEach(function(err, row, rowDone) {
|
||||||
|
var feature = featureDao.getFeatureRow(row);
|
||||||
|
var geometry = currentRow.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
var geom = geometry.geometry;
|
||||||
|
var geoJson = geometry.geometry.toGeoJSON();
|
||||||
|
|
||||||
|
geoJson.properties = {};
|
||||||
|
for (var key in feature.values) {
|
||||||
|
if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {
|
||||||
|
var column = info.columnMap[key];
|
||||||
|
geoJson.properties[column.displayName] = currentRow.values[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rowDone();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
80817
libs/geopackage/geopackage.js
Normal file
97
libs/geopackage/geopackage.min.js
vendored
Normal file
5
libs/i18next/i18next.js
Normal file
333
libs/jquery-ui/AUTHORS.txt
Normal file
@@ -0,0 +1,333 @@
|
|||||||
|
Authors ordered by first contribution
|
||||||
|
A list of current team members is available at http://jqueryui.com/about
|
||||||
|
|
||||||
|
Paul Bakaus <paul.bakaus@gmail.com>
|
||||||
|
Richard Worth <rdworth@gmail.com>
|
||||||
|
Yehuda Katz <wycats@gmail.com>
|
||||||
|
Sean Catchpole <sean@sunsean.com>
|
||||||
|
John Resig <jeresig@gmail.com>
|
||||||
|
Tane Piper <piper.tane@gmail.com>
|
||||||
|
Dmitri Gaskin <dmitrig01@gmail.com>
|
||||||
|
Klaus Hartl <klaus.hartl@gmail.com>
|
||||||
|
Stefan Petre <stefan.petre@gmail.com>
|
||||||
|
Gilles van den Hoven <gilles@webunity.nl>
|
||||||
|
Micheil Bryan Smith <micheil@brandedcode.com>
|
||||||
|
Jörn Zaefferer <joern.zaefferer@gmail.com>
|
||||||
|
Marc Grabanski <m@marcgrabanski.com>
|
||||||
|
Keith Wood <kbwood@iinet.com.au>
|
||||||
|
Brandon Aaron <brandon.aaron@gmail.com>
|
||||||
|
Scott González <scott.gonzalez@gmail.com>
|
||||||
|
Eduardo Lundgren <eduardolundgren@gmail.com>
|
||||||
|
Aaron Eisenberger <aaronchi@gmail.com>
|
||||||
|
Joan Piedra <theneojp@gmail.com>
|
||||||
|
Bruno Basto <b.basto@gmail.com>
|
||||||
|
Remy Sharp <remy@leftlogic.com>
|
||||||
|
Bohdan Ganicky <bohdan.ganicky@gmail.com>
|
||||||
|
David Bolter <david.bolter@gmail.com>
|
||||||
|
Chi Cheng <cloudream@gmail.com>
|
||||||
|
Ca-Phun Ung <pazu2k@gmail.com>
|
||||||
|
Ariel Flesler <aflesler@gmail.com>
|
||||||
|
Maggie Wachs <maggie@filamentgroup.com>
|
||||||
|
Scott Jehl <scottjehl@gmail.com>
|
||||||
|
Todd Parker <todd@filamentgroup.com>
|
||||||
|
Andrew Powell <andrew@shellscape.org>
|
||||||
|
Brant Burnett <btburnett3@gmail.com>
|
||||||
|
Douglas Neiner <doug@dougneiner.com>
|
||||||
|
Paul Irish <paul.irish@gmail.com>
|
||||||
|
Ralph Whitbeck <ralph.whitbeck@gmail.com>
|
||||||
|
Thibault Duplessis <thibault.duplessis@gmail.com>
|
||||||
|
Dominique Vincent <dominique.vincent@toitl.com>
|
||||||
|
Jack Hsu <jack.hsu@gmail.com>
|
||||||
|
Adam Sontag <ajpiano@ajpiano.com>
|
||||||
|
Carl Fürstenberg <carl@excito.com>
|
||||||
|
Kevin Dalman <development@allpro.net>
|
||||||
|
Alberto Fernández Capel <afcapel@gmail.com>
|
||||||
|
Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
|
||||||
|
Ting Kuei <ting@kuei.com>
|
||||||
|
Samuel Cormier-Iijima <sam@chide.it>
|
||||||
|
Jon Palmer <jonspalmer@gmail.com>
|
||||||
|
Ben Hollis <bhollis@amazon.com>
|
||||||
|
Justin MacCarthy <Justin@Rubystars.biz>
|
||||||
|
Eyal Kobrigo <kobrigo@hotmail.com>
|
||||||
|
Tiago Freire <tiago.freire@gmail.com>
|
||||||
|
Diego Tres <diegotres@gmail.com>
|
||||||
|
Holger Rüprich <holger@rueprich.de>
|
||||||
|
Ziling Zhao <zilingzhao@gmail.com>
|
||||||
|
Mike Alsup <malsup@gmail.com>
|
||||||
|
Robson Braga Araujo <robsonbraga@gmail.com>
|
||||||
|
Pierre-Henri Ausseil <ph.ausseil@gmail.com>
|
||||||
|
Christopher McCulloh <cmcculloh@gmail.com>
|
||||||
|
Andrew Newcomb <ext.github@preceptsoftware.co.uk>
|
||||||
|
Lim Chee Aun <cheeaun@gmail.com>
|
||||||
|
Jorge Barreiro <yortx.barry@gmail.com>
|
||||||
|
Daniel Steigerwald <daniel@steigerwald.cz>
|
||||||
|
John Firebaugh <john_firebaugh@bigfix.com>
|
||||||
|
John Enters <github@darkdark.net>
|
||||||
|
Andrey Kapitcyn <ru.m157y@gmail.com>
|
||||||
|
Dmitry Petrov <dpetroff@gmail.com>
|
||||||
|
Eric Hynds <eric@hynds.net>
|
||||||
|
Chairat Sunthornwiphat <pipo@sixhead.com>
|
||||||
|
Josh Varner <josh.varner@gmail.com>
|
||||||
|
Stéphane Raimbault <stephane.raimbault@gmail.com>
|
||||||
|
Jay Merrifield <fracmak@gmail.com>
|
||||||
|
J. Ryan Stinnett <jryans@gmail.com>
|
||||||
|
Peter Heiberg <peter@heiberg.se>
|
||||||
|
Alex Dovenmuehle <adovenmuehle@gmail.com>
|
||||||
|
Jamie Gegerson <git@jamiegegerson.com>
|
||||||
|
Raymond Schwartz <skeetergraphics@gmail.com>
|
||||||
|
Phillip Barnes <philbar@gmail.com>
|
||||||
|
Kyle Wilkinson <kai@wikyd.org>
|
||||||
|
Khaled AlHourani <me@khaledalhourani.com>
|
||||||
|
Marian Rudzynski <mr@impaled.org>
|
||||||
|
Jean-Francois Remy <jeff@melix.org>
|
||||||
|
Doug Blood <dougblood@gmail.com>
|
||||||
|
Filippo Cavallarin <filippo.cavallarin@codseq.it>
|
||||||
|
Heiko Henning <heiko@thehennings.ch>
|
||||||
|
Aliaksandr Rahalevich <saksmlz@gmail.com>
|
||||||
|
Mario Visic <mario@mariovisic.com>
|
||||||
|
Xavi Ramirez <xavi.rmz@gmail.com>
|
||||||
|
Max Schnur <max.schnur@gmail.com>
|
||||||
|
Saji Nediyanchath <saji89@gmail.com>
|
||||||
|
Corey Frang <gnarf37@gmail.com>
|
||||||
|
Aaron Peterson <aaronp123@yahoo.com>
|
||||||
|
Ivan Peters <ivan@ivanpeters.com>
|
||||||
|
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
|
||||||
|
Marcos Sousa <falecomigo@marcossousa.com>
|
||||||
|
Michael DellaNoce <mdellanoce@mailtrust.com>
|
||||||
|
George Marshall <echosx@gmail.com>
|
||||||
|
Tobias Brunner <tobias@strongswan.org>
|
||||||
|
Martin Solli <msolli@gmail.com>
|
||||||
|
David Petersen <public@petersendidit.com>
|
||||||
|
Dan Heberden <danheberden@gmail.com>
|
||||||
|
William Kevin Manire <williamkmanire@gmail.com>
|
||||||
|
Gilmore Davidson <gilmoreorless@gmail.com>
|
||||||
|
Michael Wu <michaelmwu@gmail.com>
|
||||||
|
Adam Parod <mystic414@gmail.com>
|
||||||
|
Guillaume Gautreau <guillaume+github@ghusse.com>
|
||||||
|
Marcel Toele <EleotleCram@gmail.com>
|
||||||
|
Dan Streetman <ddstreet@ieee.org>
|
||||||
|
Matt Hoskins <matt@nipltd.com>
|
||||||
|
Giovanni Giacobbi <giovanni@giacobbi.net>
|
||||||
|
Kyle Florence <kyle.florence@gmail.com>
|
||||||
|
Pavol Hluchý <lopo@losys.sk>
|
||||||
|
Hans Hillen <hans.hillen@gmail.com>
|
||||||
|
Mark Johnson <virgofx@live.com>
|
||||||
|
Trey Hunner <treyhunner@gmail.com>
|
||||||
|
Shane Whittet <whittet@gmail.com>
|
||||||
|
Edward A Faulkner <ef@alum.mit.edu>
|
||||||
|
Adam Baratz <adam@adambaratz.com>
|
||||||
|
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
|
||||||
|
Eike Send <eike.send@gmail.com>
|
||||||
|
Kris Borchers <kris.borchers@gmail.com>
|
||||||
|
Eddie Monge <eddie@eddiemonge.com>
|
||||||
|
Israel Tsadok <itsadok@gmail.com>
|
||||||
|
Carson McDonald <carson@ioncannon.net>
|
||||||
|
Jason Davies <jason@jasondavies.com>
|
||||||
|
Garrison Locke <gplocke@gmail.com>
|
||||||
|
David Murdoch <david@davidmurdoch.com>
|
||||||
|
Benjamin Scott Boyle <benjamins.boyle@gmail.com>
|
||||||
|
Jesse Baird <jebaird@gmail.com>
|
||||||
|
Jonathan Vingiano <jvingiano@gmail.com>
|
||||||
|
Dylan Just <dev@ephox.com>
|
||||||
|
Hiroshi Tomita <tomykaira@gmail.com>
|
||||||
|
Glenn Goodrich <glenn.goodrich@gmail.com>
|
||||||
|
Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
|
||||||
|
Ryan Neufeld <ryan@neufeldmail.com>
|
||||||
|
Marc Neuwirth <marc.neuwirth@gmail.com>
|
||||||
|
Philip Graham <philip.robert.graham@gmail.com>
|
||||||
|
Benjamin Sterling <benjamin.sterling@kenzomedia.com>
|
||||||
|
Wesley Walser <waw325@gmail.com>
|
||||||
|
Kouhei Sutou <kou@clear-code.com>
|
||||||
|
Karl Kirch <karlkrch@gmail.com>
|
||||||
|
Chris Kelly <ckdake@ckdake.com>
|
||||||
|
Jason Oster <jay@kodewerx.org>
|
||||||
|
Felix Nagel <info@felixnagel.com>
|
||||||
|
Alexander Polomoshnov <alex.polomoshnov@gmail.com>
|
||||||
|
David Leal <dgleal@gmail.com>
|
||||||
|
Igor Milla <igor.fsp.milla@gmail.com>
|
||||||
|
Dave Methvin <dave.methvin@gmail.com>
|
||||||
|
Florian Gutmann <f.gutmann@chronimo.com>
|
||||||
|
Marwan Al Jubeh <marwan.aljubeh@gmail.com>
|
||||||
|
Milan Broum <midlis@googlemail.com>
|
||||||
|
Sebastian Sauer <info@dynpages.de>
|
||||||
|
Gaëtan Muller <m.gaetan89@gmail.com>
|
||||||
|
Michel Weimerskirch <michel@weimerskirch.net>
|
||||||
|
William Griffiths <william@ycymro.com>
|
||||||
|
Stojce Slavkovski <stojce@gmail.com>
|
||||||
|
David Soms <david.soms@gmail.com>
|
||||||
|
David De Sloovere <david.desloovere@outlook.com>
|
||||||
|
Michael P. Jung <michael.jung@terreon.de>
|
||||||
|
Shannon Pekary <spekary@gmail.com>
|
||||||
|
Dan Wellman <danwellman@hotmail.com>
|
||||||
|
Matthew Edward Hutton <meh@corefiling.co.uk>
|
||||||
|
James Khoury <james@jameskhoury.com>
|
||||||
|
Rob Loach <robloach@gmail.com>
|
||||||
|
Alberto Monteiro <betimbrasil@gmail.com>
|
||||||
|
Alex Rhea <alex.rhea@gmail.com>
|
||||||
|
Krzysztof Rosiński <rozwell69@gmail.com>
|
||||||
|
Ryan Olton <oltonr@gmail.com>
|
||||||
|
Genie <386@mail.com>
|
||||||
|
Rick Waldron <waldron.rick@gmail.com>
|
||||||
|
Ian Simpson <spoonlikesham@gmail.com>
|
||||||
|
Lev Kitsis <spam4lev@gmail.com>
|
||||||
|
TJ VanToll <tj.vantoll@gmail.com>
|
||||||
|
Justin Domnitz <jdomnitz@gmail.com>
|
||||||
|
Douglas Cerna <douglascerna@yahoo.com>
|
||||||
|
Bert ter Heide <bertjh@hotmail.com>
|
||||||
|
Jasvir Nagra <jasvir@gmail.com>
|
||||||
|
Yuriy Khabarov <13real008@gmail.com>
|
||||||
|
Harri Kilpiö <harri.kilpio@gmail.com>
|
||||||
|
Lado Lomidze <lado.lomidze@gmail.com>
|
||||||
|
Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
|
||||||
|
Simon Sattes <simon.sattes@gmail.com>
|
||||||
|
Jo Liss <joliss42@gmail.com>
|
||||||
|
Guntupalli Karunakar <karunakarg@yahoo.com>
|
||||||
|
Shahyar Ghobadpour <shahyar@gmail.com>
|
||||||
|
Lukasz Lipinski <uzza17@gmail.com>
|
||||||
|
Timo Tijhof <krinklemail@gmail.com>
|
||||||
|
Jason Moon <jmoon@socialcast.com>
|
||||||
|
Martin Frost <martinf55@hotmail.com>
|
||||||
|
Eneko Illarramendi <eneko@illarra.com>
|
||||||
|
EungJun Yi <semtlenori@gmail.com>
|
||||||
|
Courtland Allen <courtlandallen@gmail.com>
|
||||||
|
Viktar Varvanovich <non4eg@gmail.com>
|
||||||
|
Danny Trunk <dtrunk90@gmail.com>
|
||||||
|
Pavel Stetina <pavel.stetina@nangu.tv>
|
||||||
|
Michael Stay <metaweta@gmail.com>
|
||||||
|
Steven Roussey <sroussey@gmail.com>
|
||||||
|
Michael Hollis <hollis21@gmail.com>
|
||||||
|
Lee Rowlands <lee.rowlands@previousnext.com.au>
|
||||||
|
Timmy Willison <timmywillisn@gmail.com>
|
||||||
|
Karl Swedberg <kswedberg@gmail.com>
|
||||||
|
Baoju Yuan <the_guy_1987@hotmail.com>
|
||||||
|
Maciej Mroziński <maciej.k.mrozinski@gmail.com>
|
||||||
|
Luis Dalmolin <luis.nh@gmail.com>
|
||||||
|
Mark Aaron Shirley <maspwr@gmail.com>
|
||||||
|
Martin Hoch <martin@fidion.de>
|
||||||
|
Jiayi Yang <tr870829@gmail.com>
|
||||||
|
Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
|
||||||
|
Sindre Sorhus <sindresorhus@gmail.com>
|
||||||
|
Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
|
||||||
|
Jared A. Scheel <jared@jaredscheel.com>
|
||||||
|
Rafael Xavier de Souza <rxaviers@gmail.com>
|
||||||
|
John Chen <zhang.z.chen@intel.com>
|
||||||
|
Robert Beuligmann <robertbeuligmann@gmail.com>
|
||||||
|
Dale Kocian <dale.kocian@gmail.com>
|
||||||
|
Mike Sherov <mike.sherov@gmail.com>
|
||||||
|
Andrew Couch <andy@couchand.com>
|
||||||
|
Marc-Andre Lafortune <github@marc-andre.ca>
|
||||||
|
Nate Eagle <nate.eagle@teamaol.com>
|
||||||
|
David Souther <davidsouther@gmail.com>
|
||||||
|
Mathias Stenbom <mathias@stenbom.com>
|
||||||
|
Sergey Kartashov <ebishkek@yandex.ru>
|
||||||
|
Avinash R <nashpapa@gmail.com>
|
||||||
|
Ethan Romba <ethanromba@gmail.com>
|
||||||
|
Cory Gackenheimer <cory.gack@gmail.com>
|
||||||
|
Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
|
||||||
|
Roman Salnikov <bardt.dz@gmail.com>
|
||||||
|
Anika Henke <anika@selfthinker.org>
|
||||||
|
Samuel Bovée <samycookie2000@yahoo.fr>
|
||||||
|
Fabrício Matté <ult_combo@hotmail.com>
|
||||||
|
Viktor Kojouharov <vkojouharov@gmail.com>
|
||||||
|
Pawel Maruszczyk (http://hrabstwo.net)
|
||||||
|
Pavel Selitskas <p.selitskas@gmail.com>
|
||||||
|
Bjørn Johansen <post@bjornjohansen.no>
|
||||||
|
Matthieu Penant <thieum22@hotmail.com>
|
||||||
|
Dominic Barnes <dominic@dbarnes.info>
|
||||||
|
David Sullivan <david.sullivan@gmail.com>
|
||||||
|
Thomas Jaggi <thomas@responsive.ch>
|
||||||
|
Vahid Sohrabloo <vahid4134@gmail.com>
|
||||||
|
Travis Carden <travis.carden@gmail.com>
|
||||||
|
Bruno M. Custódio <bruno@brunomcustodio.com>
|
||||||
|
Nathanael Silverman <nathanael.silverman@gmail.com>
|
||||||
|
Christian Wenz <christian@wenz.org>
|
||||||
|
Steve Urmston <steve@urm.st>
|
||||||
|
Zaven Muradyan <megalivoithos@gmail.com>
|
||||||
|
Woody Gilk <shadowhand@deviantart.com>
|
||||||
|
Zbigniew Motyka <zbigniew.motyka@gmail.com>
|
||||||
|
Suhail Alkowaileet <xsoh.k7@gmail.com>
|
||||||
|
Toshi MARUYAMA <marutosijp2@yahoo.co.jp>
|
||||||
|
David Hansen <hansede@gmail.com>
|
||||||
|
Brian Grinstead <briangrinstead@gmail.com>
|
||||||
|
Christian Klammer <christian314159@gmail.com>
|
||||||
|
Steven Luscher <jquerycla@steveluscher.com>
|
||||||
|
Gan Eng Chin <engchin.gan@gmail.com>
|
||||||
|
Gabriel Schulhof <gabriel.schulhof@intel.com>
|
||||||
|
Alexander Schmitz <arschmitz@gmail.com>
|
||||||
|
Vilhjálmur Skúlason <vis@dmm.is>
|
||||||
|
Siebrand Mazeland <siebrand@kitano.nl>
|
||||||
|
Mohsen Ekhtiari <mohsenekhtiari@yahoo.com>
|
||||||
|
Pere Orga <gotrunks@gmail.com>
|
||||||
|
Jasper de Groot <mail@ugomobi.com>
|
||||||
|
Stephane Deschamps <stephane.deschamps@gmail.com>
|
||||||
|
Jyoti Deka <dekajp@gmail.com>
|
||||||
|
Andrei Picus <office.nightcrawler@gmail.com>
|
||||||
|
Ondrej Novy <novy@ondrej.org>
|
||||||
|
Jacob McCutcheon <jacob.mccutcheon@gmail.com>
|
||||||
|
Monika Piotrowicz <monika.piotrowicz@gmail.com>
|
||||||
|
Imants Horsts <imants.horsts@inbox.lv>
|
||||||
|
Eric Dahl <eric.c.dahl@gmail.com>
|
||||||
|
Dave Stein <dave@behance.com>
|
||||||
|
Dylan Barrell <dylan@barrell.com>
|
||||||
|
Daniel DeGroff <djdegroff@gmail.com>
|
||||||
|
Michael Wiencek <mwtuea@gmail.com>
|
||||||
|
Thomas Meyer <meyertee@gmail.com>
|
||||||
|
Ruslan Yakhyaev <ruslan@ruslan.io>
|
||||||
|
Brian J. Dowling <bjd-dev@simplicity.net>
|
||||||
|
Ben Higgins <ben@extrahop.com>
|
||||||
|
Yermo Lamers <yml@yml.com>
|
||||||
|
Patrick Stapleton <github@gdi2290.com>
|
||||||
|
Trisha Crowley <trisha.crowley@gmail.com>
|
||||||
|
Usman Akeju <akeju00+github@gmail.com>
|
||||||
|
Rodrigo Menezes <rod333@gmail.com>
|
||||||
|
Jacques Perrault <jacques_perrault@us.ibm.com>
|
||||||
|
Frederik Elvhage <frederik.elvhage@googlemail.com>
|
||||||
|
Will Holley <willholley@gmail.com>
|
||||||
|
Uri Gilad <antishok@gmail.com>
|
||||||
|
Richard Gibson <richard.gibson@gmail.com>
|
||||||
|
Simen Bekkhus <sbekkhus91@gmail.com>
|
||||||
|
Chen Eshchar <eshcharc@gmail.com>
|
||||||
|
Bruno Pérel <brunoperel@gmail.com>
|
||||||
|
Mohammed Alshehri <m@dralshehri.com>
|
||||||
|
Lisa Seacat DeLuca <ldeluca@us.ibm.com>
|
||||||
|
Anne-Gaelle Colom <coloma@westminster.ac.uk>
|
||||||
|
Adam Foster <slimfoster@gmail.com>
|
||||||
|
Luke Page <luke.a.page@gmail.com>
|
||||||
|
Daniel Owens <daniel@matchstickmixup.com>
|
||||||
|
Michael Orchard <morchard@scottlogic.co.uk>
|
||||||
|
Marcus Warren <marcus@envoke.com>
|
||||||
|
Nils Heuermann <nils@world-of-scripts.de>
|
||||||
|
Marco Ziech <marco@ziech.net>
|
||||||
|
Patricia Juarez <patrixd@gmail.com>
|
||||||
|
Ben Mosher <me@benmosher.com>
|
||||||
|
Ablay Keldibek <atomio.ak@gmail.com>
|
||||||
|
Thomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>
|
||||||
|
Jiabao Wu <jiabao.foss@gmail.com>
|
||||||
|
Eric Lee Carraway <github@ericcarraway.com>
|
||||||
|
Victor Homyakov <vkhomyackov@gmail.com>
|
||||||
|
Myeongjin Lee <aranet100@gmail.com>
|
||||||
|
Liran Sharir <lsharir@gmail.com>
|
||||||
|
Weston Ruter <weston@xwp.co>
|
||||||
|
Mani Mishra <manimishra902@gmail.com>
|
||||||
|
Hannah Methvin <hannahmethvin@gmail.com>
|
||||||
|
Leonardo Balter <leonardo.balter@gmail.com>
|
||||||
|
Benjamin Albert <benjamin_a5@yahoo.com>
|
||||||
|
Michał Gołębiowski <m.goleb@gmail.com>
|
||||||
|
Alyosha Pushak <alyosha.pushak@gmail.com>
|
||||||
|
Fahad Ahmad <fahadahmad41@hotmail.com>
|
||||||
|
Matt Brundage <github@mattbrundage.com>
|
||||||
|
Francesc Baeta <francesc.baeta@gmail.com>
|
||||||
|
Piotr Baran <piotros@wp.pl>
|
||||||
|
Mukul Hase <mukulhase@gmail.com>
|
||||||
|
Konstantin Dinev <kdinev@mail.bw.edu>
|
||||||
|
Rand Scullard <rand@randscullard.com>
|
||||||
|
Dan Strohl <dan@wjcg.net>
|
||||||
|
Maksim Ryzhikov <rv.maksim@gmail.com>
|
||||||
|
Amine HADDAD <haddad@allegorie.tv>
|
||||||
|
Amanpreet Singh <apsdehal@gmail.com>
|
||||||
|
Alexey Balchunas <bleshik@gmail.com>
|
||||||
|
Peter Kehl <peter.kehl@gmail.com>
|
||||||
|
Peter Dave Hello <hsu@peterdavehello.org>
|
||||||
|
Johannes Schäfer <johnschaefer@gmx.de>
|
||||||
|
Ville Skyttä <ville.skytta@iki.fi>
|
||||||
|
Ryan Oriecuia <ryan.oriecuia@visioncritical.com>
|
||||||
43
libs/jquery-ui/LICENSE.txt
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
Copyright jQuery Foundation and other contributors, https://jquery.org/
|
||||||
|
|
||||||
|
This software consists of voluntary contributions made by many
|
||||||
|
individuals. For exact contribution history, see the revision history
|
||||||
|
available at https://github.com/jquery/jquery-ui
|
||||||
|
|
||||||
|
The following license applies to all parts of this software except as
|
||||||
|
documented below:
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright and related rights for sample code are waived via CC0. Sample
|
||||||
|
code is defined as all source code contained within the demos directory.
|
||||||
|
|
||||||
|
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
====
|
||||||
|
|
||||||
|
All files located in the node_modules and external directories are
|
||||||
|
externally maintained libraries used by this software which have their
|
||||||
|
own licenses; we recommend you read them, as their terms may differ from
|
||||||
|
the terms above.
|
||||||
BIN
libs/jquery-ui/images/ui-icons_444444_256x240.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
libs/jquery-ui/images/ui-icons_555555_256x240.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
libs/jquery-ui/images/ui-icons_777620_256x240.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
libs/jquery-ui/images/ui-icons_777777_256x240.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
libs/jquery-ui/images/ui-icons_cc0000_256x240.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
libs/jquery-ui/images/ui-icons_ffffff_256x240.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
559
libs/jquery-ui/index.html
Normal file
@@ -0,0 +1,559 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="us">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>jQuery UI Example Page</title>
|
||||||
|
<link href="jquery-ui.css" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
body{
|
||||||
|
font-family: "Trebuchet MS", sans-serif;
|
||||||
|
margin: 50px;
|
||||||
|
}
|
||||||
|
.demoHeaders {
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
|
#dialog-link {
|
||||||
|
padding: .4em 1em .4em 20px;
|
||||||
|
text-decoration: none;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
#dialog-link span.ui-icon {
|
||||||
|
margin: 0 5px 0 0;
|
||||||
|
position: absolute;
|
||||||
|
left: .2em;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -8px;
|
||||||
|
}
|
||||||
|
#icons {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#icons li {
|
||||||
|
margin: 2px;
|
||||||
|
position: relative;
|
||||||
|
padding: 4px 0;
|
||||||
|
cursor: pointer;
|
||||||
|
float: left;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
#icons span.ui-icon {
|
||||||
|
float: left;
|
||||||
|
margin: 0 4px;
|
||||||
|
}
|
||||||
|
.fakewindowcontain .ui-widget-overlay {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Welcome to jQuery UI!</h1>
|
||||||
|
|
||||||
|
<div class="ui-widget">
|
||||||
|
<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1>YOUR COMPONENTS:</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Accordion -->
|
||||||
|
<h2 class="demoHeaders">Accordion</h2>
|
||||||
|
<div id="accordion">
|
||||||
|
<h3>First</h3>
|
||||||
|
<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
|
||||||
|
<h3>Second</h3>
|
||||||
|
<div>Phasellus mattis tincidunt nibh.</div>
|
||||||
|
<h3>Third</h3>
|
||||||
|
<div>Nam dui erat, auctor a, dignissim quis.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Autocomplete -->
|
||||||
|
<h2 class="demoHeaders">Autocomplete</h2>
|
||||||
|
<div>
|
||||||
|
<input id="autocomplete" title="type "a"">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Button -->
|
||||||
|
<h2 class="demoHeaders">Button</h2>
|
||||||
|
<button id="button">A button element</button>
|
||||||
|
<button id="button-icon">An icon-only button</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Checkboxradio -->
|
||||||
|
<h2 class="demoHeaders">Checkboxradio</h2>
|
||||||
|
<form style="margin-top: 1em;">
|
||||||
|
<div id="radioset">
|
||||||
|
<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
|
||||||
|
<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
|
||||||
|
<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Controlgroup -->
|
||||||
|
<h2 class="demoHeaders">Controlgroup</h2>
|
||||||
|
<fieldset>
|
||||||
|
<legend>Rental Car</legend>
|
||||||
|
<div id="controlgroup">
|
||||||
|
<select id="car-type">
|
||||||
|
<option>Compact car</option>
|
||||||
|
<option>Midsize car</option>
|
||||||
|
<option>Full size car</option>
|
||||||
|
<option>SUV</option>
|
||||||
|
<option>Luxury</option>
|
||||||
|
<option>Truck</option>
|
||||||
|
<option>Van</option>
|
||||||
|
</select>
|
||||||
|
<label for="transmission-standard">Standard</label>
|
||||||
|
<input type="radio" name="transmission" id="transmission-standard">
|
||||||
|
<label for="transmission-automatic">Automatic</label>
|
||||||
|
<input type="radio" name="transmission" id="transmission-automatic">
|
||||||
|
<label for="insurance">Insurance</label>
|
||||||
|
<input type="checkbox" name="insurance" id="insurance">
|
||||||
|
<label for="horizontal-spinner" class="ui-controlgroup-label"># of cars</label>
|
||||||
|
<input id="horizontal-spinner" class="ui-spinner-input">
|
||||||
|
<button>Book Now!</button>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Tabs -->
|
||||||
|
<h2 class="demoHeaders">Tabs</h2>
|
||||||
|
<div id="tabs">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#tabs-1">First</a></li>
|
||||||
|
<li><a href="#tabs-2">Second</a></li>
|
||||||
|
<li><a href="#tabs-3">Third</a></li>
|
||||||
|
</ul>
|
||||||
|
<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
|
||||||
|
<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
|
||||||
|
<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h2 class="demoHeaders">Dialog</h2>
|
||||||
|
<p>
|
||||||
|
<button id="dialog-link" class="ui-button ui-corner-all ui-widget">
|
||||||
|
<span class="ui-icon ui-icon-newwin"></span>Open Dialog
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 class="demoHeaders">Overlay and Shadow Classes</h2>
|
||||||
|
<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
|
||||||
|
<p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
|
||||||
|
|
||||||
|
<!-- ui-dialog -->
|
||||||
|
<div class="ui-widget-overlay ui-front"></div>
|
||||||
|
<div style="position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em" class="ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow">
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ui-dialog -->
|
||||||
|
<div id="dialog" title="Dialog Title">
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
|
||||||
|
<ul id="icons" class="ui-widget ui-helper-clearfix">
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-n"><span class="ui-icon ui-icon-caret-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-ne"><span class="ui-icon ui-icon-caret-1-ne"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-e"><span class="ui-icon ui-icon-caret-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-se"><span class="ui-icon ui-icon-caret-1-se"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-s"><span class="ui-icon ui-icon-caret-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-sw"><span class="ui-icon ui-icon-caret-1-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-w"><span class="ui-icon ui-icon-caret-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-nw"><span class="ui-icon ui-icon-caret-1-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-n-s"><span class="ui-icon ui-icon-caret-2-n-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-e-w"><span class="ui-icon ui-icon-caret-2-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
|
||||||
|
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Slider -->
|
||||||
|
<h2 class="demoHeaders">Slider</h2>
|
||||||
|
<div id="slider"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Datepicker -->
|
||||||
|
<h2 class="demoHeaders">Datepicker</h2>
|
||||||
|
<div id="datepicker"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Progressbar -->
|
||||||
|
<h2 class="demoHeaders">Progressbar</h2>
|
||||||
|
<div id="progressbar"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Progressbar -->
|
||||||
|
<h2 class="demoHeaders">Selectmenu</h2>
|
||||||
|
<select id="selectmenu">
|
||||||
|
<option>Slower</option>
|
||||||
|
<option>Slow</option>
|
||||||
|
<option selected="selected">Medium</option>
|
||||||
|
<option>Fast</option>
|
||||||
|
<option>Faster</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Spinner -->
|
||||||
|
<h2 class="demoHeaders">Spinner</h2>
|
||||||
|
<input id="spinner">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Menu -->
|
||||||
|
<h2 class="demoHeaders">Menu</h2>
|
||||||
|
<ul style="width:100px;" id="menu">
|
||||||
|
<li><div>Item 1</div></li>
|
||||||
|
<li><div>Item 2</div></li>
|
||||||
|
<li><div>Item 3</div>
|
||||||
|
<ul>
|
||||||
|
<li><div>Item 3-1</div></li>
|
||||||
|
<li><div>Item 3-2</div></li>
|
||||||
|
<li><div>Item 3-3</div></li>
|
||||||
|
<li><div>Item 3-4</div></li>
|
||||||
|
<li><div>Item 3-5</div></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><div>Item 4</div></li>
|
||||||
|
<li><div>Item 5</div></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Tooltip -->
|
||||||
|
<h2 class="demoHeaders">Tooltip</h2>
|
||||||
|
<p id="tooltip">
|
||||||
|
<a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
|
||||||
|
the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Highlight / Error -->
|
||||||
|
<h2 class="demoHeaders">Highlight / Error</h2>
|
||||||
|
<div class="ui-widget">
|
||||||
|
<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
|
||||||
|
<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
|
||||||
|
<strong>Hey!</strong> Sample ui-state-highlight style.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="ui-widget">
|
||||||
|
<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
|
||||||
|
<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
|
||||||
|
<strong>Alert:</strong> Sample ui-state-error style.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="external/jquery/jquery.js"></script>
|
||||||
|
<script src="jquery-ui.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
$( "#accordion" ).accordion();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var availableTags = [
|
||||||
|
"ActionScript",
|
||||||
|
"AppleScript",
|
||||||
|
"Asp",
|
||||||
|
"BASIC",
|
||||||
|
"C",
|
||||||
|
"C++",
|
||||||
|
"Clojure",
|
||||||
|
"COBOL",
|
||||||
|
"ColdFusion",
|
||||||
|
"Erlang",
|
||||||
|
"Fortran",
|
||||||
|
"Groovy",
|
||||||
|
"Haskell",
|
||||||
|
"Java",
|
||||||
|
"JavaScript",
|
||||||
|
"Lisp",
|
||||||
|
"Perl",
|
||||||
|
"PHP",
|
||||||
|
"Python",
|
||||||
|
"Ruby",
|
||||||
|
"Scala",
|
||||||
|
"Scheme"
|
||||||
|
];
|
||||||
|
$( "#autocomplete" ).autocomplete({
|
||||||
|
source: availableTags
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#button" ).button();
|
||||||
|
$( "#button-icon" ).button({
|
||||||
|
icon: "ui-icon-gear",
|
||||||
|
showLabel: false
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#radioset" ).buttonset();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#controlgroup" ).controlgroup();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#tabs" ).tabs();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#dialog" ).dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 400,
|
||||||
|
buttons: [
|
||||||
|
{
|
||||||
|
text: "Ok",
|
||||||
|
click: function() {
|
||||||
|
$( this ).dialog( "close" );
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "Cancel",
|
||||||
|
click: function() {
|
||||||
|
$( this ).dialog( "close" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Link to open the dialog
|
||||||
|
$( "#dialog-link" ).click(function( event ) {
|
||||||
|
$( "#dialog" ).dialog( "open" );
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#datepicker" ).datepicker({
|
||||||
|
inline: true
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#slider" ).slider({
|
||||||
|
range: true,
|
||||||
|
values: [ 17, 67 ]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#progressbar" ).progressbar({
|
||||||
|
value: 20
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#spinner" ).spinner();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#menu" ).menu();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#tooltip" ).tooltip();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$( "#selectmenu" ).selectmenu();
|
||||||
|
|
||||||
|
|
||||||
|
// Hover states on the static widgets
|
||||||
|
$( "#dialog-link, #icons li" ).hover(
|
||||||
|
function() {
|
||||||
|
$( this ).addClass( "ui-state-hover" );
|
||||||
|
},
|
||||||
|
function() {
|
||||||
|
$( this ).removeClass( "ui-state-hover" );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1312
libs/jquery-ui/jquery-ui.css
vendored
Normal file
7
libs/jquery-ui/jquery-ui.min.css
vendored
Normal file
13
libs/jquery-ui/jquery-ui.min.js
vendored
Normal file
886
libs/jquery-ui/jquery-ui.structure.css
vendored
Normal file
@@ -0,0 +1,886 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery UI CSS Framework 1.12.1
|
||||||
|
* http://jqueryui.com
|
||||||
|
*
|
||||||
|
* Copyright jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://api.jqueryui.com/category/theming/
|
||||||
|
*/
|
||||||
|
.ui-draggable-handle {
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
/* Layout helpers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-helper-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.ui-helper-hidden-accessible {
|
||||||
|
border: 0;
|
||||||
|
clip: rect(0 0 0 0);
|
||||||
|
height: 1px;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
}
|
||||||
|
.ui-helper-reset {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
line-height: 1.3;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 100%;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
.ui-helper-clearfix:before,
|
||||||
|
.ui-helper-clearfix:after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.ui-helper-clearfix:after {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.ui-helper-zfix {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
filter:Alpha(Opacity=0); /* support: IE8 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-front {
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-disabled {
|
||||||
|
cursor: default !important;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-icon {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-top: -.25em;
|
||||||
|
position: relative;
|
||||||
|
text-indent: -99999px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-icon-block {
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -8px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.ui-resizable {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.ui-resizable-handle {
|
||||||
|
position: absolute;
|
||||||
|
font-size: 0.1px;
|
||||||
|
display: block;
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.ui-resizable-disabled .ui-resizable-handle,
|
||||||
|
.ui-resizable-autohide .ui-resizable-handle {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.ui-resizable-n {
|
||||||
|
cursor: n-resize;
|
||||||
|
height: 7px;
|
||||||
|
width: 100%;
|
||||||
|
top: -5px;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.ui-resizable-s {
|
||||||
|
cursor: s-resize;
|
||||||
|
height: 7px;
|
||||||
|
width: 100%;
|
||||||
|
bottom: -5px;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.ui-resizable-e {
|
||||||
|
cursor: e-resize;
|
||||||
|
width: 7px;
|
||||||
|
right: -5px;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.ui-resizable-w {
|
||||||
|
cursor: w-resize;
|
||||||
|
width: 7px;
|
||||||
|
left: -5px;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.ui-resizable-se {
|
||||||
|
cursor: se-resize;
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
right: 1px;
|
||||||
|
bottom: 1px;
|
||||||
|
}
|
||||||
|
.ui-resizable-sw {
|
||||||
|
cursor: sw-resize;
|
||||||
|
width: 9px;
|
||||||
|
height: 9px;
|
||||||
|
left: -5px;
|
||||||
|
bottom: -5px;
|
||||||
|
}
|
||||||
|
.ui-resizable-nw {
|
||||||
|
cursor: nw-resize;
|
||||||
|
width: 9px;
|
||||||
|
height: 9px;
|
||||||
|
left: -5px;
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
|
.ui-resizable-ne {
|
||||||
|
cursor: ne-resize;
|
||||||
|
width: 9px;
|
||||||
|
height: 9px;
|
||||||
|
right: -5px;
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
|
.ui-selectable {
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.ui-selectable-helper {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 100;
|
||||||
|
border: 1px dotted black;
|
||||||
|
}
|
||||||
|
.ui-sortable-handle {
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.ui-accordion .ui-accordion-header {
|
||||||
|
display: block;
|
||||||
|
cursor: pointer;
|
||||||
|
position: relative;
|
||||||
|
margin: 2px 0 0 0;
|
||||||
|
padding: .5em .5em .5em .7em;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
.ui-accordion .ui-accordion-content {
|
||||||
|
padding: 1em 2.2em;
|
||||||
|
border-top: 0;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.ui-autocomplete {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
.ui-menu {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
display: block;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-item {
|
||||||
|
margin: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
/* support: IE10, see #8844 */
|
||||||
|
list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-item-wrapper {
|
||||||
|
position: relative;
|
||||||
|
padding: 3px 1em 3px .4em;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-divider {
|
||||||
|
margin: 5px 0;
|
||||||
|
height: 0;
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 0;
|
||||||
|
border-width: 1px 0 0 0;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-state-focus,
|
||||||
|
.ui-menu .ui-state-active {
|
||||||
|
margin: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* icon support */
|
||||||
|
.ui-menu-icons {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.ui-menu-icons .ui-menu-item-wrapper {
|
||||||
|
padding-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* left-aligned */
|
||||||
|
.ui-menu .ui-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: .2em;
|
||||||
|
margin: auto 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* right-aligned */
|
||||||
|
.ui-menu .ui-menu-icon {
|
||||||
|
left: auto;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.ui-button {
|
||||||
|
padding: .4em 1em;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
line-height: normal;
|
||||||
|
margin-right: .1em;
|
||||||
|
cursor: pointer;
|
||||||
|
vertical-align: middle;
|
||||||
|
text-align: center;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
|
||||||
|
/* Support: IE <= 11 */
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-button,
|
||||||
|
.ui-button:link,
|
||||||
|
.ui-button:visited,
|
||||||
|
.ui-button:hover,
|
||||||
|
.ui-button:active {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* to make room for the icon, a width needs to be set here */
|
||||||
|
.ui-button-icon-only {
|
||||||
|
width: 2em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
text-indent: -9999px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* no icon support for input elements */
|
||||||
|
input.ui-button.ui-button-icon-only {
|
||||||
|
text-indent: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* button icon element(s) */
|
||||||
|
.ui-button-icon-only .ui-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
margin-top: -8px;
|
||||||
|
margin-left: -8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-button.ui-icon-notext .ui-icon {
|
||||||
|
padding: 0;
|
||||||
|
width: 2.1em;
|
||||||
|
height: 2.1em;
|
||||||
|
text-indent: -9999px;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
input.ui-button.ui-icon-notext .ui-icon {
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
text-indent: 0;
|
||||||
|
white-space: normal;
|
||||||
|
padding: .4em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* workarounds */
|
||||||
|
/* Support: Firefox 5 - 40 */
|
||||||
|
input.ui-button::-moz-focus-inner,
|
||||||
|
button.ui-button::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.ui-controlgroup {
|
||||||
|
vertical-align: middle;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.ui-controlgroup > .ui-controlgroup-item {
|
||||||
|
float: left;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
.ui-controlgroup > .ui-controlgroup-item:focus,
|
||||||
|
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
|
||||||
|
z-index: 9999;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-vertical > .ui-controlgroup-item {
|
||||||
|
display: block;
|
||||||
|
float: none;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-vertical .ui-controlgroup-item {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.ui-controlgroup .ui-controlgroup-label {
|
||||||
|
padding: .4em 1em;
|
||||||
|
}
|
||||||
|
.ui-controlgroup .ui-controlgroup-label span {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Spinner specific style fixes */
|
||||||
|
.ui-controlgroup-vertical .ui-spinner-input {
|
||||||
|
|
||||||
|
/* Support: IE8 only, Android < 4.4 only */
|
||||||
|
width: 75%;
|
||||||
|
width: calc( 100% - 2.4em );
|
||||||
|
}
|
||||||
|
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
|
||||||
|
border-top-style: solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-checkboxradio-label .ui-icon-background {
|
||||||
|
box-shadow: inset 1px 1px 1px #ccc;
|
||||||
|
border-radius: .12em;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.ui-checkboxradio-radio-label .ui-icon-background {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border-radius: 1em;
|
||||||
|
overflow: visible;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
|
||||||
|
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
|
||||||
|
background-image: none;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-width: 4px;
|
||||||
|
border-style: solid;
|
||||||
|
}
|
||||||
|
.ui-checkboxradio-disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.ui-datepicker {
|
||||||
|
width: 17em;
|
||||||
|
padding: .2em .2em 0;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-header {
|
||||||
|
position: relative;
|
||||||
|
padding: .2em 0;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-prev,
|
||||||
|
.ui-datepicker .ui-datepicker-next {
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
width: 1.8em;
|
||||||
|
height: 1.8em;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover,
|
||||||
|
.ui-datepicker .ui-datepicker-next-hover {
|
||||||
|
top: 1px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-prev {
|
||||||
|
left: 2px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-next {
|
||||||
|
right: 2px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover {
|
||||||
|
left: 1px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-next-hover {
|
||||||
|
right: 1px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-prev span,
|
||||||
|
.ui-datepicker .ui-datepicker-next span {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -8px;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -8px;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-title {
|
||||||
|
margin: 0 2.3em;
|
||||||
|
line-height: 1.8em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-title select {
|
||||||
|
font-size: 1em;
|
||||||
|
margin: 1px 0;
|
||||||
|
}
|
||||||
|
.ui-datepicker select.ui-datepicker-month,
|
||||||
|
.ui-datepicker select.ui-datepicker-year {
|
||||||
|
width: 45%;
|
||||||
|
}
|
||||||
|
.ui-datepicker table {
|
||||||
|
width: 100%;
|
||||||
|
font-size: .9em;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 0 0 .4em;
|
||||||
|
}
|
||||||
|
.ui-datepicker th {
|
||||||
|
padding: .7em .3em;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: bold;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.ui-datepicker td {
|
||||||
|
border: 0;
|
||||||
|
padding: 1px;
|
||||||
|
}
|
||||||
|
.ui-datepicker td span,
|
||||||
|
.ui-datepicker td a {
|
||||||
|
display: block;
|
||||||
|
padding: .2em;
|
||||||
|
text-align: right;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane {
|
||||||
|
background-image: none;
|
||||||
|
margin: .7em 0 0 0;
|
||||||
|
padding: 0 .2em;
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button {
|
||||||
|
float: right;
|
||||||
|
margin: .5em .2em .4em;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: .2em .6em .3em .6em;
|
||||||
|
width: auto;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* with multiple calendars */
|
||||||
|
.ui-datepicker.ui-datepicker-multi {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group table {
|
||||||
|
width: 95%;
|
||||||
|
margin: 0 auto .4em;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi-2 .ui-datepicker-group {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi-3 .ui-datepicker-group {
|
||||||
|
width: 33.3%;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi-4 .ui-datepicker-group {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
|
||||||
|
border-left-width: 0;
|
||||||
|
}
|
||||||
|
.ui-datepicker-multi .ui-datepicker-buttonpane {
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
.ui-datepicker-row-break {
|
||||||
|
clear: both;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RTL support */
|
||||||
|
.ui-datepicker-rtl {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev {
|
||||||
|
right: 2px;
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next {
|
||||||
|
left: 2px;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev:hover {
|
||||||
|
right: 1px;
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next:hover {
|
||||||
|
left: 1px;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane {
|
||||||
|
clear: right;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
|
||||||
|
border-right-width: 0;
|
||||||
|
border-left-width: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Icons */
|
||||||
|
.ui-datepicker .ui-icon {
|
||||||
|
display: block;
|
||||||
|
text-indent: -99999px;
|
||||||
|
overflow: hidden;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
left: .5em;
|
||||||
|
top: .3em;
|
||||||
|
}
|
||||||
|
.ui-dialog {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: .2em;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-titlebar {
|
||||||
|
padding: .4em 1em;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-title {
|
||||||
|
float: left;
|
||||||
|
margin: .1em 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 90%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close {
|
||||||
|
position: absolute;
|
||||||
|
right: .3em;
|
||||||
|
top: 50%;
|
||||||
|
width: 20px;
|
||||||
|
margin: -10px 0 0 0;
|
||||||
|
padding: 1px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-content {
|
||||||
|
position: relative;
|
||||||
|
border: 0;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background: none;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-buttonpane {
|
||||||
|
text-align: left;
|
||||||
|
border-width: 1px 0 0 0;
|
||||||
|
background-image: none;
|
||||||
|
margin-top: .5em;
|
||||||
|
padding: .3em 1em .5em .4em;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-dialog-buttonpane button {
|
||||||
|
margin: .5em .4em .5em 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-n {
|
||||||
|
height: 2px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-e {
|
||||||
|
width: 2px;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-s {
|
||||||
|
height: 2px;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-w {
|
||||||
|
width: 2px;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-se,
|
||||||
|
.ui-dialog .ui-resizable-sw,
|
||||||
|
.ui-dialog .ui-resizable-ne,
|
||||||
|
.ui-dialog .ui-resizable-nw {
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-se {
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-sw {
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-ne {
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.ui-dialog .ui-resizable-nw {
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.ui-draggable .ui-dialog-titlebar {
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
.ui-progressbar {
|
||||||
|
height: 2em;
|
||||||
|
text-align: left;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.ui-progressbar .ui-progressbar-value {
|
||||||
|
margin: -1px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.ui-progressbar .ui-progressbar-overlay {
|
||||||
|
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
|
||||||
|
height: 100%;
|
||||||
|
filter: alpha(opacity=25); /* support: IE8 */
|
||||||
|
opacity: 0.25;
|
||||||
|
}
|
||||||
|
.ui-progressbar-indeterminate .ui-progressbar-value {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-menu {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-menu .ui-menu {
|
||||||
|
overflow: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-bottom: 1px;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.5;
|
||||||
|
padding: 2px 0.4em;
|
||||||
|
margin: 0.5em 0 0 0;
|
||||||
|
height: auto;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-open {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-text {
|
||||||
|
display: block;
|
||||||
|
margin-right: 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-button.ui-button {
|
||||||
|
text-align: left;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 14em;
|
||||||
|
}
|
||||||
|
.ui-selectmenu-icon.ui-icon {
|
||||||
|
float: right;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.ui-slider {
|
||||||
|
position: relative;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.ui-slider .ui-slider-handle {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 2;
|
||||||
|
width: 1.2em;
|
||||||
|
height: 1.2em;
|
||||||
|
cursor: default;
|
||||||
|
-ms-touch-action: none;
|
||||||
|
touch-action: none;
|
||||||
|
}
|
||||||
|
.ui-slider .ui-slider-range {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
font-size: .7em;
|
||||||
|
display: block;
|
||||||
|
border: 0;
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* support: IE8 - See #6727 */
|
||||||
|
.ui-slider.ui-state-disabled .ui-slider-handle,
|
||||||
|
.ui-slider.ui-state-disabled .ui-slider-range {
|
||||||
|
filter: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-slider-horizontal {
|
||||||
|
height: .8em;
|
||||||
|
}
|
||||||
|
.ui-slider-horizontal .ui-slider-handle {
|
||||||
|
top: -.3em;
|
||||||
|
margin-left: -.6em;
|
||||||
|
}
|
||||||
|
.ui-slider-horizontal .ui-slider-range {
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.ui-slider-horizontal .ui-slider-range-min {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.ui-slider-horizontal .ui-slider-range-max {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-slider-vertical {
|
||||||
|
width: .8em;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
.ui-slider-vertical .ui-slider-handle {
|
||||||
|
left: -.3em;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-bottom: -.6em;
|
||||||
|
}
|
||||||
|
.ui-slider-vertical .ui-slider-range {
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.ui-slider-vertical .ui-slider-range-min {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-slider-vertical .ui-slider-range-max {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.ui-spinner {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.ui-spinner-input {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
color: inherit;
|
||||||
|
padding: .222em 0;
|
||||||
|
margin: .2em 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-left: .4em;
|
||||||
|
margin-right: 2em;
|
||||||
|
}
|
||||||
|
.ui-spinner-button {
|
||||||
|
width: 1.6em;
|
||||||
|
height: 50%;
|
||||||
|
font-size: .5em;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
text-align: center;
|
||||||
|
position: absolute;
|
||||||
|
cursor: default;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
/* more specificity required here to override default borders */
|
||||||
|
.ui-spinner a.ui-spinner-button {
|
||||||
|
border-top-style: none;
|
||||||
|
border-bottom-style: none;
|
||||||
|
border-right-style: none;
|
||||||
|
}
|
||||||
|
.ui-spinner-up {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
.ui-spinner-down {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
.ui-tabs {
|
||||||
|
position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||||
|
padding: .2em;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-nav {
|
||||||
|
margin: 0;
|
||||||
|
padding: .2em .2em 0;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-nav li {
|
||||||
|
list-style: none;
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
margin: 1px .2em 0 0;
|
||||||
|
border-bottom-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
|
||||||
|
float: left;
|
||||||
|
padding: .5em 1em;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
|
||||||
|
margin-bottom: -1px;
|
||||||
|
padding-bottom: 1px;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.ui-tabs .ui-tabs-panel {
|
||||||
|
display: block;
|
||||||
|
border-width: 0;
|
||||||
|
padding: 1em 1.4em;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.ui-tooltip {
|
||||||
|
padding: 8px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 9999;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
body .ui-tooltip {
|
||||||
|
border-width: 2px;
|
||||||
|
}
|
||||||
5
libs/jquery-ui/jquery-ui.structure.min.css
vendored
Normal file
443
libs/jquery-ui/jquery-ui.theme.css
vendored
Normal file
@@ -0,0 +1,443 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery UI CSS Framework 1.12.1
|
||||||
|
* http://jqueryui.com
|
||||||
|
*
|
||||||
|
* Copyright jQuery Foundation and other contributors
|
||||||
|
* Released under the MIT license.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://api.jqueryui.com/category/theming/
|
||||||
|
*
|
||||||
|
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Component containers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-widget {
|
||||||
|
font-family: Arial,Helvetica,sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
.ui-widget .ui-widget {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
.ui-widget input,
|
||||||
|
.ui-widget select,
|
||||||
|
.ui-widget textarea,
|
||||||
|
.ui-widget button {
|
||||||
|
font-family: Arial,Helvetica,sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
.ui-widget.ui-widget-content {
|
||||||
|
border: 1px solid #c5c5c5;
|
||||||
|
}
|
||||||
|
.ui-widget-content {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
background: #ffffff;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.ui-widget-content a {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
.ui-widget-header {
|
||||||
|
border: 1px solid #dddddd;
|
||||||
|
background: #e9e9e9;
|
||||||
|
color: #333333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.ui-widget-header a {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Interaction states
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-default,
|
||||||
|
.ui-widget-content .ui-state-default,
|
||||||
|
.ui-widget-header .ui-state-default,
|
||||||
|
.ui-button,
|
||||||
|
|
||||||
|
/* We use html here because we need a greater specificity to make sure disabled
|
||||||
|
works properly when clicked or hovered */
|
||||||
|
html .ui-button.ui-state-disabled:hover,
|
||||||
|
html .ui-button.ui-state-disabled:active {
|
||||||
|
border: 1px solid #c5c5c5;
|
||||||
|
background: #f6f6f6;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #454545;
|
||||||
|
}
|
||||||
|
.ui-state-default a,
|
||||||
|
.ui-state-default a:link,
|
||||||
|
.ui-state-default a:visited,
|
||||||
|
a.ui-button,
|
||||||
|
a:link.ui-button,
|
||||||
|
a:visited.ui-button,
|
||||||
|
.ui-button {
|
||||||
|
color: #454545;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.ui-state-hover,
|
||||||
|
.ui-widget-content .ui-state-hover,
|
||||||
|
.ui-widget-header .ui-state-hover,
|
||||||
|
.ui-state-focus,
|
||||||
|
.ui-widget-content .ui-state-focus,
|
||||||
|
.ui-widget-header .ui-state-focus,
|
||||||
|
.ui-button:hover,
|
||||||
|
.ui-button:focus {
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
background: #ededed;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #2b2b2b;
|
||||||
|
}
|
||||||
|
.ui-state-hover a,
|
||||||
|
.ui-state-hover a:hover,
|
||||||
|
.ui-state-hover a:link,
|
||||||
|
.ui-state-hover a:visited,
|
||||||
|
.ui-state-focus a,
|
||||||
|
.ui-state-focus a:hover,
|
||||||
|
.ui-state-focus a:link,
|
||||||
|
.ui-state-focus a:visited,
|
||||||
|
a.ui-button:hover,
|
||||||
|
a.ui-button:focus {
|
||||||
|
color: #2b2b2b;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-visual-focus {
|
||||||
|
box-shadow: 0 0 3px 1px rgb(94, 158, 214);
|
||||||
|
}
|
||||||
|
.ui-state-active,
|
||||||
|
.ui-widget-content .ui-state-active,
|
||||||
|
.ui-widget-header .ui-state-active,
|
||||||
|
a.ui-button:active,
|
||||||
|
.ui-button:active,
|
||||||
|
.ui-button.ui-state-active:hover {
|
||||||
|
border: 1px solid #003eff;
|
||||||
|
background: #007fff;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
.ui-icon-background,
|
||||||
|
.ui-state-active .ui-icon-background {
|
||||||
|
border: #003eff;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
.ui-state-active a,
|
||||||
|
.ui-state-active a:link,
|
||||||
|
.ui-state-active a:visited {
|
||||||
|
color: #ffffff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-highlight,
|
||||||
|
.ui-widget-content .ui-state-highlight,
|
||||||
|
.ui-widget-header .ui-state-highlight {
|
||||||
|
border: 1px solid #dad55e;
|
||||||
|
background: #fffa90;
|
||||||
|
color: #777620;
|
||||||
|
}
|
||||||
|
.ui-state-checked {
|
||||||
|
border: 1px solid #dad55e;
|
||||||
|
background: #fffa90;
|
||||||
|
}
|
||||||
|
.ui-state-highlight a,
|
||||||
|
.ui-widget-content .ui-state-highlight a,
|
||||||
|
.ui-widget-header .ui-state-highlight a {
|
||||||
|
color: #777620;
|
||||||
|
}
|
||||||
|
.ui-state-error,
|
||||||
|
.ui-widget-content .ui-state-error,
|
||||||
|
.ui-widget-header .ui-state-error {
|
||||||
|
border: 1px solid #f1a899;
|
||||||
|
background: #fddfdf;
|
||||||
|
color: #5f3f3f;
|
||||||
|
}
|
||||||
|
.ui-state-error a,
|
||||||
|
.ui-widget-content .ui-state-error a,
|
||||||
|
.ui-widget-header .ui-state-error a {
|
||||||
|
color: #5f3f3f;
|
||||||
|
}
|
||||||
|
.ui-state-error-text,
|
||||||
|
.ui-widget-content .ui-state-error-text,
|
||||||
|
.ui-widget-header .ui-state-error-text {
|
||||||
|
color: #5f3f3f;
|
||||||
|
}
|
||||||
|
.ui-priority-primary,
|
||||||
|
.ui-widget-content .ui-priority-primary,
|
||||||
|
.ui-widget-header .ui-priority-primary {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.ui-priority-secondary,
|
||||||
|
.ui-widget-content .ui-priority-secondary,
|
||||||
|
.ui-widget-header .ui-priority-secondary {
|
||||||
|
opacity: .7;
|
||||||
|
filter:Alpha(Opacity=70); /* support: IE8 */
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.ui-state-disabled,
|
||||||
|
.ui-widget-content .ui-state-disabled,
|
||||||
|
.ui-widget-header .ui-state-disabled {
|
||||||
|
opacity: .35;
|
||||||
|
filter:Alpha(Opacity=35); /* support: IE8 */
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.ui-state-disabled .ui-icon {
|
||||||
|
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
.ui-icon,
|
||||||
|
.ui-widget-content .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_444444_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-widget-header .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_444444_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-state-hover .ui-icon,
|
||||||
|
.ui-state-focus .ui-icon,
|
||||||
|
.ui-button:hover .ui-icon,
|
||||||
|
.ui-button:focus .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_555555_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-state-active .ui-icon,
|
||||||
|
.ui-button:active .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_ffffff_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-state-highlight .ui-icon,
|
||||||
|
.ui-button .ui-state-highlight.ui-icon {
|
||||||
|
background-image: url("images/ui-icons_777620_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-state-error .ui-icon,
|
||||||
|
.ui-state-error-text .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_cc0000_256x240.png");
|
||||||
|
}
|
||||||
|
.ui-button .ui-icon {
|
||||||
|
background-image: url("images/ui-icons_777777_256x240.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* positioning */
|
||||||
|
.ui-icon-blank { background-position: 16px 16px; }
|
||||||
|
.ui-icon-caret-1-n { background-position: 0 0; }
|
||||||
|
.ui-icon-caret-1-ne { background-position: -16px 0; }
|
||||||
|
.ui-icon-caret-1-e { background-position: -32px 0; }
|
||||||
|
.ui-icon-caret-1-se { background-position: -48px 0; }
|
||||||
|
.ui-icon-caret-1-s { background-position: -65px 0; }
|
||||||
|
.ui-icon-caret-1-sw { background-position: -80px 0; }
|
||||||
|
.ui-icon-caret-1-w { background-position: -96px 0; }
|
||||||
|
.ui-icon-caret-1-nw { background-position: -112px 0; }
|
||||||
|
.ui-icon-caret-2-n-s { background-position: -128px 0; }
|
||||||
|
.ui-icon-caret-2-e-w { background-position: -144px 0; }
|
||||||
|
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||||
|
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||||
|
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||||
|
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||||
|
.ui-icon-triangle-1-s { background-position: -65px -16px; }
|
||||||
|
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||||
|
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||||
|
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||||
|
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||||
|
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||||
|
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||||
|
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||||
|
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||||
|
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||||
|
.ui-icon-arrow-1-s { background-position: -65px -32px; }
|
||||||
|
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||||
|
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||||
|
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||||
|
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||||
|
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||||
|
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||||
|
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||||
|
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||||
|
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||||
|
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||||
|
.ui-icon-extlink { background-position: -32px -80px; }
|
||||||
|
.ui-icon-newwin { background-position: -48px -80px; }
|
||||||
|
.ui-icon-refresh { background-position: -64px -80px; }
|
||||||
|
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||||
|
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||||
|
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||||
|
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||||
|
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||||
|
.ui-icon-document { background-position: -32px -96px; }
|
||||||
|
.ui-icon-document-b { background-position: -48px -96px; }
|
||||||
|
.ui-icon-note { background-position: -64px -96px; }
|
||||||
|
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||||
|
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||||
|
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||||
|
.ui-icon-comment { background-position: -128px -96px; }
|
||||||
|
.ui-icon-person { background-position: -144px -96px; }
|
||||||
|
.ui-icon-print { background-position: -160px -96px; }
|
||||||
|
.ui-icon-trash { background-position: -176px -96px; }
|
||||||
|
.ui-icon-locked { background-position: -192px -96px; }
|
||||||
|
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||||
|
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||||
|
.ui-icon-tag { background-position: -240px -96px; }
|
||||||
|
.ui-icon-home { background-position: 0 -112px; }
|
||||||
|
.ui-icon-flag { background-position: -16px -112px; }
|
||||||
|
.ui-icon-calendar { background-position: -32px -112px; }
|
||||||
|
.ui-icon-cart { background-position: -48px -112px; }
|
||||||
|
.ui-icon-pencil { background-position: -64px -112px; }
|
||||||
|
.ui-icon-clock { background-position: -80px -112px; }
|
||||||
|
.ui-icon-disk { background-position: -96px -112px; }
|
||||||
|
.ui-icon-calculator { background-position: -112px -112px; }
|
||||||
|
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||||
|
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||||
|
.ui-icon-search { background-position: -160px -112px; }
|
||||||
|
.ui-icon-wrench { background-position: -176px -112px; }
|
||||||
|
.ui-icon-gear { background-position: -192px -112px; }
|
||||||
|
.ui-icon-heart { background-position: -208px -112px; }
|
||||||
|
.ui-icon-star { background-position: -224px -112px; }
|
||||||
|
.ui-icon-link { background-position: -240px -112px; }
|
||||||
|
.ui-icon-cancel { background-position: 0 -128px; }
|
||||||
|
.ui-icon-plus { background-position: -16px -128px; }
|
||||||
|
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||||
|
.ui-icon-minus { background-position: -48px -128px; }
|
||||||
|
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||||
|
.ui-icon-close { background-position: -80px -128px; }
|
||||||
|
.ui-icon-closethick { background-position: -96px -128px; }
|
||||||
|
.ui-icon-key { background-position: -112px -128px; }
|
||||||
|
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||||
|
.ui-icon-scissors { background-position: -144px -128px; }
|
||||||
|
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||||
|
.ui-icon-copy { background-position: -176px -128px; }
|
||||||
|
.ui-icon-contact { background-position: -192px -128px; }
|
||||||
|
.ui-icon-image { background-position: -208px -128px; }
|
||||||
|
.ui-icon-video { background-position: -224px -128px; }
|
||||||
|
.ui-icon-script { background-position: -240px -128px; }
|
||||||
|
.ui-icon-alert { background-position: 0 -144px; }
|
||||||
|
.ui-icon-info { background-position: -16px -144px; }
|
||||||
|
.ui-icon-notice { background-position: -32px -144px; }
|
||||||
|
.ui-icon-help { background-position: -48px -144px; }
|
||||||
|
.ui-icon-check { background-position: -64px -144px; }
|
||||||
|
.ui-icon-bullet { background-position: -80px -144px; }
|
||||||
|
.ui-icon-radio-on { background-position: -96px -144px; }
|
||||||
|
.ui-icon-radio-off { background-position: -112px -144px; }
|
||||||
|
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||||
|
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||||
|
.ui-icon-play { background-position: 0 -160px; }
|
||||||
|
.ui-icon-pause { background-position: -16px -160px; }
|
||||||
|
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||||
|
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||||
|
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||||
|
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||||
|
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||||
|
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||||
|
.ui-icon-stop { background-position: -96px -160px; }
|
||||||
|
.ui-icon-eject { background-position: -112px -160px; }
|
||||||
|
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||||
|
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||||
|
.ui-icon-power { background-position: 0 -176px; }
|
||||||
|
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||||
|
.ui-icon-signal { background-position: -32px -176px; }
|
||||||
|
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||||
|
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||||
|
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||||
|
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||||
|
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||||
|
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||||
|
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||||
|
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||||
|
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||||
|
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||||
|
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||||
|
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||||
|
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||||
|
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||||
|
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||||
|
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||||
|
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||||
|
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||||
|
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||||
|
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||||
|
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||||
|
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||||
|
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||||
|
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||||
|
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||||
|
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||||
|
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||||
|
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||||
|
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||||
|
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Corner radius */
|
||||||
|
.ui-corner-all,
|
||||||
|
.ui-corner-top,
|
||||||
|
.ui-corner-left,
|
||||||
|
.ui-corner-tl {
|
||||||
|
border-top-left-radius: 3px;
|
||||||
|
}
|
||||||
|
.ui-corner-all,
|
||||||
|
.ui-corner-top,
|
||||||
|
.ui-corner-right,
|
||||||
|
.ui-corner-tr {
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
}
|
||||||
|
.ui-corner-all,
|
||||||
|
.ui-corner-bottom,
|
||||||
|
.ui-corner-left,
|
||||||
|
.ui-corner-bl {
|
||||||
|
border-bottom-left-radius: 3px;
|
||||||
|
}
|
||||||
|
.ui-corner-all,
|
||||||
|
.ui-corner-bottom,
|
||||||
|
.ui-corner-right,
|
||||||
|
.ui-corner-br {
|
||||||
|
border-bottom-right-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay {
|
||||||
|
background: #aaaaaa;
|
||||||
|
opacity: .3;
|
||||||
|
filter: Alpha(Opacity=30); /* support: IE8 */
|
||||||
|
}
|
||||||
|
.ui-widget-shadow {
|
||||||
|
-webkit-box-shadow: 0px 0px 5px #666666;
|
||||||
|
box-shadow: 0px 0px 5px #666666;
|
||||||
|
}
|
||||||
5
libs/jquery-ui/jquery-ui.theme.min.css
vendored
Normal file
74
libs/jquery-ui/package.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"name": "jquery-ui",
|
||||||
|
"title": "jQuery UI",
|
||||||
|
"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
|
||||||
|
"version": "1.12.1",
|
||||||
|
"homepage": "http://jqueryui.com",
|
||||||
|
"author": {
|
||||||
|
"name": "jQuery Foundation and other contributors",
|
||||||
|
"url": "https://github.com/jquery/jquery-ui/blob/1.12.1/AUTHORS.txt"
|
||||||
|
},
|
||||||
|
"main": "ui/widget.js",
|
||||||
|
"maintainers": [
|
||||||
|
{
|
||||||
|
"name": "Scott González",
|
||||||
|
"email": "scott.gonzalez@gmail.com",
|
||||||
|
"url": "http://scottgonzalez.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jörn Zaefferer",
|
||||||
|
"email": "joern.zaefferer@gmail.com",
|
||||||
|
"url": "http://bassistance.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mike Sherov",
|
||||||
|
"email": "mike.sherov@gmail.com",
|
||||||
|
"url": "http://mike.sherov.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "TJ VanToll",
|
||||||
|
"email": "tj.vantoll@gmail.com",
|
||||||
|
"url": "http://tjvantoll.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Felix Nagel",
|
||||||
|
"email": "info@felixnagel.com",
|
||||||
|
"url": "http://www.felixnagel.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alex Schmitz",
|
||||||
|
"email": "arschmitz@gmail.com",
|
||||||
|
"url": "https://github.com/arschmitz"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git://github.com/jquery/jquery-ui.git"
|
||||||
|
},
|
||||||
|
"bugs": "https://bugs.jqueryui.com/",
|
||||||
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"test": "grunt"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"commitplease": "2.3.0",
|
||||||
|
"grunt": "0.4.5",
|
||||||
|
"grunt-bowercopy": "1.2.4",
|
||||||
|
"grunt-cli": "0.1.13",
|
||||||
|
"grunt-compare-size": "0.4.0",
|
||||||
|
"grunt-contrib-concat": "0.5.1",
|
||||||
|
"grunt-contrib-csslint": "0.5.0",
|
||||||
|
"grunt-contrib-jshint": "0.12.0",
|
||||||
|
"grunt-contrib-qunit": "1.0.1",
|
||||||
|
"grunt-contrib-requirejs": "0.4.4",
|
||||||
|
"grunt-contrib-uglify": "0.11.1",
|
||||||
|
"grunt-git-authors": "3.1.0",
|
||||||
|
"grunt-html": "6.0.0",
|
||||||
|
"grunt-jscs": "2.1.0",
|
||||||
|
"load-grunt-tasks": "3.4.0",
|
||||||
|
"rimraf": "2.5.1",
|
||||||
|
"testswarm": "1.1.0"
|
||||||
|
},
|
||||||
|
"keywords": []
|
||||||
|
}
|
||||||
10220
libs/jquery/jquery-3.1.1.js
vendored
Normal file
4
libs/jquery/jquery-3.1.1.min.js
vendored
Normal file
23
libs/json5-2.1.3/LICENSE.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2012-2018 Aseem Kishore, and [others].
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
[others]: https://github.com/json5/json5/contributors
|
||||||
234
libs/json5-2.1.3/README.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# JSON5 – JSON for Humans
|
||||||
|
|
||||||
|
[][Build Status]
|
||||||
|
[][Coverage
|
||||||
|
Status]
|
||||||
|
|
||||||
|
The JSON5 Data Interchange Format (JSON5) is a superset of [JSON] that aims to
|
||||||
|
alleviate some of the limitations of JSON by expanding its syntax to include
|
||||||
|
some productions from [ECMAScript 5.1].
|
||||||
|
|
||||||
|
This JavaScript library is the official reference implementation for JSON5
|
||||||
|
parsing and serialization libraries.
|
||||||
|
|
||||||
|
[Build Status]: https://travis-ci.org/json5/json5
|
||||||
|
|
||||||
|
[Coverage Status]: https://coveralls.io/github/json5/json5
|
||||||
|
|
||||||
|
[JSON]: https://tools.ietf.org/html/rfc7159
|
||||||
|
|
||||||
|
[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/
|
||||||
|
|
||||||
|
## Summary of Features
|
||||||
|
The following ECMAScript 5.1 features, which are not supported in JSON, have
|
||||||
|
been extended to JSON5.
|
||||||
|
|
||||||
|
### Objects
|
||||||
|
- Object keys may be an ECMAScript 5.1 _[IdentifierName]_.
|
||||||
|
- Objects may have a single trailing comma.
|
||||||
|
|
||||||
|
### Arrays
|
||||||
|
- Arrays may have a single trailing comma.
|
||||||
|
|
||||||
|
### Strings
|
||||||
|
- Strings may be single quoted.
|
||||||
|
- Strings may span multiple lines by escaping new line characters.
|
||||||
|
- Strings may include character escapes.
|
||||||
|
|
||||||
|
### Numbers
|
||||||
|
- Numbers may be hexadecimal.
|
||||||
|
- Numbers may have a leading or trailing decimal point.
|
||||||
|
- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN.
|
||||||
|
- Numbers may begin with an explicit plus sign.
|
||||||
|
|
||||||
|
### Comments
|
||||||
|
- Single and multi-line comments are allowed.
|
||||||
|
|
||||||
|
### White Space
|
||||||
|
- Additional white space characters are allowed.
|
||||||
|
|
||||||
|
[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6
|
||||||
|
|
||||||
|
[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933
|
||||||
|
|
||||||
|
## Short Example
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
// comments
|
||||||
|
unquoted: 'and you can quote me on that',
|
||||||
|
singleQuotes: 'I can use "double quotes" here',
|
||||||
|
lineBreaks: "Look, Mom! \
|
||||||
|
No \\n's!",
|
||||||
|
hexadecimal: 0xdecaf,
|
||||||
|
leadingDecimalPoint: .8675309, andTrailing: 8675309.,
|
||||||
|
positiveSign: +1,
|
||||||
|
trailingComma: 'in objects', andIn: ['arrays',],
|
||||||
|
"backwardsCompatible": "with JSON",
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Specification
|
||||||
|
For a detailed explanation of the JSON5 format, please read the [official
|
||||||
|
specification](https://json5.github.io/json5-spec/).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
### Node.js
|
||||||
|
```sh
|
||||||
|
npm install json5
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
const JSON5 = require('json5')
|
||||||
|
```
|
||||||
|
|
||||||
|
### Browsers
|
||||||
|
```html
|
||||||
|
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a global `JSON5` variable.
|
||||||
|
|
||||||
|
## API
|
||||||
|
The JSON5 API is compatible with the [JSON API].
|
||||||
|
|
||||||
|
[JSON API]:
|
||||||
|
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
|
||||||
|
|
||||||
|
### JSON5.parse()
|
||||||
|
Parses a JSON5 string, constructing the JavaScript value or object described by
|
||||||
|
the string. An optional reviver function can be provided to perform a
|
||||||
|
transformation on the resulting object before it is returned.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
JSON5.parse(text[, reviver])
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `text`: The string to parse as JSON5.
|
||||||
|
- `reviver`: If a function, this prescribes how the value originally produced by
|
||||||
|
parsing is transformed, before being returned.
|
||||||
|
|
||||||
|
#### Return value
|
||||||
|
The object corresponding to the given JSON5 text.
|
||||||
|
|
||||||
|
### JSON5.stringify()
|
||||||
|
Converts a JavaScript value to a JSON5 string, optionally replacing values if a
|
||||||
|
replacer function is specified, or optionally including only the specified
|
||||||
|
properties if a replacer array is specified.
|
||||||
|
|
||||||
|
#### Syntax
|
||||||
|
JSON5.stringify(value[, replacer[, space]])
|
||||||
|
JSON5.stringify(value[, options])
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
- `value`: The value to convert to a JSON5 string.
|
||||||
|
- `replacer`: A function that alters the behavior of the stringification
|
||||||
|
process, or an array of String and Number objects that serve as a whitelist
|
||||||
|
for selecting/filtering the properties of the value object to be included in
|
||||||
|
the JSON5 string. If this value is null or not provided, all properties of the
|
||||||
|
object are included in the resulting JSON5 string.
|
||||||
|
- `space`: A String or Number object that's used to insert white space into the
|
||||||
|
output JSON5 string for readability purposes. If this is a Number, it
|
||||||
|
indicates the number of space characters to use as white space; this number is
|
||||||
|
capped at 10 (if it is greater, the value is just 10). Values less than 1
|
||||||
|
indicate that no space should be used. If this is a String, the string (or the
|
||||||
|
first 10 characters of the string, if it's longer than that) is used as white
|
||||||
|
space. If this parameter is not provided (or is null), no white space is used.
|
||||||
|
If white space is used, trailing commas will be used in objects and arrays.
|
||||||
|
- `options`: An object with the following properties:
|
||||||
|
- `replacer`: Same as the `replacer` parameter.
|
||||||
|
- `space`: Same as the `space` parameter.
|
||||||
|
- `quote`: A String representing the quote character to use when serializing
|
||||||
|
strings.
|
||||||
|
|
||||||
|
#### Return value
|
||||||
|
A JSON5 string representing the value.
|
||||||
|
|
||||||
|
### Node.js `require()` JSON5 files
|
||||||
|
When using Node.js, you can `require()` JSON5 files by adding the following
|
||||||
|
statement.
|
||||||
|
|
||||||
|
```js
|
||||||
|
require('json5/lib/register')
|
||||||
|
```
|
||||||
|
|
||||||
|
Then you can load a JSON5 file with a Node.js `require()` statement. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
```js
|
||||||
|
const config = require('./config.json5')
|
||||||
|
```
|
||||||
|
|
||||||
|
## CLI
|
||||||
|
Since JSON is more widely used than JSON5, this package includes a CLI for
|
||||||
|
converting JSON5 to JSON and for validating the syntax of JSON5 documents.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
```sh
|
||||||
|
npm install --global json5
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
```sh
|
||||||
|
json5 [options] <file>
|
||||||
|
```
|
||||||
|
|
||||||
|
If `<file>` is not provided, then STDIN is used.
|
||||||
|
|
||||||
|
#### Options:
|
||||||
|
- `-s`, `--space`: The number of spaces to indent or `t` for tabs
|
||||||
|
- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT
|
||||||
|
- `-v`, `--validate`: Validate JSON5 but do not output JSON
|
||||||
|
- `-V`, `--version`: Output the version number
|
||||||
|
- `-h`, `--help`: Output usage information
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
### Development
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/json5/json5
|
||||||
|
cd json5
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
When contributing code, please write relevant tests and run `npm test` and `npm
|
||||||
|
run lint` before submitting pull requests. Please use an editor that supports
|
||||||
|
[EditorConfig](http://editorconfig.org/).
|
||||||
|
|
||||||
|
### Issues
|
||||||
|
To report bugs or request features regarding the JSON5 data format, please
|
||||||
|
submit an issue to the [official specification
|
||||||
|
repository](https://github.com/json5/json5-spec).
|
||||||
|
|
||||||
|
To report bugs or request features regarding the JavaScript implementation of
|
||||||
|
JSON5, please submit an issue to this repository.
|
||||||
|
|
||||||
|
## License
|
||||||
|
MIT. See [LICENSE.md](./LICENSE.md) for details.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
[Assem Kishore](https://github.com/aseemk) founded this project.
|
||||||
|
|
||||||
|
[Michael Bolin](http://bolinfest.com/) independently arrived at and published
|
||||||
|
some of these same ideas with awesome explanations and detail. Recommended
|
||||||
|
reading: [Suggested Improvements to JSON](http://bolinfest.com/essays/json.html)
|
||||||
|
|
||||||
|
[Douglas Crockford](http://www.crockford.com/) of course designed and built
|
||||||
|
JSON, but his state machine diagrams on the [JSON website](http://json.org/), as
|
||||||
|
cheesy as it may sound, gave us motivation and confidence that building a new
|
||||||
|
parser to implement these ideas was within reach! The original
|
||||||
|
implementation of JSON5 was also modeled directly off of Doug’s open-source
|
||||||
|
[json_parse.js] parser. We’re grateful for that clean and well-documented
|
||||||
|
code.
|
||||||
|
|
||||||
|
[json_parse.js]:
|
||||||
|
https://github.com/douglascrockford/JSON-js/blob/03157639c7a7cddd2e9f032537f346f1a87c0f6d/json_parse.js
|
||||||
|
|
||||||
|
[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific
|
||||||
|
supporter, contributing multiple patches and ideas.
|
||||||
|
|
||||||
|
[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original
|
||||||
|
`stringify` method.
|
||||||
|
|
||||||
|
[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely
|
||||||
|
with ES5, wrote the official JSON5 specification, completely rewrote the
|
||||||
|
codebase from the ground up, and is actively maintaining this project.
|
||||||
1399
libs/json5-2.1.3/json5.mjs
Normal file
22
libs/jstree/LICENSE-MIT
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2014 Ivan Bozhanov
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
663
libs/jstree/README.md
Normal file
@@ -0,0 +1,663 @@
|
|||||||
|
# jstree
|
||||||
|
|
||||||
|
[jsTree](http://www.jstree.com/) is jquery plugin, that provides interactive trees. It is absolutely free, [open source](https://github.com/vakata/jstree) and distributed under the MIT license.
|
||||||
|
|
||||||
|
jsTree is easily extendable, themable and configurable, it supports HTML & JSON data sources, AJAX & async callback loading.
|
||||||
|
|
||||||
|
jsTree functions properly in either box-model (content-box or border-box), can be loaded as an AMD module, and has a built in mobile theme for responsive design, that can easily be customized. It uses jQuery's event system, so binding callbacks on various events in the tree is familiar and easy.
|
||||||
|
|
||||||
|
You also get:
|
||||||
|
* drag & drop support
|
||||||
|
* keyboard navigation
|
||||||
|
* inline edit, create and delete
|
||||||
|
* tri-state checkboxes
|
||||||
|
* fuzzy searching
|
||||||
|
* customizable node types
|
||||||
|
|
||||||
|
_Aside from this readme you can find a lot more info on [jstree.com](http://www.jstree.com) & [the discussion group](https://groups.google.com/forum/#!forum/jstree)_.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- MarkdownTOC depth=0 autolink=true bracket=round -->
|
||||||
|
|
||||||
|
- [Getting Started](#getting-started)
|
||||||
|
- [Include all neccessary files](#include-all-neccessary-files)
|
||||||
|
- [Populating a tree using HTML](#populating-a-tree-using-html)
|
||||||
|
- [Populating a tree using an array \(or JSON\)](#populating-a-tree-using-an-array-or-json)
|
||||||
|
- [The required JSON format](#the-required-json-format)
|
||||||
|
- [Populating the tree using AJAX](#populating-the-tree-using-ajax)
|
||||||
|
- [Populating the tree using AJAX and lazy loading nodes](#populating-the-tree-using-ajax-and-lazy-loading-nodes)
|
||||||
|
- [Populating the tree using a callback function](#populating-the-tree-using-a-callback-function)
|
||||||
|
- [Working with events](#working-with-events)
|
||||||
|
- [Interacting with the tree using the API](#interacting-with-the-tree-using-the-api)
|
||||||
|
- [More on configuration](#more-on-configuration)
|
||||||
|
- [Plugins](#plugins)
|
||||||
|
- [checkbox](#checkbox)
|
||||||
|
- [contextmenu](#contextmenu)
|
||||||
|
- [dnd](#dnd)
|
||||||
|
- [massload](#massload)
|
||||||
|
- [search](#search)
|
||||||
|
- [sort](#sort)
|
||||||
|
- [state](#state)
|
||||||
|
- [types](#types)
|
||||||
|
- [unique](#unique)
|
||||||
|
- [wholerow](#wholerow)
|
||||||
|
- [More plugins](#more-plugins)
|
||||||
|
- [PHP demos moved to new repository](#php-demos-moved-to-new-repository)
|
||||||
|
- [License & Contributing](#license--contributing)
|
||||||
|
|
||||||
|
<!-- /MarkdownTOC -->
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Include all neccessary files
|
||||||
|
To get started you need 3 things in your page:
|
||||||
|
1. jQuery (anything above 1.9.1 will work)
|
||||||
|
2. A jstree theme (there is only one theme supplied by default)
|
||||||
|
3. The jstree source file
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.8/themes/default/style.min.css" />
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.8/jstree.min.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
_If you decide to host jstree yourself - the files are located in the `dist` folder. You can safely ignore the `dist/libs` folder._
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Populating a tree using HTML
|
||||||
|
|
||||||
|
Now we are all set to create a tree, inline HTML is the easiest option (suitable for menus). All you need to do is select a node (using a jQuery selector) and invoke the `.jstree()` function to let jstree know you want to render a tree inside the selected node. `$.jstree.create(element)` can be used too.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container">
|
||||||
|
<ul>
|
||||||
|
<li>Root node
|
||||||
|
<ul>
|
||||||
|
<li>Child node 1</li>
|
||||||
|
<li>Child node 2</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/)
|
||||||
|
|
||||||
|
_You can add a few options when rendering a node using a data-attribute (note the quotes):_
|
||||||
|
```html
|
||||||
|
<li data-jstree='{ "selected" : true, "opened" : true }'>Root node ...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Populating a tree using an array (or JSON)
|
||||||
|
|
||||||
|
Building trees from HTML is easy, but it is not very flexible, inline JS data is a better option:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : [
|
||||||
|
{ "text" : "Root node", "children" : [
|
||||||
|
{ "text" : "Child node 1" },
|
||||||
|
{ "text" : "Child node 2" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4478/)
|
||||||
|
|
||||||
|
Unlike the previous simple HTML example, this time the `.jstree()` function accepts a config object.
|
||||||
|
|
||||||
|
For now it is important to note that jstree will try to parse any data you specify in the `core.data` key and use it to create a tree. As seen in the previous example, if this key is missing jstree will try to parse the inline HTML of the container.
|
||||||
|
|
||||||
|
#### The required JSON format
|
||||||
|
|
||||||
|
The data you use must be in a specific format, each branch of the tree is represented by an object, which must at least have a `text` key. The `children` key can be used to add children to the branch, it should be an array of objects.
|
||||||
|
|
||||||
|
_Keep in mind, you can use a simple string instead of an object if all you need is node with the given text, the above data can be written as:_
|
||||||
|
|
||||||
|
```js
|
||||||
|
[ { "text" : "Root node", "children" : [ "Child node 1", "Child node 2" ] } ]
|
||||||
|
```
|
||||||
|
|
||||||
|
There are other available options for each node, only set them if you need them like:
|
||||||
|
|
||||||
|
* `id` - makes if possible to identify a node later (will also be used as a DOM ID of the `LI` node). _Make sure you do not repeat the same ID in a tree instance (that would defeat its purpose of being a unique identifier and may cause problems for jstree)_.
|
||||||
|
* `icon` - a string which will be used for the node's icon - this can either be a path to a file, or a className (or list of classNames), which you can style in your CSS (font icons also work).
|
||||||
|
* `data` - this can be anything you want - it is metadata you want attached to the node - you will be able to access and modify it any time later - it has no effect on the visuals of the node.
|
||||||
|
* `state` - an object specifyng a few options about the node:
|
||||||
|
- `selected` - if the node should be initially selected
|
||||||
|
- `opened` - if the node should be initially opened
|
||||||
|
- `disabled` - if the node should be disabled
|
||||||
|
- `checked` - __checkbox plugin specific__ - if the node should be checked (only used when `tie_selection` is `false`, which you should only do if you really know what you are doing)
|
||||||
|
- `undetermined` - __checkbox plugin specific__ - if the node should be rendered in undetermined state (only used with lazy loading and when the node is not yet loaded, otherwise this state is automatically calculated).
|
||||||
|
* `type` - __types plugin specific__ - the type of the nodes (should be defined in the types config), if not set `"default"` is assumed.
|
||||||
|
* `li_attr` - object of values which will be used to add HTML attributes on the resulting `LI` DOM node.
|
||||||
|
* `a_attr` - object of values which will be used to add HTML attributes on the resulting `A` node.
|
||||||
|
|
||||||
|
Here is a new demo with some of those properties set:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : [
|
||||||
|
{
|
||||||
|
"text" : "Root node",
|
||||||
|
"state" : {"opened" : true },
|
||||||
|
"children" : [
|
||||||
|
{
|
||||||
|
"text" : "Child node 1",
|
||||||
|
"state" : { "selected" : true },
|
||||||
|
"icon" : "glyphicon glyphicon-flash"
|
||||||
|
},
|
||||||
|
{ "text" : "Child node 2", "state" : { "disabled" : true } }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4479/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Populating the tree using AJAX
|
||||||
|
|
||||||
|
Building off of the previous example, let's see how to have jstree make AJAX requests for you.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : {
|
||||||
|
"url" : "//www.jstree.com/fiddle/",
|
||||||
|
"dataType" : "json" // needed only if you do not supply JSON headers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
The server response is:
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"id":1,"text":"Root node","children":[
|
||||||
|
{"id":2,"text":"Child node 1"},
|
||||||
|
{"id":3,"text":"Child node 2"}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4480/)
|
||||||
|
|
||||||
|
Instead of a JS array, you can set `core.data` to a [jQuery AJAX config](http://api.jquery.com/jQuery.ajax/).
|
||||||
|
jsTree will hit that URL, and provided you return properly formatted JSON it will be displayed.
|
||||||
|
|
||||||
|
_If you cannot provide proper JSON headers, set `core.data.dataType` to `"json"`._
|
||||||
|
|
||||||
|
The ids in the server response make it possible to identify nodes later (which we will see in the next few demos), but they are not required.
|
||||||
|
|
||||||
|
__WHEN USING IDS MAKE SURE THEY ARE UNIQUE INSIDE A PARTICULAR TREE__
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Populating the tree using AJAX and lazy loading nodes
|
||||||
|
|
||||||
|
Lazy loading means nodes will be loaded when they are needed. Imagine you have a huge amount of nodes you want to show, but loading them with a single request is way too much traffic. Lazy loading makes it possible to load nodes on the fly - jstree will perform AJAX requests as the user browses the tree.
|
||||||
|
|
||||||
|
Here we take our previous example, and lazy load the "Child node 1" node.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : {
|
||||||
|
"url" : "//www.jstree.com/fiddle/?lazy",
|
||||||
|
"data" : function (node) {
|
||||||
|
return { "id" : node.id };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
The initial server response is:
|
||||||
|
```json
|
||||||
|
[{
|
||||||
|
"id":1,"text":"Root node","children":[
|
||||||
|
{"id":2,"text":"Child node 1","children":true},
|
||||||
|
{"id":3,"text":"Child node 2"}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4481/)
|
||||||
|
|
||||||
|
Now to focus on what is different. First off the `"data"` config option of the data object. If you check with jQuery, it is supposed to be a string or an object. But jstree makes it possible to set a function.
|
||||||
|
|
||||||
|
Each time jstree needs to make an AJAX call this function will be called and will receive a single parameter - the node that is being loaded. The return value of this function will be used as the actual `"data"` of the AJAX call. To understand better open up the demo and see the requests go off in the console.
|
||||||
|
|
||||||
|
You will notice that the first request goes off to:
|
||||||
|
`http://www.jstree.com/fiddle?lazy&id=#`
|
||||||
|
`#` is the special ID that the function receives when jstree needs to load the root nodes.
|
||||||
|
|
||||||
|
Now go ahead and open the root node - two children will be shown, but no request will be made - that is because we loaded those children along with the first request.
|
||||||
|
|
||||||
|
Onto the next difference - "Child node 1" appears closed - that is because in the data we supplied `true` as the `"children"` property of this node (you can see it in the server response). This special value indicated to jstree, that it has to lazy load the "Child node 1" node.
|
||||||
|
|
||||||
|
Proceed and open this node - you will see a next request fire off to:
|
||||||
|
`http://www.jstree.com/fiddle?lazy&id=2`
|
||||||
|
ID is set to `2` because the node being loaded has an ID of `2`, and we have configured jstree to send the node ID along with the AJAX request (the `data` function).
|
||||||
|
|
||||||
|
The server response is:
|
||||||
|
```json
|
||||||
|
["Child node 3","Child node 4"]
|
||||||
|
```
|
||||||
|
|
||||||
|
_You can also set `"url"` to a function and it works exactly as with `"data"` - each time a request has to be made, jstree will invoke your function and the request will go off to whatever you return in this function. This is useful when dealing with URLs like: `http://example.com/get_children/1`._
|
||||||
|
|
||||||
|
### Populating the tree using a callback function
|
||||||
|
|
||||||
|
Sometimes you may not want jsTree to make AJAX calls for you - you might want to make them yourself, or use some other method of populating the tree. In that case you can use a callback function.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : function (node, cb) {
|
||||||
|
if(node.id === "#") {
|
||||||
|
cb([{"text" : "Root", "id" : "1", "children" : true}]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cb(["Child"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4482/)
|
||||||
|
|
||||||
|
As you can see your function will receive two arguments - the node whose children need to be loaded and a callback function to call with the data once you have it. The data follows the same familiar JSON format and lazy loading works just as with AJAX (as you can see in the above example).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Working with events
|
||||||
|
|
||||||
|
jstree provides a lot of events to let you know something happened with the tree. The events are the same regardless of how you populate the tree.
|
||||||
|
Let's use the most basic event `changed` - it fires when selection on the tree changes:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : [
|
||||||
|
{"id" : 1, "text" : "Node 1"},
|
||||||
|
{"id" : 2, "text" : "Node 2"},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#container').on("changed.jstree", function (e, data) {
|
||||||
|
console.log("The selected nodes are:");
|
||||||
|
console.log(data.selected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4483/)
|
||||||
|
|
||||||
|
All jstree events fire in a special `".jstree"` namespace - this is why we listen for `"changed.jstree"`. The handler itself receives one additional parameter - it will be populated with all you need to know about the event that happened. In this case `data.selected` is an array of selected node IDs (please note, that if you have not specified IDs they will be autogenerated).
|
||||||
|
|
||||||
|
Let's extend this a bit and log out the text of the node instead of the ID.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$('#container').on("changed.jstree", function (e, data) {
|
||||||
|
console.log(data.instance.get_selected(true)[0].text);
|
||||||
|
console.log(data.instance.get_node(data.selected[0]).text);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
The two rows above achieve exactly the same thing - get the text of the first selected node.
|
||||||
|
|
||||||
|
In the `data` argument object you will always get an `instance` key - that is a reference to the tree instance, so that you can easily invoke methods.
|
||||||
|
|
||||||
|
__All available functions and events are documented in the API docs__
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Interacting with the tree using the API
|
||||||
|
|
||||||
|
We scratched the surface on interacting with the tree in the previous example. Let's move on to obtaining an instance and calling a method on this instance:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<button>Select node 1</button>
|
||||||
|
<div id="container"></div>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
$('#container').jstree({
|
||||||
|
'core' : {
|
||||||
|
'data' : [
|
||||||
|
{"id" : 1, "text" : "Node 1"},
|
||||||
|
{"id" : 2, "text" : "Node 2"},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('button').on("click", function () {
|
||||||
|
var instance = $('#container').jstree(true);
|
||||||
|
instance.deselect_all();
|
||||||
|
instance.select_node('1');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4484/)
|
||||||
|
|
||||||
|
The above example shows how to obtain a reference to a jstree instance (again with a selector, but this time instead of a config, we pass a boolean `true`), and call a couple of methods - the latter one is selecting a node by its ID.
|
||||||
|
|
||||||
|
Methods can also be invoked like this:
|
||||||
|
|
||||||
|
```js
|
||||||
|
$('#container').jstree("select_node", "1");
|
||||||
|
```
|
||||||
|
|
||||||
|
__All available functions and events are documented in the API docs__
|
||||||
|
|
||||||
|
## More on configuration
|
||||||
|
|
||||||
|
We already covered the config object in general (when we specified inline & AJAX data sources).
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({ /* config object goes here */ });
|
||||||
|
```
|
||||||
|
|
||||||
|
Each key in the config object corresponds to a plugin, and the value of that key is the configuration for that plugin. There are also two special keys `"core"` and `"plugins"`:
|
||||||
|
* `"core"` stores the core configuration options
|
||||||
|
* `"plugins"` is an array of plugin names (strings) you want active on the instance
|
||||||
|
|
||||||
|
When configuring you only need to set values that you want to be different from the defaults.
|
||||||
|
|
||||||
|
__All config options and defaults are documented in the API docs__
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : { // core options go here
|
||||||
|
"multiple" : false, // no multiselection
|
||||||
|
"themes" : {
|
||||||
|
"dots" : false // no connecting dots between dots
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins" : ["state"] // activate the state plugin on this instance
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4485/)
|
||||||
|
|
||||||
|
We will cover all plugins further down.
|
||||||
|
|
||||||
|
__Keep in mind by default all modifications to the structure are prevented - that means drag'n'drop, create, rename, delete will not work unless you enable them.__
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : {
|
||||||
|
"check_callback" : true, // enable all modifications
|
||||||
|
},
|
||||||
|
"plugins" : ["dnd","contextmenu"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4486/)
|
||||||
|
|
||||||
|
`"core.check_callback"` can also be set to a function, that will be invoked every time a modification is about to happen (or when jstree needs to check if a modification is possible). If you return `true` the operation will be allowed, a value of `false` means it will not be allowed. The possible operation you can expect are `create_node`, `rename_node`, `delete_node`, `move_node` and `copy_node`. The `more` parameter will contain various information provided by the plugin that is invoking the check. For example the DND plugin will provide an object containing information about the move or copy operation that is being checked - is it a multi tree operation, which node is currently hovered, where the insert arrow is pointing - before, after or inside, etc.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : {
|
||||||
|
"check_callback" : function (operation, node, parent, position, more) {
|
||||||
|
if(operation === "copy_node" || operation === "move_node") {
|
||||||
|
if(parent.id === "#") {
|
||||||
|
return false; // prevent moving a child above or below the root
|
||||||
|
}
|
||||||
|
},
|
||||||
|
return true; // allow everything else
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins" : ["dnd","contextmenu"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4487/)
|
||||||
|
|
||||||
|
The `more` parameter you receive contains other information related to the check being performed.
|
||||||
|
|
||||||
|
__For example__: `move_node` & `copy_node` checks will fire repeatedly while the user drags a node, if the check was triggered by the `dnd` plugin `more` will contain a `dnd` key, which will be set to `true`.
|
||||||
|
You can check for `more.dnd` and only perform a certain action if `dnd` triggered the check.
|
||||||
|
If you only want to perform an operation when a node is really about to be dropped check for `more.core`.
|
||||||
|
|
||||||
|
## Plugins
|
||||||
|
|
||||||
|
jsTree comes with a few plugin bundled, but they will only modify your tree if you activate them using the `"plugins"` config option. Here is a brief description of each plugin. You can read more on the available config options for each plugin in the API docs.
|
||||||
|
|
||||||
|
### checkbox
|
||||||
|
Renders a checkbox icon in front of each node, making multiselection easy. It also has a "tri-state" option, meaning a node with some of its children checked will get a "square" icon.
|
||||||
|
|
||||||
|
_Keep in mind that if any sort of cascade is enabled, disabled nodes may be checked too (not by themselves, but for example when a parent of a disabled node is checked and selection is configured to cascade down)._
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"plugins" : ["checkbox"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4488/)
|
||||||
|
|
||||||
|
### contextmenu
|
||||||
|
Makes it possible to right click nodes and shows a list of configurable actions in a menu.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : { "check_callback" : true }, // so that modifying operations work
|
||||||
|
"plugins" : ["contextmenu"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4489/)
|
||||||
|
|
||||||
|
### dnd
|
||||||
|
Makes it possible to drag and drop tree nodes and rearrange the tree.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : { "check_callback" : true }, // so that operations work
|
||||||
|
"plugins" : ["dnd"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4490/)
|
||||||
|
|
||||||
|
### massload
|
||||||
|
Makes it possible to load multiple nodes in a single go (for a lazy loaded tree).
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"core" : {
|
||||||
|
"data" : { .. AJAX config .. }
|
||||||
|
},
|
||||||
|
"massload" : {
|
||||||
|
"url" : "/some/path",
|
||||||
|
"data" : function (nodes) {
|
||||||
|
return { "ids" : nodes.join(",") };
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins" : [ "massload", "state" ]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### search
|
||||||
|
Adds the possibility to search for items in the tree and show only matching nodes. It also has AJAX / callback hooks, so that search will work on lazy loaded trees too.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<form id="s">
|
||||||
|
<input type="search" id="q" />
|
||||||
|
<button type="submit">Search</button>
|
||||||
|
</form>
|
||||||
|
<script>
|
||||||
|
$("#container").jstree({
|
||||||
|
"plugins" : ["search"]
|
||||||
|
});
|
||||||
|
$("#s").submit(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$("#container").jstree(true).search($("#q").val());
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4491/)
|
||||||
|
|
||||||
|
### sort
|
||||||
|
Automatically arranges all sibling nodes according to a comparison config option function, which defaults to alphabetical order.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"plugins" : ["sort"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4492/)
|
||||||
|
|
||||||
|
### state
|
||||||
|
Saves all opened and selected nodes in the user's browser, so when returning to the same tree the previous state will be restored.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
// the key is important if you have multiple trees in the same domain
|
||||||
|
"state" : { "key" : "state_demo" },
|
||||||
|
"plugins" : ["state"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4493/)
|
||||||
|
|
||||||
|
### types
|
||||||
|
Makes it possible to add a "type" for a node, which means to easily control nesting rules and icon for groups of nodes instead of individually. To set a node type add a type property to the node structure.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"types" : {
|
||||||
|
"default" : {
|
||||||
|
"icon" : "glyphicon glyphicon-flash"
|
||||||
|
},
|
||||||
|
"demo" : {
|
||||||
|
"icon" : "glyphicon glyphicon-ok"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins" : ["types"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4494/)
|
||||||
|
|
||||||
|
### unique
|
||||||
|
Enforces that no nodes with the same name can coexist as siblings - prevents renaming and moving nodes to a parent, which already contains a node with the same name.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"plugins" : ["unique"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4495/)
|
||||||
|
|
||||||
|
### wholerow
|
||||||
|
Makes each node appear block level which makes selection easier. May cause slow down for large trees in old browsers.
|
||||||
|
|
||||||
|
```js
|
||||||
|
$("#tree").jstree({
|
||||||
|
"plugins" : ["wholerow"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4496/)
|
||||||
|
|
||||||
|
### More plugins
|
||||||
|
If you create your own plugin (or download a 3rd party one) you must include its source on the page and list its name in the `"plugins"` config array.
|
||||||
|
|
||||||
|
```js
|
||||||
|
// conditional select
|
||||||
|
(function ($, undefined) {
|
||||||
|
"use strict";
|
||||||
|
$.jstree.defaults.conditionalselect = function () { return true; };
|
||||||
|
$.jstree.plugins.conditionalselect = function (options, parent) {
|
||||||
|
this.activate_node = function (obj, e) {
|
||||||
|
if(this.settings.conditionalselect.call(this, this.get_node(obj))) {
|
||||||
|
parent.activate_node.call(this, obj, e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})(jQuery);
|
||||||
|
$("#tree").jstree({
|
||||||
|
"conditionalselect" : function (node) {
|
||||||
|
return node.text === "Root node" ? false : true;
|
||||||
|
},
|
||||||
|
"plugins" : ["conditionalselect"]
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
[view result](http://jsfiddle.net/vakata/2kwkh2uL/4497/)
|
||||||
|
|
||||||
|
As seen here when creating a plugin you can define a default config, add your own functions to jstree, or override existing ones while maintaining the ability to call the overridden function.
|
||||||
|
|
||||||
|
## PHP demos moved to new repository
|
||||||
|
https://github.com/vakata/jstree-php-demos
|
||||||
|
|
||||||
|
## License & Contributing
|
||||||
|
|
||||||
|
_Please do NOT edit files in the "dist" subdirectory as they are generated via grunt. You'll find source code in the "src" subdirectory!_
|
||||||
|
|
||||||
|
If you want to you can always [donate a small amount][paypal] to help the development of jstree.
|
||||||
|
|
||||||
|
[paypal]: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=paypal@vakata.com¤cy_code=USD&amount=&return=http://jstree.com/donation&item_name=Buy+me+a+coffee+for+jsTree
|
||||||
|
|
||||||
|
Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)
|
||||||
|
|
||||||
|
Licensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
|
||||||
8612
libs/jstree/jstree.js
Normal file
6
libs/jstree/jstree.min.js
vendored
Normal file
BIN
libs/jstree/themes/mixed/32px.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
libs/jstree/themes/mixed/40px.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
1108
libs/jstree/themes/mixed/style.css
Normal file
1
libs/jstree/themes/mixed/style.min.css
vendored
Normal file
BIN
libs/jstree/themes/mixed/throbber.gif
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
4
libs/openlayers3/LICENSE
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
http://openlayers.org/
|
||||||
|
|
||||||
|
Code licensed under the 2-Clause BSD. All documentation CC BY 3.0. Thanks to our sponsors.
|
||||||
|
https://tldrlegal.com/license/bsd-2-clause-license-(freebsd)
|
||||||
1716
libs/openlayers3/ol-deps.js
Normal file
1
libs/openlayers3/ol.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:#95b9e6;background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:#eee;background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:#7b98bc;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:#4c6079;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
|
||||||
1017
libs/openlayers3/ol.js
Normal file
124
libs/other/BinaryHeap.js
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
** Binary Heap implementation in Javascript
|
||||||
|
** From: http://eloquentjavascript.net/1st_edition/appendix2.html
|
||||||
|
**
|
||||||
|
** Copyright (c) 2007 Marijn Haverbeke, last modified on November 28 2013.
|
||||||
|
**
|
||||||
|
** Licensed under a Creative Commons attribution-noncommercial license.
|
||||||
|
** All code in this book may also be considered licensed under an MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function BinaryHeap(scoreFunction){
|
||||||
|
this.content = [];
|
||||||
|
this.scoreFunction = scoreFunction;
|
||||||
|
}
|
||||||
|
|
||||||
|
BinaryHeap.prototype = {
|
||||||
|
push: function(element) {
|
||||||
|
// Add the new element to the end of the array.
|
||||||
|
this.content.push(element);
|
||||||
|
// Allow it to bubble up.
|
||||||
|
this.bubbleUp(this.content.length - 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
pop: function() {
|
||||||
|
// Store the first element so we can return it later.
|
||||||
|
var result = this.content[0];
|
||||||
|
// Get the element at the end of the array.
|
||||||
|
var end = this.content.pop();
|
||||||
|
// If there are any elements left, put the end element at the
|
||||||
|
// start, and let it sink down.
|
||||||
|
if (this.content.length > 0) {
|
||||||
|
this.content[0] = end;
|
||||||
|
this.sinkDown(0);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
remove: function(node) {
|
||||||
|
var length = this.content.length;
|
||||||
|
// To remove a value, we must search through the array to find
|
||||||
|
// it.
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
if (this.content[i] != node) continue;
|
||||||
|
// When it is found, the process seen in 'pop' is repeated
|
||||||
|
// to fill up the hole.
|
||||||
|
var end = this.content.pop();
|
||||||
|
// If the element we popped was the one we needed to remove,
|
||||||
|
// we're done.
|
||||||
|
if (i == length - 1) break;
|
||||||
|
// Otherwise, we replace the removed element with the popped
|
||||||
|
// one, and allow it to float up or sink down as appropriate.
|
||||||
|
this.content[i] = end;
|
||||||
|
this.bubbleUp(i);
|
||||||
|
this.sinkDown(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
size: function() {
|
||||||
|
return this.content.length;
|
||||||
|
},
|
||||||
|
|
||||||
|
bubbleUp: function(n) {
|
||||||
|
// Fetch the element that has to be moved.
|
||||||
|
var element = this.content[n], score = this.scoreFunction(element);
|
||||||
|
// When at 0, an element can not go up any further.
|
||||||
|
while (n > 0) {
|
||||||
|
// Compute the parent element's index, and fetch it.
|
||||||
|
var parentN = Math.floor((n + 1) / 2) - 1,
|
||||||
|
parent = this.content[parentN];
|
||||||
|
// If the parent has a lesser score, things are in order and we
|
||||||
|
// are done.
|
||||||
|
if (score >= this.scoreFunction(parent))
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Otherwise, swap the parent with the current element and
|
||||||
|
// continue.
|
||||||
|
this.content[parentN] = element;
|
||||||
|
this.content[n] = parent;
|
||||||
|
n = parentN;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
sinkDown: function(n) {
|
||||||
|
// Look up the target element and its score.
|
||||||
|
var length = this.content.length,
|
||||||
|
element = this.content[n],
|
||||||
|
elemScore = this.scoreFunction(element);
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
// Compute the indices of the child elements.
|
||||||
|
var child2N = (n + 1) * 2, child1N = child2N - 1;
|
||||||
|
// This is used to store the new position of the element,
|
||||||
|
// if any.
|
||||||
|
var swap = null;
|
||||||
|
// If the first child exists (is inside the array)...
|
||||||
|
if (child1N < length) {
|
||||||
|
// Look it up and compute its score.
|
||||||
|
var child1 = this.content[child1N],
|
||||||
|
child1Score = this.scoreFunction(child1);
|
||||||
|
// If the score is less than our element's, we need to swap.
|
||||||
|
if (child1Score < elemScore)
|
||||||
|
swap = child1N;
|
||||||
|
}
|
||||||
|
// Do the same checks for the other child.
|
||||||
|
if (child2N < length) {
|
||||||
|
var child2 = this.content[child2N],
|
||||||
|
child2Score = this.scoreFunction(child2);
|
||||||
|
if (child2Score < (swap == null ? elemScore : child1Score))
|
||||||
|
swap = child2N;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No need to swap further, we are done.
|
||||||
|
if (swap == null) break;
|
||||||
|
|
||||||
|
// Otherwise, swap and continue.
|
||||||
|
this.content[n] = this.content[swap];
|
||||||
|
this.content[swap] = element;
|
||||||
|
n = swap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
91
libs/other/dat.gui.min.js
vendored
Normal file
200
libs/other/stats.js
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
// stats.js -
|
||||||
|
// @author mrdoob http://github.com/mrdoob/stats.js
|
||||||
|
|
||||||
|
// The MIT License
|
||||||
|
//
|
||||||
|
// Copyright (c) 2009-2016 stats.js author mrdoob / http://mrdoob.com/
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Stats = function () {
|
||||||
|
|
||||||
|
this.fps = 0;
|
||||||
|
var mode = 0;
|
||||||
|
|
||||||
|
var container = document.createElement( 'div' );
|
||||||
|
container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
|
||||||
|
container.addEventListener( 'click', function ( event ) {
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
showPanel( ++ mode % container.children.length );
|
||||||
|
|
||||||
|
}, false );
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
function addPanel( panel ) {
|
||||||
|
|
||||||
|
container.appendChild( panel.dom );
|
||||||
|
return panel;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function showPanel( id ) {
|
||||||
|
|
||||||
|
for ( var i = 0; i < container.children.length; i ++ ) {
|
||||||
|
|
||||||
|
container.children[ i ].style.display = i === id ? 'block' : 'none';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
mode = id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
var beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;
|
||||||
|
|
||||||
|
var fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );
|
||||||
|
var msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );
|
||||||
|
|
||||||
|
if ( self.performance && self.performance.memory ) {
|
||||||
|
|
||||||
|
var memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
showPanel( 0 );
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
REVISION: 16,
|
||||||
|
|
||||||
|
dom: container,
|
||||||
|
|
||||||
|
addPanel: addPanel,
|
||||||
|
showPanel: showPanel,
|
||||||
|
|
||||||
|
begin: function () {
|
||||||
|
|
||||||
|
beginTime = ( performance || Date ).now();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
end: function () {
|
||||||
|
|
||||||
|
frames ++;
|
||||||
|
|
||||||
|
var time = ( performance || Date ).now();
|
||||||
|
|
||||||
|
msPanel.update( time - beginTime, 200 );
|
||||||
|
|
||||||
|
if ( time > prevTime + 3000 ) {
|
||||||
|
|
||||||
|
this.fps = ( frames * 1000 ) / ( time - prevTime );
|
||||||
|
fpsPanel.update( this.fps, 100 );
|
||||||
|
|
||||||
|
|
||||||
|
prevTime = time;
|
||||||
|
frames = 0;
|
||||||
|
|
||||||
|
if ( memPanel ) {
|
||||||
|
|
||||||
|
var memory = performance.memory;
|
||||||
|
memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return time;
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
update: function () {
|
||||||
|
|
||||||
|
beginTime = this.end();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
// Backwards Compatibility
|
||||||
|
|
||||||
|
domElement: container,
|
||||||
|
setMode: showPanel
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Stats.Panel = function ( name, fg, bg ) {
|
||||||
|
|
||||||
|
var min = Infinity, max = 0, round = Math.round;
|
||||||
|
var PR = round( window.devicePixelRatio || 1 );
|
||||||
|
|
||||||
|
var WIDTH = 80 * PR, HEIGHT = 48 * PR,
|
||||||
|
TEXT_X = 3 * PR, TEXT_Y = 2 * PR,
|
||||||
|
GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,
|
||||||
|
GRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;
|
||||||
|
|
||||||
|
var canvas = document.createElement( 'canvas' );
|
||||||
|
canvas.width = WIDTH;
|
||||||
|
canvas.height = HEIGHT;
|
||||||
|
canvas.style.cssText = 'width:80px;height:48px';
|
||||||
|
|
||||||
|
var context = canvas.getContext( '2d' );
|
||||||
|
context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';
|
||||||
|
context.textBaseline = 'top';
|
||||||
|
|
||||||
|
context.fillStyle = bg;
|
||||||
|
context.fillRect( 0, 0, WIDTH, HEIGHT );
|
||||||
|
|
||||||
|
context.fillStyle = fg;
|
||||||
|
context.fillText( name, TEXT_X, TEXT_Y );
|
||||||
|
context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
||||||
|
|
||||||
|
context.fillStyle = bg;
|
||||||
|
context.globalAlpha = 0.9;
|
||||||
|
context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
dom: canvas,
|
||||||
|
|
||||||
|
update: function ( value, maxValue ) {
|
||||||
|
|
||||||
|
min = Math.min( min, value );
|
||||||
|
max = Math.max( max, value );
|
||||||
|
|
||||||
|
context.fillStyle = bg;
|
||||||
|
context.globalAlpha = 1;
|
||||||
|
context.fillRect( 0, 0, WIDTH, GRAPH_Y );
|
||||||
|
context.fillStyle = fg;
|
||||||
|
context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );
|
||||||
|
|
||||||
|
context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );
|
||||||
|
|
||||||
|
context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );
|
||||||
|
|
||||||
|
context.fillStyle = bg;
|
||||||
|
context.globalAlpha = 0.9;
|
||||||
|
context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if ( typeof module === 'object' ) {
|
||||||
|
|
||||||
|
module.exports = Stats;
|
||||||
|
|
||||||
|
}
|
||||||
5
libs/other/stats.min.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
// stats.js - http://github.com/mrdoob/stats.js
|
||||||
|
var Stats=function(){function h(a){c.appendChild(a.dom);return a}function k(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?"block":"none";l=a}var l=0,c=document.createElement("div");c.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";c.addEventListener("click",function(a){a.preventDefault();k(++l%c.children.length)},!1);var g=(performance||Date).now(),e=g,a=0,r=h(new Stats.Panel("FPS","#0ff","#002")),f=h(new Stats.Panel("MS","#0f0","#020"));
|
||||||
|
if(self.performance&&self.performance.memory)var t=h(new Stats.Panel("MB","#f08","#201"));k(0);return{REVISION:16,dom:c,addPanel:h,showPanel:k,begin:function(){g=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();f.update(c-g,200);if(c>e+1E3&&(r.update(1E3*a/(c-e),100),e=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){g=this.end()},domElement:c,setMode:k}};
|
||||||
|
Stats.Panel=function(h,k,l){var c=Infinity,g=0,e=Math.round,a=e(window.devicePixelRatio||1),r=80*a,f=48*a,t=3*a,u=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=f;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,f);b.fillStyle=k;b.fillText(h,t,u);b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(f,
|
||||||
|
v){c=Math.min(c,f);g=Math.max(g,f);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=k;b.fillText(e(f)+" "+h+" ("+e(c)+"-"+e(g)+")",t,u);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,e((1-f/v)*p))}}};"object"===typeof module&&(module.exports=Stats);
|
||||||
21
libs/plasio/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Uday Verma, uday.karan@gmail.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
398
libs/plasio/js/laslaz.js
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
// laslaz.js
|
||||||
|
// LAS/LAZ loading
|
||||||
|
//
|
||||||
|
|
||||||
|
//var common = require("./common"),
|
||||||
|
// Promise = require("bluebird");
|
||||||
|
|
||||||
|
(function(scope) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var pointFormatReaders = {
|
||||||
|
0: function(dv) {
|
||||||
|
return {
|
||||||
|
"position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
||||||
|
"intensity": dv.getUint16(12, true),
|
||||||
|
"classification": dv.getUint8(16, true)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
1: function(dv) {
|
||||||
|
return {
|
||||||
|
"position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
||||||
|
"intensity": dv.getUint16(12, true),
|
||||||
|
"classification": dv.getUint8(16, true)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
2: function(dv) {
|
||||||
|
return {
|
||||||
|
"position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
||||||
|
"intensity": dv.getUint16(12, true),
|
||||||
|
"classification": dv.getUint8(16, true),
|
||||||
|
"color": [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
3: function(dv) {
|
||||||
|
return {
|
||||||
|
"position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],
|
||||||
|
"intensity": dv.getUint16(12, true),
|
||||||
|
"classification": dv.getUint8(16, true),
|
||||||
|
"color": [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function readAs(buf, Type, offset, count) {
|
||||||
|
count = (count === undefined || count === 0 ? 1 : count);
|
||||||
|
var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
|
||||||
|
|
||||||
|
var r = new Type(sub);
|
||||||
|
if (count === undefined || count === 1)
|
||||||
|
return r[0];
|
||||||
|
|
||||||
|
var ret = [];
|
||||||
|
for (var i = 0 ; i < count ; i ++) {
|
||||||
|
ret.push(r[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLASHeader(arraybuffer) {
|
||||||
|
var o = {};
|
||||||
|
|
||||||
|
o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3);
|
||||||
|
o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8);
|
||||||
|
o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1);
|
||||||
|
o.pointsCount = readAs(arraybuffer, Uint32Array, 32*3 + 11);
|
||||||
|
|
||||||
|
|
||||||
|
var start = 32*3 + 35;
|
||||||
|
o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; // 8*3
|
||||||
|
o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; // 8*6;
|
||||||
|
o.maxs = [bounds[0], bounds[2], bounds[4]];
|
||||||
|
o.mins = [bounds[1], bounds[3], bounds[5]];
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
var msgIndex = 0;
|
||||||
|
var waitHandlers = {};
|
||||||
|
|
||||||
|
// This method is scope-wide since the nacl module uses this fuction to notify
|
||||||
|
// us of events
|
||||||
|
scope.handleMessage = function(message_event) {
|
||||||
|
var msg = message_event.data;
|
||||||
|
var resolver = waitHandlers[msg.id];
|
||||||
|
delete waitHandlers[msg.id];
|
||||||
|
|
||||||
|
// call the callback in a separate context, make sure we've cleaned our
|
||||||
|
// state out before the callback is invoked since it may queue more doExchanges
|
||||||
|
setTimeout(function() {
|
||||||
|
if (msg.error)
|
||||||
|
return resolver.reject(new Error(msg.message || "Unknown Error"));
|
||||||
|
|
||||||
|
if (msg.hasOwnProperty('count') && msg.hasOwnProperty('hasMoreData')) {
|
||||||
|
return resolver.resolve({
|
||||||
|
buffer: msg.result,
|
||||||
|
count: msg.count,
|
||||||
|
hasMoreData: msg.hasMoreData});
|
||||||
|
}
|
||||||
|
|
||||||
|
resolver.resolve(msg.result);
|
||||||
|
}, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
var doDataExchange = function(cmd, callback) {
|
||||||
|
cmd.id = msgIndex.toString();
|
||||||
|
msgIndex ++;
|
||||||
|
|
||||||
|
var resolver = Promise.defer();
|
||||||
|
waitHandlers[cmd.id] = resolver;
|
||||||
|
|
||||||
|
nacl_module.postMessage(cmd);
|
||||||
|
|
||||||
|
return resolver.promise.cancellable();
|
||||||
|
};
|
||||||
|
|
||||||
|
// LAS Loader
|
||||||
|
// Loads uncompressed files
|
||||||
|
//
|
||||||
|
var LASLoader = function(arraybuffer) {
|
||||||
|
this.arraybuffer = arraybuffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
LASLoader.prototype.open = function() {
|
||||||
|
// nothing needs to be done to open this file
|
||||||
|
//
|
||||||
|
this.readOffset = 0;
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
setTimeout(res, 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LASLoader.prototype.getHeader = function() {
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
setTimeout(function() {
|
||||||
|
o.header = parseLASHeader(o.arraybuffer);
|
||||||
|
res(o.header);
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LASLoader.prototype.readData = function(count, offset, skip) {
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
setTimeout(function() {
|
||||||
|
if (!o.header)
|
||||||
|
return rej(new Error("Cannot start reading data till a header request is issued"));
|
||||||
|
|
||||||
|
var start;
|
||||||
|
if (skip <= 1) {
|
||||||
|
count = Math.min(count, o.header.pointsCount - o.readOffset);
|
||||||
|
start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize;
|
||||||
|
var end = start + count * o.header.pointsStructSize;
|
||||||
|
res({
|
||||||
|
buffer: o.arraybuffer.slice(start, end),
|
||||||
|
count: count,
|
||||||
|
hasMoreData: o.readOffset + count < o.header.pointsCount});
|
||||||
|
o.readOffset += count;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var pointsToRead = Math.min(count * skip, o.header.pointsCount - o.readOffset);
|
||||||
|
var bufferSize = Math.ceil(pointsToRead / skip);
|
||||||
|
var pointsRead = 0;
|
||||||
|
|
||||||
|
var buf = new Uint8Array(bufferSize * o.header.pointsStructSize);
|
||||||
|
for (var i = 0 ; i < pointsToRead ; i ++) {
|
||||||
|
if (i % skip === 0) {
|
||||||
|
start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize;
|
||||||
|
var src = new Uint8Array(o.arraybuffer, start, o.header.pointsStructSize);
|
||||||
|
|
||||||
|
buf.set(src, pointsRead * o.header.pointsStructSize);
|
||||||
|
pointsRead ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
o.readOffset ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
res({
|
||||||
|
buffer: buf.buffer,
|
||||||
|
count: pointsRead,
|
||||||
|
hasMoreData: o.readOffset < o.header.pointsCount
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LASLoader.prototype.close = function() {
|
||||||
|
var o = this;
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
o.arraybuffer = null;
|
||||||
|
setTimeout(res, 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// LAZ Loader
|
||||||
|
// Uses NaCL module to load LAZ files
|
||||||
|
//
|
||||||
|
var LAZLoader = function(arraybuffer) {
|
||||||
|
this.arraybuffer = arraybuffer;
|
||||||
|
|
||||||
|
let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js";
|
||||||
|
this.ww = Potree.workerPool.getWorker(workerPath);
|
||||||
|
|
||||||
|
this.nextCB = null;
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
this.ww.onmessage = function(e) {
|
||||||
|
if (o.nextCB !== null) {
|
||||||
|
o.nextCB(e.data);
|
||||||
|
o.nextCB = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.dorr = function(req, cb) {
|
||||||
|
o.nextCB = cb;
|
||||||
|
o.ww.postMessage(req);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
LAZLoader.prototype.open = function() {
|
||||||
|
|
||||||
|
// nothing needs to be done to open this file
|
||||||
|
//
|
||||||
|
var o = this;
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
o.dorr({type:"open", arraybuffer: o.arraybuffer}, function(r) {
|
||||||
|
if (r.status !== 1)
|
||||||
|
return rej(new Error("Failed to open file"));
|
||||||
|
|
||||||
|
res(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LAZLoader.prototype.getHeader = function() {
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
o.dorr({type:'header'}, function(r) {
|
||||||
|
if (r.status !== 1)
|
||||||
|
return rej(new Error("Failed to get header"));
|
||||||
|
|
||||||
|
res(r.header);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LAZLoader.prototype.readData = function(count, offset, skip) {
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
o.dorr({type:'read', count: count, offset: offset, skip: skip}, function(r) {
|
||||||
|
if (r.status !== 1)
|
||||||
|
return rej(new Error("Failed to read data"));
|
||||||
|
res({
|
||||||
|
buffer: r.buffer,
|
||||||
|
count: r.count,
|
||||||
|
hasMoreData: r.hasMoreData
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
LAZLoader.prototype.close = function() {
|
||||||
|
var o = this;
|
||||||
|
|
||||||
|
return new Promise(function(res, rej) {
|
||||||
|
o.dorr({type:'close'}, function(r) {
|
||||||
|
let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js";
|
||||||
|
Potree.workerPool.returnWorker(workerPath, o.ww);
|
||||||
|
|
||||||
|
if (r.status !== 1)
|
||||||
|
return rej(new Error("Failed to close file"));
|
||||||
|
|
||||||
|
res(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// A single consistent interface for loading LAS/LAZ files
|
||||||
|
var LASFile = function(arraybuffer) {
|
||||||
|
this.arraybuffer = arraybuffer;
|
||||||
|
|
||||||
|
this.determineVersion();
|
||||||
|
if (this.version > 12)
|
||||||
|
throw new Error("Only file versions <= 1.2 are supported at this time");
|
||||||
|
|
||||||
|
this.determineFormat();
|
||||||
|
if (pointFormatReaders[this.formatId] === undefined)
|
||||||
|
throw new Error("The point format ID is not supported");
|
||||||
|
|
||||||
|
this.loader = this.isCompressed ?
|
||||||
|
new LAZLoader(this.arraybuffer) :
|
||||||
|
new LASLoader(this.arraybuffer);
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.determineFormat = function() {
|
||||||
|
var formatId = readAs(this.arraybuffer, Uint8Array, 32*3+8);
|
||||||
|
var bit_7 = (formatId & 0x80) >> 7;
|
||||||
|
var bit_6 = (formatId & 0x40) >> 6;
|
||||||
|
|
||||||
|
if (bit_7 === 1 && bit_6 === 1)
|
||||||
|
throw new Error("Old style compression not supported");
|
||||||
|
|
||||||
|
this.formatId = formatId & 0x3f;
|
||||||
|
this.isCompressed = (bit_7 === 1 || bit_6 === 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.determineVersion = function() {
|
||||||
|
var ver = new Int8Array(this.arraybuffer, 24, 2);
|
||||||
|
this.version = ver[0] * 10 + ver[1];
|
||||||
|
this.versionAsString = ver[0] + "." + ver[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.open = function() {
|
||||||
|
return this.loader.open();
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.getHeader = function() {
|
||||||
|
return this.loader.getHeader();
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.readData = function(count, start, skip) {
|
||||||
|
return this.loader.readData(count, start, skip);
|
||||||
|
};
|
||||||
|
|
||||||
|
LASFile.prototype.close = function() {
|
||||||
|
return this.loader.close();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Decodes LAS records into points
|
||||||
|
//
|
||||||
|
var LASDecoder = function(buffer, pointFormatID, pointSize, pointsCount, scale, offset, mins, maxs) {
|
||||||
|
this.arrayb = buffer;
|
||||||
|
this.decoder = pointFormatReaders[pointFormatID];
|
||||||
|
this.pointsCount = pointsCount;
|
||||||
|
this.pointSize = pointSize;
|
||||||
|
this.scale = scale;
|
||||||
|
this.offset = offset;
|
||||||
|
this.mins = mins;
|
||||||
|
this.maxs = maxs;
|
||||||
|
};
|
||||||
|
|
||||||
|
LASDecoder.prototype.getPoint = function(index) {
|
||||||
|
if (index < 0 || index >= this.pointsCount)
|
||||||
|
throw new Error("Point index out of range");
|
||||||
|
|
||||||
|
var dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);
|
||||||
|
return this.decoder(dv);
|
||||||
|
};
|
||||||
|
|
||||||
|
// NACL Module support
|
||||||
|
// Called by the common.js module.
|
||||||
|
//
|
||||||
|
//window.startNaCl = function(name, tc, config, width, height) {
|
||||||
|
// // check browser support for nacl
|
||||||
|
// //
|
||||||
|
// if(!common.browserSupportsNaCl()) {
|
||||||
|
// return $.event.trigger({
|
||||||
|
// type: "plasio.nacl.error",
|
||||||
|
// message: "NaCl support is not available"
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// navigator.webkitPersistentStorage.requestQuota(2048 * 2048, function(bytes) {
|
||||||
|
// common.updateStatus(
|
||||||
|
// 'Allocated ' + bytes + ' bytes of persistant storage.');
|
||||||
|
// common.attachDefaultListeners();
|
||||||
|
// common.createNaClModule(name, tc, config, width, height);
|
||||||
|
// },
|
||||||
|
// function(e) {
|
||||||
|
// $.event.trigger({
|
||||||
|
// type: "plasio.nacl.error",
|
||||||
|
// message: "Could not allocate persistant storage"
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// $(document).on("plasio.nacl.available", function() {
|
||||||
|
// scope.LASModuleWasLoaded = true;
|
||||||
|
// });
|
||||||
|
//};
|
||||||
|
|
||||||
|
scope.LAZLoader = LAZLoader;
|
||||||
|
scope.LASLoader = LASLoader;
|
||||||
|
scope.LASFile = LASFile;
|
||||||
|
scope.LASDecoder = LASDecoder;
|
||||||
|
scope.LASModuleWasLoaded = false;
|
||||||
|
//})(module.exports);
|
||||||
|
})(this);
|
||||||
|
|
||||||
5140
libs/plasio/vendor/bluebird.js
vendored
Normal file
165
libs/plasio/workers/laz-loader-worker.js
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
// laz-loader-worker.js
|
||||||
|
//
|
||||||
|
|
||||||
|
//import {Module} from "./laz-perf.js";
|
||||||
|
|
||||||
|
let instance = null; // laz-perf instance
|
||||||
|
|
||||||
|
function readAs(buf, Type, offset, count) {
|
||||||
|
count = (count === undefined || count === 0 ? 1 : count);
|
||||||
|
var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);
|
||||||
|
|
||||||
|
var r = new Type(sub);
|
||||||
|
if (count === undefined || count === 1)
|
||||||
|
return r[0];
|
||||||
|
|
||||||
|
var ret = [];
|
||||||
|
for (var i = 0 ; i < count ; i ++) {
|
||||||
|
ret.push(r[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLASHeader(arraybuffer) {
|
||||||
|
var o = { };
|
||||||
|
|
||||||
|
o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3);
|
||||||
|
o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8) & 0b111111;
|
||||||
|
o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1);
|
||||||
|
|
||||||
|
o.extraBytes = 0;
|
||||||
|
|
||||||
|
switch (o.pointsFormatId) {
|
||||||
|
case 0: o.extraBytes = o.pointsStructSize - 20; break;
|
||||||
|
case 1: o.extraBytes = o.pointsStructSize - 28; break;
|
||||||
|
case 2: o.extraBytes = o.pointsStructSize - 26; break;
|
||||||
|
case 3: o.extraBytes = o.pointsStructSize - 34; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
o.pointsCount = readAs(arraybuffer, Uint32Array, 32 * 3 + 11);
|
||||||
|
|
||||||
|
var start = 32 * 3 + 35;
|
||||||
|
o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24;
|
||||||
|
o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24;
|
||||||
|
|
||||||
|
var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48;
|
||||||
|
o.maxs = [bounds[0], bounds[2], bounds[4]];
|
||||||
|
o.mins = [bounds[1], bounds[3], bounds[5]];
|
||||||
|
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleEvent(msg) {
|
||||||
|
switch(msg.type) {
|
||||||
|
case "open":
|
||||||
|
try {
|
||||||
|
instance = new Module.LASZip();
|
||||||
|
var abInt = new Uint8Array(msg.arraybuffer);
|
||||||
|
var buf = Module._malloc(msg.arraybuffer.byteLength);
|
||||||
|
|
||||||
|
instance.arraybuffer = msg.arraybuffer;
|
||||||
|
instance.buf = buf;
|
||||||
|
Module.HEAPU8.set(abInt, buf);
|
||||||
|
instance.open(buf, msg.arraybuffer.byteLength);
|
||||||
|
|
||||||
|
instance.readOffset = 0;
|
||||||
|
|
||||||
|
postMessage({ type: "open", status: 1});
|
||||||
|
}catch(e) {
|
||||||
|
debugger;
|
||||||
|
postMessage({ type: "open", status: 0, details: e });
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "header":
|
||||||
|
if (!instance)
|
||||||
|
throw new Error(
|
||||||
|
"You need to open the file before reading the header");
|
||||||
|
|
||||||
|
var header = parseLASHeader(instance.arraybuffer);
|
||||||
|
header.pointsFormatId &= 0x3f;
|
||||||
|
instance.header = header;
|
||||||
|
postMessage({type: "header", status: 1, header: header});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "read":
|
||||||
|
if (!instance)
|
||||||
|
throw new Error(
|
||||||
|
"You need to open the file before trying to read");
|
||||||
|
|
||||||
|
var start = msg.start, count = msg.count, skip = msg.skip;
|
||||||
|
var o = instance;
|
||||||
|
|
||||||
|
if (!o.header)
|
||||||
|
throw new Error(
|
||||||
|
"You need to query header before reading");
|
||||||
|
|
||||||
|
let h = o.header;
|
||||||
|
|
||||||
|
var pointsToRead = Math.min(
|
||||||
|
count * skip, h.pointsCount - o.readOffset);
|
||||||
|
var bufferSize = Math.ceil(pointsToRead / skip);
|
||||||
|
var pointsRead = 0;
|
||||||
|
|
||||||
|
let buffer = new ArrayBuffer(bufferSize * h.pointsStructSize);
|
||||||
|
let this_buf = new Uint8Array(buffer);
|
||||||
|
var buf_read = Module._malloc(h.pointsStructSize);
|
||||||
|
|
||||||
|
for (var i = 0 ; i < pointsToRead ; i ++) {
|
||||||
|
o.getPoint(buf_read);
|
||||||
|
|
||||||
|
if (i % skip === 0) {
|
||||||
|
var a = new Uint8Array(
|
||||||
|
Module.HEAPU8.buffer,
|
||||||
|
buf_read,
|
||||||
|
h.pointsStructSize);
|
||||||
|
|
||||||
|
this_buf.set(
|
||||||
|
a,
|
||||||
|
pointsRead * h.pointsStructSize,
|
||||||
|
h.pointsStructSize);
|
||||||
|
|
||||||
|
++pointsRead;
|
||||||
|
}
|
||||||
|
|
||||||
|
++o.readOffset;
|
||||||
|
}
|
||||||
|
Module._free(buf_read);
|
||||||
|
|
||||||
|
let transferables = [buffer];
|
||||||
|
|
||||||
|
postMessage({
|
||||||
|
type: 'header',
|
||||||
|
status: 1,
|
||||||
|
buffer: buffer,
|
||||||
|
count: pointsRead,
|
||||||
|
hasMoreData: o.readOffset < o.header.pointsCount
|
||||||
|
}, transferables);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "close":
|
||||||
|
if (instance !== null) {
|
||||||
|
Module._free(instance.buf);
|
||||||
|
instance.delete();
|
||||||
|
instance = null;
|
||||||
|
}else{
|
||||||
|
debugger;
|
||||||
|
}
|
||||||
|
|
||||||
|
postMessage({ type: "close", status: 1});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onmessage = function(event) {
|
||||||
|
try {
|
||||||
|
handleEvent(event.data);
|
||||||
|
} catch(e) {
|
||||||
|
debugger;
|
||||||
|
postMessage({type: event.data.type, status: 0, details: e});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
49590
libs/plasio/workers/laz-perf.js
Normal file
33
libs/potree/LICENSE
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
============
|
||||||
|
== POTREE ==
|
||||||
|
============
|
||||||
|
|
||||||
|
http://potree.org
|
||||||
|
|
||||||
|
Copyright (c) 2011-2020, Markus Schütz
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
The views and conclusions contained in the software and documentation are those
|
||||||
|
of the authors and should not be interpreted as representing official policies,
|
||||||
|
either expressed or implied, of the FreeBSD Project.
|
||||||
22
libs/potree/lazylibs/geopackage/LICENSE
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 National Geospatial-Intelligence Agency
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
259
libs/potree/lazylibs/geopackage/README.md
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
# GeoPackage JS
|
||||||
|
|
||||||
|
GeoPackage JS is an implementation of the OGC GeoPackage spec. This library works in both the browser and Node 4+.
|
||||||
|
|
||||||
|
### Demo ###
|
||||||
|
[GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/)
|
||||||
|
|
||||||
|
Cloning this repository and opening the docs/index.html in your browser will run the demo locally.
|
||||||
|
|
||||||
|
### Installation ###
|
||||||
|
|
||||||
|
[](https://travis-ci.org/ngageoint/geopackage-js)
|
||||||
|
[](https://www.npmjs.com/package/@ngageoint/geopackage)
|
||||||
|
[](https://coveralls.io/github/ngageoint/geopackage-js)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install @ngageoint/geopackage
|
||||||
|
```
|
||||||
|
|
||||||
|
#### GeoPackage JS Library ####
|
||||||
|
|
||||||
|
The [GeoPackage Libraries](http://ngageoint.github.io/GeoPackage/) were developed at the [National Geospatial-Intelligence Agency (NGA)](http://www.nga.mil/) in collaboration with [BIT Systems](http://www.bit-sys.com/). The government has "unlimited rights" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT license](http://choosealicense.com/licenses/mit/).
|
||||||
|
|
||||||
|
### Pull Requests ###
|
||||||
|
If you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.
|
||||||
|
|
||||||
|
Software source code previously released under an open source license and then modified by NGA staff is considered a "joint work" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.
|
||||||
|
|
||||||
|
### About ###
|
||||||
|
|
||||||
|
[GeoPackage JS](https://github.com/ngageoint/geopackage-js) is a [GeoPackage Library](http://ngageoint.github.io/GeoPackage/) JavaScript implementation of the Open Geospatial Consortium [GeoPackage](http://www.geopackage.org/) [spec](http://www.geopackage.org/spec/). It is listed as an [OGC GeoPackage Implementation](http://www.geopackage.org/#implementations_nga) by the National Geospatial-Intelligence Agency.
|
||||||
|
|
||||||
|
The GeoPackage JavaScript library currently provides the ability to read GeoPackage files. This library works both in the browser and in Node. In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using [sql.js](https://github.com/kripken/sql.js/). In Node tiles are rendered [PureImage](https://github.com/joshmarinacci/node-pureimage) and GeoPackages are read using [node-sqlite3](https://github.com/mapbox/node-sqlite3).
|
||||||
|
|
||||||
|
### Changelog
|
||||||
|
|
||||||
|
##### 2.1.0
|
||||||
|
|
||||||
|
- Implementation of the Feature Style Extension and Contents ID Extension
|
||||||
|
|
||||||
|
##### 2.0.8
|
||||||
|
|
||||||
|
- Checks for Electron when returning a tile creator
|
||||||
|
|
||||||
|
##### 2.0
|
||||||
|
|
||||||
|
- All new API utilizing Promises
|
||||||
|
|
||||||
|
##### 1.1.4
|
||||||
|
|
||||||
|
- Adds a method to retrieve tiles in EPSG:4326
|
||||||
|
|
||||||
|
##### 1.1.3
|
||||||
|
|
||||||
|
- Fixes issue #115
|
||||||
|
|
||||||
|
##### 1.1.2
|
||||||
|
|
||||||
|
- fix case where GeoPackage Zoom does not correspond to the web map zoom
|
||||||
|
|
||||||
|
##### 1.1.1
|
||||||
|
|
||||||
|
- fix more instances of proj4 bug for react
|
||||||
|
- fixed tile generation for images with different x and y pixel densities
|
||||||
|
|
||||||
|
##### 1.1.0
|
||||||
|
|
||||||
|
- accept pull request adding support for react
|
||||||
|
- fix bug with projected tiles that spanned the date line
|
||||||
|
|
||||||
|
##### 1.0.25
|
||||||
|
|
||||||
|
- ensure we use proj4 2.4.3 instead of 2.4.4
|
||||||
|
|
||||||
|
##### 1.0.22
|
||||||
|
|
||||||
|
- Fixed bug where querying for indexed features only returned the geometry instead of the entire feature
|
||||||
|
|
||||||
|
##### 1.0.19
|
||||||
|
|
||||||
|
- Remove dependency on Lwip
|
||||||
|
|
||||||
|
### Usage ###
|
||||||
|
|
||||||
|
View examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs)
|
||||||
|
|
||||||
|
View the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated).
|
||||||
|
|
||||||
|
#### Browser Usage ####
|
||||||
|
```javascript
|
||||||
|
|
||||||
|
// attach this method to a file input onchange event
|
||||||
|
window.loadGeoPackage = function(files) {
|
||||||
|
var f = files[0];
|
||||||
|
var r = new FileReader();
|
||||||
|
r.onload = function() {
|
||||||
|
var array = new Uint8Array(r.result);
|
||||||
|
loadByteArray(array);
|
||||||
|
}
|
||||||
|
r.readAsArrayBuffer(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadByteArray(array, callback) {
|
||||||
|
var db = new SQL.Database(array);
|
||||||
|
GeoPackageConnection.connectWithDatabase(db, function(err, connection) {
|
||||||
|
var geoPackage = new GeoPackage('', '', connection);
|
||||||
|
|
||||||
|
// Now you can operate on the GeoPackage
|
||||||
|
|
||||||
|
// get the tile table names
|
||||||
|
geoPackage.getTileTables(function(err, tileTableNames) {
|
||||||
|
// tileTableNames is an array of all tile table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {
|
||||||
|
geoPackage.getInfoForTable(tileDao, function(err, info) {
|
||||||
|
// do something with the tile table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// draw a tile into a canvas for an XYZ tile
|
||||||
|
var canvas = canvasFromSomewhere;
|
||||||
|
var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var zoom = 0;
|
||||||
|
|
||||||
|
console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
gpr.drawTileIn(x, y, zoom, canvas, function() {
|
||||||
|
console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile base64 data URL for an XYZ tile
|
||||||
|
gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {
|
||||||
|
console.log('got the base64 data url');
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile from a GeoPackage tile column and tile row
|
||||||
|
tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {
|
||||||
|
var tileData = tile.getTileData(); // the raw bytes from the GeoPackage
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// get the feature table names
|
||||||
|
geoPackage.getFeatureTables(function(err, featureTableNames) {
|
||||||
|
// featureTableNames is an array of all feature table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {
|
||||||
|
geoPackage.getInfoForTable(featureDao, function(err, info) {
|
||||||
|
// do something with the feature table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// query for all features
|
||||||
|
featureDao.queryForEach(function(err, row, rowDone) {
|
||||||
|
var feature = featureDao.getFeatureRow(row);
|
||||||
|
var geometry = currentRow.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
var geom = geometry.geometry;
|
||||||
|
var geoJson = geometry.geometry.toGeoJSON();
|
||||||
|
|
||||||
|
geoJson.properties = {};
|
||||||
|
for (var key in feature.values) {
|
||||||
|
if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {
|
||||||
|
var column = info.columnMap[key];
|
||||||
|
geoJson.properties[column.displayName] = currentRow.values[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rowDone();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### NodeJS Usage ####
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var GeoPackageAPI = require('@ngageoint/geopackage')
|
||||||
|
, GeoPackageManager = GeoPackageAPI.GeoPackageManager
|
||||||
|
, GeoPackageConnection = GeoPackageAPI.GeoPackageConnection
|
||||||
|
, GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever;
|
||||||
|
|
||||||
|
GeoPackageAPI.open(filename, function(err, geoPackage) {
|
||||||
|
|
||||||
|
// Now you can operate on the GeoPackage
|
||||||
|
|
||||||
|
// get the tile table names
|
||||||
|
geoPackage.getTileTables(function(err, tileTableNames) {
|
||||||
|
// tileTableNames is an array of all tile table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {
|
||||||
|
geoPackage.getInfoForTable(tileDao, function(err, info) {
|
||||||
|
// do something with the tile table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// draw a tile into a canvas for an XYZ tile
|
||||||
|
var canvas = canvasFromSomewhere;
|
||||||
|
var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
var zoom = 0;
|
||||||
|
|
||||||
|
console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
gpr.drawTileIn(x, y, zoom, canvas, function() {
|
||||||
|
console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile base64 data URL for an XYZ tile
|
||||||
|
gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {
|
||||||
|
console.log('got the base64 data url');
|
||||||
|
});
|
||||||
|
|
||||||
|
// or get a tile from a GeoPackage tile column and tile row
|
||||||
|
tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {
|
||||||
|
var tileData = tile.getTileData(); // the raw bytes from the GeoPackage
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// get the feature table names
|
||||||
|
geoPackage.getFeatureTables(function(err, featureTableNames) {
|
||||||
|
// featureTableNames is an array of all feature table names
|
||||||
|
|
||||||
|
// get the info for the first table
|
||||||
|
geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {
|
||||||
|
geoPackage.getInfoForTable(featureDao, function(err, info) {
|
||||||
|
// do something with the feature table info
|
||||||
|
});
|
||||||
|
|
||||||
|
// query for all features
|
||||||
|
featureDao.queryForEach(function(err, row, rowDone) {
|
||||||
|
var feature = featureDao.getFeatureRow(row);
|
||||||
|
var geometry = currentRow.getGeometry();
|
||||||
|
if (geometry) {
|
||||||
|
var geom = geometry.geometry;
|
||||||
|
var geoJson = geometry.geometry.toGeoJSON();
|
||||||
|
|
||||||
|
geoJson.properties = {};
|
||||||
|
for (var key in feature.values) {
|
||||||
|
if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {
|
||||||
|
var column = info.columnMap[key];
|
||||||
|
geoJson.properties[column.displayName] = currentRow.values[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rowDone();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
80817
libs/potree/lazylibs/geopackage/geopackage.js
Normal file
97
libs/potree/lazylibs/geopackage/geopackage.min.js
vendored
Normal file
6
libs/potree/lazylibs/sql.js/AUTHORS
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Ophir LOJKINE <pere.jobs@gmail.com> (https://github.com/lovasoa)
|
||||||
|
@kripken
|
||||||
|
@hankinsoft
|
||||||
|
@firien
|
||||||
|
@dinedal
|
||||||
|
@taytay
|
||||||
44
libs/potree/lazylibs/sql.js/LICENSE
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
MIT license
|
||||||
|
===========
|
||||||
|
|
||||||
|
Copyright (c) 2017 sql.js authors (see AUTHORS)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Some portions of the Makefile taken from:
|
||||||
|
Copyright 2017 Ryusei Yamaguchi
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
283
libs/potree/lazylibs/sql.js/README.md
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
# SQLite compiled to javascript
|
||||||
|
[](http://travis-ci.org/kripken/sql.js) [](https://cdnjs.com/libraries/sql.js)
|
||||||
|
|
||||||
|
For the impatients, try the demo here: http://kripken.github.io/sql.js/examples/GUI
|
||||||
|
|
||||||
|
*sql.js* is a port of [SQLite](http://sqlite.org/about.html) to Webassembly, by compiling the SQLite C code with [Emscripten](http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html). It uses a [virtual database file stored in memory](https://kripken.github.io/emscripten-site/docs/porting/files/file_systems_overview.html), and thus **doesn't persist the changes** made to the database. However, it allows you to **import** any existing sqlite file, and to **export** the created database as a [javascript typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays).
|
||||||
|
|
||||||
|
There are no C bindings or node-gyp compilation here, sql.js is a simple javascript file, that can be used like any traditional javascript library. If you are building a native application in javascript (using Electron for instance), or are working in node.js, you will likely prefer to use [a native binding of SQLite to javascript](https://www.npmjs.com/package/sqlite3).
|
||||||
|
|
||||||
|
SQLite is public domain, sql.js is MIT licensed.
|
||||||
|
|
||||||
|
Sql.js predates WebAssembly, and thus started as an [asm.js](https://en.wikipedia.org/wiki/Asm.js) project. It still supports asm.js for backwards compatability.
|
||||||
|
|
||||||
|
## Version of binaries
|
||||||
|
Sql.js was last built with:
|
||||||
|
Emscripten version 1.38.30 (2019-04-16) [Release History](https://emscripten.org/docs/introducing_emscripten/release_notes.html)
|
||||||
|
SqlLite version: 3.28.0 (2019-04-16) [Release History](https://www.sqlite.org/changes.html)
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
A [full documentation](http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html) generated from comments inside the source code, is available.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var initSqlJs = require('sql-wasm.js');
|
||||||
|
// or if you are in a browser:
|
||||||
|
//var initSqlJs = window.initSqlJs;
|
||||||
|
|
||||||
|
initSqlJs().then(function(SQL){
|
||||||
|
|
||||||
|
// Create a database
|
||||||
|
var db = new SQL.Database();
|
||||||
|
// NOTE: You can also use new SQL.Database(data) where
|
||||||
|
// data is an Uint8Array representing an SQLite database file
|
||||||
|
|
||||||
|
// Execute some sql
|
||||||
|
sqlstr = "CREATE TABLE hello (a int, b char);";
|
||||||
|
sqlstr += "INSERT INTO hello VALUES (0, 'hello');"
|
||||||
|
sqlstr += "INSERT INTO hello VALUES (1, 'world');"
|
||||||
|
db.run(sqlstr); // Run the query without returning anything
|
||||||
|
|
||||||
|
var res = db.exec("SELECT * FROM hello");
|
||||||
|
/*
|
||||||
|
[
|
||||||
|
{columns:['a','b'], values:[[0,'hello'],[1,'world']]}
|
||||||
|
]
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Prepare an sql statement
|
||||||
|
var stmt = db.prepare("SELECT * FROM hello WHERE a=:aval AND b=:bval");
|
||||||
|
|
||||||
|
// Bind values to the parameters and fetch the results of the query
|
||||||
|
var result = stmt.getAsObject({':aval' : 1, ':bval' : 'world'});
|
||||||
|
console.log(result); // Will print {a:1, b:'world'}
|
||||||
|
|
||||||
|
// Bind other values
|
||||||
|
stmt.bind([0, 'hello']);
|
||||||
|
while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello']
|
||||||
|
|
||||||
|
// You can also use javascript functions inside your SQL code
|
||||||
|
// Create the js function you need
|
||||||
|
function add(a, b) {return a+b;}
|
||||||
|
// Specifies the SQL function's name, the number of it's arguments, and the js function to use
|
||||||
|
db.create_function("add_js", add);
|
||||||
|
// Run a query in which the function is used
|
||||||
|
db.run("INSERT INTO hello VALUES (add_js(7, 3), add_js('Hello ', 'world'));"); // Inserts 10 and 'Hello world'
|
||||||
|
|
||||||
|
// free the memory used by the statement
|
||||||
|
stmt.free();
|
||||||
|
// You can not use your statement anymore once it has been freed.
|
||||||
|
// But not freeing your statements causes memory leaks. You don't want that.
|
||||||
|
|
||||||
|
// Export the database to an Uint8Array containing the SQLite database file
|
||||||
|
var binaryArray = db.export();
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
There are a few examples [available here](https://kripken.github.io/sql.js/index.html). The most full-featured is the [Sqlite Interpreter](https://kripken.github.io/sql.js/examples/GUI/index.html).
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
The test files provide up to date example of the use of the api.
|
||||||
|
### Inside the browser
|
||||||
|
#### Example **HTML** file:
|
||||||
|
```html
|
||||||
|
<meta charset="utf8" />
|
||||||
|
<html>
|
||||||
|
<script src='/dist/sql-wasm.js'></script>
|
||||||
|
<script>
|
||||||
|
config = {
|
||||||
|
locateFile: url => `/dist/${filename}`
|
||||||
|
}
|
||||||
|
// The `initSqlJs` function is globally provided by all of the main dist files if loaded in the browser.
|
||||||
|
// We must specify this locateFile function if we are loading a wasm file from anywhere other than the current html page's folder.
|
||||||
|
initSqlJs(config).then(function(SQL){
|
||||||
|
//Create the database
|
||||||
|
var db = new SQL.Database();
|
||||||
|
// Run a query without reading the results
|
||||||
|
db.run("CREATE TABLE test (col1, col2);");
|
||||||
|
// Insert two rows: (1,111) and (2,222)
|
||||||
|
db.run("INSERT INTO test VALUES (?,?), (?,?)", [1,111,2,222]);
|
||||||
|
|
||||||
|
// Prepare a statement
|
||||||
|
var stmt = db.prepare("SELECT * FROM test WHERE col1 BETWEEN $start AND $end");
|
||||||
|
stmt.getAsObject({$start:1, $end:1}); // {col1:1, col2:111}
|
||||||
|
|
||||||
|
// Bind new values
|
||||||
|
stmt.bind({$start:1, $end:2});
|
||||||
|
while(stmt.step()) { //
|
||||||
|
var row = stmt.getAsObject();
|
||||||
|
console.log('Here is a row: ' + JSON.stringify(row));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<body>
|
||||||
|
Output is in Javscript console
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Creating a database from a file choosen by the user
|
||||||
|
`SQL.Database` constructor takes an array of integer representing a database file as an optional parameter.
|
||||||
|
The following code uses an HTML input as the source for loading a database:
|
||||||
|
```javascript
|
||||||
|
dbFileElm.onchange = () => {
|
||||||
|
var f = dbFileElm.files[0];
|
||||||
|
var r = new FileReader();
|
||||||
|
r.onload = function() {
|
||||||
|
var Uints = new Uint8Array(r.result);
|
||||||
|
db = new SQL.Database(Uints);
|
||||||
|
}
|
||||||
|
r.readAsArrayBuffer(f);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
See : http://kripken.github.io/sql.js/examples/GUI/gui.js
|
||||||
|
|
||||||
|
#### Loading a database from a server
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
// For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite
|
||||||
|
xhr.open('GET', '/path/to/database.sqlite', true);
|
||||||
|
xhr.responseType = 'arraybuffer';
|
||||||
|
|
||||||
|
xhr.onload = e => {
|
||||||
|
var uInt8Array = new Uint8Array(this.response);
|
||||||
|
var db = new SQL.Database(uInt8Array);
|
||||||
|
var contents = db.exec("SELECT * FROM my_table");
|
||||||
|
// contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]
|
||||||
|
};
|
||||||
|
xhr.send();
|
||||||
|
```
|
||||||
|
See: https://github.com/kripken/sql.js/wiki/Load-a-database-from-the-server
|
||||||
|
|
||||||
|
|
||||||
|
### Use from node.js
|
||||||
|
|
||||||
|
`sql.js` is [hosted on npm](https://www.npmjs.org/package/sql.js). To install it, you can simply run `npm install sql.js`.
|
||||||
|
Alternatively, you can simply download `sql-wasm.js` and `sql-wasm.wasm`, from the download link below.
|
||||||
|
|
||||||
|
#### read a database from the disk:
|
||||||
|
```javascript
|
||||||
|
var fs = require('fs');
|
||||||
|
var initSqlJs = require('sql-wasm.js');
|
||||||
|
var filebuffer = fs.readFileSync('test.sqlite');
|
||||||
|
|
||||||
|
initSqlJs().then(function(SQL){
|
||||||
|
// Load the db
|
||||||
|
var db = new SQL.Database(filebuffer);
|
||||||
|
});
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### write a database to the disk
|
||||||
|
You need to convert the result of `db.export` to a buffer
|
||||||
|
```javascript
|
||||||
|
var fs = require("fs");
|
||||||
|
// [...] (create the database)
|
||||||
|
var data = db.export();
|
||||||
|
var buffer = new Buffer(data);
|
||||||
|
fs.writeFileSync("filename.sqlite", buffer);
|
||||||
|
```
|
||||||
|
|
||||||
|
See : https://github.com/kripken/sql.js/blob/master/test/test_node_file.js
|
||||||
|
|
||||||
|
### Use as web worker
|
||||||
|
If you don't want to run CPU-intensive SQL queries in your main application thread,
|
||||||
|
you can use the *more limited* WebWorker API.
|
||||||
|
|
||||||
|
You will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```html
|
||||||
|
<script>
|
||||||
|
var worker = new Worker("/dist/worker.sql-wasm.js");
|
||||||
|
worker.onmessage = () => {
|
||||||
|
console.log("Database opened");
|
||||||
|
worker.onmessage = event => {
|
||||||
|
console.log(event.data); // The result of the query
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.postMessage({
|
||||||
|
id: 2,
|
||||||
|
action: 'exec',
|
||||||
|
sql: 'SELECT * FROM test'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
worker.onerror = e => console.log("Worker error: ", e);
|
||||||
|
worker.postMessage({
|
||||||
|
id:1,
|
||||||
|
action:'open',
|
||||||
|
buffer:buf, /*Optional. An ArrayBuffer representing an SQLite Database file*/
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
See [examples/GUI/gui.js](examples/GUI/gui.js) for a full working example.
|
||||||
|
|
||||||
|
## Flavors/versions Targets/Downloads
|
||||||
|
|
||||||
|
This library includes both WebAssembly and asm.js versions of Sqlite. (WebAssembly is the newer, preferred way to compile to Javascript, and has superceded asm.js. It produces smaller, faster code.) Asm.js versions are included for compatibility.
|
||||||
|
|
||||||
|
## Upgrading from 0.x to 1.x
|
||||||
|
|
||||||
|
Version 1.0 of sql.js must be loaded asynchronously, whereas asm.js was able to be loaded synchronously.
|
||||||
|
|
||||||
|
So in the past, you would:
|
||||||
|
```html
|
||||||
|
<script src='js/sql.js'></script>
|
||||||
|
<script>
|
||||||
|
var db = new SQL.Database();
|
||||||
|
//...
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
or:
|
||||||
|
```javascript
|
||||||
|
var SQL = require('sql.js');
|
||||||
|
var db = new QL.Database();
|
||||||
|
//...
|
||||||
|
```
|
||||||
|
|
||||||
|
Version 1.x:
|
||||||
|
```html
|
||||||
|
<script src='dist/sql-wasm.js'></script>
|
||||||
|
<script>
|
||||||
|
initSqlJs({ locateFile: filename => `/dist/${filename}` }).then(function(SQL){
|
||||||
|
var db = new SQL.Database();
|
||||||
|
//...
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
or:
|
||||||
|
```javascript
|
||||||
|
var initSqlJs = require('sql-wasm.js');
|
||||||
|
initSqlJs().then(function(SQL){
|
||||||
|
var db = new SQL.Database();
|
||||||
|
//...
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
`NOTHING` is now a reserved word in SQLite, whereas previously it was not. This could cause errors like `Error: near "nothing": syntax error`
|
||||||
|
|
||||||
|
### Downloading/Using: ###
|
||||||
|
Although asm.js files were distributed as a single Javascript file, WebAssembly libraries are most efficiently distributed as a pair of files, the `.js` loader and the `.wasm` file, like [dist/sql-wasm.js]([dist/sql-wasm.js]) and [dist/sql-wasm.wasm]([dist/sql-wasm.wasm]). The `.js` file is reponsible for wrapping/loading the `.wasm` file.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Versions of sql.js included in `dist/`
|
||||||
|
- `sql-wasm.js` : The Web Assembly version of Sql.js. Minified and suitable for production. Use this. If you use this, you will need to include/ship `sql-wasm.wasm` as well.
|
||||||
|
- `sql-wasm-debug.js` : The Web Assembly, Debug version of Sql.js. Larger, with assertions turned on. Useful for local development. You will need to include/ship `sql-wasm-debug.wasm` if you use this.
|
||||||
|
- `sql-asm.js` : The older asm.js version of Sql.js. Slower and larger. Provided for compatiblity reasons.
|
||||||
|
- `sql-asm-memory-growth.js` : Asm.js doesn't allow for memory to grow by default, because it is slower and de-optimizes. If you are using sql-asm.js and you see this error (`Cannot enlarge memory arrays`), use this file.
|
||||||
|
- `sql-asm-debug.js` : The _Debug_ asm.js version of Sql.js. Use this for local development.
|
||||||
|
- `worker.*` - Web Worker versions of the above libraries. More limited API. See [examples/GUI/gui.js](examples/GUI/gui.js) for a good example of this.
|
||||||
|
|
||||||
|
## Compiling
|
||||||
|
|
||||||
|
- Install the EMSDK, [as described here](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html)
|
||||||
|
- Run `npm run rebuild`
|
||||||
|
|
||||||
209
libs/potree/lazylibs/sql.js/sql-wasm.js
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
|
||||||
|
// We are modularizing this manually because the current modularize setting in Emscripten has some issues:
|
||||||
|
// https://github.com/kripken/emscripten/issues/5820
|
||||||
|
// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,
|
||||||
|
// which is able to be used/called before the WASM is loaded.
|
||||||
|
// The modularization below exports a promise that loads and resolves to the actual sql.js module.
|
||||||
|
// That way, this module can't be used before the WASM is finished loading.
|
||||||
|
|
||||||
|
// We are going to define a function that a user will call to start loading initializing our Sql.js library
|
||||||
|
// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module
|
||||||
|
// Instead, we want to return the previously loaded module
|
||||||
|
|
||||||
|
// TODO: Make this not declare a global if used in the browser
|
||||||
|
var initSqlJsPromise = undefined;
|
||||||
|
|
||||||
|
var initSqlJs = function (moduleConfig) {
|
||||||
|
|
||||||
|
if (initSqlJsPromise){
|
||||||
|
return initSqlJsPromise;
|
||||||
|
}
|
||||||
|
// If we're here, we've never called this function before
|
||||||
|
initSqlJsPromise = new Promise((resolveModule, reject) => {
|
||||||
|
|
||||||
|
// We are modularizing this manually because the current modularize setting in Emscripten has some issues:
|
||||||
|
// https://github.com/kripken/emscripten/issues/5820
|
||||||
|
|
||||||
|
// The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add
|
||||||
|
// properties to it, like `preRun`, `postRun`, etc
|
||||||
|
// We are using that to get notified when the WASM has finished loading.
|
||||||
|
// Only then will we return our promise
|
||||||
|
|
||||||
|
// If they passed in a moduleConfig object, use that
|
||||||
|
// Otherwise, initialize Module to the empty object
|
||||||
|
var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};
|
||||||
|
|
||||||
|
// EMCC only allows for a single onAbort function (not an array of functions)
|
||||||
|
// So if the user defined their own onAbort function, we remember it and call it
|
||||||
|
var originalOnAbortFunction = Module['onAbort'];
|
||||||
|
Module['onAbort'] = function (errorThatCausedAbort) {
|
||||||
|
reject(new Error(errorThatCausedAbort));
|
||||||
|
if (originalOnAbortFunction){
|
||||||
|
originalOnAbortFunction(errorThatCausedAbort);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Module['postRun'] = Module['postRun'] || [];
|
||||||
|
Module['postRun'].push(function () {
|
||||||
|
// When Emscripted calls postRun, this promise resolves with the built Module
|
||||||
|
resolveModule(Module);
|
||||||
|
});
|
||||||
|
|
||||||
|
// There is a section of code in the emcc-generated code below that looks like this:
|
||||||
|
// (Note that this is lowercase `module`)
|
||||||
|
// if (typeof module !== 'undefined') {
|
||||||
|
// module['exports'] = Module;
|
||||||
|
// }
|
||||||
|
// When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!
|
||||||
|
// The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,
|
||||||
|
// but that carries with it additional unnecessary baggage/bugs we don't want either.
|
||||||
|
// So, we have three options:
|
||||||
|
// 1) We undefine `module`
|
||||||
|
// 2) We remember what `module['exports']` was at the beginning of this function and we restore it later
|
||||||
|
// 3) We write a script to remove those lines of code as part of the Make process.
|
||||||
|
//
|
||||||
|
// Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward
|
||||||
|
// of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.
|
||||||
|
// That's a nice side effect since we're handling the modularization efforts ourselves
|
||||||
|
module = undefined;
|
||||||
|
|
||||||
|
// The emcc-generated code and shell-post.js code goes below,
|
||||||
|
// meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort
|
||||||
|
var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});
|
||||||
|
var va=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.fb=a;this.db=b;this.nb=1;this.Eb=[]}a.prototype.bind=function(a){if(!this.fb)throw"Statement closed";this.reset();return Array.isArray(a)?this.lc(a):this.mc(a)};a.prototype.step=function(){var a;if(!this.fb)throw"Statement closed";this.nb=1;switch(a=Tb(this.fb)){case c.hc:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.sc=function(a){null==a&&(a=this.nb++);return Ub(this.fb,a)};a.prototype.tc=
|
||||||
|
function(a){null==a&&(a=this.nb++);return Vb(this.fb,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.nb++);var c=Wb(this.fb,a);var d=Xb(this.fb,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=ib(this.fb);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(Yb(this.fb,a)){case c.fc:case c.FLOAT:e.push(this.sc(a));break;case c.ic:e.push(this.tc(a));break;case c.Zb:e.push(this.getBlob(a));
|
||||||
|
break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=ib(this.fb);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(Zb(this.fb,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Sb=e[a];g[Sb]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.pc=function(a,b){var c;null==b&&(b=this.nb++);a=ba(a);this.Eb.push(c=
|
||||||
|
ea(a));this.db.handleError(ca(this.fb,b,c,a.length-1,0))};a.prototype.kc=function(a,b){var c;null==b&&(b=this.nb++);this.Eb.push(c=ea(a));this.db.handleError(Ia(this.fb,b,c,a.length,0))};a.prototype.oc=function(a,b){null==b&&(b=this.nb++);this.db.handleError((a===(a|0)?$b:ac)(this.fb,b,a))};a.prototype.nc=function(a){null==a&&(a=this.nb++);Ia(this.fb,a,0,0,0)};a.prototype.Qb=function(a,b){null==b&&(b=this.nb++);switch(typeof a){case "string":this.pc(a,b);break;case "number":case "boolean":this.oc(a+
|
||||||
|
0,b);break;case "object":if(null===a)this.nc(b);else if(null!=a.length)this.kc(a,b);else throw"Wrong API use : tried to bind a value of an unknown type ("+a+").";}};a.prototype.mc=function(a){var b;for(b in a){var c=a[b];var d=bc(this.fb,b);0!==d&&this.Qb(c,d)}return!0};a.prototype.lc=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Qb(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return cc(this.fb)===c.xb&&dc(this.fb)===c.xb};a.prototype.freemem=function(){for(var a;a=
|
||||||
|
this.Eb.pop();)ha(a);return null};a.prototype.free=function(){this.freemem();var a=ec(this.fb)===c.xb;delete this.db.Bb[this.fb];this.fb=da;return a};return a}();var e=function(){function a(a){this.filename="dbfile_"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?n("/",c):"/";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if("string"===typeof a){for(var e=Array(a.length),k=0,m=a.length;k<m;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,"w");la(e,a,0,a.length,0,void 0);
|
||||||
|
ma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,"i32");fc(this.db);this.Bb={}}a.prototype.run=function(a,c){if(!this.db)throw"Database closed";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(m(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw"Database closed";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,"i8")!==da;){pa(b);pa(e);this.handleError(fa(this.db,a,-1,b,e));var k=q(b,"i32");a=q(e,"i32");if(k!==da){var m=new d(k,
|
||||||
|
this);for(k=null;m.step();)null===k&&(k={columns:m.getColumnNames(),values:[]},g.push(k)),k.values.push(m.get());m.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){"function"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if("function"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(z(this.db,a,-1,b,da));a=q(b,"i32");if(a===da)throw"Nothing to prepare";var e=new d(a,this);null!=c&&e.bind(c);return this.Bb[a]=e};
|
||||||
|
a.prototype["export"]=function(){var a;var c=this.Bb;for(e in c){var d=c[e];d.free()}this.handleError(k(this.db));d=this.filename;var e=e={encoding:"binary"};e.flags=e.flags||"r";e.encoding=e.encoding||"binary";if("utf8"!==e.encoding&&"binary"!==e.encoding)throw Error('Invalid encoding type "'+e.encoding+'"');c=p(d,e.flags);d=ra(d).size;var m=new Uint8Array(d);sa(c,m,0,d,0);"utf8"===e.encoding?a=t(m,0):"binary"===e.encoding&&(a=m);ma(c);this.handleError(g(this.filename,b));this.db=q(b,"i32");return a};
|
||||||
|
a.prototype.close=function(){var a;var b=this.Bb;for(a in b){var c=b[a];c.free()}this.handleError(k(this.db));ta("/"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.xb)return null;a=hc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return y(this.db)};a.prototype.create_function=function(a,b){var d=ua(function(a,c,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var m=q(d+4*e,"i32");var z=jc(m);e=function(){switch(!1){case 1!==z:return kc;
|
||||||
|
case 2!==z:return lc;case 3!==z:return mc;case 4!==z:return function(a){var b,c;var d=nc(a);var e=oc(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(m);k.push(e)}if(c=b.apply(null,k))switch(typeof c){case "number":return pc(a,c);case "string":return qc(a,c,-1,-1)}else return rc(a)});this.handleError(sc(this.db,a,b.length,c.jc,0,d,0,0,0));return this};return a}();var g=f.cwrap("sqlite3_open","number",["string","number"]);
|
||||||
|
var k=f.cwrap("sqlite3_close_v2","number",["number"]);var m=f.cwrap("sqlite3_exec","number",["number","string","number","number","number"]);f.cwrap("sqlite3_free","",["number"]);var y=f.cwrap("sqlite3_changes","number",["number"]);var z=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);var fa=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);var ca=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]);
|
||||||
|
var Ia=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);var ac=f.cwrap("sqlite3_bind_double","number",["number","number","number"]);var $b=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);var bc=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);var Tb=f.cwrap("sqlite3_step","number",["number"]);var hc=f.cwrap("sqlite3_errmsg","string",["number"]);var ib=f.cwrap("sqlite3_data_count","number",["number"]);var Ub=f.cwrap("sqlite3_column_double",
|
||||||
|
"number",["number","number"]);var Vb=f.cwrap("sqlite3_column_text","string",["number","number"]);var Xb=f.cwrap("sqlite3_column_blob","number",["number","number"]);var Wb=f.cwrap("sqlite3_column_bytes","number",["number","number"]);var Yb=f.cwrap("sqlite3_column_type","number",["number","number"]);var Zb=f.cwrap("sqlite3_column_name","string",["number","number"]);var dc=f.cwrap("sqlite3_reset","number",["number"]);var cc=f.cwrap("sqlite3_clear_bindings","number",["number"]);var ec=f.cwrap("sqlite3_finalize",
|
||||||
|
"number",["number"]);var sc=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" "));var jc=f.cwrap("sqlite3_value_type","number",["number"]);var nc=f.cwrap("sqlite3_value_bytes","number",["number"]);var mc=f.cwrap("sqlite3_value_text","string",["number"]);var kc=f.cwrap("sqlite3_value_int","number",["number"]);var oc=f.cwrap("sqlite3_value_blob","number",["number"]);var lc=f.cwrap("sqlite3_value_double","number",["number"]);var pc=
|
||||||
|
f.cwrap("sqlite3_result_double","",["number","number"]);var rc=f.cwrap("sqlite3_result_null","",["number"]);var qc=f.cwrap("sqlite3_result_text","",["number","string","number","number"]);var fc=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var da=0;c.xb=0;c.we=1;c.Pe=2;c.Ze=3;c.Cc=4;c.Ec=5;c.Se=6;c.NOMEM=7;c.bf=8;c.Qe=9;c.Re=10;c.Hc=11;c.NOTFOUND=12;c.Oe=13;c.Fc=14;c.$e=15;c.EMPTY=16;c.cf=17;c.df=18;c.Gc=19;c.Te=20;c.Ue=21;c.Ve=
|
||||||
|
22;c.Dc=23;c.Ne=24;c.af=25;c.We=26;c.Xe=27;c.ef=28;c.hc=100;c.DONE=101;c.fc=1;c.FLOAT=2;c.ic=3;c.Zb=4;c.Ye=5;c.jc=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(va);var wa={},u;for(u in f)f.hasOwnProperty(u)&&(wa[u]=f[u]);f.arguments=[];f.thisProgram="./this.program";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var v=!1,w=!1,x=!1,xa=!1;v="object"===typeof window;w="function"===typeof importScripts;x="object"===typeof process&&"function"===typeof require&&!v&&!w;xa=!v&&!x&&!w;var A="";
|
||||||
|
if(x){A=__dirname+"/";var ya,za;f.read=function(a,b){ya||(ya=require("fs"));za||(za=require("path"));a=za.normalize(a);a=ya.readFileSync(a);return b?a:a.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\/g,"/"));f.arguments=process.argv.slice(2);"undefined"!==typeof module&&(module.exports=f);process.on("unhandledRejection",B);f.quit=function(a){process.exit(a)};f.inspect=
|
||||||
|
function(){return"[Emscripten Module object]"}}else if(xa)"undefined"!=typeof read&&(f.read=function(a){return read(a)}),f.readBinary=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");assert("object"===typeof a);return a},"undefined"!=typeof scriptArgs?f.arguments=scriptArgs:"undefined"!=typeof arguments&&(f.arguments=arguments),"function"===typeof quit&&(f.quit=function(a){quit(a)});else if(v||w)w?A=self.location.href:document.currentScript&&(A=
|
||||||
|
document.currentScript.src),A=0!==A.indexOf("blob:")?A.substr(0,A.lastIndexOf("/")+1):"",f.read=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},w&&(f.readBinary=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),f.readAsync=function(a,b,c){var d=new XMLHttpRequest;d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):
|
||||||
|
c()};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Aa=f.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),C=f.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||Aa);for(u in wa)wa.hasOwnProperty(u)&&(f[u]=wa[u]);wa=void 0;function Ba(a){var b=D[Ca>>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b}
|
||||||
|
var Fa={"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},Ga=1,E=Array(64);function ua(a){for(var b=0;64>b;b++)if(!E[b])return E[b]=a,Ga+b;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";}"object"!==typeof WebAssembly&&C("no native wasm support detected");
|
||||||
|
function q(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return l[a>>0];case "i8":return l[a>>0];case "i16":return Ha[a>>1];case "i32":return D[a>>2];case "i64":return D[a>>2];case "float":return Ja[a>>2];case "double":return Ka[a>>3];default:B("invalid type for getValue: "+b)}return null}var La,Ma=!1;function assert(a,b){a||B("Assertion failed: "+b)}function Na(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b}
|
||||||
|
function Oa(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,F,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Na(a),k=[];a=0;if(d)for(var m=0;m<d.length;m++){var y=e[c[m]];y?(0===a&&(a=na()),k[m]=y(d[m])):k[m]=d[m]}c=g.apply(null,k);c=function(a){return"string"===b?G(a):"boolean"===b?!!a:a}(c);0!==a&&qa(a);return c}
|
||||||
|
function pa(a){var b="i32";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":l[a>>0]=0;break;case "i8":l[a>>0]=0;break;case "i16":Ha[a>>1]=0;break;case "i32":D[a>>2]=0;break;case "i64":aa=[0,1<=+Pa(0)?~~+Qa(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case "float":Ja[a>>2]=0;break;case "double":Ka[a>>3]=0;break;default:B("invalid type for setValue: "+b)}}var Ra=0,Sa=3;
|
||||||
|
function ea(a){var b=Ra;if("number"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;b=b==Sa?e:[Ta,h,Ba][b](Math.max(d,1));if(c){var e=b;assert(0==(b&3));for(a=b+(d&-4);e<a;e+=4)D[e>>2]=0;for(a=b+d;e<a;)l[e++>>0]=0;return b}a.subarray||a.slice?F.set(a,b):F.set(new Uint8Array(a),b);return b}var Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;
|
||||||
|
function t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Ua)return Ua.decode(a.subarray(b,c));for(d="";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function G(a){return a?t(F,a,void 0):""}
|
||||||
|
function r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}
|
||||||
|
function oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");function Va(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function Wa(a){0<a%65536&&(a+=65536-a%65536);return a}var buffer,l,F,Ha,D,Ja,Ka;
|
||||||
|
function Xa(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ha=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=F=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=Ja=new Float32Array(buffer);f.HEAPF64=Ka=new Float64Array(buffer)}var Ca=60128,Ya=f.TOTAL_MEMORY||16777216;5242880>Ya&&C("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ya+"! (TOTAL_STACK=5242880)");
|
||||||
|
f.buffer?buffer=f.buffer:"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(La=new WebAssembly.Memory({initial:Ya/65536}),buffer=La.buffer):buffer=new ArrayBuffer(Ya);Xa();D[Ca>>2]=5303264;function Za(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var c=b.rc;"number"===typeof c?void 0===b.Fb?f.dynCall_v(c):f.dynCall_vi(c,b.Fb):c(void 0===b.Fb?null:b.Fb)}}}var $a=[],ab=[],bb=[],cb=[],db=!1;function eb(){var a=f.preRun.shift();$a.unshift(a)}
|
||||||
|
var Pa=Math.abs,Qa=Math.ceil,H=0,fb=null,gb=null;f.preloadedImages={};f.preloadedAudios={};function hb(){var a=I;return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,")}var I="sql-wasm.wasm";if(!hb()){var jb=I;I=f.locateFile?f.locateFile(jb,A):A+jb}
|
||||||
|
function kb(){try{if(f.wasmBinary)return new Uint8Array(f.wasmBinary);if(f.readBinary)return f.readBinary(I);throw"both async and sync fetching of the wasm failed";}catch(a){B(a)}}function lb(){return f.wasmBinary||!v&&!w||"function"!==typeof fetch?new Promise(function(a){a(kb())}):fetch(I,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+I+"'";return a.arrayBuffer()}).catch(function(){return kb()})}
|
||||||
|
function mb(a){function b(a){f.asm=a.exports;H--;f.monitorRunDependencies&&f.monitorRunDependencies(H);0==H&&(null!==fb&&(clearInterval(fb),fb=null),gb&&(a=gb,gb=null,a()))}function c(a){b(a.instance)}function d(a){lb().then(function(a){return WebAssembly.instantiate(a,e)}).then(a,function(a){C("failed to asynchronously prepare wasm: "+a);B(a)})}var e={env:a,global:{NaN:NaN,Infinity:Infinity},"global.Math":Math,asm2wasm:Fa};H++;f.monitorRunDependencies&&f.monitorRunDependencies(H);if(f.instantiateWasm)try{return f.instantiateWasm(e,
|
||||||
|
b)}catch(g){return C("Module.instantiateWasm callback failed with error: "+g),!1}f.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||hb()||"function"!==typeof fetch?d(c):WebAssembly.instantiateStreaming(fetch(I,{credentials:"same-origin"}),e).then(c,function(a){C("wasm streaming compile failed: "+a);C("falling back to ArrayBuffer instantiation");d(c)});return{}}
|
||||||
|
f.asm=function(a,b){b.memory=La;b.table=new WebAssembly.Table({initial:2560,maximum:2560,element:"anyfunc"});b.__memory_base=1024;b.__table_base=0;return mb(b)};ab.push({rc:function(){nb()}});var J={};
|
||||||
|
function ob(a){if(ob.rb){var b=D[a>>2];var c=D[b>>2]}else ob.rb=!0,J.USER=J.LOGNAME="web_user",J.PATH="/",J.PWD="/",J.HOME="/home/web_user",J.LANG="C.UTF-8",J._=f.thisProgram,c=db?Ta(1024):Ba(1024),b=db?Ta(256):Ba(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in J)if("string"===typeof J[e]){var g=e+"="+J[e];a.push(g);d+=g.length}if(1024<d)throw Error("Environment size exceeded TOTAL_ENV_SIZE!");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,m=0;m<d.length;++m)l[k++>>0]=d.charCodeAt(m);l[k>>0]=0;D[b+
|
||||||
|
4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function pb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function qb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function rb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}
|
||||||
|
function sb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function tb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function ub(){var a=Array.prototype.slice.call(arguments,0);return rb(a.join("/"))}function n(a,b){return rb(a+"/"+b)}
|
||||||
|
function vb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var wb=[];function xb(a,b){wb[a]={input:[],output:[],ub:b};yb(a,zb)}
|
||||||
|
var zb={open:function(a){var b=wb[a.node.rdev];if(!b)throw new K(L.Cb);a.tty=b;a.seekable=!1},close:function(a){a.tty.ub.flush(a.tty)},flush:function(a){a.tty.ub.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.ub.Xb)throw new K(L.Ob);for(var e=0,g=0;g<d;g++){try{var k=a.tty.ub.Xb(a.tty)}catch(m){throw new K(L.Lb);}if(void 0===k&&0===e)throw new K(L.ac);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.ub.Ib)throw new K(L.Ob);
|
||||||
|
try{for(var e=0;e<d;e++)a.tty.ub.Ib(a.tty,b[c+e])}catch(g){throw new K(L.Lb);}d&&(a.node.timestamp=Date.now());return e}},Ab={Xb:function(a){if(!a.input.length){var b=null;if(x){var c=new Buffer(256),d=0,e=process.stdin.fd;if("win32"!=process.platform){var g=!1;try{e=fs.openSync("/dev/stdin","r"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf("EOF"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString("utf-8"):b=null}else"undefined"!=typeof window&&
|
||||||
|
"function"==typeof window.prompt?(b=window.prompt("Input: "),null!==b&&(b+="\n")):"function"==typeof readline&&(b=readline(),null!==b&&(b+="\n"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},Ib:function(a,b){null===b||10===b?(Aa(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Aa(t(a.output,0)),a.output=[])}},Bb={Ib:function(a,b){null===b||10===b?(C(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&
|
||||||
|
(C(t(a.output,0)),a.output=[])}},M={mb:null,jb:function(){return M.createNode(null,"/",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new K(L.dc);M.mb||(M.mb={dir:{node:{lb:M.ab.lb,hb:M.ab.hb,lookup:M.ab.lookup,vb:M.ab.vb,rename:M.ab.rename,unlink:M.ab.unlink,rmdir:M.ab.rmdir,readdir:M.ab.readdir,symlink:M.ab.symlink},stream:{ob:M.cb.ob}},file:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:{ob:M.cb.ob,read:M.cb.read,write:M.cb.write,Pb:M.cb.Pb,zb:M.cb.zb,Ab:M.cb.Ab}},link:{node:{lb:M.ab.lb,
|
||||||
|
hb:M.ab.hb,readlink:M.ab.readlink},stream:{}},Sb:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:Cb}});c=Db(a,b,c,d);N(c.mode)?(c.ab=M.mb.dir.node,c.cb=M.mb.dir.stream,c.bb={}):32768===(c.mode&61440)?(c.ab=M.mb.file.node,c.cb=M.mb.file.stream,c.gb=0,c.bb=null):40960===(c.mode&61440)?(c.ab=M.mb.link.node,c.cb=M.mb.link.stream):8192===(c.mode&61440)&&(c.ab=M.mb.Sb.node,c.cb=M.mb.Sb.stream);c.timestamp=Date.now();a&&(a.bb[b]=c);return c},ff:function(a){if(a.bb&&a.bb.subarray){for(var b=[],c=0;c<a.gb;++c)b.push(a.bb[c]);
|
||||||
|
return b}return a.bb},gf:function(a){return a.bb?a.bb.subarray?a.bb.subarray(0,a.gb):new Uint8Array(a.bb):new Uint8Array},Tb:function(a,b){var c=a.bb?a.bb.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.bb,a.bb=new Uint8Array(b),0<a.gb&&a.bb.set(c.subarray(0,a.gb),0))},yc:function(a,b){if(a.gb!=b)if(0==b)a.bb=null,a.gb=0;else{if(!a.bb||a.bb.subarray){var c=a.bb;a.bb=new Uint8Array(new ArrayBuffer(b));c&&a.bb.set(c.subarray(0,Math.min(b,a.gb)))}else if(a.bb||(a.bb=
|
||||||
|
[]),a.bb.length>b)a.bb.length=b;else for(;a.bb.length<b;)a.bb.push(0);a.gb=b}},ab:{lb:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;N(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.gb:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.pb=4096;b.blocks=Math.ceil(b.size/b.pb);return b},hb:function(a,b){void 0!==b.mode&&(a.mode=
|
||||||
|
b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&M.yc(a,b.size)},lookup:function(){throw Eb[L.bc];},vb:function(a,b,c,d){return M.createNode(a,b,c,d)},rename:function(a,b,c){if(N(a.mode)){try{var d=O(b,c)}catch(g){}if(d)for(var e in d.bb)throw new K(L.Nb);}delete a.parent.bb[a.name];a.name=c;b.bb[c]=a;a.parent=b},unlink:function(a,b){delete a.bb[b]},rmdir:function(a,b){var c=O(a,b),d;for(d in c.bb)throw new K(L.Nb);delete a.bb[b]},readdir:function(a){var b=[".",".."],c;for(c in a.bb)a.bb.hasOwnProperty(c)&&
|
||||||
|
b.push(c);return b},symlink:function(a,b,c){a=M.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new K(L.ib);return a.link}},cb:{read:function(a,b,c,d,e){var g=a.node.bb;if(e>=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.bb||a.bb.subarray)){if(g)return a.bb=b.subarray(c,
|
||||||
|
c+d),a.gb=d;if(0===a.gb&&0===e)return a.bb=new Uint8Array(b.subarray(c,c+d)),a.gb=d;if(e+d<=a.gb)return a.bb.set(b.subarray(c,c+d),e),d}M.Tb(a,e+d);if(a.bb.subarray&&b.subarray)a.bb.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.bb[e+g]=b[c+g];a.gb=Math.max(a.gb,e+d);return d},ob:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.gb);if(0>b)throw new K(L.ib);return b},Pb:function(a,b,c){M.Tb(a.node,b+c);a.node.gb=Math.max(a.node.gb,b+c)},zb:function(a,b,c,d,e,g,k){if(32768!==
|
||||||
|
(a.node.mode&61440))throw new K(L.Cb);c=a.node.bb;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.gb)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Ta(d);if(!d)throw new K(L.Mb);b.set(c,d)}else a=!1,d=c.byteOffset;return{xc:d,Db:a}},Ab:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new K(L.Cb);if(e&2)return 0;M.cb.write(a,b,0,d,c,!1);return 0}}},P={yb:!1,Ac:function(){P.yb=!!process.platform.match(/^win/);var a=process.binding("constants");a.fs&&
|
||||||
|
(a=a.fs);P.Ub={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Rb:function(a){return Buffer.rb?Buffer.from(a):new Buffer(a)},jb:function(a){assert(x);return P.createNode(null,"/",P.Wb(a.Hb.root),0)},createNode:function(a,b,c){if(!N(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new K(L.ib);a=Db(a,b,c);a.ab=P.ab;a.cb=P.cb;return a},Wb:function(a){try{var b=fs.lstatSync(a);P.yb&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;
|
||||||
|
throw new K(L[c.code]);}return b.mode},kb:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.jb.Hb.root);b.reverse();return ub.apply(null,b)},qc:function(a){a&=-2656257;var b=0,c;for(c in P.Ub)a&c&&(b|=P.Ub[c],a^=c);if(a)throw new K(L.ib);return b},ab:{lb:function(a){a=P.kb(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}P.yb&&!b.pb&&(b.pb=4096);P.yb&&!b.blocks&&(b.blocks=(b.size+b.pb-1)/b.pb|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,
|
||||||
|
uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,pb:b.pb,blocks:b.blocks}},hb:function(a,b){var c=P.kb(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},lookup:function(a,b){var c=n(P.kb(a),b);c=P.Wb(c);return P.createNode(a,b,c)},vb:function(a,b,c,d){a=P.createNode(a,b,c,d);b=P.kb(a);try{N(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e;
|
||||||
|
throw new K(L[e.code]);}return a},rename:function(a,b,c){a=P.kb(a);b=n(P.kb(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},unlink:function(a,b){a=n(P.kb(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},rmdir:function(a,b){a=n(P.kb(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},readdir:function(a){a=P.kb(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new K(L[b.code]);}},symlink:function(a,
|
||||||
|
b,c){a=n(P.kb(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},readlink:function(a){var b=P.kb(a);try{return b=fs.readlinkSync(b),b=Fb.relative(Fb.resolve(a.jb.Hb.root),b)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}}},cb:{open:function(a){var b=P.kb(a.node);try{32768===(a.node.mode&61440)&&(a.wb=fs.openSync(b,P.qc(a.flags)))}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.wb&&fs.closeSync(a.wb)}catch(b){if(!b.code)throw b;
|
||||||
|
throw new K(L[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},ob:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.wb).size}catch(d){throw new K(L[d.code]);}if(0>b)throw new K(L.ib);return b}}},Gb=null,Hb={},Q=[],Ib=1,R=null,Jb=!0,S={},K=null,
|
||||||
|
Eb={};function T(a,b){a=vb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={Vb:!0,Jb:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Jb)throw new K(40);a=qb(a.split("/").filter(function(a){return!!a}),!1);var e=Gb;c="/";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=O(e,a[d]);c=n(c,a[d]);e.sb&&(!g||g&&b.Vb)&&(e=e.sb.root);if(!g||b.qb)for(g=0;40960===(e.mode&61440);)if(e=Kb(c),c=vb(sb(c),e),e=T(c,{Jb:b.Jb}).node,40<g++)throw new K(40);}return{path:c,node:e}}
|
||||||
|
function Lb(a){for(var b;;){if(a===a.parent)return a=a.jb.Yb,b?"/"!==a[a.length-1]?a+"/"+b:a+b:a;b=b?a.name+"/"+b:a.name;a=a.parent}}function Mb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%R.length}function Nb(a){var b=Mb(a.parent.id,a.name);a.tb=R[b];R[b]=a}function Ob(a){var b=Mb(a.parent.id,a.name);if(R[b]===a)R[b]=a.tb;else for(b=R[b];b;){if(b.tb===a){b.tb=a.tb;break}b=b.tb}}
|
||||||
|
function O(a,b){var c;if(c=(c=Pb(a,"x"))?c:a.ab.lookup?0:13)throw new K(c,a);for(c=R[Mb(a.id,b)];c;c=c.tb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ab.lookup(a,b)}
|
||||||
|
function Db(a,b,c,d){Qb||(Qb=function(a,b,c,d){a||(a=this);this.parent=a;this.jb=a.jb;this.sb=null;this.id=Ib++;this.name=b;this.mode=c;this.ab={};this.cb={};this.rdev=d},Qb.prototype={},Object.defineProperties(Qb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Qb(a,b,c,d);Nb(a);return a}
|
||||||
|
function N(a){return 16384===(a&61440)}var Rb={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function ic(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Pb(a,b){if(Jb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 13}else return 13;return 0}function tc(a,b){try{return O(a,b),17}catch(c){}return Pb(a,"wx")}
|
||||||
|
function uc(a,b,c){try{var d=O(a,b)}catch(e){return e.eb}if(a=Pb(a,"wx"))return a;if(c){if(!N(d.mode))return 20;if(d===d.parent||"/"===Lb(d))return 16}else if(N(d.mode))return 21;return 0}function vc(a){var b=4096;for(a=a||0;a<=b;a++)if(!Q[a])return a;throw new K(24);}
|
||||||
|
function wc(a,b){xc||(xc=function(){},xc.prototype={},Object.defineProperties(xc.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new xc,d;for(d in a)c[d]=a[d];a=c;b=vc(b);a.fd=b;return Q[b]=a}var Cb={open:function(a){a.cb=Hb[a.node.rdev].cb;a.cb.open&&a.cb.open(a)},ob:function(){throw new K(29);}};function yb(a,b){Hb[a]={cb:b}}
|
||||||
|
function yc(a,b){var c="/"===b,d=!b;if(c&&Gb)throw new K(16);if(!c&&!d){var e=T(b,{Vb:!1});b=e.path;e=e.node;if(e.sb)throw new K(16);if(!N(e.mode))throw new K(20);}b={type:a,Hb:{},Yb:b,wc:[]};a=a.jb(b);a.jb=b;b.root=a;c?Gb=a:e&&(e.sb=b,e.jb&&e.jb.wc.push(b))}function ja(a,b,c){var d=T(a,{parent:!0}).node;a=tb(a);if(!a||"."===a||".."===a)throw new K(22);var e=tc(d,a);if(e)throw new K(e);if(!d.ab.vb)throw new K(1);return d.ab.vb(d,a,b,c)}function U(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}
|
||||||
|
function zc(a,b,c){"undefined"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function Ac(a,b){if(!vb(a))throw new K(2);var c=T(b,{parent:!0}).node;if(!c)throw new K(2);b=tb(b);var d=tc(c,b);if(d)throw new K(d);if(!c.ab.symlink)throw new K(1);c.ab.symlink(c,b,a)}
|
||||||
|
function ta(a){var b=T(a,{parent:!0}).node,c=tb(a),d=O(b,c),e=uc(b,c,!1);if(e)throw new K(e);if(!b.ab.unlink)throw new K(1);if(d.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.ab.unlink(b,c);Ob(d);try{if(S.onDeletePath)S.onDeletePath(a)}catch(g){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}}
|
||||||
|
function Kb(a){a=T(a).node;if(!a)throw new K(2);if(!a.ab.readlink)throw new K(22);return vb(Lb(a.parent),a.ab.readlink(a))}function ra(a,b){a=T(a,{qb:!b}).node;if(!a)throw new K(2);if(!a.ab.lb)throw new K(1);return a.ab.lb(a)}function Bc(a){return ra(a,!0)}function ka(a,b){var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);c.ab.hb(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}
|
||||||
|
function Cc(a){var b;"string"===typeof a?b=T(a,{qb:!0}).node:b=a;if(!b.ab.hb)throw new K(1);b.ab.hb(b,{timestamp:Date.now()})}function Dc(a,b){if(0>b)throw new K(22);var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);if(N(c.mode))throw new K(21);if(32768!==(c.mode&61440))throw new K(22);if(a=Pb(c,"w"))throw new K(a);c.ab.hb(c,{size:b,timestamp:Date.now()})}
|
||||||
|
function p(a,b,c,d){if(""===a)throw new K(2);if("string"===typeof b){var e=Rb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=rb(a);try{g=T(a,{qb:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new K(17);}else g=ja(a,c,0),e=!0;if(!g)throw new K(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!N(g.mode))throw new K(20);if(!e&&(c=g?40960===(g.mode&61440)?40:N(g.mode)&&
|
||||||
|
("r"!==ic(b)||b&512)?21:Pb(g,ic(b)):2))throw new K(c);b&512&&Dc(g,0);b&=-641;d=wc({node:g,path:Lb(g),flags:b,seekable:!0,position:0,cb:g.cb,Bc:[],error:!1},d);d.cb.open&&d.cb.open(d);!f.logReadFiles||b&1||(Ec||(Ec={}),a in Ec||(Ec[a]=1,console.log("FS.trackingDelegate error on read file: "+a)));try{S.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),S.onOpenFile(a,g))}catch(k){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d}
|
||||||
|
function ma(a){if(null===a.fd)throw new K(9);a.Gb&&(a.Gb=null);try{a.cb.close&&a.cb.close(a)}catch(b){throw b;}finally{Q[a.fd]=null}a.fd=null}function Fc(a,b,c){if(null===a.fd)throw new K(9);if(!a.seekable||!a.cb.ob)throw new K(29);if(0!=c&&1!=c&&2!=c)throw new K(22);a.position=a.cb.ob(a,b,c);a.Bc=[]}
|
||||||
|
function sa(a,b,c,d,e){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(1===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.read)throw new K(22);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.read(a,b,c,d,e);g||(a.position+=b);return b}
|
||||||
|
function la(a,b,c,d,e,g){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(0===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.write)throw new K(22);a.flags&1024&&Fc(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&S.onWriteToFile)S.onWriteToFile(a.path)}catch(m){console.log("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+m.message)}return b}
|
||||||
|
function Gc(){K||(K=function(a,b){this.node=b;this.zc=function(a){this.eb=a};this.zc(a);this.message="FS error";this.stack&&Object.defineProperty(this,"stack",{value:Error().stack,writable:!0})},K.prototype=Error(),K.prototype.constructor=K,[2].forEach(function(a){Eb[a]=new K(a);Eb[a].stack="<generic error, no stack>"}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}
|
||||||
|
function Ic(a,b,c){a=n("/dev",a);var d=ia(!!b,!!c);Jc||(Jc=64);var e=Jc++<<8|0;yb(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var m=b()}catch(Ia){throw new K(5);}if(void 0===m&&0===g)throw new K(11);if(null===m||void 0===m)break;g++;c[d+k]=m}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(fa){throw new K(5);}e&&(a.node.timestamp=Date.now());return g}});
|
||||||
|
zc(a,d,e)}
|
||||||
|
var Jc,V={},Qb,xc,Ec,L={dc:1,bc:2,Ae:3,sd:4,Lb:5,Ob:6,Ic:7,Td:8,Kb:9,Xc:10,ac:11,Ke:11,Mb:12,$b:13,ld:14,ee:15,Vc:16,kd:17,Le:18,Cb:19,cc:20,ud:21,ib:22,Od:23,Gd:24,je:25,He:26,md:27,ae:28,ze:29,ve:30,Hd:31,pe:32,gd:33,ec:34,Xd:42,pd:43,Yc:44,wd:45,xd:46,yd:47,Ed:48,Ie:49,Rd:50,vd:51,cd:35,Ud:37,Oc:52,Rc:53,Me:54,Pd:55,Sc:56,Tc:57,dd:35,Uc:59,ce:60,Sd:61,Ee:62,be:63,Yd:64,Zd:65,ue:66,Vd:67,Lc:68,Be:69,Zc:70,qe:71,Jd:72,hd:73,Qc:74,ke:76,Pc:77,te:78,zd:79,Ad:80,Dd:81,Cd:82,Bd:83,de:38,Nb:39,Kd:36,
|
||||||
|
Fd:40,le:95,oe:96,bd:104,Qd:105,Mc:97,se:91,he:88,$d:92,xe:108,ad:111,Jc:98,$c:103,Nd:101,Ld:100,Fe:110,nd:112,od:113,rd:115,Nc:114,ed:89,Id:90,re:93,ye:94,Kc:99,Md:102,td:106,fe:107,Ge:109,Je:87,jd:122,Ce:116,ie:95,Wd:123,qd:84,me:75,Wc:125,ge:131,ne:130,De:86},Kc={};
|
||||||
|
function Lc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&rb(b)!==rb(Lb(e.node)))return-L.cc;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var W=0;
|
||||||
|
function X(){W+=4;return D[W-4>>2]}function Y(){return G(X())}function Z(){var a=Q[X()];if(!a)throw new K(L.Kb);return a}function Da(){return l.length}function Ea(a){if(2147418112<a)return!1;for(var b=Math.max(Da(),16777216);b<a;)536870912>=b?b=Wa(2*b):b=Math.min(Wa((3*b+2147483648)/4),2147418112);a=Wa(b);var c=buffer.byteLength;try{var d=-1!==La.grow((a-c)/65536)?buffer=La.buffer:null}catch(e){d=null}if(!d||d.byteLength!=b)return!1;Xa();return!0}
|
||||||
|
function Mc(a){if(0===a)return 0;a=G(a);if(!J.hasOwnProperty(a))return 0;Mc.rb&&ha(Mc.rb);a=J[a];var b=oa(a)+1,c=Ta(b);c&&r(a,l,c,b);Mc.rb=c;return Mc.rb}r("GMT",F,60272,4);
|
||||||
|
function Nc(){function a(a){return(a=a.toTimeString().match(/\(([A-Za-z ]+)\)$/))?a[1]:"GMT"}if(!Oc){Oc=!0;D[Pc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Qc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ea(ba(d));e=ea(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Rc()>>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc;
|
||||||
|
function Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Sc;Gc();R=Array(4096);yc(M,"/");U("/tmp");U("/home");U("/home/web_user");
|
||||||
|
(function(){U("/dev");yb(259,{read:function(){return 0},write:function(a,b,c,k){return k}});zc("/dev/null",259);xb(1280,Ab);xb(1536,Bb);zc("/dev/tty",1280);zc("/dev/tty1",1536);if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(x)try{var c=require("crypto");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){B("random_device")});Ic("random",b);Ic("urandom",b);U("/dev/shm");
|
||||||
|
U("/dev/shm/tmp")})();U("/proc");U("/proc/self");U("/proc/self/fd");yc({jb:function(){var a=Db("/proc/self","fd",16895,73);a.ab={lookup:function(a,c){var b=Q[+c];if(!b)throw new K(9);a={parent:null,jb:{Yb:"fake"},ab:{readlink:function(){return b.path}}};return a.parent=a}};return a}},"/proc/self/fd");if(x){var fs=require("fs"),Fb=require("path");P.Ac()}function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}
|
||||||
|
var Vc=f.asm({},{n:B,l:function(a){return E[a]()},i:function(a,b){return E[a](b)},h:function(a,b,c){return E[a](b,c)},g:function(a,b,c,d){return E[a](b,c,d)},f:function(a,b,c,d,e){return E[a](b,c,d,e)},e:function(a,b,c,d,e,g){return E[a](b,c,d,e,g)},d:function(a,b,c,d,e,g,k){return E[a](b,c,d,e,g,k)},B:function(a,b,c,d,e){return E[a](b,c,d,e)},A:function(a,b,c){return E[a](b,c)},z:function(a,b,c,d){return E[a](b,c,d)},y:function(a,b,c,d,e){return E[a](b,c,d,e)},c:function(a,b){E[a](b)},b:function(a,
|
||||||
|
b,c){E[a](b,c)},k:function(a,b,c,d){E[a](b,c,d)},j:function(a,b,c,d,e){E[a](b,c,d,e)},x:function(a,b,c,d,e,g){E[a](b,c,d,e,g)},w:function(a,b,c,d){E[a](b,c,d)},v:function(a,b,c,d){E[a](b,c,d)},m:function(a,b,c,d){B("Assertion failed: "+G(a)+", at: "+[b?G(b):"unknown filename",c,d?G(d):"unknown function"])},ga:ob,u:pb,fa:function(a,b){W=b;try{var c=Y();ta(c);return 0}catch(d){return"undefined"!==typeof V&&d instanceof K||B(d),-d.eb}},ea:function(a,b){W=b;try{return Z(),0}catch(c){return"undefined"!==
|
||||||
|
typeof V&&c instanceof K||B(c),-c.eb}},da:function(a,b){W=b;try{var c=Z();X();var d=X(),e=X(),g=X();Fc(c,d,g);D[e>>2]=c.position;c.Gb&&0===d&&0===g&&(c.Gb=null);return 0}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},ca:function(a,b){W=b;try{var c=Y(),d=X();ka(c,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},ba:function(a,b){W=b;try{var c=X(),d=X();if(0===d)return-L.ib;if(d<oa("/")+1)return-L.ec;r("/",F,c,d);return c}catch(e){return"undefined"!==
|
||||||
|
typeof V&&e instanceof K||B(e),-e.eb}},aa:function(a,b){W=b;try{var c=X(),d=X(),e=X(),g=X(),k=X(),m=X();m<<=12;a=!1;if(-1===k){var y=Tc(16384,d);if(!y)return-L.Mb;Uc(y,0,d);a=!0}else{var z=Q[k];if(!z)return-L.Kb;b=F;if(1===(z.flags&2097155))throw new K(13);if(!z.cb.zb)throw new K(19);var fa=z.cb.zb(z,b,c,d,m,e,g);y=fa.xc;a=fa.Db}Kc[y]={vc:y,uc:d,Db:a,fd:k,flags:g};return y}catch(ca){return"undefined"!==typeof V&&ca instanceof K||B(ca),-ca.eb}},$:function(a,b){W=b;try{var c=X();X();var d=X();X();var e=
|
||||||
|
Q[c];if(!e)throw new K(9);if(0===(e.flags&2097155))throw new K(22);Dc(e.node,d);return 0}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},t:function(a,b){W=b;try{var c=Y(),d=X();return Lc(ra,c,d)}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},_:function(a,b){W=b;try{var c=Y(),d=X();return Lc(Bc,c,d)}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},Z:function(a,b){W=b;try{var c=Z(),d=X();return Lc(ra,c.path,d)}catch(e){return"undefined"!==
|
||||||
|
typeof V&&e instanceof K||B(e),-e.eb}},Y:function(a,b){W=b;return 42},X:function(a,b){W=b;return 0},W:function(a,b){W=b;try{var c=X();X();X();var d=Q[c];if(!d)throw new K(9);Cc(d.node);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},V:function(a,b){W=b;try{var c=Y();X();X();Cc(c);return 0}catch(d){return"undefined"!==typeof V&&d instanceof K||B(d),-d.eb}},o:function(a,b){W=b;try{var c=Z();switch(X()){case 0:var d=X();return 0>d?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;
|
||||||
|
case 3:return c.flags;case 4:return d=X(),c.flags|=d,0;case 12:return d=X(),Ha[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-L.ib;case 9:return pb(L.ib),-1;default:return-L.ib}}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},U:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return sa(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},T:function(a,b){W=b;try{var c=Y();var d=X();if(d&-8)var e=-L.ib;else{var g=T(c,{qb:!0}).node;a="";d&4&&(a+="r");
|
||||||
|
d&2&&(a+="w");d&1&&(a+="x");e=a&&Pb(g,a)?-L.$b:0}return e}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},S:function(a,b){W=b;try{var c=Y(),d=X();a=c;a=rb(a);"/"===a[a.length-1]&&(a=a.substr(0,a.length-1));U(a,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},R:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return la(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},Q:function(a,b){W=b;try{var c=Y(),d=T(c,{parent:!0}).node,
|
||||||
|
e=tb(c),g=O(d,e),k=uc(d,e,!0);if(k)throw new K(k);if(!d.ab.rmdir)throw new K(1);if(g.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(c)}catch(m){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+m.message)}d.ab.rmdir(d,e);Ob(g);try{if(S.onDeletePath)S.onDeletePath(c)}catch(m){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+m.message)}return 0}catch(m){return"undefined"!==typeof V&&m instanceof K||B(m),-m.eb}},P:function(a,b){W=
|
||||||
|
b;try{var c=Y(),d=X(),e=X();return p(c,d,e).fd}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},s:function(a,b){W=b;try{var c=Z();ma(c);return 0}catch(d){return"undefined"!==typeof V&&d instanceof K||B(d),-d.eb}},O:function(a,b){W=b;try{var c=Y(),d=X();var e=X();if(0>=e)var g=-L.ib;else{var k=Kb(c),m=Math.min(e,oa(k)),y=l[d+m];r(k,F,d,e+1);l[d+m]=y;g=m}return g}catch(z){return"undefined"!==typeof V&&z instanceof K||B(z),-z.eb}},N:function(a,b){W=b;try{var c=X(),d=X(),e=Kc[c];if(!e)return 0;
|
||||||
|
if(d===e.uc){var g=Q[e.fd],k=e.flags,m=new Uint8Array(F.subarray(c,c+d));g&&g.cb.Ab&&g.cb.Ab(g,m,0,d,k);Kc[c]=null;e.Db&&ha(e.vc)}return 0}catch(y){return"undefined"!==typeof V&&y instanceof K||B(y),-y.eb}},M:function(a,b){W=b;try{var c=X(),d=X(),e=Q[c];if(!e)throw new K(9);ka(e.node,d);return 0}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},L:Da,K:function(a,b,c){F.set(F.subarray(b,b+c),a)},J:Ea,r:Mc,q:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},
|
||||||
|
I:function(a){return Math.log(a)/Math.LN10},p:function(){B("trap!")},H:function(a){Nc();a=new Date(1E3*D[a>>2]);D[15056]=a.getSeconds();D[15057]=a.getMinutes();D[15058]=a.getHours();D[15059]=a.getDate();D[15060]=a.getMonth();D[15061]=a.getFullYear()-1900;D[15062]=a.getDay();var b=new Date(a.getFullYear(),0,1);D[15063]=(a.getTime()-b.getTime())/864E5|0;D[15065]=-(60*a.getTimezoneOffset());var c=(new Date(2E3,6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b,
|
||||||
|
c))|0;D[15064]=a;a=D[Rc()+(a?4:0)>>2];D[15066]=a;return 60224},G:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Sc(1E6*c+a/1E3)},F:function(a){switch(a){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;
|
||||||
|
case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;
|
||||||
|
case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1},
|
||||||
|
E:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},D:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=G(a);try{b=c;var d=T(a,{qb:!0}).node;d.ab.hb(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof K)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+="\n"+f.extraStackTrace());d=Va(d);throw a+d;}pb(a.eb);return-1}},C:function(){B("OOM")},
|
||||||
|
a:Ca},buffer);f.asm=Vc;f._RegisterExtensionFunctions=function(){return f.asm.ha.apply(null,arguments)};var nb=f.___emscripten_environ_constructor=function(){return f.asm.ia.apply(null,arguments)};f.___errno_location=function(){return f.asm.ja.apply(null,arguments)};
|
||||||
|
var Qc=f.__get_daylight=function(){return f.asm.ka.apply(null,arguments)},Pc=f.__get_timezone=function(){return f.asm.la.apply(null,arguments)},Rc=f.__get_tzname=function(){return f.asm.ma.apply(null,arguments)},ha=f._free=function(){return f.asm.na.apply(null,arguments)},Ta=f._malloc=function(){return f.asm.oa.apply(null,arguments)},Tc=f._memalign=function(){return f.asm.pa.apply(null,arguments)},Uc=f._memset=function(){return f.asm.qa.apply(null,arguments)};
|
||||||
|
f._sqlite3_bind_blob=function(){return f.asm.ra.apply(null,arguments)};f._sqlite3_bind_double=function(){return f.asm.sa.apply(null,arguments)};f._sqlite3_bind_int=function(){return f.asm.ta.apply(null,arguments)};f._sqlite3_bind_parameter_index=function(){return f.asm.ua.apply(null,arguments)};f._sqlite3_bind_text=function(){return f.asm.va.apply(null,arguments)};f._sqlite3_changes=function(){return f.asm.wa.apply(null,arguments)};f._sqlite3_clear_bindings=function(){return f.asm.xa.apply(null,arguments)};
|
||||||
|
f._sqlite3_close_v2=function(){return f.asm.ya.apply(null,arguments)};f._sqlite3_column_blob=function(){return f.asm.za.apply(null,arguments)};f._sqlite3_column_bytes=function(){return f.asm.Aa.apply(null,arguments)};f._sqlite3_column_double=function(){return f.asm.Ba.apply(null,arguments)};f._sqlite3_column_name=function(){return f.asm.Ca.apply(null,arguments)};f._sqlite3_column_text=function(){return f.asm.Da.apply(null,arguments)};f._sqlite3_column_type=function(){return f.asm.Ea.apply(null,arguments)};
|
||||||
|
f._sqlite3_create_function_v2=function(){return f.asm.Fa.apply(null,arguments)};f._sqlite3_data_count=function(){return f.asm.Ga.apply(null,arguments)};f._sqlite3_errmsg=function(){return f.asm.Ha.apply(null,arguments)};f._sqlite3_exec=function(){return f.asm.Ia.apply(null,arguments)};f._sqlite3_finalize=function(){return f.asm.Ja.apply(null,arguments)};f._sqlite3_free=function(){return f.asm.Ka.apply(null,arguments)};f._sqlite3_open=function(){return f.asm.La.apply(null,arguments)};
|
||||||
|
f._sqlite3_prepare_v2=function(){return f.asm.Ma.apply(null,arguments)};f._sqlite3_reset=function(){return f.asm.Na.apply(null,arguments)};f._sqlite3_result_double=function(){return f.asm.Oa.apply(null,arguments)};f._sqlite3_result_null=function(){return f.asm.Pa.apply(null,arguments)};f._sqlite3_result_text=function(){return f.asm.Qa.apply(null,arguments)};f._sqlite3_step=function(){return f.asm.Ra.apply(null,arguments)};f._sqlite3_value_blob=function(){return f.asm.Sa.apply(null,arguments)};
|
||||||
|
f._sqlite3_value_bytes=function(){return f.asm.Ta.apply(null,arguments)};f._sqlite3_value_double=function(){return f.asm.Ua.apply(null,arguments)};f._sqlite3_value_int=function(){return f.asm.Va.apply(null,arguments)};f._sqlite3_value_text=function(){return f.asm.Wa.apply(null,arguments)};f._sqlite3_value_type=function(){return f.asm.Xa.apply(null,arguments)};
|
||||||
|
var h=f.stackAlloc=function(){return f.asm.Za.apply(null,arguments)},qa=f.stackRestore=function(){return f.asm._a.apply(null,arguments)},na=f.stackSave=function(){return f.asm.$a.apply(null,arguments)};f.dynCall_vi=function(){return f.asm.Ya.apply(null,arguments)};f.asm=Vc;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return"number"===a});return"string"!==b&&e&&!d?Na(a):function(){return Oa(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;
|
||||||
|
function Wc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Wc.prototype=Error();Wc.prototype.constructor=Wc;gb=function Xc(){f.calledRun||Yc();f.calledRun||(gb=Xc)};
|
||||||
|
function Yc(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Ma)){db||(db=!0,f.noFSInit||Hc||(Hc=!0,Gc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Ic("stdin",f.stdin):Ac("/dev/tty","/dev/stdin"),f.stdout?Ic("stdout",null,f.stdout):Ac("/dev/tty","/dev/stdout"),f.stderr?Ic("stderr",null,f.stderr):Ac("/dev/tty1","/dev/stderr"),p("/dev/stdin","r"),p("/dev/stdout","w"),p("/dev/stderr","w")),Za(ab));Jb=!1;Za(bb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"==
|
||||||
|
typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0<H)){if(f.preRun)for("function"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)eb();Za($a);0<H||f.calledRun||(f.setStatus?(f.setStatus("Running..."),setTimeout(function(){setTimeout(function(){f.setStatus("")},1);a()},1)):a())}}f.run=Yc;
|
||||||
|
function B(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Aa(a),C(a),a=JSON.stringify(a)):a="";Ma=!0;throw"abort("+a+"). Build with -s ASSERTIONS=1 for more info.";}f.abort=B;if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;Yc();
|
||||||
|
|
||||||
|
|
||||||
|
// The shell-pre.js and emcc-generated code goes above
|
||||||
|
return Module;
|
||||||
|
}); // The end of the promise being returned
|
||||||
|
|
||||||
|
return initSqlJsPromise;
|
||||||
|
} // The end of our initSqlJs function
|
||||||
|
|
||||||
|
// This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc
|
||||||
|
// However, we don't want to use the emcc modularization. See shell-pre.js
|
||||||
|
if (typeof exports === 'object' && typeof module === 'object'){
|
||||||
|
module.exports = initSqlJs;
|
||||||
|
// This will allow the module to be used in ES6 or CommonJS
|
||||||
|
module.exports.default = initSqlJs;
|
||||||
|
}
|
||||||
|
else if (typeof define === 'function' && define['amd']) {
|
||||||
|
define([], function() { return initSqlJs; });
|
||||||
|
}
|
||||||
|
else if (typeof exports === 'object'){
|
||||||
|
exports["Module"] = initSqlJs;
|
||||||
|
}
|
||||||
|
|
||||||
BIN
libs/potree/lazylibs/sql.js/sql-wasm.wasm
Normal file
795
libs/potree/potree.css
Normal file
@@ -0,0 +1,795 @@
|
|||||||
|
|
||||||
|
/* CSS - Cascading Style Sheet */
|
||||||
|
/* Palette color codes */
|
||||||
|
/* Palette URL: http://paletton.com/#uid=13p0u0kex8W2uqu8af7lEqaulDE */
|
||||||
|
|
||||||
|
/* Feel free to copy&paste color codes to your application */
|
||||||
|
|
||||||
|
/* As hex codes */
|
||||||
|
.color-primary-0 { color: #19282C } /* Main Primary color */
|
||||||
|
.color-primary-1 { color: #7A8184 }
|
||||||
|
.color-primary-2 { color: #39474B }
|
||||||
|
.color-primary-3 { color: #2D6D82 }
|
||||||
|
.color-primary-4 { color: #108FB9 }
|
||||||
|
|
||||||
|
/* As RGBa codes */
|
||||||
|
.rgba-primary-0 { color: rgba( 25, 40, 44,1) } /* Main Primary color */
|
||||||
|
.rgba-primary-1 { color: rgba(122,129,132,1) }
|
||||||
|
.rgba-primary-2 { color: rgba( 57, 71, 75,1) }
|
||||||
|
.rgba-primary-3 { color: rgba( 45,109,130,1) }
|
||||||
|
.rgba-primary-4 { color: rgba( 16,143,185,1) }
|
||||||
|
|
||||||
|
/* Generated by Paletton.com © 2002-2014 */
|
||||||
|
/* http://paletton.com */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
:root{
|
||||||
|
|
||||||
|
--color-0: rgba( 25, 40, 44, 1);
|
||||||
|
--color-1: rgba(122,129,132, 1);
|
||||||
|
--color-2: rgba( 57, 71, 75, 1);
|
||||||
|
--color-3: rgba( 45,109,130, 1);
|
||||||
|
--color-4: rgba( 16,143,185, 1);
|
||||||
|
|
||||||
|
--bg-color: var(--color-0);
|
||||||
|
--bg-color-2: rgb(60, 80, 85);
|
||||||
|
--bg-light-color: rgba( 48, 61, 65, 1);
|
||||||
|
--bg-dark-color: rgba( 24, 31, 33, 1);
|
||||||
|
--bg-hover-color: var(--color-2);
|
||||||
|
|
||||||
|
--font-color: #9AA1A4;
|
||||||
|
--font-color-2: #ddd;
|
||||||
|
--font-color: #cccccc;
|
||||||
|
--border-color: black;
|
||||||
|
|
||||||
|
--measurement-detail-node-bg-light: var(--color-1);
|
||||||
|
--measurement-detail-node-bg-dark: var(--color-2);
|
||||||
|
--measurement-detail-area-bg-color: #eee;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_sidebar_container{
|
||||||
|
position: absolute;
|
||||||
|
z-index: 0;
|
||||||
|
width: 350px;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: scroll;
|
||||||
|
font-size: 85%;
|
||||||
|
border-right: 1px solid black;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar_root{
|
||||||
|
color: var(--font-color);
|
||||||
|
font-family: Arial,Helvetica,sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_failpage{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: white;
|
||||||
|
position: absolute;
|
||||||
|
margin: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_failpage a{
|
||||||
|
color: initial !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_info_text{
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
text-shadow: 1px 1px 1px black,
|
||||||
|
1px -1px 1px black,
|
||||||
|
-1px 1px 1px black,
|
||||||
|
-1px -1px 1px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_message{
|
||||||
|
width: 500px;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
padding: 5px;
|
||||||
|
margin: 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
color: var(--font-color);
|
||||||
|
font-family: Arial;
|
||||||
|
opacity: 0.8;
|
||||||
|
border: 1px solid black;
|
||||||
|
display: flex;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_message_error{
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_description{
|
||||||
|
position: absolute;
|
||||||
|
top: 10px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
text-align: center;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_sidebar_brand{
|
||||||
|
margin: 1px 20px;
|
||||||
|
line-height: 2em;
|
||||||
|
font-size: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_sidebar_container a{
|
||||||
|
color: #8Aa1c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_quick_buttons{
|
||||||
|
position: absolute;
|
||||||
|
left: 4px;
|
||||||
|
top: 4px;
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
z-index: 10000;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree_menu_toggle{
|
||||||
|
float: left;
|
||||||
|
margin: 0;
|
||||||
|
background: none;
|
||||||
|
width: 2.5em;
|
||||||
|
height: 2.5em;
|
||||||
|
z-index: 100;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_map_toggle{
|
||||||
|
float: left;
|
||||||
|
margin: 0;
|
||||||
|
background: none;
|
||||||
|
width: 2.5em;
|
||||||
|
height: 2.5em;
|
||||||
|
z-index: 100;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_render_area{
|
||||||
|
position: absolute;
|
||||||
|
/*background: linear-gradient(-90deg, red, yellow);*/
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 0px;
|
||||||
|
right: 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 1;
|
||||||
|
-webkit-transition: left .35s;
|
||||||
|
transition: left .35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree-panel {
|
||||||
|
border: 1px solid black;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
padding: 0px;
|
||||||
|
background-color: var(--bg-light-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.potree-panel-heading{
|
||||||
|
background-color: var(--bg-dark-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover, a:visited, a:link, a:active{
|
||||||
|
color: #ccccff;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation{
|
||||||
|
position: absolute;
|
||||||
|
padding: 10px;
|
||||||
|
opacity: 0.5;
|
||||||
|
transform: translate(-50%, -30px);
|
||||||
|
will-change: left, top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-titlebar{
|
||||||
|
color: white;
|
||||||
|
background-color: black;
|
||||||
|
border-radius: 1.5em;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.7);
|
||||||
|
font-size: 1em;
|
||||||
|
opacity: 1;
|
||||||
|
margin: auto;
|
||||||
|
display: table;
|
||||||
|
padding: 1px 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-expand{
|
||||||
|
color: white;
|
||||||
|
font-size: 0.6em;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-action-icon{
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
line-height: 1.5em;
|
||||||
|
text-align: center;
|
||||||
|
font-family: Arial;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-action-icon:hover{
|
||||||
|
filter: drop-shadow(0px 0px 1px white);
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-item {
|
||||||
|
color: white;
|
||||||
|
background-color: black;
|
||||||
|
opacity: 0.5;
|
||||||
|
border-radius: 1.5em;
|
||||||
|
font-size: 1em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
padding: 1px 8px 0px 8px;
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-item:hover {
|
||||||
|
opacity: 1.0;
|
||||||
|
box-shadow: 0 0 5px #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-main{
|
||||||
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-label{
|
||||||
|
display: inline-block;
|
||||||
|
height: 100%;
|
||||||
|
flex-grow: 1;
|
||||||
|
user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
z-index: 100;
|
||||||
|
vertical-align: middle;
|
||||||
|
line-height: 1.5em;
|
||||||
|
font-family: Arial;
|
||||||
|
font-weight: bold;
|
||||||
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-description{
|
||||||
|
position: relative;
|
||||||
|
color: white;
|
||||||
|
background-color: black;
|
||||||
|
padding: 10px;
|
||||||
|
margin: 5px 0px 0px 0px;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: none;
|
||||||
|
max-width: 500px;
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-description-close{
|
||||||
|
filter: invert(100%);
|
||||||
|
float: right;
|
||||||
|
opacity: 0.5;
|
||||||
|
margin: 0px 0px 8px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.annotation-description-content{
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotation-icon{
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
filter: invert(100%);
|
||||||
|
margin: 2px 2px;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
body{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.axis {
|
||||||
|
font: 10px sans-serif;
|
||||||
|
color: var(--font-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.axis path{
|
||||||
|
fill: rgba(255, 255, 255, 0.5);
|
||||||
|
stroke: var(--font-color);
|
||||||
|
shape-rendering: crispEdges;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.axis line {
|
||||||
|
fill: rgba(255, 255, 255, 0.5);
|
||||||
|
stroke: var(--font-color);
|
||||||
|
shape-rendering: crispEdges;
|
||||||
|
opacity: 0.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tick text{
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scene_header{
|
||||||
|
display:flex;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scene_content{
|
||||||
|
padding: 5px 0px 5px 0px;
|
||||||
|
/*background-color: rgba(0, 0, 0, 0.4);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.measurement_content{
|
||||||
|
padding: 5px 15px 5px 10px;
|
||||||
|
/*background-color: rgba(0, 0, 0, 0.4);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.propertypanel_content{
|
||||||
|
padding: 5px 15px 5px 10px;
|
||||||
|
/*background-color: rgba(0, 0, 0, 0.4);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.measurement_value_table{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coordinates_table_container table td {
|
||||||
|
width: 33%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scene_object_properties{
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.pv-panel-heading{
|
||||||
|
padding: 4px !important;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row
|
||||||
|
}
|
||||||
|
|
||||||
|
.pv-menu-list{
|
||||||
|
list-style-type: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 15px 0px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pv-menu-list > *{
|
||||||
|
margin: 4px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-slider {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-selectmenu-button.ui-button{
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pv-menu-list > li > .ui-slider{
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pv-menu-list .ui-slider{
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid black !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-slider-handle{
|
||||||
|
border: 1px solid black !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget{
|
||||||
|
box-sizing:border-box
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-body > li > .ui-slider{
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-body > div > li > .ui-slider{
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pv-select-label{
|
||||||
|
margin: 1px;
|
||||||
|
font-size: 90%;
|
||||||
|
font-weight: 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-icon:hover{
|
||||||
|
/*background-color: #09181C;*/
|
||||||
|
filter: drop-shadow(0px 0px 4px white);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-widget-content{
|
||||||
|
/*color: var(--font-color) !important;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.accordion > h3{
|
||||||
|
background-color: var(--bg-color-2) !important;
|
||||||
|
background: #f6f6f6 50% 50% repeat-x;
|
||||||
|
border: 1px solid black;
|
||||||
|
color: var(--font-color-2);
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 2px 0 0 0;
|
||||||
|
padding: 4px 10px 4px 30px;
|
||||||
|
box-shadow: 0px 3px 3px #111;
|
||||||
|
text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accordion > h3:hover{
|
||||||
|
filter: brightness(125%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.accordion-content{
|
||||||
|
padding: 0px 0px !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bar{
|
||||||
|
height: 4px !important;
|
||||||
|
border: 1px solid black;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.canvas{
|
||||||
|
-webkit-transition: top .35s, left .35s, bottom .35s, right .35s, width .35s;
|
||||||
|
transition: top .35s, left .35s, bottom .35s, right .35s, width .35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#profile_window{
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#profile_titlebar{
|
||||||
|
background-color: var(--bg-color-2);
|
||||||
|
color: var(--font-color-2);
|
||||||
|
text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;
|
||||||
|
font-size: 1em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#profile_window_title{
|
||||||
|
position: absolute;
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-container-button{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.profile-button:hover{
|
||||||
|
background-color: #0000CC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.unselectable{
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectable{
|
||||||
|
user-select: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.divider {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 90%;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
margin-left: 0px;
|
||||||
|
margin-right: 0px;
|
||||||
|
margin-top: 1px;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
padding: 1px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider > span {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider > span:before,
|
||||||
|
.divider > span:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 9999px;
|
||||||
|
height: 1px;
|
||||||
|
background: #b2b2b2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider > span:before {
|
||||||
|
right: 100%;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divider > span:after {
|
||||||
|
left: 100%;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.ol-dragbox {
|
||||||
|
background-color: rgba(255,255,255,0.4);
|
||||||
|
border-color: rgba(100,150,0,1);
|
||||||
|
border: 1px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-icon{
|
||||||
|
opacity: 0.5;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-icon:hover{
|
||||||
|
opacity: 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-grid-cell{
|
||||||
|
flex-grow: 1; margin: 0px 3px 0px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-grid-label{
|
||||||
|
flex-grow: 1;
|
||||||
|
margin: 0px 3px 0px 3px;
|
||||||
|
text-align:center;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-grid-cell > input{
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.invalid_value{
|
||||||
|
color: #e05e5e;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OVERRIDES
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
.ui-spinner-input{
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jstree-themeicon-custom{
|
||||||
|
background-size: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jstree-default .jstree-clicked{
|
||||||
|
/*background-color: #ffffff !important;*/
|
||||||
|
background-color: #34494f !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jstree-default .jstree-hovered{
|
||||||
|
background-color: #34494f !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jstree-anchor{
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-default{
|
||||||
|
background: #a6a9aa !important;
|
||||||
|
border: 1px solid black;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-state-active{
|
||||||
|
background: #c6c9ca !important;
|
||||||
|
color: black !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cesium-viewer .cesium-viewer-cesiumWidgetContainer{
|
||||||
|
position: absolute;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.zs_widget{
|
||||||
|
padding: 2px;
|
||||||
|
height: 4em;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.zs_core{
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.zs_handle{
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: rgb(166, 169, 170);
|
||||||
|
width: 8px;
|
||||||
|
user-select: none;
|
||||||
|
width: 1.2em;
|
||||||
|
height: 1.2em;
|
||||||
|
top: calc(50% - 0.6em);
|
||||||
|
}
|
||||||
|
.zs_stretch{
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
bottom: 0px;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-radius: 3px;
|
||||||
|
background-color: rgb(166, 169, 170);
|
||||||
|
width: 8px;
|
||||||
|
user-select: none;
|
||||||
|
width: 1.2em;
|
||||||
|
height: 1.2em;
|
||||||
|
top: calc(50% - 0.6em);
|
||||||
|
color: black;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-family: arial;
|
||||||
|
}
|
||||||
|
.zs_handle:hover{
|
||||||
|
background-color: lightgreen;
|
||||||
|
}
|
||||||
|
.zs_inside{
|
||||||
|
position: absolute !important;
|
||||||
|
width: 100%;
|
||||||
|
border: 1px solid black;
|
||||||
|
background-color: white;
|
||||||
|
top: calc(50% - 0.326em);
|
||||||
|
height: 0.652em;
|
||||||
|
cursor: zoom-in;
|
||||||
|
}
|
||||||
|
.zs_outside{
|
||||||
|
position: absolute !important;
|
||||||
|
width: 100%;
|
||||||
|
background-color: var(--color-1) !important;
|
||||||
|
top: calc(50% - 0.326em);
|
||||||
|
height: 0.652em;
|
||||||
|
cursor: zoom-in;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
pointer-events:none;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label_left{
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.zs_visible_range_label_right{
|
||||||
|
right: 0px;
|
||||||
|
}
|
||||||
|
.zs_chosen_range_label{
|
||||||
|
position: absolute;
|
||||||
|
pointer-events:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#potree_sidebar_container{
|
||||||
|
scrollbar-color: var(--color-1) var(--bg-color);
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background-color: var(--color-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.propertypanel_content .heading{
|
||||||
|
font-weight: bold;
|
||||||
|
padding-top: 0.6em;
|
||||||
|
padding-bottom: 0.1em;
|
||||||
|
}
|
||||||
90671
libs/potree/potree.js
Normal file
1
libs/potree/potree.js.map
Normal file
121
libs/potree/profile.html
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<div id="profile_window" style="
|
||||||
|
position: absolute;
|
||||||
|
width: 84%;
|
||||||
|
left: 15%; top: 55%; height: 44%;
|
||||||
|
margin: 5px;
|
||||||
|
border: 1px solid black;
|
||||||
|
display: none; box-sizing: border-box; z-index:10000">
|
||||||
|
|
||||||
|
<div id="profile_titlebar" class="pv-titlebar" style="display: flex; position: absolute; height: 30px; width: 100%; box-sizing: border-box;">
|
||||||
|
<span style="padding-right: 10px">
|
||||||
|
<span id="profile_window_title" data-i18n="profile.title"></span>
|
||||||
|
</span>
|
||||||
|
<span id="profileInfo" style="flex-grow: 1; flex-direction: row"> </span>
|
||||||
|
<!-- <span id="profile_toggle_size_button" class="ui-icon ui-icon-newwin profile-button"> </span> -->
|
||||||
|
<!--<span id="closeProfileContainer" class="ui-icon ui-icon-close profile-button"> </span>-->
|
||||||
|
<img id="closeProfileContainer" class="button-icon" style="width: 24px; height: 24px; margin: 4px"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="position: absolute; top: 30px; width: 100%; height: calc(100% - 30px); box-sizing: border-box;" class="pw_content">
|
||||||
|
|
||||||
|
<span class="pv-main-color" style="height: 100%; width: 100%; padding: 5px; display:flex; flex-direction: column; box-sizing: border-box;">
|
||||||
|
<div style=" width: 100%; color: #9d9d9d; margin: 5px; display: flex; flex-direction: row; box-sizing: border-box;">
|
||||||
|
<span data-i18n="profile.nb_points"></span>:
|
||||||
|
<span id="profile_num_points">-</span>
|
||||||
|
<!--<span id="profile_threshold" style="width: 300px">
|
||||||
|
Threshold: <span id="potree_profile_threshold_label">123</span> <div id="potree_profile_threshold_slider"></div>
|
||||||
|
</span>-->
|
||||||
|
<span style="flex-grow: 1;"></span>
|
||||||
|
<span>
|
||||||
|
|
||||||
|
<!-- <span contenteditable="true" style="display: inline-block;
|
||||||
|
width: 24px; height: 24px;
|
||||||
|
vertical-align: top;
|
||||||
|
background: white; color:black"></span> -->
|
||||||
|
|
||||||
|
<input id="potree_profile_rotate_amount"
|
||||||
|
type="text" maxlength="4" value="10" style="
|
||||||
|
display: inline-block;
|
||||||
|
width: 2.5em;
|
||||||
|
vertical-align: top;
|
||||||
|
background: white;
|
||||||
|
margin: 2px;
|
||||||
|
"></span>
|
||||||
|
|
||||||
|
<img id="potree_profile_rotate_cw" class="text-icon"/>
|
||||||
|
<img id="potree_profile_rotate_ccw" class="text-icon"/>
|
||||||
|
|
||||||
|
<img id="potree_profile_move_forward" class="text-icon"/>
|
||||||
|
<img id="potree_profile_move_backward" class="text-icon"/>
|
||||||
|
|
||||||
|
<a id="potree_download_profile_dxf2D_link" href="#" download="profile_2D.dxf">
|
||||||
|
<img id="potree_download_dxf2D_icon" class="text-icon"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a id="potree_download_profile_dxf3D_link" href="#" download="profile_3D.dxf">
|
||||||
|
<img id="potree_download_dxf3D_icon" class="text-icon"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a id="potree_download_profile_ortho_link" href="#" download="profile.csv">
|
||||||
|
<img id="potree_download_csv_icon" class="text-icon"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a id="potree_download_profile_link" href="#" download="profile.las">
|
||||||
|
<img id="potree_download_las_icon" class="text-icon"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="profile_draw_container" style="
|
||||||
|
width: 100%;
|
||||||
|
flex-grow: 1;
|
||||||
|
position: relative; height: 100%;
|
||||||
|
box-sizing: border-box; user-select: none">
|
||||||
|
<div style="
|
||||||
|
position: absolute;
|
||||||
|
left: 41px;
|
||||||
|
top: 0;
|
||||||
|
bottom: 20;
|
||||||
|
width: calc(100% - 41px);
|
||||||
|
height: calc(100% - 20px);
|
||||||
|
background-color: #000000;
|
||||||
|
"></div>
|
||||||
|
<svg id="profileSVG" style="
|
||||||
|
fill: #9d9d9d;
|
||||||
|
position: absolute;
|
||||||
|
left: 0; right: 0;
|
||||||
|
top: 0; bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
"></svg>
|
||||||
|
<div id="profileCanvasContainer" style="
|
||||||
|
position: absolute;
|
||||||
|
left: 41px;
|
||||||
|
top: 0;
|
||||||
|
bottom: 20;
|
||||||
|
width: calc(100% - 41px);
|
||||||
|
height: calc(100% - 20px);
|
||||||
|
/*background-color: #000000;*/
|
||||||
|
"></div>
|
||||||
|
|
||||||
|
<div id="profileSelectionProperties" style="
|
||||||
|
position: absolute;
|
||||||
|
left: 50px;
|
||||||
|
top: 10px;
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
opacity: 0.7;
|
||||||
|
padding: 5px;
|
||||||
|
border: 1px solid white;
|
||||||
|
user-select: text;
|
||||||
|
">
|
||||||
|
position: asdsadf asdf<br>
|
||||||
|
rgb: 123 423 123
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
20
libs/potree/resources/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
icons/map_icon.png
|
||||||
|
from sitn PotreeViewer
|
||||||
|
http://ne.ch/sitn
|
||||||
|
https://github.com/PotreeViewer/PotreeViewer
|
||||||
|
|
||||||
|
icons/navigation_cube.svg
|
||||||
|
icons/orthographic_camera.svg
|
||||||
|
icons/perspective_camera.svg
|
||||||
|
free for commerical use without attribution
|
||||||
|
http://www.freepik.com/free-icon/package-cube-box-for-delivery_720159.htm
|
||||||
|
|
||||||
|
|
||||||
|
# VR Controller Model
|
||||||
|
images/vr_controller_help*
|
||||||
|
Controller model from https://sketchfab.com/3d-models/htc-vive-controller-9f03e4a80c5a4b31a24bb122f17cb229
|
||||||
|
license: CC AttributionCreative Commons Attribution
|
||||||
|
|
||||||
74
libs/potree/resources/icons/add.svg
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="32px"
|
||||||
|
height="32px"
|
||||||
|
id="svg3797"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="add.svg"
|
||||||
|
inkscape:export-filename="D:\dev\workspaces\potree\develop\resources\icons\volume.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs3799" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.197802"
|
||||||
|
inkscape:cx="28.959173"
|
||||||
|
inkscape:cy="13.365348"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1001"
|
||||||
|
inkscape:window-x="-9"
|
||||||
|
inkscape:window-y="-9"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3805" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata3802">
|
||||||
|
<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></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:51.75680923px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers stroke fill"
|
||||||
|
x="3.1113412"
|
||||||
|
y="30.581873"
|
||||||
|
id="text822"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan820"
|
||||||
|
x="3.1113412"
|
||||||
|
y="30.581873"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Calibri;-inkscape-font-specification:Calibri;stroke-width:4;stroke:#000000;stroke-opacity:1;fill:#ffffff;fill-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers stroke fill">+</tspan></text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
BIN
libs/potree/resources/icons/angle.png
Normal file
|
After Width: | Height: | Size: 602 B |
157
libs/potree/resources/icons/annotation.svg
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="32px"
|
||||||
|
height="32px"
|
||||||
|
id="svg3797"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||||
|
sodipodi:docname="annotation.svg"
|
||||||
|
inkscape:export-filename="D:\dev\workspaces\potree\develop\resources\icons\profile.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs3799">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="spiro"
|
||||||
|
id="path-effect4170"
|
||||||
|
is_visible="true" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3890">
|
||||||
|
<stop
|
||||||
|
id="stop3898"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#ff0000;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffff00;stop-opacity:1;"
|
||||||
|
offset="0.25"
|
||||||
|
id="stop3904" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#00ff00;stop-opacity:1;"
|
||||||
|
offset="0.5"
|
||||||
|
id="stop3902" />
|
||||||
|
<stop
|
||||||
|
id="stop3906"
|
||||||
|
offset="0.75"
|
||||||
|
style="stop-color:#00ffff;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0000ff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3894" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3890-1"
|
||||||
|
id="linearGradient3896-3"
|
||||||
|
x1="17"
|
||||||
|
y1="5"
|
||||||
|
x2="17"
|
||||||
|
y2="26"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad"
|
||||||
|
gradientTransform="matrix(0.91304348,0,0,0.91304348,2.5217391,2.173913)" />
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient3890-1">
|
||||||
|
<stop
|
||||||
|
id="stop3898-6"
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#ff0000;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffff00;stop-opacity:1;"
|
||||||
|
offset="0.25"
|
||||||
|
id="stop3904-8" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#00ff00;stop-opacity:1;"
|
||||||
|
offset="0.5"
|
||||||
|
id="stop3902-8" />
|
||||||
|
<stop
|
||||||
|
id="stop3906-2"
|
||||||
|
offset="0.75"
|
||||||
|
style="stop-color:#00ffff;stop-opacity:1;" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#0000ff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3894-7" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="11.313708"
|
||||||
|
inkscape:cx="12.960878"
|
||||||
|
inkscape:cy="6.4904832"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1377"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:pagecheckerboard="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3805" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata3802">
|
||||||
|
<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></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<circle
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55555558"
|
||||||
|
id="path3000"
|
||||||
|
cx="59.629543"
|
||||||
|
cy="16"
|
||||||
|
r="5" />
|
||||||
|
<circle
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3770"
|
||||||
|
cx="59.629543"
|
||||||
|
cy="16"
|
||||||
|
r="14" />
|
||||||
|
<circle
|
||||||
|
id="path3772"
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
cx="59.629543"
|
||||||
|
cy="16"
|
||||||
|
r="9" />
|
||||||
|
<path
|
||||||
|
id="path4535"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 21.96875,22.09375 C 28,12 26,1 16,1 6,1 4,12 10.03125,22.09375 15.112504,30.59761 16,30 16,30 c 0,0 0.887496,0.59761 5.96875,-7.90625 z"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="scscs" />
|
||||||
|
<circle
|
||||||
|
cy="8.498291"
|
||||||
|
cx="16"
|
||||||
|
id="circle4538"
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.55430424"
|
||||||
|
r="4.9887381" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
99
libs/potree/resources/icons/area.svg
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="32px"
|
||||||
|
height="32px"
|
||||||
|
id="svg3797"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
|
||||||
|
sodipodi:docname="area.svg"
|
||||||
|
inkscape:export-filename="D:\dev\workspaces\potree\develop\resources\icons\area.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs3799" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="15.836083"
|
||||||
|
inkscape:cx="-2.4229598"
|
||||||
|
inkscape:cy="11.830286"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1377"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3805" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata3802">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<path
|
||||||
|
style="fill:#e73100;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 7.0000003,25.75 H 25 l -5,-10 6,-9.9999996 H 7.0000003 Z"
|
||||||
|
id="path3790"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<circle
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3807-0-1"
|
||||||
|
cx="7"
|
||||||
|
cy="26"
|
||||||
|
r="2.7499998" />
|
||||||
|
<circle
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3807-0-7"
|
||||||
|
cx="25"
|
||||||
|
cy="26"
|
||||||
|
r="2.7499998" />
|
||||||
|
<circle
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3807-0-7-0"
|
||||||
|
cx="7"
|
||||||
|
cy="6.000001"
|
||||||
|
r="2.7499998" />
|
||||||
|
<circle
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3807-0-7-9"
|
||||||
|
cx="26"
|
||||||
|
cy="6.000001"
|
||||||
|
r="2.7499998" />
|
||||||
|
<circle
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path3807-0-7-4"
|
||||||
|
cx="20"
|
||||||
|
cy="16"
|
||||||
|
r="2.7499998" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
119
libs/potree/resources/icons/area_backup.svg
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<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"
|
||||||
|
width="32px"
|
||||||
|
height="32px"
|
||||||
|
id="svg3797"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="area.svg"
|
||||||
|
inkscape:export-filename="D:\dev\workspaces\potree\develop\resources\icons\area.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs3799" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="2.7994505"
|
||||||
|
inkscape:cx="-38.367796"
|
||||||
|
inkscape:cy="-28.878944"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1018"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid3805" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata3802">
|
||||||
|
<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>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<path
|
||||||
|
style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
d="M 7,25 25,25 20,15 26,5 7,5 z"
|
||||||
|
id="path3790"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccccc" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.18181828999999980;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path3807-0-1"
|
||||||
|
sodipodi:cx="11"
|
||||||
|
sodipodi:cy="22"
|
||||||
|
sodipodi:rx="6"
|
||||||
|
sodipodi:ry="6"
|
||||||
|
d="M 17,22 A 6,6 0 1 1 5,22 6,6 0 1 1 17,22 z"
|
||||||
|
transform="matrix(0.45833331,0,0,0.45833331,1.9583336,15.166667)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.18181828999999980;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path3807-0-7"
|
||||||
|
sodipodi:cx="11"
|
||||||
|
sodipodi:cy="22"
|
||||||
|
sodipodi:rx="6"
|
||||||
|
sodipodi:ry="6"
|
||||||
|
d="M 17,22 A 6,6 0 1 1 5,22 6,6 0 1 1 17,22 z"
|
||||||
|
transform="matrix(0.45833331,0,0,0.45833331,19.958334,15.166667)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.18181828999999980;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path3807-0-7-0"
|
||||||
|
sodipodi:cx="11"
|
||||||
|
sodipodi:cy="22"
|
||||||
|
sodipodi:rx="6"
|
||||||
|
sodipodi:ry="6"
|
||||||
|
d="M 17,22 A 6,6 0 1 1 5,22 6,6 0 1 1 17,22 z"
|
||||||
|
transform="matrix(0.45833331,0,0,0.45833331,1.9583336,-4.8333327)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.18181828999999980;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path3807-0-7-9"
|
||||||
|
sodipodi:cx="11"
|
||||||
|
sodipodi:cy="22"
|
||||||
|
sodipodi:rx="6"
|
||||||
|
sodipodi:ry="6"
|
||||||
|
d="M 17,22 A 6,6 0 1 1 5,22 6,6 0 1 1 17,22 z"
|
||||||
|
transform="matrix(0.45833331,0,0,0.45833331,20.958334,-4.8333327)" />
|
||||||
|
<path
|
||||||
|
sodipodi:type="arc"
|
||||||
|
style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.18181828999999980;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||||
|
id="path3807-0-7-4"
|
||||||
|
sodipodi:cx="11"
|
||||||
|
sodipodi:cy="22"
|
||||||
|
sodipodi:rx="6"
|
||||||
|
sodipodi:ry="6"
|
||||||
|
d="M 17,22 A 6,6 0 1 1 5,22 6,6 0 1 1 17,22 z"
|
||||||
|
transform="matrix(0.45833331,0,0,0.45833331,14.958334,5.1666673)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.2 KiB |