Initial load
|
@ -0,0 +1,4 @@
|
|||
deploy.sh
|
||||
create-project.mvn.cmd
|
||||
nb-configuration.xml
|
||||
target/
|
|
@ -0,0 +1,17 @@
|
|||
<#if licenseFirst??>
|
||||
${licenseFirst}
|
||||
</#if>
|
||||
${licensePrefix}Licensed under the Apache License, Version 2.0 (the "License");
|
||||
${licensePrefix}you may not use this file except in compliance with the License.
|
||||
${licensePrefix}You may obtain a copy of the License at
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix} http://www.apache.org/licenses/LICENSE-2.0
|
||||
${licensePrefix?replace(" +$", "", "r")}
|
||||
${licensePrefix}Unless required by applicable law or agreed to in writing, software
|
||||
${licensePrefix}distributed under the License is distributed on an "AS IS" BASIS,
|
||||
${licensePrefix}WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
${licensePrefix}See the License for the specific language governing permissions and
|
||||
${licensePrefix}limitations under the License.
|
||||
<#if licenseLast??>
|
||||
${licenseLast}
|
||||
</#if>
|
|
@ -0,0 +1,74 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.vizirdb</groupId>
|
||||
<artifactId>vizir-db</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>vizir-db</name>
|
||||
|
||||
<build>
|
||||
<finalName>vizir-db</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.5.1</version>
|
||||
<inherited>true</inherited>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey</groupId>
|
||||
<artifactId>jersey-bom</artifactId>
|
||||
<version>${jersey.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.containers</groupId>
|
||||
<artifactId>jersey-container-servlet-core</artifactId>
|
||||
<!-- use the following artifactId if you don't need servlet 2.x compatibility -->
|
||||
<!-- artifactId>jersey-container-servlet</artifactId -->
|
||||
</dependency>
|
||||
<!-- uncomment this to get JSON support
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-moxy</artifactId>
|
||||
</dependency>
|
||||
-->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-csv</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-json-jackson</artifactId>
|
||||
<version>2.22.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<type>jar</type>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<jersey.version>2.22.2</jersey.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
</project>
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb;
|
||||
|
||||
/**
|
||||
* Exception to signal that the parameter list for a VizUAL script operation is
|
||||
* missing a mandatory parameter.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class MissingParameterException extends VizirDBException {
|
||||
|
||||
public MissingParameterException(String paraName) {
|
||||
|
||||
super("Missing parameter: " + paraName);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
/**
|
||||
* A reference object containing a URL and the relationship between the source
|
||||
* object and the target that is referenced.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder={"rel", "href"})
|
||||
public class ReferenceObject {
|
||||
|
||||
public static final String RELATIONSHIP_SELF = "self";
|
||||
|
||||
private String _href;
|
||||
private String _rel;
|
||||
|
||||
public ReferenceObject(String rel, String href) {
|
||||
|
||||
_rel = rel;
|
||||
_href = href;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get reference URL.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "href")
|
||||
public String getHref() {
|
||||
|
||||
return _href;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get reference relationship.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name="rel")
|
||||
public String getRel() {
|
||||
|
||||
return _rel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set reference URL.
|
||||
*
|
||||
* @param url
|
||||
*/
|
||||
public void setHref(String url) {
|
||||
|
||||
_href = url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set reference relationship.
|
||||
*
|
||||
* @param rel
|
||||
*/
|
||||
public void setRel(String rel) {
|
||||
|
||||
_rel = rel;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb;
|
||||
|
||||
|
||||
/**
|
||||
* A self reference object containing the URL to a resource.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class SelfReference extends ReferenceObject {
|
||||
|
||||
public SelfReference(String href) {
|
||||
|
||||
super(RELATIONSHIP_SELF, href);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb;
|
||||
|
||||
/**
|
||||
* Factory class capturing all methods for generating URL to reference resources
|
||||
* served by the Web API.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class URLFactory {
|
||||
|
||||
private final String _baseUrl;
|
||||
|
||||
public URLFactory(String baseUrl) {
|
||||
|
||||
if (baseUrl.endsWith("/")) {
|
||||
_baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
|
||||
} else {
|
||||
_baseUrl = baseUrl;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* URL for existing notebook resource.
|
||||
*
|
||||
* @param notebookIdentifier Notebook id
|
||||
* @return
|
||||
*/
|
||||
public String getNotebookURL(int notebookIdentifier) {
|
||||
|
||||
return _baseUrl + "/notebooks/" + notebookIdentifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* URL referencing script resource for an existing notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook id
|
||||
* @return
|
||||
*/
|
||||
public String getNotebookScriptURL(int notebookIdentifier) {
|
||||
|
||||
return this.getNotebookURL(notebookIdentifier) + "/script";
|
||||
}
|
||||
|
||||
/**
|
||||
* URL referencing snapshot of an existing notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook id
|
||||
* @param snapshotIndex Snapshot index corresponding to operation in
|
||||
* the notebook script that generated the
|
||||
* snapshot
|
||||
* @return
|
||||
*/
|
||||
public String getNotebookSnapshotURL(int notebookIdentifier, int snapshotIndex) {
|
||||
|
||||
return this.getNotebookURL(notebookIdentifier) + "/snapshots/" + snapshotIndex;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb;
|
||||
|
||||
/**
|
||||
* A general class to subsume different types of implementation-specific
|
||||
* exceptions for common interface methods.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class VizirDBException extends Exception {
|
||||
|
||||
/*
|
||||
* Exactly one of these two variables will not be null.
|
||||
*/
|
||||
private Exception _exception = null;
|
||||
private String _message = null;
|
||||
|
||||
/**
|
||||
* Throw an exception with specific message. Main use is for conditions
|
||||
* during the execution of XArch that require an exception to be thrown.
|
||||
*
|
||||
* @param message
|
||||
*/
|
||||
public VizirDBException(String message) {
|
||||
|
||||
_message = message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper around another exception. Main use is to unify throw clause
|
||||
* of XArch methods.
|
||||
*
|
||||
* @param exception
|
||||
*/
|
||||
public VizirDBException(Exception exception) {
|
||||
|
||||
_exception = exception;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the stack trace of the captured exception or the stack trace
|
||||
* where this exception was thrown.
|
||||
*/
|
||||
@Override
|
||||
public void printStackTrace() {
|
||||
|
||||
if (_exception != null) {
|
||||
_exception.printStackTrace();
|
||||
} else {
|
||||
super.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
if (_exception != null) {
|
||||
return _exception.toString() + " in " + _exception.getStackTrace()[0].toString();
|
||||
} else if (_message != null) {
|
||||
return _message;
|
||||
} else {
|
||||
throw new java.lang.IllegalStateException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.database;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
/**
|
||||
* A cell in a notebook data snapshot. Each cell has a unique id and a value. For
|
||||
* a particular snapshot the cell is mapped to a position defined by the column
|
||||
* and row index.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder = {"id", "col", "row", "value"})
|
||||
@XmlRootElement(name = "cell")
|
||||
public class Cell {
|
||||
|
||||
private final int _col;
|
||||
private final int _id;
|
||||
private final int _row;
|
||||
private final String _value;
|
||||
|
||||
public Cell(int id, int col, int row, String value) {
|
||||
|
||||
_id = id;
|
||||
_col = col;
|
||||
_row = row;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
@XmlElement(name = "col")
|
||||
public int getColumn() {
|
||||
|
||||
return _col;
|
||||
}
|
||||
|
||||
@XmlElement(name = "id")
|
||||
public int getIdentitifer() {
|
||||
|
||||
return _id;
|
||||
}
|
||||
|
||||
@XmlElement(name = "row")
|
||||
public int getRow() {
|
||||
|
||||
return _row;
|
||||
}
|
||||
|
||||
@XmlElement(name = "value")
|
||||
public String getValue() {
|
||||
|
||||
return _value;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.database;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.vizirdb.script.VizUALScript;
|
||||
import org.vizirdb.ReferenceObject;
|
||||
import org.vizirdb.SelfReference;
|
||||
import org.vizirdb.URLFactory;
|
||||
|
||||
/**
|
||||
* A notebook managed by a Vizir Database Server instance. Each notebook has a
|
||||
* unique identifier and a descriptive name.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder = {"identifier", "name", "links"})
|
||||
@XmlRootElement(name = "notebook")
|
||||
public class Notebook implements Comparable<Notebook> {
|
||||
|
||||
private int _cellCount = 0;
|
||||
private final int _identifier;
|
||||
private String _name;
|
||||
private final VizUALScript _script;
|
||||
private final URLFactory _urls;
|
||||
|
||||
public Notebook(int identifier, String name, VizUALScript script, URLFactory urls) {
|
||||
|
||||
if (name == null) {
|
||||
throw new java.lang.IllegalArgumentException("Invalid dataset name: null");
|
||||
}
|
||||
if (script == null) {
|
||||
throw new java.lang.IllegalArgumentException("Script: null");
|
||||
}
|
||||
if (urls == null) {
|
||||
throw new java.lang.IllegalArgumentException("URL factory: null");
|
||||
}
|
||||
|
||||
_identifier = identifier;
|
||||
_name = name;
|
||||
_script = script;
|
||||
_urls = urls;
|
||||
}
|
||||
|
||||
public Notebook(int identifier, String name, URLFactory urls) {
|
||||
|
||||
this(identifier, name, new VizUALScript(identifier, urls), urls);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Notebook notebook) {
|
||||
|
||||
return this.getName().compareTo(notebook.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Unique dataset identifier.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "identifier")
|
||||
public int getIdentifier() {
|
||||
|
||||
return _identifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* List of references associated with a notebook.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "links")
|
||||
public List<ReferenceObject> getLinks() {
|
||||
|
||||
|
||||
ArrayList<ReferenceObject> links = new ArrayList<>();
|
||||
|
||||
/*
|
||||
* Self reference
|
||||
*/
|
||||
ReferenceObject self = new SelfReference(_urls.getNotebookURL(_identifier));
|
||||
links.add(self);
|
||||
|
||||
/*
|
||||
* Notebook script reference
|
||||
*/
|
||||
links.add(new ReferenceObject("script", _urls.getNotebookScriptURL(_identifier)));
|
||||
|
||||
/*
|
||||
* Current snapshot reference
|
||||
*/
|
||||
if (_script.getOperations().size() > 0) {
|
||||
links.add(new ReferenceObject("currentSnapshot", _urls.getNotebookSnapshotURL(_identifier, _script.getOperations().size() - 1)));
|
||||
}
|
||||
|
||||
return links;
|
||||
}
|
||||
|
||||
/**
|
||||
* Descriptive dataset name.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "name")
|
||||
public String getName() {
|
||||
|
||||
return _name;
|
||||
}
|
||||
|
||||
/**
|
||||
* VizUAL script that is associated with the notebook.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlTransient
|
||||
public VizUALScript getScript() {
|
||||
|
||||
return _script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Next unique cell identifier. Called when adding a new cell to the
|
||||
* notebook.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public synchronized int nextCellId() {
|
||||
|
||||
return _cellCount++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the notebook name.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void setName(String name) {
|
||||
|
||||
_name = name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.database;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.script.actor.CSVFileLoad;
|
||||
import org.vizirdb.script.OpParameter;
|
||||
import org.vizirdb.script.Operation;
|
||||
import org.vizirdb.script.OperationType;
|
||||
import org.vizirdb.script.actor.Actor;
|
||||
import org.vizirdb.script.actor.CellUpdate;
|
||||
import org.vizirdb.script.actor.ColumnDelete;
|
||||
import org.vizirdb.script.actor.ColumnInsert;
|
||||
import org.vizirdb.script.actor.ColumnMove;
|
||||
import org.vizirdb.script.actor.ColumnRename;
|
||||
import org.vizirdb.script.actor.RowDelete;
|
||||
import org.vizirdb.script.actor.RowInserte;
|
||||
import org.vizirdb.script.actor.RowMove;
|
||||
|
||||
/**
|
||||
* For test purposes. Maintains a list of notebooks in a CSV file.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class SimpleVizirDBM implements VizirDB {
|
||||
|
||||
private final HashMap<OperationType, Actor> _actors;
|
||||
private final HashMap<Integer, Notebook> _notebooks;
|
||||
private final HashMap<String, Snapshot> _snapshots;
|
||||
private final URLFactory _urls;
|
||||
|
||||
public SimpleVizirDBM(URLFactory urls, File baseDirectory) {
|
||||
|
||||
_urls = urls;
|
||||
|
||||
_notebooks = new HashMap<>();
|
||||
_snapshots = new HashMap<>();
|
||||
|
||||
_actors = new HashMap<>();
|
||||
_actors.put(OperationType.DeleteColumn, new ColumnDelete(this));
|
||||
_actors.put(OperationType.DeleteRow, new RowDelete(this));
|
||||
_actors.put(OperationType.InsertColumn, new ColumnInsert(this));
|
||||
_actors.put(OperationType.InsertRow, new RowInserte(this));
|
||||
_actors.put(OperationType.LoadFile, new CSVFileLoad(new File(baseDirectory.getAbsolutePath() + File.separator + "files")));
|
||||
_actors.put(OperationType.MoveColumn, new ColumnMove(this));
|
||||
_actors.put(OperationType.MoveRow, new RowMove(this));
|
||||
_actors.put(OperationType.RenameColumn, new ColumnRename(this));
|
||||
_actors.put(OperationType.UpdateCell, new CellUpdate(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int appendOperation(int notebookId, Operation op) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (_notebooks.containsKey(notebookId)) {
|
||||
Notebook notebook = _notebooks.get(notebookId);
|
||||
int snapshotIndex = notebook.getScript().getOperations().size();
|
||||
_snapshots.put(notebookId + "#" + snapshotIndex, _actors.get(op.getType()).exec(notebook, snapshotIndex, this.getParameterMap(op.getParameters()), _urls));
|
||||
notebook.getScript().getOperations().add(new Operation(notebookId, notebook.getScript().getOperations().size(), op.getType(), op.getParameters(), _urls));
|
||||
return snapshotIndex;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized Notebook createNotebook(String name) {
|
||||
|
||||
/*
|
||||
* The identifier of the new notebook is the determined by maxId, the
|
||||
* largest identifier of all existing notebooks. The new identifier is
|
||||
* maxId + 1.
|
||||
*/
|
||||
int maxId = -1;
|
||||
for (Notebook notebook : _notebooks.values()) {
|
||||
if (notebook.getIdentifier() > maxId) {
|
||||
maxId = notebook.getIdentifier();
|
||||
}
|
||||
}
|
||||
Notebook notebook = new Notebook(maxId + 1, name, _urls);
|
||||
_notebooks.put(notebook.getIdentifier(), notebook);
|
||||
return notebook;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean deleteNotebook(int notebookId) {
|
||||
|
||||
if (_notebooks.containsKey(notebookId)) {
|
||||
_notebooks.remove(notebookId);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized Notebook getNotebook(int notebookId) {
|
||||
|
||||
return _notebooks.get(notebookId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot getNotebookSnapshot(int notebookId, int snapshotIndex) {
|
||||
|
||||
return _snapshots.get(notebookId + "#" + snapshotIndex);
|
||||
}
|
||||
|
||||
private HashMap<String, String> getParameterMap(List<OpParameter> parameters) throws org.vizirdb.VizirDBException {
|
||||
|
||||
HashMap<String, String> paraMap = new HashMap<>();
|
||||
|
||||
for (OpParameter param : parameters) {
|
||||
if (paraMap.containsKey(param.getName())) {
|
||||
throw new VizirDBException("Duplicate parameter: " + param.getName());
|
||||
}
|
||||
paraMap.put(param.getName(), param.getValue());
|
||||
}
|
||||
|
||||
return paraMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized List<Notebook> listNotebooks() {
|
||||
|
||||
ArrayList<Notebook> objects = new ArrayList<>(_notebooks.values());
|
||||
Collections.sort(objects);
|
||||
return objects;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean updateNotebook(int notebookId, String name) {
|
||||
|
||||
if (_notebooks.containsKey(notebookId)) {
|
||||
Notebook notebook = _notebooks.get(notebookId);
|
||||
if (!notebook.getName().equals(name)) {
|
||||
notebook.setName(name);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.database;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.vizirdb.ReferenceObject;
|
||||
import org.vizirdb.SelfReference;
|
||||
import org.vizirdb.URLFactory;
|
||||
|
||||
/**
|
||||
* Snapshot of the data in a notebook. Each operation in the script that is
|
||||
* associated with a notebook will modify the current snapshot.
|
||||
*
|
||||
* A snapshot contains all the data cells in the snapshot and the mapping of
|
||||
* cells to positions in the spreadsheet.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder = {"columns", "rows", "cells", "links"})
|
||||
@XmlRootElement(name = "snapshot")
|
||||
public class Snapshot {
|
||||
|
||||
private final List<Cell> _cells;
|
||||
private final List<String> _columns;
|
||||
private final List<ReferenceObject> _links;
|
||||
private final int _rows;
|
||||
|
||||
public Snapshot(int notebookId, int snapshotIndex, List<String> columns, List<Cell> cells, URLFactory urls) {
|
||||
|
||||
_columns = columns;
|
||||
_cells = cells;
|
||||
|
||||
/*
|
||||
* The number of rows is defined by the maximum row number + 1
|
||||
*/
|
||||
int maxRowNumber = -1;
|
||||
for (Cell cell : _cells) {
|
||||
if (cell.getRow() > maxRowNumber) {
|
||||
maxRowNumber = cell.getRow();
|
||||
}
|
||||
}
|
||||
_rows = maxRowNumber + 1;
|
||||
|
||||
/*
|
||||
* Add seld reference and reference to notebook
|
||||
*/
|
||||
_links = new ArrayList<>();
|
||||
_links.add(new SelfReference(urls.getNotebookSnapshotURL(notebookId, snapshotIndex)));
|
||||
_links.add(new ReferenceObject("notebook", urls.getNotebookURL(notebookId)));
|
||||
}
|
||||
|
||||
@XmlElement(name = "cells")
|
||||
public List<Cell> getCells() {
|
||||
|
||||
return _cells;
|
||||
}
|
||||
|
||||
@XmlElement(name = "columns")
|
||||
public List<String> getColumns() {
|
||||
|
||||
return _columns;
|
||||
}
|
||||
|
||||
@XmlElement(name = "links")
|
||||
public List<ReferenceObject> getLinks() {
|
||||
|
||||
return _links;
|
||||
}
|
||||
|
||||
@XmlElement(name = "rows")
|
||||
public int getRows() {
|
||||
|
||||
return _rows;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.database;
|
||||
|
||||
import java.util.List;
|
||||
import org.vizirdb.script.Operation;
|
||||
|
||||
/**
|
||||
* Vizir Database Server instance. Manages and provides access to notebooks.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public interface VizirDB {
|
||||
|
||||
/**
|
||||
* Append an operation to the script of an existing notebook.
|
||||
*
|
||||
* @param notebookId Notebook identifier
|
||||
* @param op Operation definition
|
||||
* @return Index of the appended operation in the notebook
|
||||
* script. This is equal to size - 1 of the script
|
||||
* after the append. The result is -1 if the notebook
|
||||
* does not exist.
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public int appendOperation(int notebookId, Operation op) throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Create a new notebook with the given name
|
||||
*
|
||||
* @param name Notebook name
|
||||
* @return Created notebook
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public Notebook createNotebook(String name) throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Delete the notebook with the given identifier.
|
||||
*
|
||||
* @param notebookId Notebook identifier
|
||||
* @return True if the notebook was deleted successfully.
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public boolean deleteNotebook(int notebookId) throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Returns the notebook with the given identifier.
|
||||
*
|
||||
* @param notebookId Notebook identifier
|
||||
* @return Notebook with given identifier. The result is null
|
||||
* if no notebook with the given identifier exists.
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public Notebook getNotebook(int notebookId) throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Return the snapshot with the given index for the notebook with given
|
||||
* identifier.
|
||||
*
|
||||
* @param notebookId Notebook identifier
|
||||
* @param snapshotIndex Snapshot index
|
||||
* @return Snapshot or null if snapshot does not exists
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public Snapshot getNotebookSnapshot(int notebookId, int snapshotIndex) throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Returns a list of all notebooks managed by this server instance.
|
||||
*
|
||||
* @return
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public List<Notebook> listNotebooks() throws org.vizirdb.VizirDBException;
|
||||
|
||||
/**
|
||||
* Update the name of the notebook with the given identifier.
|
||||
*
|
||||
* @param notebookId Notebook identifier
|
||||
* @param name New notebook name
|
||||
* @return True if the notebook exists and was updated. False,
|
||||
* if the notebook did not exists or the new name
|
||||
* equals the current notebook name.
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public boolean updateNotebook(int notebookId, String name) throws org.vizirdb.VizirDBException;
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
/**
|
||||
* Operation parameter are represented as (key, value)-pairs.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder={"name", "value"})
|
||||
@XmlRootElement(name = "parameter")
|
||||
public class OpParameter {
|
||||
|
||||
private String _name;
|
||||
private String _value;
|
||||
|
||||
public OpParameter() {
|
||||
|
||||
this(null, null);
|
||||
}
|
||||
|
||||
public OpParameter(String name, String value) {
|
||||
|
||||
_name = name;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parameter name.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "name")
|
||||
public String getName() {
|
||||
|
||||
return _name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parameter value.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "value")
|
||||
public String getValue() {
|
||||
|
||||
return _value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set parameter name.
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void setName(String name) {
|
||||
|
||||
_name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set parameter value.
|
||||
*
|
||||
* @param value
|
||||
*/
|
||||
public void setValue(String value) {
|
||||
|
||||
_value = value;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.vizirdb.ReferenceObject;
|
||||
import org.vizirdb.URLFactory;
|
||||
|
||||
/**
|
||||
* Operation in a VizUAL script.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder={"type", "parameters", "links"})
|
||||
@XmlRootElement(name = "operation")
|
||||
public class Operation {
|
||||
|
||||
private final List<ReferenceObject> _links;
|
||||
private List<OpParameter> _parameters;
|
||||
private OperationType _type;
|
||||
|
||||
public Operation() {
|
||||
|
||||
_type = null;
|
||||
_parameters = null;
|
||||
_links = new ArrayList<>();
|
||||
}
|
||||
|
||||
public Operation(int notebookId, int index, OperationType type, List<OpParameter> parameters, URLFactory urls) {
|
||||
|
||||
_type = type;
|
||||
_parameters = parameters;
|
||||
|
||||
_links = new ArrayList<>();
|
||||
_links.add(new ReferenceObject("snapshot", urls.getNotebookSnapshotURL(notebookId, index)));
|
||||
}
|
||||
|
||||
/**
|
||||
* GetLlst of references associated with this operations. Contains a link
|
||||
* to the notebook snapshot that is the result of this operation.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "links")
|
||||
public List<ReferenceObject> getLinks() {
|
||||
|
||||
return _links;
|
||||
}
|
||||
|
||||
/**
|
||||
* List of parameters for the operation. The elements in the list are
|
||||
* operation-specific.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "parameters")
|
||||
public List<OpParameter> getParameters() {
|
||||
|
||||
return _parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Operation type.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "type")
|
||||
public OperationType getType() {
|
||||
|
||||
return _type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the list of parameters for the operations.
|
||||
*
|
||||
* @param parameters
|
||||
*/
|
||||
public void setParameters(List<OpParameter> parameters) {
|
||||
|
||||
_parameters = parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the operation type.
|
||||
*
|
||||
* @param type
|
||||
*/
|
||||
public void setType(OperationType type) {
|
||||
|
||||
_type = type;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script;
|
||||
|
||||
/**
|
||||
* Enumeration of operation types. Lists valid operations in a VizUAL script.
|
||||
* Each operations takes an operation-specific set of parameters:
|
||||
*
|
||||
* DeleteColumn
|
||||
* column: Index of column to be deleted
|
||||
*
|
||||
* DeleteRow
|
||||
* row: Index of row to be deleted
|
||||
*
|
||||
* InsertColumn
|
||||
* name: Optional. New column's name
|
||||
* position: Index position where the new column is inserted. Column at that
|
||||
* position (and all following columns) will move right.
|
||||
*
|
||||
* InsertRow
|
||||
* position: Index position where the new row will be inserted. The row at
|
||||
* the position and all following rows will move down.
|
||||
*
|
||||
* LoadFile
|
||||
* file: File name. A file with this name has to exists in the resources/files
|
||||
* directory
|
||||
* format: The CSV file format (CSV, TDF, EXCEL)
|
||||
* headline: Boolean value indication whether the first row in the file
|
||||
* contains column names (true) or not (false).
|
||||
*
|
||||
* MoveColumn
|
||||
* column: Index position of column to be moved
|
||||
* position: Target position of column to be moved
|
||||
*
|
||||
* MoveRow
|
||||
* row: Index position of row to be moved
|
||||
* position: Target position of row to be moved
|
||||
*
|
||||
* RenameColumn
|
||||
* column: Index of column to be renamed
|
||||
* name: New column name
|
||||
*
|
||||
* UpdateCell
|
||||
* column: Column index of cell to be updated
|
||||
* row: Row index of cell to be updated
|
||||
* value: New cell value
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public enum OperationType {
|
||||
|
||||
DeleteColumn,
|
||||
DeleteRow,
|
||||
InsertColumn,
|
||||
InsertRow,
|
||||
LoadFile,
|
||||
MoveColumn,
|
||||
MoveRow,
|
||||
RenameColumn,
|
||||
UpdateCell
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.vizirdb.ReferenceObject;
|
||||
import org.vizirdb.SelfReference;
|
||||
import org.vizirdb.URLFactory;
|
||||
|
||||
/**
|
||||
* A sequence of operations in a curation workflow. Individual operations are
|
||||
* parameterized operators in the imperative VizUAL scripting language.
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlType(propOrder = {"operations", "links"})
|
||||
@XmlRootElement(name = "script")
|
||||
public class VizUALScript {
|
||||
|
||||
private final List<ReferenceObject> _links;
|
||||
private final List<Operation> _operations;
|
||||
|
||||
public VizUALScript(int notebookId, List<Operation> operations, URLFactory urls) {
|
||||
|
||||
_operations = operations;
|
||||
|
||||
_links = new ArrayList<>();
|
||||
_links.add(new SelfReference(urls.getNotebookScriptURL(notebookId)));
|
||||
_links.add(new ReferenceObject("notebook", urls.getNotebookURL(notebookId)));
|
||||
}
|
||||
|
||||
public VizUALScript(int notebookId, URLFactory urls) {
|
||||
|
||||
this(notebookId, new ArrayList<Operation>(), urls);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get references for this script. Contains self reference and a reference
|
||||
* to the notebook.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "links")
|
||||
public List<ReferenceObject> getLinks() {
|
||||
|
||||
return _links;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sequence of operations contained in the script.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@XmlElement(name = "operations")
|
||||
public List<Operation> getOperations() {
|
||||
|
||||
return _operations;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
|
||||
/**
|
||||
* Actors evaluate script operations on a given notebook.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public interface Actor {
|
||||
|
||||
/**
|
||||
* Execute the operation represented by this actor on the given notebook.
|
||||
* Returns the new snapshot for the notebook.
|
||||
*
|
||||
* @param notebook The notebook to update
|
||||
* @param snapshotIndex The index of the new snapshot
|
||||
* @param parameters List of user-provided parameters
|
||||
* @param urls URL factory
|
||||
* @return
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException;
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.apache.commons.csv.CSVFormat;
|
||||
import org.apache.commons.csv.CSVParser;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author heiko
|
||||
*/
|
||||
public class CSVFileLoad implements Actor {
|
||||
|
||||
public static final String PARAMETER_FILE = "file";
|
||||
public static final String PARAMETER_FORMAT = "format";
|
||||
public static final String PARAMETER_HEADLINE = "headline";
|
||||
|
||||
private final File _directory;
|
||||
|
||||
public CSVFileLoad(File directory) {
|
||||
|
||||
_directory = directory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_FILE)) {
|
||||
throw new MissingParameterException(PARAMETER_FILE);
|
||||
}
|
||||
|
||||
File file = new File(_directory.getAbsolutePath() + File.separator + parameters.get(PARAMETER_FILE));
|
||||
if (!file.exists()) {
|
||||
throw new VizirDBException("Unknown file: " + parameters.get(PARAMETER_FILE));
|
||||
}
|
||||
|
||||
CSVFormat format;
|
||||
if (parameters.containsKey(PARAMETER_FORMAT)) {
|
||||
format = CSVFormat.valueOf(parameters.get(PARAMETER_FORMAT));
|
||||
} else {
|
||||
format = CSVFormat.Predefined.Default.getFormat();
|
||||
}
|
||||
|
||||
boolean headline = false;
|
||||
if (parameters.containsKey(PARAMETER_HEADLINE)) {
|
||||
headline = Boolean.parseBoolean(parameters.get(PARAMETER_HEADLINE));
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>();
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
|
||||
try (CSVParser parser = new CSVParser(new FileReader(file), format)) {
|
||||
List<CSVRecord> records = parser.getRecords();
|
||||
int offset = 0;
|
||||
if (headline) {
|
||||
CSVRecord record = records.get(0);
|
||||
for (int iColumn = 0; iColumn < record.size(); iColumn++) {
|
||||
columns.add(record.get(iColumn));
|
||||
}
|
||||
offset = 1;
|
||||
} else {
|
||||
int maxCols = 0;
|
||||
for (CSVRecord record : records) {
|
||||
if (record.size() > maxCols) {
|
||||
maxCols = record.size();
|
||||
}
|
||||
}
|
||||
for (int iCol = 0; iCol < maxCols; iCol++) {
|
||||
columns.add("");
|
||||
}
|
||||
}
|
||||
int rows = 0;
|
||||
for (int iRecord = offset; iRecord < records.size(); iRecord++) {
|
||||
CSVRecord record = records.get(iRecord);
|
||||
for (int iValue = 0; iValue < Math.min(columns.size(), record.size()); iValue++) {
|
||||
cells.add(new Cell(notebook.nextCellId(), iValue, rows, record.get(iValue)));
|
||||
}
|
||||
rows++;
|
||||
}
|
||||
} catch (java.io.IOException ioException) {
|
||||
throw new VizirDBException(ioException);
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Update a cell in a notebook snapshot. The cell is identified by the column
|
||||
* and row index positions (starting at 0).
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class CellUpdate implements Actor {
|
||||
|
||||
public static final String PARAMETER_COLUMN = "column";
|
||||
public static final String PARAMETER_ROW = "row";
|
||||
public static final String PARAMETER_VALUE = "value";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public CellUpdate(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_COLUMN)) {
|
||||
throw new MissingParameterException(PARAMETER_COLUMN);
|
||||
}
|
||||
if (!parameters.containsKey(PARAMETER_ROW)) {
|
||||
throw new MissingParameterException(PARAMETER_ROW);
|
||||
}
|
||||
|
||||
int column = -1;
|
||||
try {
|
||||
column = Integer.parseInt(parameters.get(PARAMETER_COLUMN));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (column < 0) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
int row = -1;
|
||||
try {
|
||||
row = Integer.parseInt(parameters.get(PARAMETER_ROW));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (row < 0) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (column >= snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
if (row >= snapshot.getRows()) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
|
||||
String value = "*missing*";
|
||||
if (parameters.containsKey(PARAMETER_VALUE)) {
|
||||
value = parameters.get(PARAMETER_VALUE);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if ((cell.getColumn() == column) && (cell.getRow() == row)) {
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn(), cell.getRow(), value));
|
||||
} else {
|
||||
cells.add(cell);
|
||||
}
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Delete a column in a notebook snapshot. The column is identified by the index
|
||||
* position (starting at 0). All columns that are to the right of the deleted
|
||||
* column are moved to the left.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class ColumnDelete implements Actor {
|
||||
|
||||
public static final String PARAMETER_COLUMN = "column";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public ColumnDelete(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_COLUMN)) {
|
||||
throw new MissingParameterException(PARAMETER_COLUMN);
|
||||
}
|
||||
|
||||
int column = -1;
|
||||
try {
|
||||
column = Integer.parseInt(parameters.get(PARAMETER_COLUMN));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (column < 0) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (column >= snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
columns.remove(column);
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if (cell.getColumn() < column) {
|
||||
cells.add(cell);
|
||||
} else if (cell.getColumn() > column) {
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn() - 1, cell.getRow(), cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Insert a column in a notebook snapshot. The column is identified by the index
|
||||
* position (starting at 0). The column that currently is at that index position
|
||||
* (and all following columns) are moved to the right of the inserted column.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class ColumnInsert implements Actor {
|
||||
|
||||
public static final String PARAMETER_NAME = "name";
|
||||
public static final String PARAMETER_POSITION = "position";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public ColumnInsert(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_POSITION)) {
|
||||
throw new MissingParameterException(PARAMETER_POSITION);
|
||||
}
|
||||
|
||||
int position = -1;
|
||||
try {
|
||||
position = Integer.parseInt(parameters.get(PARAMETER_POSITION));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (position < 0) {
|
||||
throw new VizirDBException("Invalid position: " + position);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (position > snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid position: " + position);
|
||||
}
|
||||
|
||||
String name = "";
|
||||
if (parameters.containsKey(PARAMETER_NAME)) {
|
||||
name = parameters.get(PARAMETER_NAME);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
columns.add(position, name);
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if (cell.getColumn() < position) {
|
||||
cells.add(cell);
|
||||
} else if (cell.getColumn() >= position) {
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn() + 1, cell.getRow(), cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
for (int iRow = 0; iRow < snapshot.getRows(); iRow++) {
|
||||
cells.add(new Cell(notebook.nextCellId(), position, iRow, ""));
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Move a column in a notebook snapshot. The column is identified by the index
|
||||
* position (starting at 0). In the resulting snapshot, the column will be at
|
||||
* the position identified by parameter 'position'. If the column is moved to
|
||||
* the right, all other columns in the move interval (including the column at
|
||||
* position) will move left. If the column is moved left, all columns (including
|
||||
* the colum at position) will move right.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class ColumnMove implements Actor {
|
||||
|
||||
public static final String PARAMETER_COLUMN = "column";
|
||||
public static final String PARAMETER_POSITION = "position";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public ColumnMove(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_COLUMN)) {
|
||||
throw new MissingParameterException(PARAMETER_COLUMN);
|
||||
}
|
||||
|
||||
int column = -1;
|
||||
try {
|
||||
column = Integer.parseInt(parameters.get(PARAMETER_COLUMN));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (column < 0) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
int position = -1;
|
||||
try {
|
||||
position = Integer.parseInt(parameters.get(PARAMETER_POSITION));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (position < 0) {
|
||||
throw new VizirDBException("Invalid target column: " + position);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (column >= snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
if (position >= snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid target column: " + position);
|
||||
}
|
||||
|
||||
if (column == position) {
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, snapshot.getColumns(), snapshot.getCells(), urls);
|
||||
}
|
||||
boolean isMoveToRight = (position > column);
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
String name = columns.get(column);
|
||||
columns.remove(column);
|
||||
columns.add(position, name);
|
||||
|
||||
int moveIntervalLeft = Math.min(column, position);
|
||||
int moveIntervalRight = Math.max(column, position);
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
System.out.print("[" + cell.getColumn() + ", " + cell.getRow() + "] -> " );
|
||||
if ((cell.getColumn() < moveIntervalLeft) || (cell.getColumn() > moveIntervalRight)) {
|
||||
System.out.println("[" + cell.getColumn() + ", " + cell.getRow() + "]");
|
||||
cells.add(cell);
|
||||
} else {
|
||||
int targetCol;
|
||||
if (isMoveToRight) {
|
||||
if (cell.getColumn() == column) {
|
||||
targetCol = position;
|
||||
} else {
|
||||
targetCol = cell.getColumn() - 1;
|
||||
}
|
||||
} else {
|
||||
if (cell.getColumn() == column) {
|
||||
targetCol = position;
|
||||
} else {
|
||||
targetCol = cell.getColumn() + 1;
|
||||
}
|
||||
}
|
||||
System.out.println("[" + targetCol + ", " + cell.getRow() + "]");
|
||||
cells.add(new Cell(cell.getIdentitifer(), targetCol, cell.getRow(), cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Rename a column in a notebook snapshot. The column is identified by the index
|
||||
* position (starting at 0).
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class ColumnRename implements Actor {
|
||||
|
||||
public static final String PARAMETER_COLUMN = "column";
|
||||
public static final String PARAMETER_NAME = "name";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public ColumnRename(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_COLUMN)) {
|
||||
throw new MissingParameterException(PARAMETER_COLUMN);
|
||||
}
|
||||
|
||||
int column = -1;
|
||||
try {
|
||||
column = Integer.parseInt(parameters.get(PARAMETER_COLUMN));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (column < 0) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (column >= snapshot.getColumns().size()) {
|
||||
throw new VizirDBException("Invalid column: " + column);
|
||||
}
|
||||
|
||||
String name = "";
|
||||
if (parameters.containsKey(PARAMETER_NAME)) {
|
||||
name = parameters.get(PARAMETER_NAME);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
columns.remove(column);
|
||||
columns.add(column, name);
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>(snapshot.getCells());
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Delete a row in a notebook snapshot. The row is identified by the index
|
||||
* position (starting at 0). All rows that are below the deleted row are moved
|
||||
* up.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class RowDelete implements Actor {
|
||||
|
||||
public static final String PARAMETER_ROW = "row";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public RowDelete(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_ROW)) {
|
||||
throw new MissingParameterException(PARAMETER_ROW);
|
||||
}
|
||||
|
||||
int row = -1;
|
||||
try {
|
||||
row = Integer.parseInt(parameters.get(PARAMETER_ROW));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (row < 0) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (row >= snapshot.getRows()) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if (cell.getRow() < row) {
|
||||
cells.add(cell);
|
||||
} else if (cell.getRow() > row) {
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn(), cell.getRow() - 1, cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Insert a row in a notebook snapshot. The row is identified by the index
|
||||
* position (starting at 0). The current row at the index position and all
|
||||
* following rows are moved down.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class RowInserte implements Actor {
|
||||
|
||||
public static final String PARAMETER_POSITION = "position";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public RowInserte(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_POSITION)) {
|
||||
throw new MissingParameterException(PARAMETER_POSITION);
|
||||
}
|
||||
|
||||
int position = -1;
|
||||
try {
|
||||
position = Integer.parseInt(parameters.get(PARAMETER_POSITION));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (position < 0) {
|
||||
throw new VizirDBException("Invalid position: " + position);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (position > snapshot.getRows()) {
|
||||
throw new VizirDBException("Invalid position: " + position);
|
||||
}
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if (cell.getRow() < position) {
|
||||
cells.add(cell);
|
||||
} else if (cell.getRow() >= position) {
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn(), cell.getRow() + 1, cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
for (int iColumn = 0; iColumn < columns.size(); iColumn++) {
|
||||
cells.add(new Cell(notebook.nextCellId(), iColumn, position, ""));
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.script.actor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.vizirdb.MissingParameterException;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.VizirDBException;
|
||||
import org.vizirdb.database.Cell;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
|
||||
/**
|
||||
* Move a row in a notebook snapshot. The row is identified by the index
|
||||
* position (starting at 0). In the resulting snapshot, the row will be at
|
||||
* the position identified by parameter 'position'. If the row is moved down,
|
||||
* all other rows in the move interval (including the row at position) will
|
||||
* move up. If the row is moved up, all rows (including the row at position)
|
||||
* will move down.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
public class RowMove implements Actor {
|
||||
|
||||
public static final String PARAMETER_ROW = "row";
|
||||
public static final String PARAMETER_POSITION = "position";
|
||||
|
||||
private final VizirDB _vdb;
|
||||
|
||||
public RowMove(VizirDB vdb) {
|
||||
|
||||
_vdb = vdb;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Snapshot exec(Notebook notebook, int snapshotIndex, HashMap<String, String> parameters, URLFactory urls) throws org.vizirdb.VizirDBException {
|
||||
|
||||
if (!parameters.containsKey(PARAMETER_ROW)) {
|
||||
throw new MissingParameterException(PARAMETER_ROW);
|
||||
}
|
||||
|
||||
int row = -1;
|
||||
try {
|
||||
row = Integer.parseInt(parameters.get(PARAMETER_ROW));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (row < 0) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
|
||||
|
||||
int position = -1;
|
||||
try {
|
||||
position = Integer.parseInt(parameters.get(PARAMETER_POSITION));
|
||||
} catch (java.lang.NumberFormatException nfe) {
|
||||
throw new VizirDBException(nfe);
|
||||
}
|
||||
if (position < 0) {
|
||||
throw new VizirDBException("Invalid target row: " + position);
|
||||
}
|
||||
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebook.getIdentifier(), snapshotIndex - 1);
|
||||
if (snapshot == null) {
|
||||
throw new VizirDBException("Missing snapshot: " + (snapshotIndex - 1));
|
||||
}
|
||||
if (row >= snapshot.getRows()) {
|
||||
throw new VizirDBException("Invalid row: " + row);
|
||||
}
|
||||
if (position >= snapshot.getRows()) {
|
||||
throw new VizirDBException("Invalid target row: " + row);
|
||||
}
|
||||
|
||||
if (row == position) {
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, snapshot.getColumns(), snapshot.getCells(), urls);
|
||||
}
|
||||
|
||||
boolean isMoveDown = (position > row);
|
||||
|
||||
ArrayList<String> columns = new ArrayList<>(snapshot.getColumns());
|
||||
|
||||
int moveIntervalLeft = Math.min(row, position);
|
||||
int moveIntervalRight = Math.max(row, position);
|
||||
ArrayList<Cell> cells = new ArrayList<>();
|
||||
for (Cell cell : snapshot.getCells()) {
|
||||
if ((cell.getRow() < moveIntervalLeft) || (cell.getRow() > moveIntervalRight)) {
|
||||
cells.add(cell);
|
||||
} else {
|
||||
int targetRow;
|
||||
if (isMoveDown) {
|
||||
if (cell.getRow() == row) {
|
||||
targetRow = position;
|
||||
} else {
|
||||
targetRow = cell.getRow() - 1;
|
||||
}
|
||||
} else {
|
||||
if (cell.getRow() == row) {
|
||||
targetRow = position;
|
||||
} else {
|
||||
targetRow = cell.getRow() + 1;
|
||||
}
|
||||
}
|
||||
cells.add(new Cell(cell.getIdentitifer(), cell.getColumn(), targetRow, cell.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
return new Snapshot(notebook.getIdentifier(), snapshotIndex, columns, cells, urls);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.server;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import javax.inject.Singleton;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.SimpleVizirDBM;
|
||||
import org.vizirdb.database.VizirDB;
|
||||
import org.vizirdb.script.Operation;
|
||||
import org.vizirdb.ReferenceObject;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.database.Snapshot;
|
||||
import org.vizirdb.script.VizUALScript;
|
||||
|
||||
/**
|
||||
* The Vizir Database Web API Server.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@Path("/")
|
||||
@Singleton
|
||||
public class DatabaseServer {
|
||||
|
||||
private final URLFactory _urls;
|
||||
private final VizirDB _vdb;
|
||||
|
||||
/**
|
||||
* Initialize the database web API server once.
|
||||
* @param context
|
||||
*/
|
||||
public DatabaseServer(@Context ServletContext context) {
|
||||
|
||||
_urls = new URLFactory("http://vizirdb.7mi5uspdsy.us-west-2.elasticbeanstalk.com/api/v1");
|
||||
_vdb = new SimpleVizirDBM(_urls, new File(context.getRealPath("/WEB-INF/resources")));
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTEBOOK
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Returns the list of dataset resources managed by the server.
|
||||
*
|
||||
* @param body Request body containing the name of the new notebook
|
||||
* @return The created notebook object
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks")
|
||||
@POST
|
||||
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML})
|
||||
public Notebook createNotebook(NamedObject body) throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
return _vdb.createNotebook(body.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the list of dataset resources managed by the server.
|
||||
*
|
||||
* @return
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks")
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public List<Notebook> getNotebookListing() throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
return _vdb.listNotebooks();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the notebook with the given identifier.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @return True, if the notebook existed and was
|
||||
* deleted successfully.
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}")
|
||||
@DELETE
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public OpResult deleteNotebook(@PathParam("notebookIdentifier") int notebookIdentifier) throws org.vizirdb.VizirDBException {
|
||||
|
||||
OpResult response = new OpResult();
|
||||
response.setResult(_vdb.deleteNotebook(notebookIdentifier));
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a single notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @return
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}")
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Notebook getNotebook(@PathParam("notebookIdentifier") int notebookIdentifier) throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
Notebook notebook = _vdb.getNotebook(notebookIdentifier);
|
||||
if (notebook != null) {
|
||||
return notebook;
|
||||
} else {
|
||||
throw new WebApplicationException(404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the name of an existing notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @param body Object containing the new notebook name
|
||||
* @return
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}")
|
||||
@POST
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public OpResult updateNotebook(@PathParam("notebookIdentifier") int notebookIdentifier, NamedObject body) throws org.vizirdb.VizirDBException {
|
||||
|
||||
OpResult response = new OpResult();
|
||||
response.setResult(_vdb.updateNotebook(notebookIdentifier, body.getName()));
|
||||
return response;
|
||||
}
|
||||
|
||||
/*
|
||||
* SCRIPT
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return the VizUAL script associated with a given notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @param body Operation definition
|
||||
* @return Reference to snapshot created by the
|
||||
* operation
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}/script")
|
||||
@POST
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public ReferenceObject appendScriptOperation(@PathParam("notebookIdentifier") int notebookIdentifier, Operation body) throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
Notebook notebook = _vdb.getNotebook(notebookIdentifier);
|
||||
if (notebook != null) {
|
||||
int snapshotIndex = _vdb.appendOperation(notebookIdentifier, body);
|
||||
return new ReferenceObject("snapshot", _urls.getNotebookSnapshotURL(notebookIdentifier, snapshotIndex));
|
||||
} else {
|
||||
throw new WebApplicationException(404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the VizUAL script associated with a given notebook.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @return
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}/script")
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public VizUALScript getNotebookScript(@PathParam("notebookIdentifier") int notebookIdentifier) throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
Notebook notebook = _vdb.getNotebook(notebookIdentifier);
|
||||
if (notebook != null) {
|
||||
return notebook.getScript();
|
||||
} else {
|
||||
throw new WebApplicationException(404);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* SNAPSHOTS
|
||||
*/
|
||||
|
||||
/**
|
||||
* Return the snapshot generated by the script operation with the given
|
||||
* index.
|
||||
*
|
||||
* @param notebookIdentifier Notebook identifier
|
||||
* @param snapshotIndex Snapshot index; corresponds to index of
|
||||
* operation in the notebook's script that
|
||||
* generated the snapshot
|
||||
* @return
|
||||
* @throws java.net.MalformedURLException
|
||||
* @throws org.vizirdb.VizirDBException
|
||||
*/
|
||||
@Path("/notebooks/{notebookIdentifier}/snapshots/{snapshotIndex}")
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Snapshot getNotebookSnapshot(@PathParam("notebookIdentifier") int notebookIdentifier, @PathParam("snapshotIndex") int snapshotIndex) throws java.net.MalformedURLException, org.vizirdb.VizirDBException {
|
||||
|
||||
Notebook notebook = _vdb.getNotebook(notebookIdentifier);
|
||||
if (notebook != null) {
|
||||
Snapshot snapshot = _vdb.getNotebookSnapshot(notebookIdentifier, snapshotIndex);
|
||||
if (snapshot != null) {
|
||||
return snapshot;
|
||||
} else {
|
||||
throw new WebApplicationException(404);
|
||||
}
|
||||
} else {
|
||||
throw new WebApplicationException(404);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright 2016 heiko.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.server;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* A simple named object.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlRootElement
|
||||
public class NamedObject {
|
||||
|
||||
private String _name;
|
||||
|
||||
@XmlElement(name = "name")
|
||||
public String getName() {
|
||||
|
||||
return _name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
|
||||
_name = name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright 2016 heiko.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.server;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* Simple response object for server requests that update or delete resources.
|
||||
* Represents the return value of the invoked modification operation.
|
||||
*
|
||||
* @author Heiko Mueller
|
||||
*/
|
||||
@XmlRootElement(name = "response")
|
||||
public class OpResult {
|
||||
|
||||
private boolean _result = false;
|
||||
|
||||
@XmlElement(name = "result")
|
||||
public boolean getResult() {
|
||||
|
||||
return _result;
|
||||
}
|
||||
|
||||
public void setResult(boolean result) {
|
||||
|
||||
_result = result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.vizirdb.test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import org.vizirdb.URLFactory;
|
||||
import org.vizirdb.database.Notebook;
|
||||
import org.vizirdb.database.SimpleVizirDBM;
|
||||
import org.vizirdb.script.OpParameter;
|
||||
import org.vizirdb.script.Operation;
|
||||
import org.vizirdb.script.OperationType;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author heiko
|
||||
*/
|
||||
public class TestMove {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Operation loadFileOp = new Operation();
|
||||
loadFileOp.setType(OperationType.LoadFile);
|
||||
loadFileOp.setParameters(new ArrayList<OpParameter>());
|
||||
loadFileOp.getParameters().add(new OpParameter("file", "32yu-maz2.tsv"));
|
||||
loadFileOp.getParameters().add(new OpParameter("format", "TDF"));
|
||||
loadFileOp.getParameters().add(new OpParameter("headline", "true"));
|
||||
|
||||
Operation moveColOp = new Operation();
|
||||
moveColOp.setType(OperationType.MoveColumn);
|
||||
moveColOp.setParameters(new ArrayList<OpParameter>());
|
||||
moveColOp.getParameters().add(new OpParameter("column", "2"));
|
||||
moveColOp.getParameters().add(new OpParameter("position", "1"));
|
||||
|
||||
try {
|
||||
SimpleVizirDBM db = new SimpleVizirDBM(new URLFactory("http://vizirdb.7mi5uspdsy.us-west-2.elasticbeanstalk.com/api/v1"), new File("/home/heiko/work/src/curation/vizir/vizir-db/src/main/webapp/WEB-INF/resources"));
|
||||
Notebook nb = db.createNotebook("MB");
|
||||
db.appendOperation(nb.getIdentifier(), loadFileOp);
|
||||
db.appendOperation(nb.getIdentifier(), moveColOp);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
{
|
||||
"type": "LoadFile",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "file",
|
||||
"value": "32yu-maz2.tsv"
|
||||
},
|
||||
{
|
||||
"name": "format",
|
||||
"value": "TDF"
|
||||
},
|
||||
{
|
||||
"name": "headline",
|
||||
"value": "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
{
|
||||
"type": "DeleteColumn",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "column",
|
||||
"value": "2"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
{
|
||||
"type": "RenameColumn",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "column",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"name": "name",
|
||||
"value": "Family Size"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
{
|
||||
"type": "MoveColumn",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "column",
|
||||
"value": "1"
|
||||
|
||||
},{
|
||||
"name": "position",
|
||||
"value": "0"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
{
|
||||
"type": "MoveRow",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "row",
|
||||
"value": "1"
|
||||
|
||||
},{
|
||||
"name": "position",
|
||||
"value": "5"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
{
|
||||
"type": "UpdateCell",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "column",
|
||||
"value": "0"
|
||||
|
||||
},{
|
||||
"name": "row",
|
||||
"value": "0"
|
||||
|
||||
},{
|
||||
"name": "value",
|
||||
"value": "MyFamily"
|
||||
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
coftype description renewal_fee orig_fee premise_flg
|
||||
A49 SUPERVISION OF AEROSOL 15 25 Y
|
||||
C06 FULL/SELF SERVE CNG DISPENSIN 15 25 N
|
||||
C07 SUP. SELF SERVICE CNG STATION 15 25 Y
|
||||
C08 MAINTENANCE CNG FACILITY 15 25 N
|
||||
C09 SUPERVISE CNG STATION 15 25 Y
|
||||
C10 SUPERVISE LNG PLANT 15 25 Y
|
||||
C11 SUPERVISE SNG PLANT 15 25 Y
|
||||
C12 DIRECT MFG FLAMMABLE MIXTURES 15 25 Y
|
||||
C13 DIRECT WHLSLE DRUG/CHEM SUPPLY 15 25 Y
|
||||
C14 "SUPERVISING NON\u2010PRODUCTION " 15 25 Y
|
||||
C15 SUPERVISE FLAMEPROOFING 15 25 N
|
||||
C16 DIRECT MANUFACTURE COMB MIX 15 25 Y
|
||||
C17 DIRECT NITROCELLULOSE STORAGE 15 25 Y
|
||||
C18 DIRECT NITROCELLULOSE PLANT 15 25 Y
|
||||
C19 DIRECT NITROCELLULOSE USE 15 25 Y
|
||||
C20 DIRECT MOTION PICTURE FILM 15 25 N
|
||||
C21 PROCESS MOTION PICTURE FILM 15 25 Y
|
||||
C23 MANAGE CLEANING, 138'F SOLVENT 15 25 Y
|
||||
C24 SUPERVISE BULK ACID STORAGE 15 25 Y
|
||||
C25 MANAGE TECHNICAL ESTABLISHMENT 15 25 Y
|
||||
C26 STORE/USE OF FLAM/COMB LIQUID 15 25 N
|
||||
C91 HAZARDOUS MATERIALS 15 25 Y
|
||||
C98 CON SUP/STOR/USE FLAM/COM LIQ 15 25 N
|
||||
C99 CON DIS/SUP/MAINT CNG STA/FAC 15 25 N
|
||||
E10 BLASTER (ALL PURPOSE) 5 25 N
|
||||
E11 BLASTER (SHAFT And TUNNEL) 5 25 N
|
||||
E12 DEMO OF BLDG USE EXPLOSIVES 5 25 N
|
||||
E13 UNDERWATER BLASTING 5 25 N
|
||||
E14 POWDER CARRIER 5 25 N
|
|
|
@ -0,0 +1,50 @@
|
|||
family_size income_more_than hhc_options_reduced_fee_level income_less_than
|
||||
1 0 1 16335
|
||||
2 0 1 22065
|
||||
3 0 1 27795
|
||||
4 0 1 33525
|
||||
5 0 1 39255
|
||||
6 0 1 44985
|
||||
7 0 1 50715
|
||||
1 16336 2 21780
|
||||
2 22066 2 29420
|
||||
3 27796 2 37060
|
||||
4 33526 2 44700
|
||||
5 39256 2 52340
|
||||
6 44986 2 59980
|
||||
7 50716 2 67620
|
||||
1 21781 3 27225
|
||||
2 29421 3 36775
|
||||
3 37061 3 46325
|
||||
4 44701 3 55875
|
||||
5 52341 3 65425
|
||||
6 59981 3 74975
|
||||
7 67621 3 84525
|
||||
1 27226 4 32670
|
||||
2 36776 4 44130
|
||||
3 46326 4 55590
|
||||
4 55876 4 67050
|
||||
5 65426 4 78510
|
||||
6 74976 4 89970
|
||||
7 84526 4 101430
|
||||
1 32671 5 38115
|
||||
2 44131 5 51485
|
||||
3 55591 5 64855
|
||||
4 67051 5 78225
|
||||
5 78511 5 91595
|
||||
6 89971 5 104965
|
||||
7 101431 5 118335
|
||||
1 38116 6 43560
|
||||
2 51486 6 58840
|
||||
3 64856 6 74120
|
||||
4 78226 6 89400
|
||||
5 91596 6 104680
|
||||
6 104966 6 119960
|
||||
7 118336 6 135240
|
||||
1 43561 7
|
||||
2 58841 7
|
||||
3 74121 7
|
||||
4 89401 7
|
||||
5 104681 7
|
||||
6 119961 7
|
||||
7 135241 7
|
|
|
@ -0,0 +1,141 @@
|
|||
site oel_tthm_g_l_a lraa_haa5_g_l_b oel_haa5_g_l_b location result_haa5_g_l_b sample_date analysis_date_haa5_g_l_b result_tthm_g_l_a lraa_tthm_g_l_a analysis_date_tthm_g_l_a
|
||||
15150 35 31 31 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 26 2014-11-05T00:00:00 2014-11-11T00:00:00 27 33 2014-11-05T00:00:00
|
||||
18650 28 31 31 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 27 2014-11-05T00:00:00 2014-11-11T00:00:00 25 26 2014-11-05T00:00:00
|
||||
23450 33 33 33 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 28 2014-11-05T00:00:00 2014-11-11T00:00:00 30 31 2014-11-05T00:00:00
|
||||
24350 40 34 34 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 30 2014-11-05T00:00:00 2014-11-11T00:00:00 37 37 2014-11-05T00:00:00
|
||||
31750 44 34 33 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 27 2014-11-05T00:00:00 2014-11-11T00:00:00 39 41 2014-11-05T00:00:00
|
||||
31850 42 34 32 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 26 2014-11-05T00:00:00 2014-11-11T00:00:00 39 38 2014-11-06T00:00:00
|
||||
32350 42 32 31 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 26 2014-11-05T00:00:00 2014-11-11T00:00:00 36 39 2014-11-06T00:00:00
|
||||
33450 42 37 37 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 30 2014-11-05T00:00:00 2014-11-12T00:00:00 38 37 2014-11-06T00:00:00
|
||||
33950 39 36 36 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 30 2014-11-05T00:00:00 2014-11-13T00:00:00 34 36 2014-11-06T00:00:00
|
||||
37950 38 35 34 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 28 2014-11-05T00:00:00 2014-11-13T00:00:00 32 36 2014-11-06T00:00:00
|
||||
38250 40 41 40 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 33 2014-11-05T00:00:00 2014-11-13T00:00:00 34 38 2014-11-06T00:00:00
|
||||
39650 41 37 37 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 29 2014-11-05T00:00:00 2014-11-13T00:00:00 36 38 2014-11-06T00:00:00
|
||||
44350 39 35 34 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 29 2014-11-05T00:00:00 2014-11-13T00:00:00 37 36 2014-11-06T00:00:00
|
||||
45250 34 35 35 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 31 2014-11-05T00:00:00 2014-11-13T00:00:00 29 32 2014-11-06T00:00:00
|
||||
50250 37 45 45 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 37 2014-11-05T00:00:00 2014-11-13T00:00:00 33 35 2014-11-06T00:00:00
|
||||
50750 44 40 40 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 40 2014-11-05T00:00:00 2014-11-13T00:00:00 39 42 2014-11-06T00:00:00
|
||||
50850 40 45 45 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 41 2014-11-05T00:00:00 2014-11-13T00:00:00 37 38 2014-11-06T00:00:00
|
||||
52050 44 42 40 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 35 2014-11-05T00:00:00 2014-11-13T00:00:00 43 39 2014-11-06T00:00:00
|
||||
58650 43 45 45 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 40 2014-11-05T00:00:00 2014-11-14T00:00:00 40 41 2014-11-06T00:00:00
|
||||
77650 35 35 35 SS - OPP 110-52 E/S 207th St 32 2014-11-05T00:00:00 2014-11-14T00:00:00 35 32 2014-11-06T00:00:00
|
||||
15150 26 30 25 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 22 2015-02-04T00:00:00 2015-02-06T00:00:00 15 32 2015-02-05T00:00:00
|
||||
18650 21 29 25 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 20 2015-02-04T00:00:00 2015-02-06T00:00:00 13 25 2015-02-09T00:00:00
|
||||
23450 25 32 27 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 23 2015-02-04T00:00:00 2015-02-06T00:00:00 15 30 2015-02-05T00:00:00
|
||||
24350 29 33 29 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 25 2015-02-04T00:00:00 2015-02-05T00:00:00 17 35 2015-02-05T00:00:00
|
||||
31750 32 33 28 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 27 2015-02-04T00:00:00 2015-02-05T00:00:00 20 39 2015-02-05T00:00:00
|
||||
31850 29 32 27 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 24 2015-02-04T00:00:00 2015-02-05T00:00:00 16 36 2015-02-05T00:00:00
|
||||
32350 31 30 27 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 25 2015-02-04T00:00:00 2015-02-06T00:00:00 17 37 2015-02-05T00:00:00
|
||||
33450 30 35 28 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 24 2015-02-04T00:00:00 2015-02-06T00:00:00 17 36 2015-02-05T00:00:00
|
||||
33950 29 34 28 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 23 2015-02-04T00:00:00 2015-02-06T00:00:00 16 35 2015-02-05T00:00:00
|
||||
37950 29 33 27 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 24 2015-02-04T00:00:00 2015-02-06T00:00:00 17 34 2015-02-05T00:00:00
|
||||
38250 30 38 29 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 23 2015-02-04T00:00:00 2015-02-06T00:00:00 16 36 2015-02-05T00:00:00
|
||||
39650 30 35 28 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 24 2015-02-04T00:00:00 2015-02-06T00:00:00 16 36 2015-02-05T00:00:00
|
||||
44350 28 33 27 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 24 2015-02-04T00:00:00 2015-02-06T00:00:00 15 34 2015-02-09T00:00:00
|
||||
45250 26 34 31 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 27 2015-02-04T00:00:00 2015-02-06T00:00:00 17 31 2015-02-05T00:00:00
|
||||
50250 27 42 37 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 27 2015-02-04T00:00:00 2015-02-07T00:00:00 16 33 2015-02-05T00:00:00
|
||||
50750 33 37 36 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 30 2015-02-04T00:00:00 2015-02-06T00:00:00 21 39 2015-02-05T00:00:00
|
||||
50850 29 42 38 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 30 2015-02-04T00:00:00 2015-02-07T00:00:00 18 35 2015-02-05T00:00:00
|
||||
52050 32 39 36 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 30 2015-02-04T00:00:00 2015-02-07T00:00:00 19 38 2015-02-05T00:00:00
|
||||
58650 34 43 39 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 32 2015-02-04T00:00:00 2015-02-07T00:00:00 23 39 2015-02-05T00:00:00
|
||||
77650 26 33 29 SS - OPP 110-52 E/S 207th St 24 2015-02-04T00:00:00 2015-02-07T00:00:00 15 30 2015-02-05T00:00:00
|
||||
15150 26 28 29 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 34 2015-05-05T00:00:00 2015-05-07T00:00:00 30 30 2015-05-06T00:00:00
|
||||
18650 22 29 29 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 34 2015-05-05T00:00:00 2015-05-07T00:00:00 25 24 2015-05-06T00:00:00
|
||||
23450 31 30 31 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 36 2015-05-05T00:00:00 2015-05-08T00:00:00 39 31 2015-05-06T00:00:00
|
||||
24350 32 32 34 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 36 34 2015-05-05T00:00:00
|
||||
31750 36 31 33 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 39 2015-05-05T00:00:00 2015-05-08T00:00:00 42 37 2015-05-05T00:00:00
|
||||
31850 34 30 32 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 38 2015-05-05T00:00:00 2015-05-08T00:00:00 41 36 2015-05-05T00:00:00
|
||||
32350 33 31 33 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 39 36 2015-05-05T00:00:00
|
||||
33450 36 32 34 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 44 37 2015-05-05T00:00:00
|
||||
33950 34 32 34 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 41 2015-05-05T00:00:00 2015-05-08T00:00:00 43 36 2015-05-05T00:00:00
|
||||
37950 27 30 32 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 37 2015-05-05T00:00:00 2015-05-09T00:00:00 30 33 2015-05-05T00:00:00
|
||||
38250 29 32 33 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 37 2015-05-05T00:00:00 2015-05-13T00:00:00 32 34 2015-05-05T00:00:00
|
||||
39650 27 31 31 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 36 2015-05-05T00:00:00 2015-05-09T00:00:00 27 32 2015-05-05T00:00:00
|
||||
44350 28 29 30 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 33 2015-05-05T00:00:00 2015-05-09T00:00:00 29 31 2015-05-05T00:00:00
|
||||
45250 27 33 32 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 35 2015-05-05T00:00:00 2015-05-09T00:00:00 30 29 2015-05-05T00:00:00
|
||||
50250 26 39 34 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 36 2015-05-05T00:00:00 2015-05-09T00:00:00 28 30 2015-05-05T00:00:00
|
||||
50750 35 37 34 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 33 2015-05-05T00:00:00 2015-05-09T00:00:00 39 38 2015-05-06T00:00:00
|
||||
50850 30 40 37 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 38 2015-05-05T00:00:00 2015-05-09T00:00:00 32 33 2015-05-06T00:00:00
|
||||
52050 32 38 35 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 38 2015-05-05T00:00:00 2015-05-09T00:00:00 33 35 2015-05-05T00:00:00
|
||||
58650 34 39 36 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 35 2015-05-05T00:00:00 2015-05-09T00:00:00 36 37 2015-05-06T00:00:00
|
||||
77650 27 32 31 SS - OPP 110-52 E/S 207th St 34 2015-05-05T00:00:00 2015-05-09T00:00:00 28 30 2015-05-05T00:00:00
|
||||
15150 26 28 29 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 34 2015-05-05T00:00:00 2015-05-07T00:00:00 30 30 2015-05-06T00:00:00
|
||||
18650 22 29 29 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 34 2015-05-05T00:00:00 2015-05-07T00:00:00 25 24 2015-05-06T00:00:00
|
||||
23450 31 30 31 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 36 2015-05-05T00:00:00 2015-05-08T00:00:00 39 31 2015-05-06T00:00:00
|
||||
24350 32 32 34 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 36 34 2015-05-05T00:00:00
|
||||
31750 36 31 33 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 39 2015-05-05T00:00:00 2015-05-08T00:00:00 42 37 2015-05-05T00:00:00
|
||||
31850 34 30 32 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 38 2015-05-05T00:00:00 2015-05-08T00:00:00 41 36 2015-05-05T00:00:00
|
||||
32350 33 31 33 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 39 36 2015-05-05T00:00:00
|
||||
33450 36 32 34 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 40 2015-05-05T00:00:00 2015-05-08T00:00:00 44 37 2015-05-05T00:00:00
|
||||
33950 34 32 34 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 41 2015-05-05T00:00:00 2015-05-08T00:00:00 43 36 2015-05-05T00:00:00
|
||||
37950 27 30 32 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 37 2015-05-05T00:00:00 2015-05-09T00:00:00 30 33 2015-05-05T00:00:00
|
||||
38250 29 32 33 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 37 2015-05-05T00:00:00 2015-05-13T00:00:00 32 34 2015-05-05T00:00:00
|
||||
39650 27 31 31 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 36 2015-05-05T00:00:00 2015-05-09T00:00:00 27 32 2015-05-05T00:00:00
|
||||
44350 28 29 30 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 33 2015-05-05T00:00:00 2015-05-09T00:00:00 29 31 2015-05-05T00:00:00
|
||||
45250 27 33 32 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 35 2015-05-05T00:00:00 2015-05-09T00:00:00 30 29 2015-05-05T00:00:00
|
||||
50250 26 39 34 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 36 2015-05-05T00:00:00 2015-05-09T00:00:00 28 30 2015-05-05T00:00:00
|
||||
50750 35 37 34 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 33 2015-05-05T00:00:00 2015-05-09T00:00:00 39 38 2015-05-06T00:00:00
|
||||
50850 30 40 37 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 38 2015-05-05T00:00:00 2015-05-09T00:00:00 32 33 2015-05-06T00:00:00
|
||||
52050 32 38 35 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 38 2015-05-05T00:00:00 2015-05-09T00:00:00 33 35 2015-05-05T00:00:00
|
||||
58650 34 39 36 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 35 2015-05-05T00:00:00 2015-05-09T00:00:00 36 37 2015-05-06T00:00:00
|
||||
77650 27 32 31 SS - OPP 110-52 E/S 207th St 34 2015-05-05T00:00:00 2015-05-09T00:00:00 28 30 2015-05-05T00:00:00
|
||||
15150 40 28 29 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 30 2015-08-04T00:00:00 2015-08-08T00:00:00 58 33 2015-08-06T00:00:00
|
||||
18650 30 27 27 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 27 2015-08-04T00:00:00 2015-08-08T00:00:00 40 26 2015-08-06T00:00:00
|
||||
23450 41 29 30 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 30 2015-08-04T00:00:00 2015-08-08T00:00:00 54 35 2015-08-06T00:00:00
|
||||
24350 44 32 32 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 32 2015-08-04T00:00:00 2015-08-08T00:00:00 61 38 2015-08-07T00:00:00
|
||||
31750 39 31 33 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 32 2015-08-04T00:00:00 2015-08-08T00:00:00 46 37 2015-08-07T00:00:00
|
||||
31850 44 29 30 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 28 2015-08-04T00:00:00 2015-08-08T00:00:00 60 39 2015-08-07T00:00:00
|
||||
32350 42 30 30 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 28 2015-08-04T00:00:00 2015-08-08T00:00:00 56 37 2015-08-07T00:00:00
|
||||
33450 33 30 29 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 25 2015-08-04T00:00:00 2015-08-08T00:00:00 36 34 2015-08-07T00:00:00
|
||||
33950 33 30 29 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 25 2015-08-04T00:00:00 2015-08-08T00:00:00 37 33 2015-08-07T00:00:00
|
||||
37950 36 30 31 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 31 2015-08-04T00:00:00 2015-08-10T00:00:00 48 32 2015-08-07T00:00:00
|
||||
38250 41 32 33 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 35 2015-08-19T00:00:00 2015-08-10T00:00:00 57 35 2015-08-21T00:00:00
|
||||
39650 35 31 32 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 34 2015-08-04T00:00:00 2015-08-11T00:00:00 49 32 2015-08-07T00:00:00
|
||||
44350 27 30 30 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 32 2015-08-04T00:00:00 2015-08-11T00:00:00 31 28 2015-08-07T00:00:00
|
||||
45250 38 30 30 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 28 2015-08-04T00:00:00 2015-08-11T00:00:00 53 32 2015-08-07T00:00:00
|
||||
50250 33 36 37 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 43 2015-08-19T00:00:00 2015-08-11T00:00:00 43 30 2015-08-21T00:00:00
|
||||
50750 46 33 31 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 30 2015-08-04T00:00:00 2015-08-11T00:00:00 62 40 2015-08-07T00:00:00
|
||||
50850 39 36 35 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 35 2015-08-04T00:00:00 2015-08-11T00:00:00 53 35 2015-08-07T00:00:00
|
||||
52050 41 34 33 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 31 2015-08-04T00:00:00 2015-08-11T00:00:00 56 38 2015-08-07T00:00:00
|
||||
58650 40 36 36 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 38 2015-08-04T00:00:00 2015-08-10T00:00:00 50 37 2015-08-07T00:00:00
|
||||
77650 32 30 30 SS - OPP 110-52 E/S 207th St 31 2015-08-04T00:00:00 2015-08-10T00:00:00 42 30 2015-08-07T00:00:00
|
||||
15150 44 33 39 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 45 2015-11-04T00:00:00 2015-11-05T00:00:00 44 37 2015-11-06T00:00:00
|
||||
18650 34 30 34 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 37 2015-11-04T00:00:00 2015-11-20T00:00:00 35 28 2015-11-06T00:00:00
|
||||
23450 42 32 35 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 37 2015-11-04T00:00:00 2015-11-05T00:00:00 38 37 2015-11-06T00:00:00
|
||||
24350 44 33 36 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 35 2015-11-04T00:00:00 2015-11-07T00:00:00 39 38 2015-11-05T00:00:00
|
||||
31750 46 31 30 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 25 2015-11-04T00:00:00 2015-11-07T00:00:00 47 39 2015-11-05T00:00:00
|
||||
31850 50 31 34 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 35 2015-11-04T00:00:00 2015-11-09T00:00:00 50 42 2015-11-06T00:00:00
|
||||
32350 47 31 33 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 31 2015-11-04T00:00:00 2015-11-07T00:00:00 47 40 2015-11-05T00:00:00
|
||||
33450 39 29 30 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 27 2015-11-04T00:00:00 2015-11-11T00:00:00 37 34 2015-11-06T00:00:00
|
||||
33950 39 29 31 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 28 2015-11-04T00:00:00 2015-11-11T00:00:00 37 33 2015-11-06T00:00:00
|
||||
37950 44 30 31 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 28 2015-11-04T00:00:00 2015-11-07T00:00:00 48 36 2015-11-06T00:00:00
|
||||
38250 48 37 44 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 51 2015-11-04T00:00:00 2015-11-11T00:00:00 51 39 2015-11-06T00:00:00
|
||||
39650 44 34 39 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 42 2015-11-04T00:00:00 2015-11-11T00:00:00 49 35 2015-11-06T00:00:00
|
||||
44350 33 31 34 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 35 2015-11-04T00:00:00 2015-11-05T00:00:00 35 28 2015-11-05T00:00:00
|
||||
45250 38 31 32 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 33 2015-11-04T00:00:00 2015-11-07T00:00:00 34 34 2015-11-05T00:00:00
|
||||
50250 37 36 38 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 36 2015-11-04T00:00:00 2015-11-07T00:00:00 38 31 2015-11-05T00:00:00
|
||||
50750 49 29 27 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 22 2015-11-04T00:00:00 2015-11-07T00:00:00 47 42 2015-11-06T00:00:00
|
||||
50850 42 34 35 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 33 2015-11-04T00:00:00 2015-11-09T00:00:00 42 36 2015-11-05T00:00:00
|
||||
52050 45 31 30 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 25 2015-11-04T00:00:00 2015-11-07T00:00:00 45 38 2015-11-05T00:00:00
|
||||
58650 45 34 34 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 31 2015-11-04T00:00:00 2015-11-09T00:00:00 46 39 2015-11-05T00:00:00
|
||||
77650 36 31 33 SS - OPP 110-52 E/S 207th St 33 2015-11-04T00:00:00 2015-11-07T00:00:00 37 31 2015-11-05T00:00:00
|
||||
15150 43 36 36 "SS - IFO 1420 E/S Grand Concourse, 1st SS S/O E 171st St, 20\""" 35 2016-02-02T00:00:00 2016-02-04T00:00:00 34 42 2016-02-03T00:00:00
|
||||
18650 30 31 29 "SS - N/S Dewey Ave, btw Quincy & Swinton Aves, 12\""" 25 2016-02-02T00:00:00 2016-02-05T00:00:00 23 31 2016-02-02T00:00:00
|
||||
23450 37 33 31 "SS - N/S Jefferson Avenue, 2nd SS W/O Lewis Avenue, 20\""" 29 2016-02-02T00:00:00 2016-02-05T00:00:00 27 40 2016-02-02T00:00:00
|
||||
24350 44 36 35 "SS - W/S Brighton 11th Street, 2nd SS S/O Cass Place, 12\""" 36 2016-02-02T00:00:00 2016-02-05T00:00:00 38 44 2016-02-02T00:00:00
|
||||
31750 42 31 28 "SS - IFO 427 N/S W 26th St, 2nd SS W/O 9th Ave, 12\""" 27 2016-02-02T00:00:00 2016-02-06T00:00:00 38 43 2016-02-02T00:00:00
|
||||
31850 47 33 30 "SS - IFO 82 S/S Warren St, 2nd SS E/O Greenwich St, 12\""" 29 2016-02-02T00:00:00 2016-02-06T00:00:00 38 47 2016-02-02T00:00:00
|
||||
32350 44 34 32 "SS - IFO 116 E/S Ave C, 2nd SS N/O E 7th St, 12\""" 35 2016-02-02T00:00:00 2016-02-06T00:00:00 37 45 2016-02-03T00:00:00
|
||||
33450 31 29 24 "SS - IFO 135 N/S W 112th St, 2nd SS W/O St Nicholas Ave, 12\""" 22 2016-02-02T00:00:00 2016-02-06T00:00:00 25 36 2016-02-03T00:00:00
|
||||
33950 31 29 24 "SS - N/S E 104th Street, 2nd SS E/O 3rd Avenue, 12\""" 22 2016-02-02T00:00:00 2016-02-06T00:00:00 25 36 2016-02-03T00:00:00
|
||||
37950 45 33 33 "SS - IFO 325 N/S E 12th Street, 2nd SS E/O 2nd Ave, 12\""" 36 2016-02-02T00:00:00 2016-02-06T00:00:00 41 42 2016-02-03T00:00:00
|
||||
38250 47 41 42 "SS - IFO 309 N/S E 87th St, 2nd SS W/O 1st Ave, 12\""" 40 2016-02-02T00:00:00 2016-02-06T00:00:00 39 45 2016-02-03T00:00:00
|
||||
39650 43 37 37 "SS - IFO 229 N/S E 49th St, 2nd SS W/O 2nd Ave, 12\""" 36 2016-02-02T00:00:00 2016-02-08T00:00:00 37 41 2016-02-03T00:00:00
|
||||
44350 38 36 38 "SS - IFO 21-55 N/S 34th Ave, 1st SS W/O 24th St, 12\""" 42 2016-02-02T00:00:00 2016-02-08T00:00:00 42 34 2016-02-03T00:00:00
|
||||
45250 35 32 31 "SS - E/S Beach 58th St, 2nd SS N/O Beach Channel Drive, 12\""" 31 2016-02-02T00:00:00 2016-02-09T00:00:00 26 36 2016-02-03T00:00:00
|
||||
50250 33 37 36 "SS - IFO 937 N/S Victory Blvd, 2nd SS E/O Highland Ave, 20\""" 32 2016-02-02T00:00:00 2016-02-09T00:00:00 26 34 2016-02-03T00:00:00
|
||||
50750 42 30 31 "SS - E/S Woodhull Ave, 1st SS S/O Albourne Ave, 8\""" 35 2016-02-02T00:00:00 2016-02-09T00:00:00 29 44 2016-02-03T00:00:00
|
||||
50850 38 35 34 "SS - IFO 512 W/S Arlene St, 1st SS N/O Dawson Ct, 12\""" 33 2016-02-02T00:00:00 2016-02-09T00:00:00 28 39 2016-02-03T00:00:00
|
||||
52050 40 32 31 "SS - IFO 218 W/S Nicholas Ave, 1st SS S/O Charles Ave, 12\""" 34 2016-02-02T00:00:00 2016-02-09T00:00:00 30 41 2016-02-03T00:00:00
|
||||
58650 41 35 35 "SS - IFO 510 W/S Main St, 2nd SS S/O Hylan Blvd, 12\""" 35 2016-02-02T00:00:00 2016-02-09T00:00:00 34 42 2016-02-03T00:00:00
|
||||
77650 32 32 31 SS - OPP 110-52 E/S 207th St 29 2016-02-02T00:00:00 2016-02-09T00:00:00 24 33 2016-02-03T00:00:00
|
|
|
@ -0,0 +1,109 @@
|
|||
nursing_home_medical_assistance supplemental_security_income_medical_assistance total_hra_enrolled_medical_assistance_individuals cash_assistance_medical_assistance medical_assistance_only month
|
||||
40943 407863 2553064 369672 1775529 2007-01-01T00:00:00
|
||||
40536 407459 2533062 363960 1761643 2007-02-01T00:00:00
|
||||
40276 408022 2560715 363130 1789563 2007-03-01T00:00:00
|
||||
40087 407465 2538852 358717 1772670 2007-04-01T00:00:00
|
||||
39707 408011 2550214 355795 1786408 2007-05-01T00:00:00
|
||||
39923 408190 2559977 356232 1795555 2007-06-01T00:00:00
|
||||
39954 407474 2565687 351704 1806509 2007-07-01T00:00:00
|
||||
40046 407284 2582296 353144 1821868 2007-08-01T00:00:00
|
||||
39998 408391 2587153 353802 1824960 2007-09-01T00:00:00
|
||||
39594 407217 2585112 350510 1827385 2007-10-01T00:00:00
|
||||
39536 407530 2580800 351207 1822063 2007-11-01T00:00:00
|
||||
39257 408121 2565826 344417 1813288 2007-12-01T00:00:00
|
||||
39403 407373 2552898 346039 1799486 2008-01-01T00:00:00
|
||||
39637 406891 2555532 342505 1806136 2008-02-01T00:00:00
|
||||
39227 406539 2554528 338658 1809331 2008-03-01T00:00:00
|
||||
39272 406227 2559031 340723 1812081 2008-04-01T00:00:00
|
||||
39310 407504 2568678 341176 1819998 2008-05-01T00:00:00
|
||||
39143 407295 2563819 336156 1820368 2008-06-01T00:00:00
|
||||
39822 408185 2568573 336583 1823805 2008-07-01T00:00:00
|
||||
40150 409355 2585641 336222 1840064 2008-08-01T00:00:00
|
||||
39860 408697 2596233 335130 1852406 2008-09-01T00:00:00
|
||||
40315 409965 2617704 336732 1871007 2008-10-01T00:00:00
|
||||
40487 411142 2621285 339994 1870149 2008-11-01T00:00:00
|
||||
40186 411980 2622283 337367 1872936 2008-12-01T00:00:00
|
||||
40091 414199 2643446 341497 1887750 2009-01-01T00:00:00
|
||||
39983 413931 2650549 340399 1896219 2009-02-01T00:00:00
|
||||
39909 413044 2660618 339858 1907716 2009-03-01T00:00:00
|
||||
39749 413202 2666706 341717 1911787 2009-04-01T00:00:00
|
||||
39412 414561 2695904 343306 1938037 2009-05-01T00:00:00
|
||||
39695 412735 2704947 343032 1949180 2009-06-01T00:00:00
|
||||
39490 413466 2742566 347907 1981193 2009-07-01T00:00:00
|
||||
39109 413778 2752419 347565 1991076 2009-08-01T00:00:00
|
||||
39241 413764 2769517 349939 2005814 2009-09-01T00:00:00
|
||||
39412 414673 2809642 357463 2037506 2009-10-01T00:00:00
|
||||
39462 413729 2815150 354893 2046528 2009-11-01T00:00:00
|
||||
38989 413072 2818225 354544 2050609 2009-12-01T00:00:00
|
||||
39005 414535 2838890 357560 2066795 2010-01-01T00:00:00
|
||||
39409 414446 2839012 353317 2071249 2010-02-01T00:00:00
|
||||
38830 413349 2831495 344533 2073613 2010-03-01T00:00:00
|
||||
38673 414289 2854426 346439 2093698 2010-04-01T00:00:00
|
||||
38719 415831 2849760 345897 2088032 2010-05-01T00:00:00
|
||||
38244 414905 2843564 340279 2088380 2010-06-01T00:00:00
|
||||
38113 416655 2863980 346927 2100398 2010-07-01T00:00:00
|
||||
38316 416046 2863648 344105 2103497 2010-08-01T00:00:00
|
||||
38149 415275 2865675 349295 2101105 2010-09-01T00:00:00
|
||||
38692 416741 2892894 356841 2119312 2010-10-01T00:00:00
|
||||
38410 416051 2891556 352797 2122708 2010-11-01T00:00:00
|
||||
38459 417183 2908316 355463 2135670 2010-12-01T00:00:00
|
||||
38232 416029 2903849 357333 2130487 2011-01-01T00:00:00
|
||||
37450 416191 2895290 351730 2127369 2011-02-01T00:00:00
|
||||
37297 416104 2900747 352377 2132266 2011-03-01T00:00:00
|
||||
37268 417217 2915727 354942 2143568 2011-04-01T00:00:00
|
||||
37078 415530 2912186 348344 2148312 2011-05-01T00:00:00
|
||||
36911 416213 2912686 345605 2150868 2011-06-01T00:00:00
|
||||
37037 417775 2927952 347733 2162444 2011-07-01T00:00:00
|
||||
37031 416845 2926095 342379 2166871 2011-08-01T00:00:00
|
||||
37666 416358 2944308 348084 2179866 2011-09-01T00:00:00
|
||||
37715 415846 2949136 347031 2186259 2011-10-01T00:00:00
|
||||
37597 416318 2938146 345377 2176451 2011-11-01T00:00:00
|
||||
37381 418238 2954261 349238 2186785 2011-12-01T00:00:00
|
||||
37161 416434 2953689 347998 2189257 2012-01-01T00:00:00
|
||||
37511 416344 2946523 341817 2188362 2012-02-01T00:00:00
|
||||
37883 417512 2977419 346504 2213403 2012-03-01T00:00:00
|
||||
37621 416164 2984224 343076 2224984 2012-04-01T00:00:00
|
||||
38077 415859 2983102 344148 2223095 2012-05-01T00:00:00
|
||||
38221 416996 3006473 347927 2241550 2012-06-01T00:00:00
|
||||
38347 415562 3013979 343522 2254895 2012-07-01T00:00:00
|
||||
38746 415535 3035500 347353 2272612 2012-08-01T00:00:00
|
||||
38723 415966 3053914 350853 2287095 2012-09-01T00:00:00
|
||||
38171 414518 3055632 349182 2291932 2012-10-01T00:00:00
|
||||
38237 416660 3062343 360731 2284952 2012-11-01T00:00:00
|
||||
38475 420076 3084635 351360 2313199 2012-12-01T00:00:00
|
||||
37784 416221 3120366 356375 2347770 2013-01-01T00:00:00
|
||||
37451 416563 3088847 356356 2315928 2013-02-01T00:00:00
|
||||
37578 417246 3066719 358065 2291408 2013-03-01T00:00:00
|
||||
36936 415933 3066198 352658 2297607 2013-04-01T00:00:00
|
||||
37073 416311 3082873 355030 2311532 2013-05-01T00:00:00
|
||||
37113 417769 3085625 349962 2317894 2013-06-01T00:00:00
|
||||
37005 416797 3087019 342655 2327567 2013-07-01T00:00:00
|
||||
37161 418400 3103136 346722 2338014 2013-08-01T00:00:00
|
||||
37126 417103 3096940 339214 2340623 2013-09-01T00:00:00
|
||||
37286 418011 3102667 343425 2341231 2013-10-01T00:00:00
|
||||
37280 418774 3100839 345715 2336350 2013-11-01T00:00:00
|
||||
37049 417621 3052952 333474 2301857 2013-12-01T00:00:00
|
||||
36883 417358 3038658 333763 2287537 2014-01-01T00:00:00
|
||||
36524 417536 3001399 332364 2251499 2014-02-01T00:00:00
|
||||
36454 417219 2953616 325673 2210724 2014-03-01T00:00:00
|
||||
36357 417737 2902390 324654 2159999 2014-04-01T00:00:00
|
||||
36052 419694 2862189 328590 2113905 2014-05-01T00:00:00
|
||||
36205 418048 2808003 325488 2064467 2014-06-01T00:00:00
|
||||
36291 417270 2765879 332040 2016569 2014-07-01T00:00:00
|
||||
36283 418519 2722903 337654 1966730 2014-08-01T00:00:00
|
||||
36126 416437 2673184 335577 1921170 2014-09-01T00:00:00
|
||||
36111 416411 2626679 342415 1867853 2014-10-01T00:00:00
|
||||
36236 416701 2576092 346945 1812446 2014-11-01T00:00:00
|
||||
35964 415548 2551697 343196 1792953 2014-12-01T00:00:00
|
||||
36045 415972 2504263 348342 1739949 2015-01-01T00:00:00
|
||||
35645 414458 2476326 348703 1713165 2015-02-01T00:00:00
|
||||
35593 411939 2445422 345639 1687844 2015-03-01T00:00:00
|
||||
35429 411309 2411909 347119 1653481 2015-04-01T00:00:00
|
||||
35392 412587 2397321 351622 1633112 2015-05-01T00:00:00
|
||||
35179 410745 2371763 352900 1608118 2015-06-01T00:00:00
|
||||
35210 410278 2345506 354269 1580959 2015-07-01T00:00:00
|
||||
35054 410415 2316965 356918 1549632 2015-08-01T00:00:00
|
||||
34833 409802 2289501 359646 1520053 2015-09-01T00:00:00
|
||||
35146 411428 2270809 363041 1496340 2015-10-01T00:00:00
|
||||
35165 409858 2239152 360041 1469253 2015-11-01T00:00:00
|
||||
34686 409192 2207727 356394 1442141 2015-12-01T00:00:00
|
|
|
@ -0,0 +1,40 @@
|
|||
school_name dbn pct_of_cohort_achieving_apm pct_of_graduates_achieving_apm total_grads_num cohort_year total_cohort_num demographic num_achieving_apm
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 8 2006 9 Asian s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 6 2007 7 Asian s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 16 2006 24 Black s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 10 2007 18 Black s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 17 2006 42 Hispanic s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 4.00% 8.30% 24 2007 50 Hispanic 2
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 1 2006 2 White s
|
||||
HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES 01M292 s s 1 2007 2 White s
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 s s 15 2006 21 Asian s
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 42.90% 51.70% 29 2007 35 Asian 15
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 s s 6 2006 26 Black s
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 s s 20 2007 32 Black s
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 7.80% 20.80% 24 2006 64 Hispanic 5
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 4.10% 7.00% 43 2007 73 Hispanic 3
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 s s 4 2006 6 White s
|
||||
UNIVERSITY NEIGHBORHOOD HIGH SCHOOL 01M448 s s 7 2007 10 White s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 14 2006 17 Asian s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 6 2007 6 Asian s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 6 2006 11 Black s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 4 2007 15 Black s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 7.40% 16.00% 25 2006 54 Hispanic 4
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 4.10% 8.30% 36 2007 73 Hispanic 3
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 2 2006 2 White s
|
||||
MARTA VALLE SECONDARY SCHOOL 01M509 s s 1 2007 1 White s
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 35.00% 61.80% 102 2006 180 Asian 63
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 36.10% 65.70% 67 2007 122 Asian 44
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 s s 3 2006 7 Black s
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 s s 1 2007 38 Black s
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 s s 0 2006 6 Hispanic s
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 s s 5 2007 64 Hispanic s
|
||||
LOWER EAST SIDE PREPARATORY HIGH SCHOOL 01M515 s s 1 2007 5 White s
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 s s 0 2006 1 Asian s
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 s s 0 2007 1 Asian s
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 8.80% 13.60% 22 2006 34 Black 3
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 s s 20 2007 34 Black s
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 7.10% 15.60% 32 2006 70 Hispanic 5
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 3.00% 6.10% 33 2007 66 Hispanic 2
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 s s 2 2006 3 White s
|
||||
BRONX THEATRE HIGH SCHOOL 10X546 s s 3 2007 4 White s
|
|
|
@ -0,0 +1,40 @@
|
|||
business_name needs_recoding longitude latitude address city state zip tel website
|
||||
"Rocio's Bakery " false -78.74864600041258 42.43318899977248 501 Grand Street Brooklyn NY 718-384-0773
|
||||
New Apolo Restaurant false -78.74864600041258 42.43318899977248 502 Grand Street Brooklyn NY 718-387-1773
|
||||
Flash Haircuts Unisex false -78.74864600041258 42.43318899977248 503 Grand Street Brooklyn NY 718-782-4246
|
||||
Open Grill 24/7 Deli false -78.74864600041258 42.43318899977248 505 Grand Street Brooklyn NY 718-599-0937
|
||||
Williams & Bailey false -78.74864600041258 42.43318899977248 507 Grand Street Brooklyn NY 718-782-3500 http://www.willliamsandbaileyny.com
|
||||
"Redd's Tavern " false -78.74864600041258 42.43318899977248 511 Grand Street Brooklyn NY 718-218-9429
|
||||
Singa's Famous Pizza false -78.74864600041258 42.43318899977248 512 Grand Street Brooklyn NY 718-782-2100 http://www.singaspizzas.com
|
||||
Curry Heaven, Inc. false -78.74864600041258 42.43318899977248 513 Grand Street Brooklyn NY 718-388-3021
|
||||
Lee's Furniture false -78.74864600041258 42.43318899977248 517 Grand Street Brooklyn NY 718-388-2743
|
||||
Grand Animal Clinic false -78.74864600041258 42.43318899977248 518 Grand Street Brooklyn NY 718-388-4746
|
||||
Sun Win Hardware Electrical and Pluming false -78.74864600041258 42.43318899977248 521 Grand Street Brooklyn NY 718-302-8861
|
||||
Sun Nail & Hair false -78.74864600041258 42.43318899977248 522 Grand Street Brooklyn NY 718-599-9251
|
||||
Mega Furniture Warehouse false -78.74864600041258 42.43318899977248 524 Grand Street Brooklyn NY 718-218-8050
|
||||
United Pharmacy false -78.74864600041258 42.43318899977248 527 Grand Street Brooklyn NY 718-384-7901
|
||||
Le Barricou false -78.74864600041258 42.43318899977248 533 Grand Street Brooklyn NY 718-782-7372 http://lebarricou.com
|
||||
Franczoz Baking Corp false -78.74864600041258 42.43318899977248 528 40 Grand Street Brooklyn NY 718-387-4741
|
||||
Great Wall Products (iron works supply) false -78.74864600041258 42.43318899977248 541 Grand Street Brooklyn NY 718-782-0288
|
||||
Tai Shan Laundromat false -78.74864600041258 42.43318899977248 543 Grand Street Brooklyn NY 718-599-3888
|
||||
Iglesia Mision Pentecostal false -78.74864600041258 42.43318899977248 544 Grand Street Brooklyn NY
|
||||
Kingdom Toys & Gift false -78.74864600041258 42.43318899977248 547 Grand Street Brooklyn NY 718-599-0014
|
||||
Payomatic Financial Servcies false -78.74864600041258 42.43318899977248 553 Grand Street Brooklyn NY 718-387-3377
|
||||
Live Astro false -78.74864600041258 42.43318899977248 552 Grand Street Brooklyn NY 347-574-8600
|
||||
Fresthentic false -78.74864600041258 42.43318899977248 552 Grand Street Brooklyn NY 347-394-2909 http://www.fresthetic.com
|
||||
Truval Cleaners false -78.74864600041258 42.43318899977248 555 Grand Street Brooklyn NY 718-486-7639
|
||||
Seven Star Beauty Salon false -78.74864600041258 42.43318899977248 556 Grand Street Brooklyn NY 718-218-8484
|
||||
Ontario false -78.74864600041258 42.43318899977248 559 Grand Street Brooklyn NY 718-302-9675
|
||||
Rebelution Designs (custom printing) false -78.74864600041258 42.43318899977248 560 Grand Street Brooklyn NY 917-971-3433 http://www.rebelutiondesigns.com
|
||||
Grand Street Food Deli false -78.74864600041258 42.43318899977248 561 Grand Street Brooklyn NY 718-599-5940
|
||||
Desi's Clam Bar false -78.74864600041258 42.43318899977248 562 Grand Street Brooklyn NY 347-599-0267
|
||||
"America Medical Clinic " false -78.74864600041258 42.43318899977248 563 Grand Street Brooklyn NY 718-302-1170, 718-302-1109
|
||||
Kin Shoe Repair false -78.74864600041258 42.43318899977248 566 Grand Street Brooklyn NY 718-782-0074
|
||||
Taj Cabob and Curry false -78.74864600041258 42.43318899977248 568 Grand Street Brooklyn NY 718-782-1722
|
||||
Manna false -78.74864600041258 42.43318899977248 572 Grand Street Brooklyn NY 718-384-2122
|
||||
Key Food false -78.74864600041258 42.43318899977248 575 Grand Street Brooklyn NY 718-388-2776
|
||||
Sing Hing Chinese Restaurant false -78.74864600041258 42.43318899977248 576 Grand Street Brooklyn NY 718-388-0446
|
||||
Paradise Laundromat false -78.74864600041258 42.43318899977248 578 Grand Street Brooklyn NY 718-388-2888
|
||||
Bahn Mi false -78.74864600041258 42.43318899977248 580 Grand Street Brooklyn NY 718-599-5015
|
||||
Fabric Barn Inc. false -78.74864600041258 42.43318899977248 582 Grand Street Brooklyn NY 718-384-3448
|
||||
Elba Dominican Beauty Salon false -78.74864600041258 42.43318899977248 584 Grand Street Brooklyn NY 718-388-5897
|
|
|
@ -0,0 +1,439 @@
|
|||
buildingid consttype boro geo_dist name projdesc award location_1/needs_recoding location_1/longitude location_1/latitude location_1/human_address/address location_1/human_address/city location_1/human_address/state location_1/human_address/zip
|
||||
M092 CIP M 5 ACADEMY OF COLLABORATIVE ED EXTERIOR MASONRY/REPAIR WINDOWS 4678000 false -73.94493618207292 40.8149219739981 222 134 STREET New York NY 10030
|
||||
K610 CIP K 14 AUTOMOTIVE TRADES VOC HS FIRE ALARM 402500 false -73.95311779468979 40.72215011764413 50 BEDFORD AVENUE Brooklyn NY 11222
|
||||
K554 CAP K 78 All City Leadership School Lease 29299000 false -73.91312770264774 40.69743439114146 321 Palmetto St Brooklyn NY 11237
|
||||
X095 CAP X 10 Ampark Neighborhood School Addition 48624000 false -73.89107454904517 40.883162755141505 3961 Hillman Ave Bronx NY 10463
|
||||
M488 CAP M 78 Art and Design HS New 0 false -73.96809182217982 40.758630224005685 231 249 E 56th St New York NY 10022
|
||||
Q410 CIP Q 27 BEACH CHANNEL HS SWB-HAZARDOUS MASONRY/PARAPET/ROOF/EXTERIOR DOORS 23480000 false -73.85077700055808 40.57657830564432 100 00 BEACH CHANNEL DRIVE QUEENS NY 11694
|
||||
M971 CIP M 2 BEEKMAN SCHOOL (PROJ#1)PS@M971 BEEKMAN INTERIOR FIT-OUT WORK 24288902.98 false -74.00596371272646 40.71174136432668 12 SPRUCE ST NEW YORK NY 10038
|
||||
Q169 CIP Q 25 BELL ACADEMY@ Q169 SCIENCE LAB UPGRADE 342000 false -73.78226733686807 40.78070133439911 18 25 212 STREET BAYSIDE NY 11360
|
||||
M136 CIP M 5 BREAD AND ROSES HS EXTERIOR MASONRY/ROOFS/SECURITY LIGHTING/PARAPETS 7920000 false -73.94777715277199 40.81720320936426 6 EDGECOMBE AVENUE NEW YORK NY 10030
|
||||
K057 CIP K 16 BRKLYN ACAD. OF GLOBAL FINANCE NEW SCIENCE LAB SUITE 963000 false -73.93365273330902 40.691184878420714 125 STUYVESANT AVENUE Brooklyn NY 11221
|
||||
M282 CIP M 2 BROADWAY EDUCATION CAMPUS LEASE (1ST & 2ND FLOOR) 20500000 false -74.01331914476191 40.70549393646826 26 BROADWAY NEW YORK NY 10004
|
||||
X420 CIP X 12 BRONX COALITION HS (@X420) FY10 RESO A SCHOOL BASED HEALTH CLINIC 648000 false -73.87881047207371 40.831280981918596 1300 BOYNTON AVENUE Bronx NY 10472
|
||||
X475 CIP X 10 BRONX ENGINEERING & TECH ACAD. PAVED AREAS-BLACKTOP 1270000 false -73.91213621128965 40.877210772673564 99 TERRACE VIEW AVENUE Bronx NY 10463
|
||||
X445 CIP X 10 BRONX HS OF SCIENCE SCIENCE LAB UPGRADE 1494999 false -73.88689697376654 40.875578988056745 75 205 STREET Bronx NY 10468
|
||||
K117 CIP K 13 BROOKLYN COMM FY10 RESO A OUT TRACK & MIXED USE 1061000 false -73.95894653911148 40.69261081871296 300 WILLOUGHBY AVENUE Brooklyn NY 11205
|
||||
K515 CIP K 18 BROOKLYN THEATRE ARTS HS FY11 RESO A AUDITORIUM UPGRADE 961142 false -73.91781691770764 40.63268510415105 6565 FLATLANDS AVENUE BROOKLYN NY 11236
|
||||
K480 CIP K 32 BUSHWICK HS OF SOCIAL JUSTICE FY10 RESO A GYM UPGRADE 539000 false -73.91084445466608 40.69697946567666 400 IRVING AVENUE BROOKLYN NY 11237
|
||||
K865 CIP K 32 BUSHWICK LEADERS HS ACAD @K865 REPAIR OF SAGGING FLOORS 3338000 false -73.92824173943163 40.69513370850302 797 BUSHWICK AVENUE Brooklyn NY 11221
|
||||
M282 CAP M 78 Broadway Education Campus (1st Lease 20500000 false -73.99674463976191 40.71350689574933 26 Broadway New York NY 10002
|
||||
Q490 CIP Q 29 CAMPUS MAGNET-ENTREPRENEURSHIP EXTERIOR DOORS 84995.05 false -73.73568329125084 40.694293339066405 207 01 116TH AVENUE CAMBRIA HEIGHTS NY 11411
|
||||
K500 CIP K 18 CANARSIE H.S. LL 41/16 COMPLIANCE 117726.54 false -73.89750860330521 40.64078389170152 1600 ROCKAWAY PKWY BROOKLYN NY 11236
|
||||
M501 CIP M 5 CHOIR ACADEMY OF HARLEM ROOFS/PARAPETS 2871000 false -73.93946681971579 40.80736014272708 2005 MADISON AVENUE NEW YORK NY 10035
|
||||
Q485 CIP Q 24 CLEVELAND HS RETAINING WALLS/EXTERIOR STEPS 5817000 false -73.88334858436963 40.70122489161548 21 27 HIMROD STREET QUEENS NY 11385
|
||||
X440 CIP X 10 CLINTON HS WINDOWS/AREAWAY/PARAPETS/TOWER ROOFS 7290000 false -73.88672516295283 40.88178360066122 100 MOSHOLU PKWY BRONX NY 10468
|
||||
M646 CIP M 2 CO-OP TECHNICAL H.S. PARAPETS/WINDOWS/ROOFS/EXT MASONRY 6292000 false -73.94612486053185 40.78386913950879 321 96 STREET New York NY 10128
|
||||
K804 CIP K 15 COBBLE HILL H.S. FLOOD ELMNTN/EXT MASONRY 2983382 false -73.991150069287 40.684609118080985 347 BALTIC STREET Brooklyn NY 11201
|
||||
M814 CAP M 78 Community Health Academy (CLOT New 43728000 false -73.94178600222767 40.83354081707594 504 158th St New York NY 10032
|
||||
Q801 CIP Q 30 DOE BUREAU OF SUPPLIES ELEVATORS/ELEC SYSTEMS 7342000 false -73.93866902925225 40.74570244980828 44 36 VERNON BLVD QUEENS NY 11101
|
||||
Q297 CAP Q 30 Demolition for IS 297 Demo 746444 false -73.88361254528269 40.75163073936716 74 03 34th Ave Jackson Heights NY 11372
|
||||
M868 CAP M 2 Demolition for IS/HS 868 Demo 2182222 false -73.99224802961538 40.73631370241236 10 15th St New York NY 10003
|
||||
Q290 CAP Q 24 Demolition for PS 290 Demo 3370000 false -73.88334858436963 40.70122489161548 55 20 Metropolitan Ave Ridgewood NY 11385
|
||||
K615 CIP K 19 E NY HS OF TRANSIT TECHNOLOGY FY11 RESO A GYMNASIUM UPGRADE 419000 false -73.876114686314 40.678266696104096 1 WELLS STREET Brooklyn NY 11208
|
||||
M064 CIP M 1 EARTH SCHOOL (@M064) FY09 RESO A GREENROOF 769000 false -73.98162129932635 40.72444152208924 600 6 STREET New York NY 10009
|
||||
M855 CIP M 2 ELEANOR ROOSEVELT HS IP SURVEILLANCE CAMERAS 888000 false -74.02500811267907 40.62997664645282 411 76TH STREET NEW YORK NY 10001
|
||||
X426 CIP X 11 EVANDER CHILDS AF ATHLETIC FIELD LIGHTING 797000 false -73.8621066953495 40.875978648353474 800 GUNHILL ROAD BRONX NY 10467
|
||||
X425 CIP X 11 EVANDER CHILDS H.S. PA SYSTEM/ELECTRICAL UPGRADE 850000 false -73.8621066953495 40.875978648353474 800 GUN HILL ROAD Bronx NY 10467
|
||||
M600 CIP M 2 FASHION INDUSTRIES VOC HS-M FY10 RESO A AUDITORIUM UPGRADE 734100 false -73.99588924404328 40.74508837330147 225 24 STREET New York NY 10011
|
||||
M600 CIP M 2 FASHION INDUSTRIES VOC HS-M SAFETY/PAVEMENT/CONTAINER/ MASONRY/ROOF 5993000 false -73.99588924404328 40.74508837330147 225 24 STREET New York NY 10011
|
||||
Q440 CIP Q 28 FOREST HILLS HS CONCRETE PAVED AREAS 3463000 false -73.84628429608335 40.720707263029794 67 01 110 STREET QUEENS NY 11375
|
||||
Q440 CIP Q 28 FOREST HILLS HS FY11 RESO A LIBRARY UPGRADE 421000 false -73.84628429608335 40.720707263029794 67 01 110 STREET QUEENS NY 11375
|
||||
K033 CIP K 14 FOUNDATIONS ACADEMY SCIENCE LAB UPGRADE 1165500 false -73.94668415925653 40.697149542940295 70 TOMPKINS AVENUE Brooklyn NY 11206
|
||||
Q430 CIP Q 26 FRANCIS LEWIS H.S. FLOOD ELIMINATION/FENCING/PAVED AREA - CONCRETE 2579000 false -73.79462153515567 40.73987184371066 58 20 UTOPIA PKWY QUEENS NY 11365
|
||||
K505 CIP K 20 FRANKLIN D. ROOSEVELT H.S. FY07 RESO A ASTRO TURF FOOTBALL FIELD 2470527 false -73.9817265392885 40.62052678025147 5800 20 AVENUE Brooklyn NY 11204
|
||||
K175 CIP K 23 FREDERICK DOUGLAS ACADEMY PARAPETS/EXT MASONRY/FLOOD ELMNTN 2675000 false -73.91171337843976 40.66578774851303 226 BRISTOL STREET Brooklyn NY 11212
|
||||
K490 CIP K 20 FT HAMILTON HS HEATING PLANT UPGRADE/CLIMATE CTRL 8296000 false -74.03991574863338 40.627991412441524 8301 SHORE ROAD Brooklyn NY 11209
|
||||
M465 CIP M 6 GEORGE WASHINGTON H.S. FLOOD ELIMINATION/PARAPETS 12686000 false -73.92672451121956 40.856389753646916 549 AUDOBON AVENUE New York NY 10040
|
||||
M460 CIP M 2 GRAMERCY ARTS HS - M SCIENCE DEMO ROOM UPGRADE 1059950 false -73.98760494227764 40.735537114027146 40 IRVING PLACE New York NY 10003
|
||||
M625 CIP M 2 GRAPHIC COMMUNICATION ARTS WINDOWS/EXTERIOR MASONRY/PLAZA DECK 12647000 false -73.9905041730044 40.76336102095483 439 49 STREET New York NY 10019
|
||||
M465 CIP M 6 HEALTH CAREERS & SCIENCE FY11 RESO A ELECTRICAL SYSTEM 516000 false -73.92672451121956 40.856389753646916 549 AUDOBON AVENUE New York NY 10040
|
||||
Q585 CAP Q 78 HS 585 New 70250000 false -73.87835115518163 40.73871040256307 54 40 74th St Elmhurst NY 11373
|
||||
X783 CAP X 78 HS 783 New 0 false -73.92662867570321 40.816146910599706 201 144th St Bronx NY 10451
|
||||
Q456 CIP Q 24 HS FOR ARTS & BUS (@ Q456) WINDOWS 837000 false -73.85304068857687 40.749678220373596 105 25 HORACE HARDING EXPRESSWAY QUEENS NY 11368
|
||||
K465 CIP K 17 HS FOR SERVICE & LEARNING FIRE ALARM SYSTEM 2625000 false -73.95845755993555 40.649532936565414 911 FLATBUSH AVENUE Brooklyn NY 11226
|
||||
Q490 CIP Q 29 HUMANITIES & ARTS FY08 RESO A TECHNOLOGY 17555.4 false -73.73568329125084 40.694293339066405 207 01 116TH AVENUE CAMBRIA HEIGHTS NY 11411
|
||||
M908 CAP M 5 Harlem Promise Academy New 60000000 false -73.94715683161196 40.81182512837363 245 129th St New York NY 10027
|
||||
M280 CAP M 5 Harlem Village Academy New 36336432.4 false -73.94391077367071 40.80627609017035 35 124th St New York NY 10027
|
||||
M010 CIP M 5 I.S. 10 FLOOD ELIMINATION 5393000 false -73.93690714053237 40.82438364705368 2581 7TH AVENUE NEW YORK NY 10039
|
||||
K111 CIP K 32 I.S. 111 LL 41/16 COMPLIANCE 370000 false -73.9274722005684 40.70073228077929 35 STARR STREET Brooklyn NY 11221
|
||||
X115 CIP X 10 I.S. 115 (@X115) EXT MASONRY/ROOFS/REINFORCING SUPPORT/PARAPETS 3833000 false -73.9001023348563 40.859718306516946 120 184 STREET Bronx NY 10468
|
||||
K117 CIP K 13 I.S. 117 ELECTRICAL SYSTEMS 990000 false -73.95894653911148 40.69261081871296 300 WILLOUGHBY AVENUE Brooklyn NY 11205
|
||||
Q125 CIP Q 24 I.S. 125 LOW-VOLT ELEC SYSTEMS 980000 false -73.9048471440804 40.74519376448069 46 02 47 AVENUE QUEENS NY 11377
|
||||
M131 CIP M 2 I.S. 131 LL 41/16 COMPLIANCE 139807.64 false -73.99286250634624 40.71645702482035 100 HESTER STREET New York NY 10002
|
||||
X131 CIP X 8 I.S. 131 ROOFS/SAFETY SYSTEM/EXT MASONRY/FLOOD ELIMINATION 6780000 false -73.85977399112697 40.82386302071817 885 BOLTON AVENUE Bronx NY 10473
|
||||
X135 CIP X 11 I.S. 135 EXT MASONRY/WINDOWS/ROOFS 6988000 false -73.86461178363403 40.86208256356063 2441 WALLACE AVENUE Bronx NY 10467
|
||||
X137 CIP X 10 I.S. 137 PLANYC BOILER CONVERSION/PLANYC CLIMATE CTRL 4680000 false -73.89664962860274 40.85466127151118 2225 WEBSTER AVENUE Bronx NY 10457
|
||||
X139 CIP X 7 I.S. 139 EXT MASONRY/PARAPETS/FLOOD ELMNTN/WINDOWS/ROOFS 13447000 false -73.91782345430987 40.81004862442692 345 BROOK AVENUE Bronx NY 10454
|
||||
K014 CIP K 22 I.S. 14 PAVED AREA - BLACKTOP 659572.05
|
||||
X142 CIP X 11 I.S. 142 FY09 RESO A SCIENCE LAB 735800 false -73.84075720750138 40.88554553526394 3750 BAYCHESTER AVENUE Bronx NY 10466
|
||||
M143 CIP M 6 I.S. 143 ROOFS/FLOOD ELMNTN/EXT MASONRY 4237000 false -73.9320770216135 40.84941102208005 511 182 STREET New York NY 10033
|
||||
X144 CIP X 11 I.S. 144 ROOFS/EXT MASONRY/PARAPETS/FLOOD ELIMINATION 4891000 false -73.83609949442072 40.863858665108886 2545 GUNTHER AVENUE BRONX NY 10464
|
||||
X151 CIP X 7 I.S. 151 WINDOWS/EXTERIOR MASONRY 3426000 false -73.9211309650046 40.82298359886116 250 156 STREET Bronx NY 10451
|
||||
X158 CIP X 12 I.S. 158 PLANYC BOILER CONVRSN/PLANYC CLIMATE CTRL 3918000 false -73.90004072543645 40.827686311428195 800 HOME STREET Bronx NY 10456
|
||||
X166 CIP X 9 I.S. 166 PA SYSTEM 798000 false -73.91779283496383 40.82872889992432 250 164 STREET Bronx NY 10456
|
||||
K171 CIP K 19 I.S. 171/P.S. 7 SWB-FACADE/PARAPETS/PAVED AREA-BLACKTOP/FENCING 4828290 false -73.86966791838911 40.6861530810444 528 RIDGEWOOD AVENUE BROOKLYN NY 11208
|
||||
X183 CIP X 7 I.S. 183 PLANYC BOILER/PLANYC CLIMATE CTRL 3492000 false -73.92553701094046 40.813386726364335 339 MORRIS AVENUE Bronx NY 10451
|
||||
X184 CIP X 7 I.S. 184 PLANYC BOILER/PLANYC CLIMATE CTRL 4910270 false -73.90589968772917 40.81888494686362 778 FOREST AVENUE BRONX NY 10456
|
||||
X129 CIP X 12 I.S. 191 @X129 NEW SCIENCE DEMONSTRATION ROOM 438000 false -73.8865507352739 40.84549455019818 2055 MAPES AVENUE Bronx NY 10460
|
||||
Q192 CIP Q 29 I.S. 192 CITY COUNCIL REQ - LIGHTING FIXTURES 1800000 false -73.75923519834566 40.69812711747255 109 89 204 STREET QUEENS NY 11412
|
||||
X193 CIP X 12 I.S. 193 PLANYC BOILER/PLANYC CLIMATE CTRL 3885000 false -73.88973979569231 40.84359404962676 1919 PROSPECT AVENUE Bronx NY 10457
|
||||
M195 CIP M 5 I.S. 195 (ECF) PAVED AREAS BLACKTOP 770000 false -73.95739030775974 40.81937508503853 625 133 STREET New York NY 10027
|
||||
M195 CIP M 5 I.S. 195 (ECF) PLANYC BOILER CONVRSN/PLANYC CLIMATE CTRL 3788000 false -73.95739030775974 40.81937508503853 625 133 STREET New York NY 10027
|
||||
M195 CIP M 5 I.S. 195 (ECF) SCIENCE DEMO ROOM UPGRADE 469000 false -73.95739030775974 40.81937508503853 625 133 STREET New York NY 10027
|
||||
K002 CIP K 17 I.S. 2 SCIENCE DEMO ROOM UPGRADE 345000 false -73.95158492978685 40.6561968174429 655 PARKSIDE AVE BROOKLYN NY 11226
|
||||
K211 CIP K 18 I.S. 211 WALK IN FREEZER REPLACEMENT 343200 false -73.89642371322941 40.64348164485336 1001 100 STREET BROOKLYN NY 11236
|
||||
X116 CIP X 12 I.S. 216 (@X116) PLANYC BOILER CONVERSION/PLANYC CLIMATE CONTROL 4468000 false -73.89392410102988 40.822428225918 977 FOX STREET Bronx NY 10459
|
||||
K218 CIP K 19 I.S. 218 WALK IN FREEZER REPLACEMENT 2120000 false -73.8742292684109 40.67070199017694 370 FOUNTAIN AVENUE Brooklyn NY 11208
|
||||
M218 CIP M 6 I.S. 218 FLOOD ELIMINATION/WINDOWS/ROOFS 1867000
|
||||
X148 CIP X 9 I.S. 219 (OLD I.S. 148) RETAINING WALL 583000 false -73.90440606498304 40.833636708483105 3630 THIRD AVENUE Bronx NY 10456
|
||||
X022 CIP X 9 I.S. 22 FLOOD ELIMINATION/EXT MASONRY/PARAPETS 3990000 false -73.91408537225458 40.83322765425807 270 167 STREET Bronx NY 10456
|
||||
X149 CIP X 7 I.S. 223 (@X149) FY10 RESO A LIBRARY 328000 false -73.92087771305378 40.814006958025736 360 145 STREET Bronx NY 10454
|
||||
Q226 CIP Q 27 I.S. 226 EXT MASONRY/ROOFS 6691000 false -73.81770717164864 40.67334524268887 121 10 ROCKAWAY BLVD SO OZONE PARK NY 11420
|
||||
Q227 CIP Q 30 I.S. 227 CLIMATE CONTROL/HEATING PLANT UPGRADE 5294240 false -73.8723788986672 40.76341327370369 32 02 JUNCTION BLVD QUEENS NY 11369
|
||||
X082 CIP X 9 I.S. 232 (OLD 82) @X082 ACCESSIBILITY/FIRE ALARM 8193000 false -73.91609317547116 40.84901889749711 1700 MACOMBS ROAD Bronx NY 10453
|
||||
R024 CIP R 31 I.S. 24 AUDITORIUM FLOORS 77000 false -74.14643932417457 40.54537484828736 225 CLEVELAND AVENUE Staten Island NY 10308
|
||||
K246 CIP K 17 I.S. 246 SWB EXT MASONRY/SWB FLOOD/SWB WINDOWS/ROOF/PARAPET 4877000 false -73.95284496748633 40.64867994929756 72 VERONICA PLACE Brooklyn NY 11226
|
||||
K252 CIP K 18 I.S. 252 LL 41/16 COMPLIANCE 29175.77 false -73.92001930874018 40.658327698451274 1084 LENOX ROAD Brooklyn NY 11212
|
||||
M118 CIP M 3 I.S. 256 (@M118) IP SURVEILLANCE CAMERAS 216300 false -73.97053578315399 40.79156776872092 154 93 STREET New York NY 10025
|
||||
M118 CIP M 3 I.S. 256 (@M118) STRUCTURAL BEAMS-REINFORCING 410160 false -73.97053578315399 40.79156776872092 154 93 STREET New York NY 10025
|
||||
K265 CIP K 13 I.S. 265 SCIENCE LAB 765000 false -73.97572262403403 40.6963585351778 101 PARK AVENUE Brooklyn NY 11205
|
||||
K278 CIP K 22 I.S. 278 ROOFS/EXT MASONRY/FLOOD ELMNTN 5700000 false -73.93925429415825 40.60673733465248 1925 STUART STREET Brooklyn NY 11229
|
||||
K285 CIP K 18 I.S. 285 HEATING PLANT UPG/CLIMATE CTRL 4342000 false -73.921125893014 40.64688182984673 5905 BEVERLY ROAD Brooklyn NY 11203
|
||||
K291 CIP K 32 I.S. 291 HEATING PLANT UPGRADE/LOW-VOLTAGE 15199800 false -73.91527095847802 40.695256718115104 231 PALMETTO STREET Brooklyn NY 11221
|
||||
K292 CIP K 19 I.S. 292 CONCRETE FACADE 3477000 false -73.89288114787357 40.67148750548741 300 WYONA STREET Brooklyn NY 11207
|
||||
K318 CIP K 14 I.S. 318 PARAPETS/EXT MASONRY/EAST ROOF & FAN ROOM ROOF 4340000 false -73.94902462531712 40.702422370537974 101 WALTON STREET Brooklyn NY 11206
|
||||
K320 CIP K 17 I.S. 320 FLOOD ELMNTN/PARAPETS/SAFETY SYSTEMS/EXT MASONRY 3000050 false -73.95904314893046 40.66501317051537 46 MCKEEVER PLACE Brooklyn NY 11225
|
||||
M125 CIP M 5 I.S. 362 @ M125 SCIENCE LAB 1354564 false -73.95506966627367 40.81015743904045 425 123 STREET New York NY 10027
|
||||
X067 CIP X 12 I.S. 372 - X NEW SCIENCE LAB SUITE 945000 false -73.88479553814723 40.84392182388185 2024 MOHEGAN AVENUE Bronx NY 10460
|
||||
K383 CIP K 32 I.S. 383 PLANYC BOILER CONVERSION/PLANYC CLIMATE CONTROL 4668000 false -73.91986972170302 40.69762704651303 1300 GREENE AVENUE Brooklyn NY 11237
|
||||
K390 CIP K 17 I.S. 390 STAIRS IN STAIRWELL/FLOOD ELIM/CEC REQ-WINDOWS 4980000 false -73.93695770187597 40.67268717852895 1224 PARK PLACE Brooklyn NY 11213
|
||||
K049 CIP K 14 I.S. 49 FIRE ALARM 468000
|
||||
X052 CIP X 8 I.S. 52 PARAPETS/MASONRY/ROOFS/FLOOD/PAVED AREAS/SAFETY 8893000 false -73.90236106648733 40.815402542289604 681 KELLY STREET Bronx NY 10455
|
||||
K055 CIP K 23 I.S. 55 SAFETY SYSTEM/EXT MASONRY/WINDOWS 4535000 false -73.91355073965249 40.67414724704465 2021 BERGEN STREET Brooklyn NY 11233
|
||||
Q059 CIP Q 29 I.S. 59 LIBRARY UPGRADE 408000 false -73.75087393328533 40.66971118122609 132 55 RIDGEDALE STREET SPRINGFIELD GARDENS NY 11413
|
||||
K061 CIP K 17 I.S. 61 BOILER REPLACEMENT/CONCRETE PAVER/CLIMATE CTRL 5462800 false -73.9494072266281 40.66397432612488 400 EMPIRE BLVD Brooklyn NY 11225
|
||||
R072 CIP R 31 I.S. 72 ELEVATORS & ESCALATORS 691000 false -74.15872479868553 40.59325258206939 33 FERNDALE AVENUE Staten Island NY 10314
|
||||
Q849 CIP Q 24 I.S. 77 AUDITORIUM UPGRADE 1588000 false -73.90222734682403 40.699542257956786 976 SENECA AVENUE RIDGEWOOD NY 11385
|
||||
Q849 CIP Q 24 I.S. 77 EXTERIOR MASONRY/WINDOWS/ROOFS/PARAPETS/AC 12189000 false -73.90222734682403 40.699542257956786 976 SENECA AVENUE RIDGEWOOD NY 11385
|
||||
K078 CIP K 22 I.S. 78 FLOOD ELMNTN/EXT MASONRY 1589500 false -73.91286070496677 40.62118169409423 1420 68 STREET Brooklyn NY 11234
|
||||
X084 CIP X 12 I.S. 84 (@X084) PLANYC BOILER CONVRSN/PLANYC CLIMATE CTRL 3997000 false -73.88752511974951 40.830644846579055 1434 LONGFELLOW AVENUE Bronx NY 10459
|
||||
K043 CIP K 21 I.S. 98 EXT MASONRY/ROOFS/SAFETY SYSTEMS/PARAPETS 4869000 false -73.95376310696645 40.58324060677732 1401 EMMONS AVENUE Brooklyn NY 11235
|
||||
X098 CIP X 12 I.S. 98 RETAINING WALL 229571 false -73.89054065425974 40.83591680891802 1619 BOSTON ROAD Bronx NY 10460
|
||||
X139 CIP X 7 INTERNATIONAL COMMUNITY NEW SCIENCE LAB SUITE 1182000 false -73.91782345430987 40.81004862442692 345 BROOK AVENUE Bronx NY 10454
|
||||
X113 CIP X 11 IS 113 FY07 RES0 A PLAYGROUND REDEVELOPMENT 555000.05 false -73.86088460706405 40.88086639044798 3710 BARNES AVE Bronx NY 10467
|
||||
X285 CAP X 9 IS 285 New 34111000 false -73.92787186717345 40.838131334426876 200 167th St Bronx NY 10452
|
||||
Q297 CIP Q 30 IS 297 DEMOLITION FOR IS 297 746444 false -73.88361254528269 40.75163073936716 74 03 34TH AVE JACKSON HEIGHTS NY 11372
|
||||
X147 CIP X 9 IS 339 (OLD IS 147X) PLANYC BOILER/PLANYC CLIMATE CTRL 7116000 false -73.90441220971972 40.84131870954352 1600 WEBSTER AVENUE Bronx NY 10457
|
||||
Q404 CAP Q 78 IS/HS 404 New 61098000 false -73.93866902925225 40.74570244980828 1 50 51st Ave Long Island City NY 11101
|
||||
K422 CAP K 78 IS/HS @ Spring Creek New 72847565 false -73.87479320757765 40.65755969070249 1065 Elton St Brooklyn NY 11208
|
||||
X475 CIP X 10 J F KENNEDY HS FY09 FINAL C OF O FOR MULTI-CAMPUS 8387000 false -73.91213621128965 40.877210772673564 99 TERRACE VIEW AVENUE Bronx NY 10463
|
||||
Q141 CIP Q 30 J.H.S. 141 ROOFS/SAFETY/EXT MASONRY/PARAPETS 7459000 false -73.90960650023976 40.780092072491186 37 11 21 AVENUE QUEENS NY 11105
|
||||
X141 CIP X 10 J.H.S. 141 HEATING PLANT UPGRADE/CLIMATE CONTROL 3967000 false -73.9131873185513 40.88826732332943 660 237 STREET Bronx NY 10463
|
||||
Q157 CIP Q 28 J.H.S. 157 ROOFS/WDWS/HEATING UPG/FLOOD/MASON/PARAPET/CLIMATE 14279000 false -73.86148084756303 40.72646491702238 63 55 102ND ST QUEENS NY 11374
|
||||
Q168 CIP Q 25 J.H.S. 168 ACCESSIBILITY/FIRE ALARM/CLIM CTRL/HEAT PL UPG 8877000 false -73.79226817393703 40.72816440726166 158 40 76 ROAD QUEENS NY 11366
|
||||
Q168 CIP Q 25 J.H.S. 168 SCIENCE LAB UPGRADE 972000 false -73.79226817393703 40.72816440726166 158 40 76 ROAD QUEENS NY 11366
|
||||
Q180 CIP Q 27 J.H.S. 180 WINDOW/AC RETROFIT/AC SPLIT/MASONRY/PARAPET/ROOFS 22000000 false -73.85077700055808 40.57657830564432 3 20 BEACH 104 STREET ROCKAWAY NY 11694
|
||||
Q237 CIP Q 25 J.H.S. 237 CEC REQUEST - SCIENCE LAB UPG 1176000 false -73.82147854789662 40.7512997969481 46 21 COLDEN STREET QUEENS NY 11355
|
||||
Q025 CIP Q 25 J.H.S. 25 SWB-EXT MASONRY/ROOFS/PARAPETS 5618000 false -73.82147854789662 40.7512997969481 34 65 192 STREET QUEENS NY 11355
|
||||
K303 CIP K 21 J.H.S. 303 FY11 RESO A ELECTRICAL SYSTEM 196000 false -73.9727279509789 40.582102240554626 501 WEST AVENUE Brooklyn NY 11224
|
||||
K324 CIP K 16 J.H.S. 324 PLANYC BOILER CONVRSN/PLANYC CLIMATE CTRL 3819000 false -73.93217356292678 40.68830858053017 800 GATES AVENUE Brooklyn NY 11221
|
||||
M045 CIP M 4 J.H.S. 45 EXT MASONRY/ROOFS/PARAPETS 6670000 false -73.93335561512028 40.798869844574995 2351 1ST AVENUE New York NY 10035
|
||||
K057 CIP K 16 J.H.S. 57 GYM ROOF/SEWAGE FLOODING/PARAPETS/EXT MASONRY 8625000 false -73.93365273330902 40.691184878420714 125 STUYVESANT AVENUE Brooklyn NY 11221
|
||||
M070 CIP M 2 J.H.S. 70 EXTERIOR MASONRY/PARAPETS/ROOFS/WINDOWS 10489000 false -74.00204411405305 40.742083302451746 333 17 STREET NEW YORK NY 10011
|
||||
Q072 CIP Q 28 J.H.S. 72 EXT MASONRY/ROOFS/FLOOD ELMNTN/PARAPETS 6176000 false -73.77530690169215 40.6769452621142 133 25 ROCHDALE VILLAG NY 11434
|
||||
X080 CIP X 10 J.H.S. 80/P.S. 280 FLOOD ELIMINATION 1091773 false -73.88147439492262 40.87619978760749 149 MOSHOLU PKWY BRONX NY 10467
|
||||
Q470 CIP Q 28 JAMAICA HS CLIMATE CONTROL/HEATING PLANT UPGRADE 8100000 false -73.79282099978928 40.71311535449007 167 01 GOTHIC DRIVE QUEENS NY 11432
|
||||
M440 CIP M 2 JAMES BALDWIN HS LIBRARY UPGRADE 1132000 false -74.00211145861485 40.74287308397775 351 18 STREET New York NY 10011
|
||||
K425 CIP K 22 JAMES MADISON HS FIRE ALARM 485500 false -73.94845748858913 40.609742865286414 3787 BEDFORD AVENUE Brooklyn NY 11229
|
||||
K425 CIP K 22 JAMES MADISON HS SCIENCE LAB UPGRADE 985000 false -73.94845748858913 40.609742865286414 3787 BEDFORD AVENUE Brooklyn NY 11229
|
||||
Q008 CIP Q 28 JHS 8 SCIENCE LAB UPGRADE 1081000 false -73.7875740339145 40.698104881734935 108 35 167 STREET JAMAICA NY 11433
|
||||
Q425 CIP Q 25 JOHN BOWNE H.S. WIND REPLACE/AC RETROFIT/WIND BOE PORTION/UPG F.A. 27239000 false -73.82610630716033 40.730323085042414 63 25 MAIN STREET FLUSHING NY 11367
|
||||
K460 CIP K 15 JOHN JAY HS CEC REQUEST-HEAT'G PLANT UPG/ELEC SYS/CLIMATE CTRL 8168000 false -73.97924096910276 40.669623280409056 237 7TH AVENUE Brooklyn NY 11215
|
||||
K400 CIP K 21 LAFAYETTE HS UPGRADE BOILER PLANT/CLIMATE CONTROL 12400000 false -73.98615807328032 40.59448014682783 2630 BENSON AVENUE Brooklyn NY 11214
|
||||
Q490 CIP Q 29 LAW, GOVERNMENT & COMMUNITY HS CAMPUS RESTRUCTURING 435000 false -73.73568329125084 40.694293339066405 207 01 116TH AVENUE CAMBRIA HEIGHTS NY 11411
|
||||
X406 CIP X 8 LEHMAN AF ATHLETIC FIELDS 3748000 false -73.83830582037355 40.840618266233676 3000 TREMONT AVENUE BRONX NY 10461
|
||||
X405 CIP X 8 LEHMAN HS FY07 RESO A COMPUTER EQUIPMENT UPGR 75757.5758 false -73.83830582037355 40.840618266233676 3000 TREMONT AVENUE Bronx NY 10461
|
||||
X405 CIP X 8 LEHMAN HS STAIR WINDOWS 1087000 false -73.83830582037355 40.840618266233676 3000 TREMONT AVENUE Bronx NY 10461
|
||||
M645 CIP M 2 LIFE SCIENCE SECONDARY (@M645) FLOOD ELMNTN/EXT MASONRY/PARAPETS/ROOFS 7819500 false -74.03340357628376 40.616237105936534 320 96 STREET New York NY 10028
|
||||
M490 CIP M 3 MARTIN LUTHER KING HS AUD/ALARM REPLACEMENT/FINAL C OF O/VENTILATION 4647000 false -73.98485156692796 40.77425845083081 122 AMSTERDAM AVENUE New York NY 10023
|
||||
X099 CIP X 12 METROPOLITAN HS @ FORMER PS99X CODE COMPLIANCE/PA SYSTEM/PARAPET/MASONRY/ROOFS 5186000 false -73.89313106784448 40.82552621616202 1180 REVEREND JAMES POLITE AVE BRONX NY 10459
|
||||
M081 CIP M 3 MID-MAN ADULT TRAINING CENTER VENTILATION/ELEC SYSTEM 3711000 false -73.95128826417978 40.80602392163958 212 120TH ST NEW YORK NY 10027
|
||||
Q520 CIP Q 30 MIDDLE COLLEGE HS @LAGUARDIA DEMOLITION FOR MIDDLE COLLEGE HS 13112000 false -73.93866902925225 40.74570244980828 45 35 VAN DAM ST LONG ISLAND CITY NY 11101
|
||||
K406 CIP K 21 MIDWOOD AF (MAIN) FY11 RESO A ATHLETIC FIELDS 2146000 false -73.95905922151692 40.62291467677543 1124 17TH STREET BROOKLYN NY 11230
|
||||
M435 CIP M 4 MNHT CENTER FOR MATH & SCIENCE INTERIOR SPACES MARBLE PANELS ONLY 843000 false -73.9336482061862 40.794391919064594 260 PLEASANT AVENUE New York NY 10029
|
||||
X400 CIP X 9 MORRIS HS CERTIFICATE OF OCCUPANCY 5229000 false -73.90448079300582 40.8276109731601 1110 BOSTON RD BRONX NY 10456
|
||||
K390 CIP K 17 MS 334 SCIENCE DEMO ROOM UPGRADE 808000 false -73.93695770187597 40.67268717852895 1224 PARK PLACE Brooklyn NY 11213
|
||||
Q520 CAP Q 78 Middle College HS @ LaGuardia New 27927000 false -73.93866902925225 40.74570244980828 45 35 Van Dam St Long Island City NY 11101
|
||||
Q520 CAP Q 78 Middle College HS @ LaGuardia Room Conversion 13112000 false -73.93866902925225 40.74570244980828 45 35 Van Dam St Long Island City NY 11101
|
||||
R435 CIP R 31 NEW DORP HS LL 41/16 COMPLIANCE 10621.99 false -74.10726241466374 40.56922370455037 465 NEW DORP LANE Staten Island NY 10306
|
||||
K032 CIP K 15 NEW HORIZONS SCHOOL FY11 RESO A AUDITORIUM UPDATE 228000 false -73.99193273420018 40.680429275762485 317 HOYT STREET Brooklyn NY 11231
|
||||
M868 CIP M 2 NEW HS DEMOLITION FOR IS/HS 868 2182222 false -73.99224802961538 40.73631370241236 10 15TH ST NEW YORK NY 10003
|
||||
K445 CIP K 20 NEW UTRECHT HS EXT MASONRY/FLOOD ELMNTN/PARAPETS/ROOFS 10570000 false -74.00368977353216 40.61345273159829 1601 80TH ST Brooklyn NY 11214
|
||||
K445 CIP K 20 NEW UTRECHT HS FY09 RESO A LIBRARY UPGRADE 353250 false -74.00368977353216 40.61345273159829 1601 80TH ST Brooklyn NY 11214
|
||||
Q450 CIP Q 30 NEWCOMERS HS EXT MASONRY/PARAPETS/FLOOD ELMNTN 8395000 false -73.93866902925225 40.74570244980828 28 01 41ST AVENUE LONG ISLAND CITY NY 11101
|
||||
Q455 CIP Q 24 NEWTOWN HS FLOORS 2662000 false -73.87475600018911 40.74125600016447 48 01 90 STREET QUEENS NY 11373-4099
|
||||
M001 CIP M 2 P.S. 1 EXTERIOR MASONRY/PARAPETS/PAVED AREAS-CONCRETE 5139000 false -73.99734184420807 40.712756780441026 8 HENRY STREET New York NY 10038
|
||||
X001 CIP X 7 P.S. 1 IP SURVEILLANCE CAMERAS 1056000 false -73.91874134609046 40.818762661509254 335 152 STREET Bronx NY 10451
|
||||
Q100 CIP Q 27 P.S. 100 FLOOD ELMNTN/EXT MASONRY/PARAPETS 3199900 false -73.81770717164864 40.67334524268887 111 11 118 STREET JAMAICA NY 11420
|
||||
K101 CIP K 21 P.S. 101 RESO A - RESO A SCIENCE LAB 268800 false -73.99175987597347 40.59787681678778 2360 BENSON AVENUE Brooklyn NY 11214
|
||||
M101 CIP M 4 P.S. 101 ACCESSIBILITY 3689000 false -73.94443112132485 40.79566898981534 141 111 STREET NEW YORK NY 10029
|
||||
M101 CIP M 4 P.S. 101 ELEC UPGRADE 287950 false -73.94443112132485 40.79566898981534 141 111 STREET NEW YORK NY 10029
|
||||
X103 CIP X 11 P.S. 103 FY11 RESO A AUDITORIUM UPGRADE 419000 false -73.8614419003563 40.89224585042134 4125 CARPENTER AVENUE Bronx NY 10466
|
||||
Q105 CIP Q 27 P.S. 105 SWB EXT MASONRY/PARAPETS 1050000 false -73.78189411037111 40.59623844790385 420 BEACH 51 STREET FAR ROCKAWAY NY 11691
|
||||
K108 CIP K 19 P.S. 108 FY11 RESO A ELECTRICAL SYSTEM 345900 false -73.88403250144414 40.681012991519715 200 LINWOOD STREET Brooklyn NY 11208
|
||||
Q108 CIP Q 27 P.S. 108 CAFE MULTIPURPOSE ROOM UPG 233000 false -73.81770717164864 40.67334524268887 108 10 109 AVENUE SO OZONE PARK NY 11420
|
||||
X011 CIP X 9 P.S. 11 FLOOD ELMNTN/ROOFS/MASONRY/PARAPETS 6116000 false -73.92578827979769 40.83927054580515 1257 OGDEN AVENUE Bronx NY 10456
|
||||
X011 CIP X 9 P.S. 11 SIDEWALK BRIDGE 19442.75 false -73.92578827979769 40.83927054580515 1257 OGDEN AVENUE Bronx NY 10456
|
||||
K110 CIP K 14 P.S. 110 ROOFS/WINDOWS 3778000 false -73.94223625609604 40.723642548516075 124 MONITOR STREET Brooklyn NY 11222
|
||||
M110 CIP M 1 P.S. 110 FLOOD ELIMINATION 547000 false -73.97981939917048 40.715620302518175 285 DELANCY STREET New York NY 10002
|
||||
M111 CIP M 2 P.S. 111 CLIMATE CONTROL/HEATING PLANT UPGRADE 4305729 false -73.98953901918651 40.76616371249781 440 53 STREET New York NY 10019
|
||||
Q111 CIP Q 30 P.S. 111 HEATING PLANT UPG/CLIMATE CTRL 3811000 false -73.93866902925225 40.74570244980828 37 15 13 STREET QUEENS NY 11101
|
||||
K112 CIP K 20 P.S. 112 PARAPETS/EXT MASONRY/FLOOD ELMNTN 1420000 false -74.00071660633716 40.619828663672465 7115 15 AVENUE Brooklyn NY 11228
|
||||
K115 CIP K 18 P.S. 115 EXT MASONRY/ROOFS/PARAPETS 5747000 false -73.89697682968284 40.63477746307819 1500 92ND ST Brooklyn NY 11236
|
||||
M115 CIP M 6 P.S. 115 EXTERIOR MASONRY/HAZARDOUS-PARAPETS/ROOFS 2979000 false -73.93487128414608 40.84641769845956 586 177 STREET New York NY 10033
|
||||
K116 CIP K 32 P.S. 116 FY11 RESO A SCIENCE 388000 false -73.91643018838859 40.69774977550555 515 KNICKERBOCKER AVENUE Brooklyn NY 11237
|
||||
M116 CIP M 2 P.S. 116 FY11 RESO A PLAYGROUND REDEVELOPMENT 300000 false -73.97834193335258 40.74491153710013 210 33 STREET New York NY 10016
|
||||
X012 CIP X 11 P.S. 12 HEATING PLT UPG/CLIMATE CNTRL/LOW-VOLT ELECTRICAL 5722850 false -73.84450496658253 40.84010546581863 2555 TRATMAN AVENUE Bronx NY 10461
|
||||
K121 CIP K 21 P.S. 121 SWB-EXT MASONRY 1295000 false -73.97875690985585 40.62330608676003 5301 20TH AVENUE Brooklyn NY 11204
|
||||
Q121 CIP Q 28 P.S. 121 CLIMATE CONTROL/HEATING PLANT UPGRADE 3305000 false -73.81770717164864 40.67334524268887 126 10 109 AVENUE SO OZONE PARK NY 11420
|
||||
M123 CIP M 5 P.S. 123 FY10 RESO A SCIENCE LAB UPGRADE 444000 false -73.94425698262674 40.81972211192899 301 140 STREET New York NY 10030
|
||||
Q124 CIP Q 27 P.S. 124 EXT MASONRY/PARAPETS 3342000 false -73.81770717164864 40.67334524268887 129 15 150 AVENUE SO OZONE PARK NY 11420
|
||||
M124 CIP M 2 P.S. 124 (ECF) PARAPETS/EXTERIOR MASONRY 1367000 false -73.99579682364542 40.71420254465372 40 DIVISION STREET New York NY 10002
|
||||
M126 CIP M 2 P.S. 126 FY10 RESO A LIBRARY 415000 false -73.9966721705172 40.710854298398544 80 CATHERINE STREET New York NY 10038
|
||||
X126 CIP X 9 P.S. 126 (ECF) MASONRY/ROOFS/FLOOD ELMNTN/PARAPETS 5194000 false -73.9283372125368 40.83581122271332 175 166 STREET Bronx NY 10452
|
||||
K127 CIP K 20 P.S. 127 EXT MASONRY 2149000 false -74.01885662493696 40.62406545959219 7805 7 AVENUE Brooklyn NY 11209
|
||||
Q127 CIP Q 30 P.S. 127 AUD UPG/CAFETERIA MULTIPURPOSE RM UPG 985000 false -73.8723788986672 40.76341327370369 98 01 25 AVENUE EAST ELMHURST NY 11369
|
||||
X129 CIP X 12 P.S. 129 (PAIRED W X234) EXTERIOR MASONRY 2598000 false -73.8865507352739 40.84549455019818 2055 MAPES AVENUE Bronx NY 10460
|
||||
X129 CIP X 12 P.S. 129 (PAIRED W X234) SIDEWALK BRIDGE (EXT. MASONRY) 32157.31 false -73.8865507352739 40.84549455019818 2055 MAPES AVENUE Bronx NY 10460
|
||||
K132 CIP K 14 P.S. 132 FLOOD ELMNTN/WINDOWS/PARAPETS 6597000 false -73.9456777023208 40.71219332880771 320 MANHATTAN AVENUE Brooklyn NY 11206
|
||||
K132 CIP K 14 P.S. 132 FY10 RESO A GYM RENOVATION 70000 false -73.9456777023208 40.71219332880771 320 MANHATTAN AVENUE Brooklyn NY 11206
|
||||
K132 CIP K 14 P.S. 132 WORK REQUIRED TO OBTAIN C OF O 932000 false -73.9456777023208 40.71219332880771 320 MANHATTAN AVENUE Brooklyn NY 11206
|
||||
M132 CIP M 6 P.S. 132 FY11 RESO A SCIENCE LAB 243500 false -73.93432269770818 40.85071645775963 185 WADSWORTH AVENUE New York NY 10033
|
||||
X132 CIP X 9 P.S. 132 INTERIOR STRUCTURAL INVESTMENT - TEST 5005000 false -73.90656891847989 40.83194251909681 1245 WASHINGTON AVENUE Bronx NY 10456
|
||||
K135 CIP K 18 P.S. 135 PARAPETS/FLOOD ELMNTN/ROOFS 1784000 false -73.93311810571299 40.65357812334444 684 LINDEN BLVD Brooklyn NY 11203
|
||||
K138 CIP K 17 P.S. 138 ROOFS/PARAPETS/EXT MASONRY 2793000 false -73.95141196170016 40.674353675202426 760 PROSPECT PLACE Brooklyn NY 11216
|
||||
K138 CIP K 17 P.S. 138 SCIENCE DEMO ROOM UPGRADE 762000 false -73.95141196170016 40.674353675202426 760 PROSPECT PLACE Brooklyn NY 11216
|
||||
M844 CIP M 2 P.S. 138 (@M844) SWB - FACADE/PARAPETS/ROOFS 8833000 false -73.97802974198606 40.73757796345728 400 1ST AVENUE New York NY 10010
|
||||
K849 CIP K 22 P.S. 139 AX (OLD 134) LL 41/16 COMPLIANCE 100000 false -73.97391982714538 40.632244467750226 4001 18 AVENUE Brooklyn NY 11208
|
||||
R014 CIP R 31 P.S. 14 ROOFS/EXT MASONRY/WINDOWS/FLOORS/SAFETY SYSTEMS 3315000 false -74.07837687526822 40.622148795415534 100 TOMPKINS AVENUE Staten Island NY 10304
|
||||
Q140 CIP Q 28 P.S. 140 PARAPETS 3269000 false -73.77530690169215 40.6769452621142 116 00 166 ST JAMAICA NY 11434
|
||||
M142 CIP M 1 P.S. 142 ELEVATORS & ESCALATORS/TOILETS-STUDENTS 2995000 false -73.98376386528082 40.71945606619147 100 ATTORNEY STREET New York NY 10002
|
||||
K145 CIP K 32 P.S. 145 PARAPETS/FLOOD ELMNTN/EXT MASONRY/EXT LIGHTING 4737575 false -73.93232374110994 40.7016598916867 100 NOLL STREET Brooklyn NY 11206
|
||||
K142 CIP K 15 P.S. 146 (@K142) PARAPETS/EXTERIOR MASONRY/ROOFS/WINDOWS/FLOOD 13106731 false -74.00136121297172 40.68011121449034 610 HENRY STREET Brooklyn NY 11231
|
||||
Q147 CIP Q 29 P.S. 147 FLOORS 537000
|
||||
K015 CIP K 15 P.S. 15 LIBRARY UPGRADE 411054
|
||||
M153 CIP M 6 P.S. 153 DEFECTIVE MASONRY/ROOFS/DOORS/PARAPETS 4134000 false -73.94689450753023 40.8262600138953 1750 AMSTERDAM AVENUE New York NY 10031
|
||||
Q154 CIP Q 25 P.S. 154 ACCESSIBILITY/ELEC SYS/MASONRY/ROOFS/FLOOD/PARAPET 6127000 false -73.79226817393703 40.72816440726166 75 02 162 STREET FLUSHING NY 11366
|
||||
M155 CIP M 4 P.S. 155 FLOOD ELMNTN/PARAPETS/EXT MASONRY 2350000 false -73.93679763009355 40.797501313680264 319 117 STREET New York NY 10035
|
||||
Q156 CIP Q 29 P.S. 156 SWB - EXT MASONRY/FLOOD ELMNTN/WINDOWS/PARAPETS 7354000 false -73.75087393328533 40.66971118122609 229 02 137 AVENUE SPRINGFIELD GAR NY 11413
|
||||
X156 CIP X 7 P.S. 156 CINDER BLOCK WALLS & CEILING BEAMS/FLOOD ELIMN 9780000 false -73.92024166597307 40.82226334901861 750 CONCOURSE VILLAGE Bronx NY 10451
|
||||
K157 CIP K 14 P.S. 157 SWB-MASONRY 1843000 false -73.95959701353979 40.69546110023352 850 KENT AVENUE Brooklyn NY 11205
|
||||
X157 CIP X 7 P.S. 157 FY11 RESO A LIBRARY UPGRADE 178000 false -73.90861019557366 40.81920242494304 757 CAULDWELL AVENUE Bronx NY 10456
|
||||
K158 CIP K 19 P.S. 158 EXT MASONRY/FLOOD ELIMINATION 4244000 false -73.88480467674624 40.672471173748015 400 ASHFORD STREET Brooklyn NY 11207
|
||||
K016 CIP K 14 P.S. 16 CEC REQUEST - STUDENT CAFETERIA UPG 1139000 false -73.96144993294666 40.706051659903764 157 WILSON STREET Brooklyn NY 11211
|
||||
X160 CIP X 11 P.S. 160 FY11 RESO A LIBRARY 345300 false -73.8242748469253 40.86466106194175 4140 HUTCHINSON RIVER PARKWAY Bronx NY 10475
|
||||
K161 CIP K 17 P.S. 161 LIBRARY UPGRADE 89500 false -73.94885261044026 40.66615564566118 330 CROWN STREET Brooklyn NY 11225
|
||||
X163 CIP X 9 P.S. 163 INTERIOR MODERNIZATIONS/ROOFS 3143000 false -73.89841328719618 40.85190466527893 2075 WEBSTER AVENUE Bronx NY 10457
|
||||
M165 CIP M 3 P.S. 165 ROOF TILES & SNOW GUARD/EXT MASONRY/FLOOD/PARAPETS 2118994.65 false -73.96526411800443 40.80275180384162 234 109 STREET New York NY 10025
|
||||
K017 CIP K 14 P.S. 17 WINDOWS/EXT MASONRY/FLOOD ELMNTN/ROOFS/PARAPETS 7842000 false -73.95663645640386 40.715277522913524 208 5 STREET Brooklyn NY 11211
|
||||
M173 CIP M 6 P.S. 173 FIRE ALARM 359900 false -73.94042010106682 40.84561730185351 306 FORT WASHINGTON AVE New York NY 10033
|
||||
Q174 CIP Q 28 P.S. 174 FY11 RESO A LIBRARY UPGRADE 104000 false -73.86148084756303 40.72646491702238 65 10 DIETERLE CRESCENT REGO PARK NY 11374
|
||||
Q175 CIP Q 28 P.S. 175 FY11 RESO A FENCING 319571 false -73.86148084756303 40.72646491702238 64 35 102 STREET REGO PARK NY 11374
|
||||
X175 CIP X 11 P.S. 175 INTERIOR MODERNIZATIONS/WINDOWS 5296000 false -73.78516944174876 40.84381012246547 200 CITY ISLAND AVENUE Bronx NY 10464
|
||||
K178 CIP K 23 P.S. 178 FLOORS 695000 false -73.9159181765978 40.675074588842676 2163 DEAN STREET Brooklyn NY 11212
|
||||
Q178 CIP Q 26 P.S. 178 HEATING PLANT UPGRADE/CLIMATE CONTROL/MASONRY 7100000 false -73.7671414999802 40.71722229567246 189 10 RADNOR RD JAMAICA NY 11423
|
||||
R018 CIP R 31 P.S. 18 BOILER REPLACEMENT 3171000 false -74.11747369098056 40.63603930909672 221 BROADWAY Staten Island NY 10310
|
||||
X182 CIP X 8 P.S. 182 BRICK MASONRY WATER PENETRATION/WINDOWS 3464027 false -73.85625766017206 40.817936957362555 601 STICKBALL BLVD BRONX NY 10473
|
||||
Q183 CIP Q 27 P.S. 183 MSNRY/SFTY/WINDOW/LIBRARY UPG/HVAC/ROOF/FIRE ALARM 8248000 false -73.82495531523557 40.6183036047276 2 45 BEACH 79 STREET ROCKAWAY BEACH NY 11693
|
||||
M137 CIP M 1 P.S. 184 (SHUANG WEN @M137) FY11 RESO A PLAYGROUND REDEVELOPMENT 230000 false -73.98042410080346 40.71217484702834 327 CHERRY ST New York NY 10002
|
||||
M137 CIP M 1 P.S. 184 (SHUANG WEN @M137) SWB-HAZARDOUS VIOLATION/ROOFS 979000 false -73.98042410080346 40.71217484702834 327 CHERRY ST New York NY 10002
|
||||
Q186 CIP Q 26 P.S. 186 ACCESSIBILITY/FIRE ALARM SYSTEM/ELECTRICAL SYSTEMS 4577000 false -73.72415699894628 40.73704138495202 252 12 72 AVENUE BELLEROSE NY 11426
|
||||
Q186 CIP Q 26 P.S. 186 FLOOD ELIMINATION 968000 false -73.72415699894628 40.73704138495202 252 12 72 AVENUE BELLEROSE NY 11426
|
||||
K188 CIP K 21 P.S. 188 RESO A GYM ADDITION/FY10 RESO A PLAYGROUND 7879007 false -74.00012292790208 40.57720405091032 3314 NEPTUNE AVENUE Brooklyn NY 11224
|
||||
M188 CIP M 1 P.S. 188 ACCESSIBILITY 6422000 false -73.97792876586212 40.719709960041634 442 HOUSTON STREET New York NY 10002
|
||||
M188 CIP M 1 P.S. 188 EXTERIOR MASONRY/ROOFS/PARAPETS/WINDOWS 13457000 false -73.97792876586212 40.719709960041634 442 HOUSTON STREET New York NY 10002
|
||||
K189 CIP K 17 P.S. 189 LOW-VOLT SYSTEM 840000 false -73.92626797722787 40.66553683638519 1100 NEW YORK AVE Brooklyn NY 11212
|
||||
Q019 CIP Q 24 P.S. 19 SWB - EXT MASONRY/ROOFS/FLOOD ELIMINATION/PARAPETS 16175000 false -73.85304068857687 40.749678220373596 98 02 ROOSEVELT AVE CORONA NY 11368
|
||||
R019 CIP R 31 P.S. 19 IP SURVEILLANCE CAMERAS 1270000 false -74.127115288525 40.631189624083056 780 POST AVENUE Staten Island NY 10310
|
||||
K190 CIP K 19 P.S. 190 PARAPETS/ROOFS/EXT MASONRY 6720000 false -73.89448660618348 40.66233878188243 590 SHEFFIELD AVENUE Brooklyn NY 11207
|
||||
K191 CIP K 17 P.S. 191 SAFETY SYSTEMS 345900 false -73.92433266937152 40.671984269991356 1600 PARK PLACE Brooklyn NY 11233
|
||||
X198 CIP X 12 P.S. 198 PLANYC BOILER CONVRSN/PLANYC CLIMATE CTRL 3794000 false -73.90058806585479 40.82868626889099 1180 TINTON AVENUE Bronx NY 10456
|
||||
K199 CIP K 21 P.S. 199 FY11 RESO A LIBRARY 369000 false -73.96308897272426 40.61673348809886 1100 ELM AVENUE Brooklyn NY 11230
|
||||
R020 CIP R 31 P.S. 20 EXT MASONRY/ROOFS/WINDOWS 3285000 false -74.13295576709373 40.63651173103697 161 PARK AVENUE Staten Island NY 10302
|
||||
X020 CIP X 10 P.S. 20 ROOFS 1470000 false -73.87958395897564 40.869529034465444 3020 WEBSTER AVENUE BRONX NY 10467
|
||||
K203 CIP K 22 P.S. 203 EXT MASONRY/ROOFS/PARAPETS/FLOOD ELMNTN 5668000 false -73.92773224974349 40.61636866748006 5101 AVENUE Brooklyn NY 11234
|
||||
Q206 CIP Q 28 P.S. 206 FLOOD ELIMINATION 283000 false -73.86148084756303 40.72646491702238 61 02 98TH STREET REGO PARK NY 11374
|
||||
M206 CIP M 4 P.S. 206 (TANDEM PS 112) EXT MASONRY/PARAPETS/FLD ELIMINATION/ROOFS/WALKWAY 5822870 false -73.93112623193574 40.79754733338499 508 120TH STREET New York NY 10035
|
||||
R021 CIP R 31 P.S. 21 FLOORS 418000 false -74.14676832354822 40.63194814504947 168 HOOKER PLACE Staten Island NY 10303
|
||||
X021 CIP X 11 P.S. 21 PARAPETS/EXT MASONRY/FLOOD ELIMINATION/ROOFS 5259000 false -73.86044891659131 40.88782430615607 715 225 STREET Bronx NY 10466
|
||||
K214 CIP K 19 P.S. 214 EXT MASONRY/PARAPETS/FLOOD/WINDOWS/ROOFS 7654000 false -73.8631601400929 40.67649228343164 2944 PITKIN AVENUE Brooklyn NY 11208
|
||||
Q215 CIP Q 27 P.S. 215 FY11 RESO A SCIENCE LAB UPGRADES 260000 false -73.75832418340367 40.59915376512268 535 BRIAR PLACE FAR ROCKAWAY NY 11691
|
||||
K219 CIP K 18 P.S. 219 EXT MASONRY/PARAPETS/ROOFS 3079000 false -73.92291949545782 40.65925656671725 1060 CLARKSON AVENUE Brooklyn NY 11212
|
||||
Q022 CIP Q 25 P.S. 22 FY10 RESO A NEW PLAYGROUND 180000 false -73.82147854789662 40.7512997969481 153 01 SANFORD AVENUE FLUSHING NY 11355
|
||||
R022 CIP R 31 P.S. 22 LIBRARY UPGRADE 340000 false -74.15109445915424 40.62530363633885 1860 FOREST AVENUE Staten Island NY 10303
|
||||
K225 CIP K 21 P.S. 225 ACCESSIBILITY/FIRE ALARM/ELECTRICAL SYSTEMS 4105450 false -73.95643350547934 40.5797910944251 1075 OCEAN VIEW AVENUE Brooklyn NY 11235
|
||||
Q229 CIP Q 24 P.S. 229 SWB - MASONRY/ROOFS 3633000 false -73.9048471440804 40.74519376448069 67 25 51 ROAD WOODSIDE NY 11377
|
||||
X229 CIP X 9 P.S. 229 ELEVATORS & ESCALATORS 1327150 false -73.92150462714196 40.85261854069672 275 HARLEM RIVER PARK BR Bronx NY 10453
|
||||
X229 CIP X 9 P.S. 229 PLANYC BOILER/PLANYC CLIMATE CTRL 2910000 false -73.92150462714196 40.85261854069672 275 HARLEM RIVER PARK BR Bronx NY 10453
|
||||
K230 CIP K 15 P.S. 230 ACCESSIBILITY 4392000 false -73.98088211473515 40.64501828504539 1 ALBEMARLE ROAD Brooklyn NY 11210
|
||||
Q232 CIP Q 27 P.S. 232 FY11 RESO A SCIENCE LAB UPGRADES 384000 false -73.84496263981396 40.65817022817356 153 23 83 STREET HOWARD BEACH NY 11414
|
||||
K236 CIP K 22 P.S. 236 EXT MASONRY/FLOOD ELIMINATION 1054000 false -73.92773224974349 40.61636866748006 6302 AVENUE Brooklyn NY 11234
|
||||
K249 CIP K 17 P.S. 249 EXT MASONRY/ROOFS/PARAPETS 4474000 false -73.96609617601914 40.649842155595174 18 MARLBOROUGH ROAD Brooklyn NY 11226
|
||||
K249 CIP K 17 P.S. 249 FY11 RESO A AUDITORIUM UPGRADE 198000 false -73.96609617601914 40.649842155595174 18 MARLBOROUGH ROAD Brooklyn NY 11226
|
||||
K253 CIP K 21 P.S. 253 BOILER PLANT/CLIMATE CONTROL 4282800 false -73.96219337408164 40.579594157400855 601 OCEAN VIEW AVENUE Brooklyn NY 11235
|
||||
Q816 CIP Q 27 P.S. 256 ANNEX WINDOWS/EXT MASONRY 5282000 false -73.85454217391299 40.576996863641924 445 BEACH 135 STREET QUEENS NY 11694
|
||||
K026 CIP K 16 P.S. 26 PLANYC BOILER/PLANYC CLIMATE CTRL 3960000 false -73.93167037460694 40.69211086975316 1010 LAFAYETTE AVENUE Brooklyn NY 11221
|
||||
Q026 CIP Q 26 P.S. 26 ELECTRICAL SYSTEM 594999 false -73.79462153515567 40.73987184371066 195 02 69 AVENUE FLUSHING NY 11365
|
||||
K262 CIP K 16 P.S. 262 NEW SCIENCE DEMONSTRATION ROOM 534000 false -73.93085733477353 40.68321860795158 500 MACON STREET Brooklyn NY 11233
|
||||
K273 CIP K 19 P.S. 273 EXT MASONRY/ROOFS/PARAPETS 5335000 false -73.87935692616207 40.65796581134507 923 JEROME STREET Brooklyn NY 11207
|
||||
X027 CIP X 7 P.S. 277 (@ X027) SWB-ROOF/SWB-EXT MASONRY/WINDOWS/PARAPETS/ HEATING 15843000 false -73.91337206062776 40.813641430845045 519 ST ANNS AVENUE Bronx NY 10451
|
||||
X279 CIP X 10 P.S. 279 FIRE ALARM UPGRADE 2998000 false -73.90550751626725 40.85444390420279 2100 WALTON AVE BRONX NY 10453
|
||||
X028 CIP X 9 P.S. 28 EXTERIOR MASONRY/PARAPETS/FLOOD ELIMINATION 5016000 false -73.90357863607737 40.84796917302349 1861 ANTHONY AVENUE Bronx NY 10456
|
||||
K284 CIP K 23 P.S. 284 SWB-PARAPET-MASONRY/EXTERIOR MASONRY 5680000 false -73.90818838446248 40.66735004908563 213 OSBORN STREET Brooklyn NY 11212
|
||||
K289 CIP K 17 P.S. 289 WINDOW/CAFE MULTIPURPOSE RM UPG/MASONRY/PARAPET/PA 4440000 false -73.94240595654854 40.67477355898667 900 ST MARKS AVENUE Brooklyn NY 11213
|
||||
R029 CIP R 31 P.S. 29 PARAPETS/EXT MASONRY/ROOFS 3826000 false -74.11613224214713 40.61361168930647 1581 VICTORY BLVD Staten Island NY 10314
|
||||
K003 CIP K 13 P.S. 3 PARAPETS/EXT MASONRY/ROOF/PLAYGROUND REDEVELOPMENT 4820800 false -73.9554933572393 40.68262499957862 50 JEFFERSON AVENUE Brooklyn NY 11216
|
||||
M003 CIP M 2 P.S. 3 FLOORS/INTERIOR SPACES 3824000 false -74.00641883360943 40.73261607852907 490 HUDSON STREET New York NY 10014
|
||||
R003 CIP R 31 P.S. 3 LIGHTING FIXTURES 934104 false -74.21279962614892 40.52665926345466 80 GOFF AVENUE Staten Island NY 10309
|
||||
K306 CIP K 19 P.S. 306 PLAYGROUND REDEVELOPMENT 1071501 false -73.88669548652338 40.65614802525013 970 VERMONT STREET Brooklyn NY 11207
|
||||
K308 CIP K 16 P.S. 308 PAVED AREA-BLACKTOP & TCU 437000 false -73.93578222590314 40.6886393472372 616 QUINCY STREET Brooklyn NY 11221
|
||||
X122 CIP X 10 P.S. 310 (@ X122) FY10 RESO A AUDITORIUM UPG 205000 false -73.90565533914132 40.873019134707036 260 KINGSBRIDGE RD Bronx NY 10463
|
||||
K316 CIP K 17 P.S. 316 HOT WATER HEATER 375000 false -73.96025809844292 40.67448517044413 750 CLASSON AVENUE Brooklyn NY 11238
|
||||
K032 CIP K 15 P.S. 32 FY11 RESO A LIBRARY UPGRADE 357960 false -73.99193273420018 40.680429275762485 317 HOYT STREET Brooklyn NY 11231
|
||||
X032 CIP X 10 P.S. 32 VINYL FLR/BOILER RM/CLIMATE CTRL/HEAT PLANT 15839000 false -73.88593877891165 40.85208555646217 690 183 STREET Bronx NY 10458
|
||||
K329 CIP K 21 P.S. 329 WINDOWS/ROOFS 4659000 false -73.99625853857127 40.5746069203897 2929 30 STREET Brooklyn NY 11212
|
||||
X033 CIP X 10 P.S. 33 GUTTERS, DOWNSPOUTS & DRAINGAGE/FLOOD/EXT MASONRY 2965000 false -73.90165549892143 40.86194912850306 2424 JEROME AVENUE Bronx NY 10468
|
||||
K034 CIP K 14 P.S. 34 ROOFS 1297000 false -73.94966946764082 40.72614326106391 131 NORMAN AVENUE Brooklyn NY 11222
|
||||
Q034 CIP Q 29 P.S. 34 PLAYGROUND & TCU REMOVAL 1375500 false -73.74193729726841 40.721396964798146 104 12 SPRINGFIELD BLVD QUEENS VILLAGE NY 11428
|
||||
M036 CIP M 5 P.S. 36 REINFORCE SUPPRT ELEMT/MASONRY/FLOOD/PARAPET/ ROOF 7179000 false -73.95760614504678 40.81034589186436 123 MORNINGSIDE DRIVE New York NY 10027
|
||||
R036 CIP R 31 P.S. 36 PARAPETS 617000 false -74.18245006610681 40.54294395216458 255 IONIA AVENUE Staten Island NY 10312
|
||||
Q037 CIP Q 29 P.S. 37 FLOOD ELMNTN 4627000 false -73.77530690169215 40.6769452621142 179 37 137 AVENUE JAMAICA NY 11434
|
||||
K370 CIP K 21 P.S. 370 PLAYGROUND REDEVELOPMENT 2587000 false -73.96958337858405 40.577497294548174 3000 1 STREET Brooklyn NY 11224
|
||||
K370 CIP K 21 P.S. 370 WINDOWS/FLOOD ELIMNTN/MASONRY/ROOFS/PARAPETS 6920000 false -73.96958337858405 40.577497294548174 3000 1 STREET Brooklyn NY 11224
|
||||
R040 CIP R 31 P.S. 373 (SP ED) @R040 ROOFS/PARAPETS 824000 false -74.09531252948968 40.64071111953775 91 HENDERSON AVENUE Staten Island NY 10301
|
||||
K384 CIP K 32 P.S. 384 LL 41/16 COMPLIANCE 275000 false -73.90500308262318 40.69009686200851 242 COOPER STREET Brooklyn NY 11221
|
||||
R004 CIP R 31 P.S. 4 FY09 RESO A TECHNOLOGY 90290.18
|
||||
Q040 CIP Q 28 P.S. 40 CEC REQUEST-TOILETS STUDENTS 889000
|
||||
Q040 CIP Q 28 P.S. 40 EXTERIOR MASONRY/PARAPETS 2520000
|
||||
Q040 CIP Q 28 P.S. 40 PLAYGROUND REDEVELOPMENT 1424537
|
||||
M041 CIP M 2 P.S. 41 SWB-EXTERIOR MASONRY/WINDOWS/AUD. CEILING/PARAPETS 3447868 false -73.99904466974961 40.735686525332646 116 11 STREET New York NY 10011
|
||||
Q041 CIP Q 26 P.S. 41 MASONRY SUPPORT REPAIR/PARAPETS 2564500 false -73.77481079967868 40.773606900238235 214 43 35 AVENUE BAYSIDE NY 11261
|
||||
R041 CIP R 31 P.S. 41 FY10 RESO A PA SYSTEMS 448000 false -74.10928336025026 40.574024158045525 216 CLAWSON STREET Staten Island NY 10306
|
||||
R045 CIP R 31 P.S. 45 TOILETS STUDENTS 999999 false -74.10718417740732 40.62863428073003 58 LAWRENCE AVENUE Staten Island NY 10310
|
||||
R045 CIP R 31 P.S. 45 WATER PENETRATION 579900 false -74.10718417740732 40.62863428073003 58 LAWRENCE AVENUE Staten Island NY 10310
|
||||
K046 CIP K 13 P.S. 46 SCIENCE DEMO ROOM 376999 false -73.9711875089949 40.694634881525445 100 CLERMONT AVENUE Brooklyn NY 11205
|
||||
M046 CIP M 5 P.S. 46 SCIENCE DEMO LAB 512000
|
||||
Q046 CIP Q 26 P.S. 46 CORRIDOR SPACES 290000 false -73.75790275560763 40.745924680379744 64 45 218TH STREET QUEENS NY 11364
|
||||
K048 CIP K 20 P.S. 48 EXT MASONRY/PARAPETS/ROOFS 5315000
|
||||
Q050 CIP Q 28 P.S. 50 SWB EXT MASONRY/PARAPETS/ROOFS 1900000 false -73.80979665579099 40.70119264912154 143 26 101 AVENUE JAMAICA NY 11435
|
||||
R050 CIP R 31 P.S. 50 BOILER REPLACEMENT/CLIMATE CONTROL 3330000 false -74.12474473444865 40.561729222740695 200 ADELAIDE AVENUE Staten Island NY 10306
|
||||
X050 CIP X 12 P.S. 50 FLOOD ELIMINATION 818000 false -73.88769223705626 40.83380386816254 1550 VYSE AVENUE Bronx NY 10460
|
||||
M050 CIP M 4 P.S. 50 (UDC & ECF) PLANYC BOILER CONVERSION/PLANYC CLIMATE CONTROL 3174000 false -73.94222449721103 40.78556522081211 433 100 STREET New York NY 10029
|
||||
Q051 CIP Q 27 P.S. 51 (ECC) EXTERIOR MASONRY 1023000 false -73.84031024991805 40.69637041236467 87 45 117TH STREET QUEENS NY 11418
|
||||
Q052 CIP Q 29 P.S. 52 SWB EXT MASONRY 2700000 false -73.77530690169215 40.6769452621142 178 37 146 TERRACE SPRINGFIELD GARDENS NY 11434
|
||||
R053 CIP R 31 P.S. 53 FENCING/PAVED AREAS-CONCRETE 675000 false -74.13710643405284 40.55253899268856 330 DURANT AVENUE Staten Island NY 10308
|
||||
R054 CIP R 31 P.S. 54 PARAPETS/ROOFS/WINDOWS/EXT MASONRY 5847000 false -74.13792964309168 40.60321556338597 1060 WILLOWBROOK RD Staten Island NY 10314
|
||||
Q055 CIP Q 28 P.S. 55 SWB-BULGING MASONRY/PARAPETS 4795000 false -73.82288833053201 40.68871379040917 131 10 97 AVENUE RICHMOND HILL NY 11419
|
||||
R055 CIP R 31 P.S. 55 ROOFS/CEC REQUEST-MASONRY/FLOOD ELMNTN/PARAPETS 1890000 false -74.16332659953605 40.53686781464157 54 OSBORNE STREET Staten Island NY 10312
|
||||
X055 CIP X 9 P.S. 55 EXTERIOR MASONRY/PARAPETS 1285000 false -73.90461113077222 40.836276563944345 450 SAINT PAUL'S PLACE Bronx NY 10456
|
||||
K056 CIP K 13 P.S. 56 PLANYC CLIMATE/BOILER CONTROL 5240000 false -73.960643681102 40.68503684353989 170 GATES AVENUE Brooklyn NY 11238
|
||||
R057 CIP R 31 P.S. 57 PLANYC PLAYGROUND 613715.9 false -74.08283106498078 40.61136129612238 140 PALMA DRIVE Staten Island NY 10304
|
||||
K006 CIP K 17 P.S. 6 (PS 600B) BLDG MANAGEMENT SYSTEM 2269000
|
||||
K006 CIP K 17 P.S. 6 (PS 600B) EXT MASONRY/ROOFS 773000
|
||||
X060 CIP X 8 P.S. 60 FLOOD/EXT MASONRY/CEC REQUEST-PARAPET/ROOFS/WINDOW 14619000 false -73.89313106784448 40.82552621616202 888 REV J A POLITE AVE Bronx NY 10459
|
||||
X061 CIP X 12 P.S. 61 FIRE ALARM 349119 false -73.89295310872916 40.836569959473785 1550 CROTONA PARK Bronx NY 10460
|
||||
X061 CIP X 12 P.S. 61 IP SURVEILLANCE CAMERAS 1528000 false -73.89295310872916 40.836569959473785 1550 CROTONA PARK Bronx NY 10460
|
||||
X064 CIP X 9 P.S. 64 BATHROOMS 4TH & 5TH FLR 508499 false -73.91558081775857 40.8401115358764 1425 WALTON AVENUE Bronx NY 10452
|
||||
Q066 CIP Q 27 P.S. 66 FLOOD ELIMINATION/EXT MASONRY/PARAPETS 1110000 false -73.84031024991805 40.69637041236467 85 11 102 STREET RICHMOND HILL NY 11418
|
||||
M066 CIP M 2 P.S. 66 (RICHARD R GREEN) CAFE MULTIPURPOSE ROOM 482000 false -74.02858656018857 40.62102637693336 421 88 STREET New York NY 10028
|
||||
X068 CIP X 11 P.S. 68 ELEVATORS & ESCALATORS 688000 false -73.83837769297637 40.89141479468151 4011 MONTICELLO AVENUE Bronx NY 10466
|
||||
R069 CIP R 31 P.S. 69 FENCING 234000 false -74.15650379993006 40.59169714382341 144 KEATING PLACE Staten Island NY 10314
|
||||
X007 CIP X 10 P.S. 7 ROOFS/EXT MASONRY/PARAPETS 4700000 false -73.90547390792568 40.881013909978904 3201 KINGSBRIDGE AVENUE Bronx NY 10463
|
||||
Q071 CIP Q 24 P.S. 71 FLOOD ELIMINATION 408990 false -73.88334858436963 40.70122489161548 62 85 FOREST AVENUE RIDGEWOOD NY 11385
|
||||
X072 CIP X 8 P.S. 72 BATHROOM 668000 false -73.81850425419442 40.822539080023574 2951 DEWEY AVENUE Bronx NY 10465
|
||||
K722 CIP K 21 P.S. 721 OTC TILTED FIELD LIGHTING 1396800 false -73.97331147204676 40.596939623165156 64 AVENUE Brooklyn NY 11223
|
||||
M641 CIP M 2 P.S. 721 OTC SP ED FLOOD ELIMINATION 1897000 false -74.00542114697957 40.72862785368122 250 HOUSTON ST MANHATTAN NY 10014
|
||||
K073 CIP K 23 P.S. 73 SWB EXT MSNRY/SWB PARAPETS/SWB FLOOD/ROOFS 3084000 false -73.91089377023927 40.68032732647815 251 MCDOUGAL STREET Brooklyn NY 11233
|
||||
X075 CIP X 8 P.S. 75 ROOFS/EXT MASONRY 2549000 false -73.88942113898915 40.822818392634325 984 FAILE STREET Bronx NY 10459
|
||||
X155 CIP X 7 P.S. 754 (@X155) CAFE/MULTIPURPOSE RM UPGRADE/FLOOD ELIMINATION 1230000 false -73.90975689502312 40.81117582303449 470 JACKSON AVENUE BRONX NY 10455
|
||||
X155 CIP X 7 P.S. 754 (@X155) FY11 REOS A LIBRARY UPGRADE 299155 false -73.90975689502312 40.81117582303449 470 JACKSON AVENUE BRONX NY 10455
|
||||
Q076 CIP Q 30 P.S. 76 EXTERIOR MASONRY/PARAPETS 2284875 false -73.91327185810974 40.76286893025696 36 36 10 STREET QUEENS NY 11103
|
||||
X076 CIP X 11 P.S. 76 MASONRY/PARAPETS/FLOOD ELMNTN/ROOFS 4042000 false -73.8614028579785 40.86957454109854 900 ADEE AVENUE Bronx NY 10469
|
||||
X078 CIP X 11 P.S. 78 AUDITORIUM UPGRADE/STUDENT TOILETS 715000 false -73.8513380848076 40.87847023359842 1400 NEEDHAM AVENUE Bronx NY 10469
|
||||
Q079 CIP Q 25 P.S. 79 ELEC SYSTEMS 258100 false -73.81123206101074 40.78628404147537 147 27 15 DRIVE WHITESTONE NY 11357
|
||||
R008 CIP R 31 P.S. 8 ELEC SYSTEM 790000 false -74.1517569152093 40.54764073027023 112 LINDENWOOD ROAD Staten Island NY 10308
|
||||
R880 CIP R 31 P.S. 80 (PETRIDES BLDG B) WINDOWS/EXT MASONRY 3228000
|
||||
Q081 CIP Q 24 P.S. 81 FLOOD ELIM/STRUCTURAL:FLOOR SYS/EXT MASONRY 1274800 false -73.91225035614077 40.70373293561221 559 CYPRESS AVENUE RIDGEWOOD NY 11237
|
||||
X081 CIP X 10 P.S. 81 FLOOD ELIMINATION 474000 false -73.90520839316682 40.903559546831026 5550 RIVERDALE AVENUE Bronx NY 10471
|
||||
Q848 CIP Q 24 P.S. 81 ANNEX (@Q848) FLOOD ELIMINATION/EXT MASONRY 2390270
|
||||
Q811 CIP Q 26 P.S. 811 (OL 187 - CMCH) LL 41/16 COMPLIANCE 954000 false -73.73430017711144 40.759074216601846 61 25 MARATHON PKWY QUEENS NY 11362
|
||||
Q811 CIP Q 26 P.S. 811 (OL 187 - CMCH) LOW VOLTAGE 560000 false -73.73430017711144 40.759074216601846 61 25 MARATHON PKWY QUEENS NY 11362
|
||||
M841 CIP M 3 P.S. 811(@ M841) WORK REQUIRED TO OBTAIN C OF O 1880750 false -73.96653900057436 40.78362556816552 466 END AVENUE NEW YORK NY 10024
|
||||
Q082 CIP Q 28 P.S. 82 WATER PENETRATION 1120000 false -73.80979665579099 40.70119264912154 88 02 144 STREET QUEENS NY 11435
|
||||
X083 CIP X 11 P.S. 83 ACCESSIBILITY 3377000 false -73.85933122663833 40.849332468676785 950 RHINELANDER AVENUE Bronx NY 10462
|
||||
Q085 CIP Q 30 P.S. 85 FLOOD ELMNTN/ROOFS/EXT MASONRY/PARAPETS 3111000 false -73.90960650023976 40.780092072491186 23 70 31 STREET QUEENS NY 11105
|
||||
X085 CIP X 10 P.S. 85 RETAINING WALL 1596000 false -73.89472052099663 40.859331900138066 2400 MARION AVENUE Bronx NY 10458
|
||||
K086 CIP K 32 P.S. 86 FLOOD ELMNTN/EXT MASONRY 4269000 false -73.91749723727719 40.7007452458598 220 IRVING AVENUE Brooklyn NY 11237
|
||||
X086 CIP X 10 P.S. 86 ELEVATORS & ESCALATORS 747400 false -73.89880422371779 40.869715575827065 2756 RESERVOIR AVENUE Bronx NY 10468
|
||||
K009 CIP K 13 P.S. 9 PAVED AREA - BLACKTOP 974000
|
||||
X009 CIP X 10 P.S. 9 (OLD 115) ACCESSIBILITY 6177000 false -73.89936166242526 40.8571875830873 230 183 STREET Bronx NY 10458
|
||||
Q090 CIP Q 27 P.S. 90 ELEC SYSTEMS 778000 false -73.84031024991805 40.69637041236467 86 50 109 STREET RICHMOND HILL NY 11418
|
||||
Q090 CIP Q 27 P.S. 90 SWB - EMERGENCY MASONRY REPAIRS/PARAPETS 3769000 false -73.84031024991805 40.69637041236467 86 50 109 STREET RICHMOND HILL NY 11418
|
||||
X090 CIP X 9 P.S. 90 EXTERIOR MASONRY/RETAINING WALLS 1857000 false -73.91794566527413 40.83197402670032 1116 SHERIDAN AVENUE Bronx NY 10456
|
||||
K093 CIP K 13 P.S. 93 FLOORS 1748375 false -73.94682098403624 40.679147761017056 31 NEW YORK AVENUE Brooklyn NY 11216
|
||||
K094 CIP K 15 P.S. 94 PLANYC PLAYGROUND 264500 false -74.0082060957207 40.64372817395559 5010 6TH AVENUE Brooklyn NY 11220
|
||||
K095 CIP K 21 P.S. 95 EXT MASONRY/WINDOWS 3373000 false -73.97512954825021 40.595683557953876 345 VAN SICKLEN STREET Brooklyn NY 11223
|
||||
M271 CIP M 2 P.S./I.S. 217 ROOSEVELT ISLAND ROOFS/EXT MASONRY/WINDOWS/PARAPETS 8444000 false -73.94703392787746 40.76494453865442 645 MAIN STREET New York NY 10044
|
||||
M495 CIP M 4 PARK EAST ALT HS FY10 RESO A SCIENCE LAB 759354 false -73.94403228106489 40.79161072055837 230 34 EAST 105 STREET New York NY 10029
|
||||
M495 CIP M 4 PARK EAST ALT HS WATER DAMAGE & MASONRY/ROOF/PARAPETS/WINDOWS 2887000 false -73.94403228106489 40.79161072055837 230 34 EAST 105 STREET New York NY 10029
|
||||
Q102 CAP Q 24 PS 102 Addition Addition 56222000 false -73.87835115518163 40.73871040256307 55 24 Van Horn St Elmhurst NY 11373
|
||||
Q013 CAP Q 24 PS 13 Addition Addition 41250000 false -73.87835115518163 40.73871040256307 55 01 94th St Elmhurst NY 11373
|
||||
M130 CIP M 2 PS 130 SWB-WINDOWS 1327000 false -73.99859121725036 40.7186139475248 143 BAXTER STREET New York NY 10013
|
||||
K317 CAP K 13 PS 133 New 66224000 false -73.98070466529857 40.68047819552629 610 Baltic St Brooklyn NY 11217
|
||||
Q143 CIP Q 24 PS 143 FY10 RESO A PA SYSTEM 189000 false -73.85304068857687 40.749678220373596 34 74 113 STREET CORONA NY 11368
|
||||
K160 CAP K 20 PS 160 Annex Addition 38772000 false -73.99911127943953 40.637367859169615 5105 Fort Hamilton Pkwy Brooklyn NY 11219
|
||||
X136 CIP X 12 PS 186 COMPUTER LAB FLOOD ELIMINATION/EXTERIOR RAMPS & CANOPIES 968700 false -73.89748338090764 40.8318681052202 750 JENNINGS STREET Bronx NY 10459
|
||||
Q196 CAP Q 28 PS 196 Addition Addition 29800000 false -73.84628429608335 40.720707263029794 71 25 113th St Forest Hills NY 11375
|
||||
K264 CAP K 20 PS 264 New 39814903 false -74.02907223284222 40.62112765715576 8818 4th Ave Brooklyn NY 11209
|
||||
Q280 CAP Q 30 PS 280 Lease 6230000 false -73.88361254528269 40.75163073936716 34 20 94th St Jackson Heights NY 11372
|
||||
Q280 CAP Q 30 PS 280 Lease 7250000 false -73.88361254528269 40.75163073936716 34 20 94th St Jackson Heights NY 11372
|
||||
Q029 CAP Q 25 PS 29 Addition Addition 20180000 false -73.84181070040347 40.7849280967543 125 10 23rd Ave College Point NY 11356
|
||||
Q290 CIP Q 24 PS 290 DEMOLITION FOR PS 290 3370000 false -73.88334858436963 40.70122489161548 55 20 METROPOLITAN AVE RIDGEWOOD NY 11385
|
||||
X292 CAP X 11 PS 292 New 31927000 false -73.86385184249058 40.85441144971648 800 Lydig Ave Bronx NY 10462
|
||||
K310 CAP K 20 PS 310 New 26400000 false -74.00762713591367 40.632432204151364 942 62nd St Brooklyn NY 11219
|
||||
K331 CAP K 20 PS 331 New 51133300 false -74.02392108137985 40.633713521609366 7002 4th Ave Brooklyn NY 11209
|
||||
Q198 CIP Q 27 PS 333 @ 198 SCIENCE DEMO ROOM UPGRADE 670000 false -73.79540208463845 40.593133885620375 3 65 BEACH 56 STREET QUEENS NY 11692
|
||||
Q042 CAP Q 27 PS 42 Addition Addition 43065000 false -73.79529882397365 40.59475372321819 488 Beach 66th St Arverne NY 11692
|
||||
Q043 CIP Q 27 PS 43 FIRE ALARM SYSTEM 1982000 false -73.76182654029463 40.594515128003 160 BEACH 29TH STREET ROCKAWAY NY 11691
|
||||
M338 CAP M 2 PS 51 New 54730000 false -73.99547864190042 40.761366217679694 525 44th St New York NY 10036
|
||||
R071 CAP R 31 PS 71 New 53450000 false -74.09118595249046 40.60412964758937 1050 Targee St Staten Island NY 10304
|
||||
K008 CAP K 13 PS 8 Addition Addition 21230000 false -73.9932378538064 40.700668802148385 37 Hicks St Brooklyn NY 11201
|
||||
M916 CAP M 5 PS 916 Lease 0 false -73.95327141286555 40.81245030541294 168 Morningside Ave New York NY 10027
|
||||
X177 CAP X 10 PS/IS 177 New 48888000 false -73.8752514350975 40.87277450072955 3177 Webster Ave Bronx NY 10467
|
||||
Q277 CAP Q 28 PS/IS 277 New 47135000 false -73.79282099978928 40.71311535449007 153 27 88th Ave Jamaica NY 11432
|
||||
M281 CAP M 2 PS/IS 281 New 47580000 false -73.97273509303172 40.74436150165521 425 35th St New York NY 10016
|
||||
Q312 CAP Q 30 PS/IS 312 New 47820000 false -73.93866902925225 40.74570244980828 46 08 5th St Long Island City NY 11101
|
||||
X784 CAP X 11 PS/IS 784 New 0 false -73.84367515955307 40.85710649548991 1500 Pelham Pkwy Bronx NY 10461
|
||||
K990 CAP K 15 Pave Charter School New 25933333 false -74.00338737261256 40.67592711246962 732 Henry St Brooklyn NY 11231
|
||||
Q475 CIP Q 27 RICHMOND HILL HS SWB - EXT MASONRY/WINDOWS/ROOFS 9333000 false -73.84031024991805 40.69637041236467 89 30 114 STREET QUEENS NY 11418
|
||||
K655 CIP K 15 SARAH J HALE VOCATIONAL HS ACCESSIBILITY/SAFETY 2450000 false -73.98061564042008 40.68371105568558 345 DEAN STREET Brooklyn NY 11217
|
||||
K218 CIP K 19 SCH FOR CLASSICS:ACAD OF THINK NEW SCIENCE LAB SUITE 845000 false -73.8742292684109 40.67070199017694 370 FOUNTAIN AVENUE Brooklyn NY 11208
|
||||
M660 CIP M 2 SCHOOL OF THE FUTURE @MD BACON FLOOD ELIMINATION 618000 false -73.98552809234425 40.73900208799275 127 22 STREET NEW YORK NY 10010
|
||||
Q751 CIP Q 30 SCHOOL SAFETY PARKING LOT SCHOOL SAFETY PARKING LOT 2648000 false -73.93866902925225 40.74570244980828 43 30 DUTCH KILLS STREET LONG ISLAND CITY NY 11101
|
||||
M445 CIP M 2 SEWARD PARK HS CAFETERIA MULTIPURPOSE RM UPG 929000 false -73.98959502962896 40.716852373698316 350 GRAND STREET New York NY 10002
|
||||
K515 CIP K 18 SOUTH SHORE HS ROOFS/EXT MASONRY/PARAPETS 18887000 false -73.91781691770764 40.63268510415105 6565 FLATLANDS AVENUE BROOKLYN NY 11236
|
||||
M477 CIP M 2 STUYVESANT HS (NEW) EXT MASONRY/ROOFS 7752000
|
||||
X240 CAP X 78 Settlement Housing PS/IS/HS New 83300000 false -73.91619367568833 40.84236125885491 1501 Jerome Ave Bronx NY 10452
|
||||
X988 CAP X 78 Suspension Center - Bronx Lease 7335500 false -73.89020247936504 40.81655388322442 1231 Lafayette Ave Bronx NY 10474
|
||||
X410 CIP X 9 TAFT HS PLANYC BOILER CONVERSION/PLANYC CLIMATE CTRL 10174000 false -73.9108816444482 40.84038797720987 240 172 STREET BRONX NY 10457
|
||||
K485 CIP K 20 TELECOM ARTS & TECHNOLOGY H.S. EXT MASONRY 4138000 false -74.02385245520922 40.63726462862678 350 67TH ST Brooklyn NY 11220
|
||||
X435 CIP X 10 THEODORE ROOSEVELT H.S. FLOORS 1593000 false -73.88817875264016 40.85990614640288 500 FORDHAM ROAD Bronx NY 10458
|
||||
X435 CIP X 10 THEODORE ROOSEVELT H.S. SWB - COPPER SIDING 1500000 false -73.88817875264016 40.85990614640288 500 FORDHAM ROAD Bronx NY 10458
|
||||
R455 CIP R 31 TOTTENVILLE H.S. FY10 RESO A AF REPLACEMENT 1452882 false -74.19217697672369 40.52826198723337 100 LUTEN AVENUE Staten Island NY 10312
|
||||
R455 CIP R 31 TOTTENVILLE HS WINDOWS 7960000 false -74.19217697672369 40.52826198723337 100 LUTEN AVENUE Staten Island NY 10312
|
||||
M971 CAP M 2 The Spruce Street Educational New 34146385.86 false -74.00596371272646 40.71174136432668 12 Spruce St New York NY 10038
|
||||
M445 CIP M 2 URBAN ASSEMBLY ACADEMY GIRLS SHOWER ROOM 1014300 false -73.98959502962896 40.716852373698316 350 GRAND STREET New York NY 10002
|
||||
R460 CIP R 31 WAGNER HS FY06 RESO A ATHLETIC FIELD 5799000 false -74.12366587081469 40.59771088831585 1200 MANOR ROAD Staten Island NY 10314
|
||||
K805 CIP K 13 WATER'S EDGE EDUCATIONAL COMPL ELEVATOR UPGRADE 764398 false -73.98496543482732 40.69721149151847 49 FLATBUSH AVE EXTENSION BROOKLYN NY 11201
|
||||
Q680 CIP Q 28 YOUNG WOMENS' LEADERSHIP SCHOO IP SURVEILLANCE CAMERAS 1047000 false -73.7875740339145 40.698104881734935 150 91 87TH ROAD JAMAICA NY 11433
|
|
|
@ -0,0 +1,115 @@
|
|||
"_7" age _3 _4 _5 borough _6 _1 _2
|
||||
546426 0-4 545778 547336 542426 NYC Total 540523 521990 535209
|
||||
522152 5-9 516006 527690 529397 NYC Total 524170 477039 501640
|
||||
504650 10-14 482453 497610 508958 NYC Total 509963 471909 457567
|
||||
546750 15-19 492532 519298 535024 NYC Total 546062 539844 505783
|
||||
657403 20-24 606203 591683 625253 NYC Total 643728 647483 646075
|
||||
762757 25-29 763956 715824 698195 NYC Total 740437 736105 770396
|
||||
715486 30-34 743916 740268 693684 NYC Total 675497 667657 707726
|
||||
621899 35-39 649594 684249 682964 NYC Total 639237 592299 611239
|
||||
596493 40-44 569628 606185 638148 NYC Total 637517 571825 550097
|
||||
600514 45-49 517668 537516 571723 NYC Total 600792 570273 535998
|
||||
584164 50-54 520597 504322 523815 NYC Total 556586 546204 552074
|
||||
506390 55-59 501239 474319 459574 NYC Total 477052 479661 493997
|
||||
450353 60-64 464187 472842 447688 NYC Total 434046 418127 449279
|
||||
370119 65-69 380864 395585 403234 NYC Total 382256 299533 353131
|
||||
331544 70-74 304072 330132 342704 NYC Total 350069 236401 256786
|
||||
289778 75-79 210236 251182 272561 NYC Total 284051 179677 192687
|
||||
209246 80-84 139658 154606 184243 NYC Total 201409 143726 129798
|
||||
209021 85+ 142385 149319 161436 NYC Total 187608 142871 147632
|
||||
9025145 Total 8550972 8699966 8821027 NYC Total 8931003 8242624 8397114
|
||||
112571 0-4 109972 111127 110880 Bronx 110982 103144 106770
|
||||
110942 5-9 105775 109843 111137 Bronx 110893 98664 102008
|
||||
105010 10-14 95703 100081 104065 Bronx 105297 99159 92423
|
||||
113100 15-19 98987 103114 107753 Bronx 111879 115662 105751
|
||||
121256 20-24 113827 107423 111941 Bronx 116901 112897 124181
|
||||
121249 25-29 127995 117887 111171 Bronx 116011 105710 115853
|
||||
110963 30-34 109797 122434 112812 Bronx 106338 97824 99969
|
||||
100424 35-39 93530 103582 115705 Bronx 106610 91016 91397
|
||||
102576 40-44 87217 89976 99685 Bronx 111331 96073 86719
|
||||
108171 45-49 83496 84693 87465 Bronx 96914 97569 92337
|
||||
94910 50-54 89495 81571 82859 Bronx 85647 88029 94470
|
||||
78521 55-59 85632 81892 74718 Bronx 76007 72545 79637
|
||||
71076 60-64 73506 79872 76473 Bronx 69889 60934 66842
|
||||
60560 65-69 56988 63425 69011 Bronx 66253 45349 51894
|
||||
56320 70-74 43380 48249 53737 Bronx 58687 34794 37890
|
||||
49153 75-79 31168 36192 40250 Bronx 45066 26199 28617
|
||||
32582 80-84 20292 22515 26053 Bronx 29204 19501 18633
|
||||
29861 85+ 20028 21399 23283 Bronx 26583 20039 20334
|
||||
1579245 Total 1446788 1485275 1518998 Bronx 1550492 1385108 1415725
|
||||
186465 0-4 186886 184273 182152 Brooklyn 182974 180353 186547
|
||||
178081 5-9 180252 182013 179508 Brooklyn 177289 162302 173890
|
||||
171265 10-14 166761 174242 175992 Brooklyn 173419 159404 155314
|
||||
178066 15-19 158561 171398 179052 Brooklyn 180690 173672 162365
|
||||
201457 20-24 180072 177078 191335 Brooklyn 199658 199153 192162
|
||||
231531 25-29 221421 208706 205220 Brooklyn 221800 226516 229152
|
||||
216025 30-34 221544 215764 203416 Brooklyn 199873 206266 218546
|
||||
189362 35-39 205525 210019 204593 Brooklyn 192741 180888 193533
|
||||
182148 40-44 181452 194294 198551 Brooklyn 193332 166998 169246
|
||||
183817 45-49 159615 172580 184841 Brooklyn 188774 167402 157171
|
||||
184707 50-54 152501 156182 168925 Brooklyn 180913 163403 162090
|
||||
163132 55-59 144647 137394 140742 Brooklyn 152292 145029 145484
|
||||
145624 60-64 137606 138164 131258 Brooklyn 134559 126915 136873
|
||||
113613 65-69 113940 115961 116468 Brooklyn 110838 85190 105356
|
||||
99000 70-74 92570 101424 103251 Brooklyn 104025 70864 74742
|
||||
86725 75-79 61041 76743 84089 Brooklyn 86085 52908 57753
|
||||
63958 80-84 41717 45047 56472 Brooklyn 62490 43509 38183
|
||||
65549 85+ 42341 44964 48144 Brooklyn 57595 42139 44437
|
||||
2840525 Total 2648452 2706246 2754009 Brooklyn 2799347 2552911 2602844
|
||||
76687 0-4 82096 83225 80452 Manhattan 77272 76579 78283
|
||||
66801 5-9 68243 72011 72942 Manhattan 69971 61323 65822
|
||||
63630 10-14 60331 62902 66322 Manhattan 66700 58229 55455
|
||||
80224 15-19 69487 74662 77190 Manhattan 80181 77462 71544
|
||||
132854 20-24 118301 114974 123950 Manhattan 127980 141558 127856
|
||||
179510 25-29 180070 165213 159757 Manhattan 173578 186733 200507
|
||||
163317 30-34 190129 171652 157176 Manhattan 150919 154501 174702
|
||||
125524 35-39 146480 160424 144721 Manhattan 131503 122916 127686
|
||||
112875 40-44 110439 127417 139365 Manhattan 124857 111228 104852
|
||||
111904 45-49 94732 100358 115597 Manhattan 125533 104156 99083
|
||||
118851 50-54 94242 90711 96020 Manhattan 109985 98813 97815
|
||||
99314 55-59 88669 86013 82751 Manhattan 87091 92648 88427
|
||||
82682 60-64 84257 85058 82434 Manhattan 78940 85574 87219
|
||||
68861 65-69 76334 74352 74940 Manhattan 72279 65344 73878
|
||||
62794 70-74 64227 67044 65211 Manhattan 65475 50025 55973
|
||||
55376 75-79 47159 54850 57160 Manhattan 55508 38366 41521
|
||||
42018 80-84 31115 35967 41717 Manhattan 43555 30031 28300
|
||||
48395 85+ 31971 34741 39015 Manhattan 44965 30387 31774
|
||||
1691617 Total 1638282 1661574 1676720 Manhattan 1686292 1585873 1610697
|
||||
142459 0-4 138141 139574 139958 Queens 140733 133575 135493
|
||||
136512 5-9 132342 133933 135413 Queens 135764 124735 130325
|
||||
133813 10-14 129351 130384 132038 Queens 133473 124320 123672
|
||||
143734 15-19 134198 139314 140488 Queens 142218 140119 134759
|
||||
170836 20-24 162692 161057 167330 Queens 168741 162417 169044
|
||||
199281 25-29 200730 191983 190144 Queens 197605 187158 192627
|
||||
192639 30-34 189015 195559 187152 Queens 185352 179207 183463
|
||||
173523 35-39 172928 176806 183062 Queens 175208 166007 168718
|
||||
165416 40-44 160306 163144 166859 Queens 172806 163368 157522
|
||||
163104 45-49 149550 151164 153981 Queens 157484 165141 154894
|
||||
152805 50-54 151019 144896 146607 Queens 149458 160216 160818
|
||||
136566 55-59 147504 137653 132201 Queens 133927 138186 146776
|
||||
124901 60-64 137219 137155 128104 Queens 123251 117334 129053
|
||||
102706 65-69 107634 113855 113909 Queens 106712 84526 97766
|
||||
90365 70-74 82663 90661 95957 Queens 96418 67211 71448
|
||||
77671 75-79 57287 66138 72554 Queens 77288 51609 53828
|
||||
55423 80-84 38275 40828 47012 Queens 52089 42422 36701
|
||||
50895 85+ 39441 39327 40782 Queens 45826 42451 42582
|
||||
2412649 Total 2330295 2353431 2373551 Queens 2394353 2250002 2289489
|
||||
28244 0-4 28683 29137 28984 Staten Island 28562 28339 28116
|
||||
29816 5-9 29394 29890 30397 Staten Island 30253 30015 29595
|
||||
30932 10-14 30307 30001 30541 Staten Island 31074 30797 30703
|
||||
31626 15-19 31299 30810 30541 Staten Island 31094 32929 31364
|
||||
31000 20-24 31311 31151 30697 Staten Island 30448 31458 32832
|
||||
31186 25-29 33740 32035 31903 Staten Island 31443 29988 32257
|
||||
32542 30-34 33431 34859 33128 Staten Island 33015 29859 31046
|
||||
33066 35-39 31131 33418 34883 Staten Island 33175 31472 29905
|
||||
33478 40-44 30214 31354 33688 Staten Island 35191 34158 31758
|
||||
33518 45-49 30275 28721 29839 Staten Island 32087 36005 32513
|
||||
32891 50-54 33340 30962 29404 Staten Island 30583 35743 36881
|
||||
28857 55-59 34787 31367 29162 Staten Island 27735 31253 33673
|
||||
26070 60-64 31599 32593 29419 Staten Island 27407 27370 29292
|
||||
24379 65-69 25968 27992 28906 Staten Island 26174 19124 24237
|
||||
23065 70-74 21232 22754 24548 Staten Island 25464 13507 16733
|
||||
20853 75-79 13581 17259 18508 Staten Island 20104 10595 10968
|
||||
15265 80-84 8259 10249 12989 Staten Island 14071 8263 7981
|
||||
14321 85+ 8604 8888 10212 Staten Island 12639 7855 8505
|
||||
501109 Total 487155 493440 497749 Staten Island 500519 468730 478359
|
|
|
@ -0,0 +1,163 @@
|
|||
candname officeboro canclass generalpay election totalpay primarypay officedist officecd runoffpay candid
|
||||
CANDNAME OFFICEBORO CANCLASS
|
||||
Addabbo, Joseph P P 0 2005 0 0 32 5 0
|
||||
Akbar, Celestina P 0 2005 0 0 23 5 0 884
|
||||
Antoine, Royston P 0 2005 59900.00 59900.00 41 5 0 864
|
||||
Arroyo, Maria C P 0 2005 0 0 17 5 0 838
|
||||
Avella, Tony P 75120.00 2005 75120.00 0 19 5 0 51
|
||||
Baez, Maria P 0 2005 0 0 14 5 0 591
|
||||
Baldeo, Albert J P 0 2005 82500.00 82500.00 28 5 0 835
|
||||
Barron, Charles P 58577.00 2005 141077.00 82500.00 42 5 0
|
||||
Bernace, Victor A P 0 2005 48900.00 48900.00 7 5 0 560
|
||||
Betancourt Jr, Ismael P 0 2005 82500.00 82500.00 13 5 0
|
||||
Beys, Michael P P 0 2005 82500.00 82500.00 2 5 0 870
|
||||
Bilal, Charles A P 0 2005 0 0 28 5 0 321
|
||||
Billups, Charles B P 44924.00 2005 44924.00 0 35 5 0 852
|
||||
Blackwell, Eric S P 0 2005 0 0 35 5 0
|
||||
Bloch, Darren S P 0 2005 82500.00 82500.00 2 5 0 849
|
||||
Bloodsaw, Daryl G P 37700.00 2005 37700.00 0 9 5 0 508
|
||||
Boudouvas, Peter T P 81960.00 2005 81960.00 0 19 5 0 890
|
||||
Brewer, Gale A P 0 2005 0 0 6 5 0 399
|
||||
Brightharp, Joan J P 0 2005 25512.00 25512.00 2 5 0 830
|
||||
Brodsky, Meryl P 0 2005 55776.00 55776.00 4 5 0 812
|
||||
Brown Jr, Will P 0 2005 0 0 9 5 0 1011
|
||||
Cabbagestalk, Jr., Damon L P 0 2005 0 0 2 0 848
|
||||
Carlino, John P 0 2005 0 0 2 5 0 892
|
||||
Carrion, Jr., Adolfo X P 0 2005 0 0 4 0
|
||||
Carroll, Rodney L P 0 2005 72420.00 72420.00 9 5 0 840
|
||||
Cavaco, Manuel S P 0 2005 0 0 2 5 0 984
|
||||
Ceder, David P 25324.00 2005 25324.00 0 50 5 0 891
|
||||
Cesnik, Eric A P 0 2005 50518.00 50518.00 5 5 0 853
|
||||
Chino, Theo B P 0 2005 0 0 1 0 844
|
||||
Clarke, Yvette D P 0 2005 81784.00 81784.00 40 5 0 511
|
||||
Cornelius, Yasmin H P 0 2005 82500.00 82500.00 9 5 0 754
|
||||
de Blasio, Bill P 0 2005 0 0 39 5 0 326
|
||||
Denis, Nelson A P 0 2005 78562.00 78562.00 8 5 0
|
||||
Dickens, Inez E P 0 2005 82500.00 82500.00 9 5 0 867
|
||||
Dilan, Erik M P 0 2005 0 0 37 5 0 444
|
||||
Doty, Cynthia L P 0 2005 65044.00 65044.00 9 5 0 860
|
||||
Duggan, Essie M P 0 2005 0 0 41 5 0 854
|
||||
Ellner, Brian V M P 0 2005 708950.00 708950.00 4 0 809
|
||||
Emmanuel, Ernest P 0 2005 0 0 45 5 0
|
||||
Espaillat, Adriano M P 0 2005 522599.00 522599.00 4 0 93
|
||||
Estrada Rukaj, Irene E P 0 2005 0 0 13 5 0 889
|
||||
Ferrer, Fernando P 2676060.00 2005 4361060.00 1685000.00 1 0
|
||||
Fidler, Lewis A P 12092.00 2005 94592.00 82500.00 46 5 0 527
|
||||
Fields, C. Virginia P 0 2005 1459636.00 1459636.00 1 0
|
||||
Fields, Jessie M P 141189.00 2005 141189.00 0 4 0 526
|
||||
Flanagan, Claudia P 0 2005 0 0 2 5 0 880
|
||||
Foglia, Philip F P 82500.00 2005 82500.00 0 13 5 0 879
|
||||
Foster, Helen Diane P 20625.00 2005 20625.00 0 16 5 0 325
|
||||
Galarza, David P 0 2005 52290.00 52290.00 38 5 0 851
|
||||
Gallagher, Dennis P P 0 2005 0 0 30 5 0 334
|
||||
Gallo, Russell C P 24860.00 2005 24860.00 0 47 5 0 1005
|
||||
Garodnick, Daniel R P 82500.00 2005 165000.00 82500.00 4 5 0 721
|
||||
Gennaro, James F P 44704.00 2005 127204.00 82500.00 24 5 0 283
|
||||
Gentile, Vincent J P 82500.00 2005 82500.00 0 43 5 0 717
|
||||
Gerson, Alan J P 0 2005 0 0 1 5 0 268
|
||||
Gioia, Eric P 0 2005 0 0 26 5 0 418
|
||||
Golub, Jay P 0 2005 0 0 2 0 503
|
||||
Gonzalez, Sara M P 8580.00 2005 67580.00 59000.00 38 5 0 711
|
||||
Gotbaum, Betsy F P 44260.00 2005 1170700.00 1126440.00 2 0 263
|
||||
Grandoit, Tamara P 0 2005 73972.00 73972.00 46 5 0 872
|
||||
Hall, Jody P 75020.00 2005 75020.00 0 49 5 0 1004
|
||||
Henderson, Woody P 21580.00 2005 21580.00 0 9 5 0 790
|
||||
Herbert, Anthony L P 0 2005 0 0 35 5 0 738
|
||||
Hoffnung, Ari M P 0 2005 82500.00 82500.00 11 5 0 825
|
||||
Hooks, Erik L P 0 2005 0 0 33 5 0 895
|
||||
Hooks, Jr., David R P 0 2005 54350.00 54350.00 31 5 0 359
|
||||
Jackson, Robert P 15640.00 2005 57124.00 41484.00 7 5 0 484
|
||||
James, Letitia P 18720.00 2005 91564.00 72844.00 35 5 0 480
|
||||
Johnson, Joyce S P 0 2005 82500.00 82500.00 8 5 0 768
|
||||
Junior, Pamela M P 0 2005 0 0 41 5 0 742
|
||||
Kann, Jerry P 0 2005 0 0 22 5 0 492
|
||||
Karako, Jak J P 18388.00 2005 100888.00 82500.00 4 5 0 677
|
||||
Kaufman, Stephen B P 0 2005 63528.00 63528.00 13 5 0 859
|
||||
Kavanagh, Brian P P 0 2005 82500.00 82500.00 2 5 0 753
|
||||
Kinard, Stanley P 0 2005 58700.00 58700.00 41 5 0
|
||||
King, Danny P 0 2005 39623.00 39623.00 41 5 0 839
|
||||
King, Erlene J P 68205.00 2005 68205.00 0 45 5 0 716
|
||||
Koppell, G. Oliver P 20625.00 2005 103125.00 82500.00 11 5 0 459
|
||||
Lanza, Andrew J P 82500.00 2005 82500.00 0 51 5 0 546
|
||||
Lappin, Jessica S P 82500.00 2005 165000.00 82500.00 5 5 0 805
|
||||
Lester, Jack L P 11263.00 2005 93763.00 82500.00 4 5 0 810
|
||||
Liu, John C P 0 2005 0 0 20 5 0
|
||||
Lobo, Renee P 9180.00 2005 91164.00 81984.00 24 5 0 473
|
||||
Lopez, Margarita M P 0 2005 453745.00 453745.00 4 0
|
||||
Luciano, Felipe P 0 2005 81280.00 81280.00 8 5 0 472
|
||||
Luisi, John S P 107736.00 2005 107736.00 0 4 0 857
|
||||
Mahadeo, Robby P 0 2005 0 0 28 5 0 871
|
||||
Manzano, Carlos M P 0 2005 620836.00 620836.00 4 0 206
|
||||
Marcial, Edwin P 0 2005 0 0 8 5 0
|
||||
Mark-Viverito, Melissa P 0 2005 82500.00 82500.00 8 5 0 743
|
||||
Markowitz, Marty K P 0 2005 0 0 4 0 226
|
||||
Marshall, Helen M Q P 0 2005 0 0 4 0
|
||||
Martinez, Israel P 0 2005 0 0 18 5 0
|
||||
Mattera, Gloria K P 199526.00 2005 199526.00 0 4 0 440
|
||||
McMahon, Michael E P 82500.00 2005 82500.00 0 49 5 0 271
|
||||
McManus, Joseph A P 0 2005 82500.00 82500.00 13 5 0 841
|
||||
McNally, Zenobia E P 0 2005 59569.00 59569.00 40 5 0 885
|
||||
Mealy, Darlene P 20625.00 2005 120625.00 100000.00 41 5 0 846
|
||||
Mendez, Rosie P 41250.00 2005 123750.00 82500.00 2 5 0 804
|
||||
Michels, Stanley E M P 0 2005 296716.00 296716.00 4 0
|
||||
Miller, A. Gifford P 0 2005 2462951.00 2462951.00 1 0
|
||||
Miller, David R P 0 2005 0 0 41 5 0
|
||||
Molinaro, James P S P 596660.00 2005 596660.00 0 4 0 419
|
||||
Monserrate, Hiram P 0 2005 82500.00 82500.00 21 5 0 272
|
||||
Montague, Virginia M P 0 2005 82500.00 82500.00 9 5 0
|
||||
Moskowitz, Eva S M P 0 2005 625788.00 625788.00 4 0
|
||||
Muhammad, Naquan A P 0 2005 0 0 41 5 0 803
|
||||
Murphy, Patrick P 82500.00 2005 82500.00 0 4 5 0 855
|
||||
Narine, Dhanpaul P 0 2005 0 0 28 5 0 843
|
||||
Nath, Dilip P 0 2005 78276.00 78276.00 24 5 0 820
|
||||
Nelson, Michael C P 82500.00 2005 82500.00 0 48 5 0 207
|
||||
Nocerino, Joseph R P 0 2005 75042.00 75042.00 29 5 0 837
|
||||
Oddo, James S P 82500.00 2005 82500.00 0 50 5 0 214
|
||||
Ognibene, Thomas V P 0 2005 0 0 1 0
|
||||
Palma, Annabel P 0 2005 0 0 18 5 0 767
|
||||
Papajohn, Christopher J P 0 2005 0 0 2 5 0 866
|
||||
Perkins, Bill M P 0 2005 429913.00 429913.00 4 0
|
||||
Popik, Barry A M P 0 2005 0 0 4 0 887
|
||||
Pu-Folkes, Bryan R P 0 2005 82500.00 82500.00 25 5 0 823
|
||||
Quart, Dan P 0 2005 82500.00 82500.00 5 5 0 710
|
||||
Quinn, Christine C P 0 2005 0 0 3 5 0 204
|
||||
Rahman, Masud M P 31339.00 2005 31339.00 0 25 5 0 881
|
||||
Rasiej, Andrew C P 0 2005 785249.00 785249.00 2 0 882
|
||||
Recchia, Domenic P 82500.00 2005 82500.00 0 47 5 0
|
||||
Reyna, Diana P 17300.00 2005 87920.00 70620.00 34 5 0 452
|
||||
Rivera, George P 0 2005 75875.00 75875.00 34 5 0 869
|
||||
Rivera, Joel P 0 2005 0 0 15 5 0 361
|
||||
Rodriguez, Edward P 0 2005 82500.00 82500.00 38 5 0 714
|
||||
Rosario, Antonio P 30860.00 2005 30860.00 0 14 5 0 875
|
||||
Roth, Michael P 20392.00 2005 20392.00 0 48 5 0 819
|
||||
Ruiz, John P 0 2005 76556.00 76556.00 8 5 0 842
|
||||
Russo, Pasqualino P 82100.00 2005 82100.00 0 43 5 0 758
|
||||
Samad, Maryam A P 0 2005 0 0 41 5 0 863
|
||||
Schlanger, Craig P 20248.00 2005 20248.00 0 51 5 0 1003
|
||||
Seabrook, Larry B P 71000.00 2005 71000.00 0 12 5 0
|
||||
Sears, Helen P 20832.00 2005 103332.00 82500.00 25 5 0
|
||||
Sementilli, Egidio J P 0 2005 0 0 13 5 0
|
||||
Sica, Philip T Q P 0 2005 0 0 4 0 557
|
||||
Siegel, Norman H P 0 2005 729052.00 729052.00 2 0 310
|
||||
Sklar, Robyn L P 33252.00 2005 33252.00 0 26 5 0 868
|
||||
Spitz, George N P 0 2005 33376.00 33376.00 5 5 0
|
||||
Stewart, Kendall B P 0 2005 82500.00 82500.00 45 5 0
|
||||
Stringer, Scott M M P 0 2005 708950.00 708950.00 4 0 148
|
||||
Taitt, Samuel A P 0 2005 82500.00 82500.00 45 5 0 490
|
||||
Tapper, Marlene J P 0 2005 82500.00 82500.00 21 5 0 861
|
||||
Thompson, Jr., William C P 0 2005 0 0 3 0 260
|
||||
Tsabar, Gur J P 0 2005 82500.00 82500.00 2 5 0 807
|
||||
Vacca, James P 82500.00 2005 165000.00 82500.00 13 5 0 821
|
||||
Vallone, Jr., Peter F P 0 2005 0 0 22 5 0 240
|
||||
Vann, Albert P 0 2005 15200.00 15200.00 36 5 0 202
|
||||
Vazquez-Hernandez, Viviana P 22780.00 2005 22780.00 0 38 5 0 1001
|
||||
Velazquez Bennett, Yvette P 0 2005 0 0 39 5 0 903
|
||||
Weiner, Anthony D P 0 2005 1734228.00 1734228.00 1 0
|
||||
Weir, Elias J P 0 2005 0 0 46 5 0 551
|
||||
Weprin, David I P 0 2005 0 0 23 5 0 232
|
||||
White, Jr., Thomas P 5294.00 2005 87794.00 82500.00 28 5 0
|
||||
Whitehead, John C P 0 2005 0 0 42 5 0 802
|
||||
Wright, Keith M P 0 2005 173090.00 173090.00 4 0 828
|
||||
Yablon, Joshua P 38816.00 2005 38816.00 0 6 5 0 729
|
||||
Yassky, David P 0 2005 0 0 33 5 0 280
|
||||
Zinberg, Joel M P 82500.00 2005 82500.00 0 5 5 0 858
|
|
|
@ -0,0 +1,227 @@
|
|||
yearly_percent_change total_self_reported month year monthly_percent_change total_job_placements new_hires
|
||||
22.30 2208 1 1995 -1.20
|
||||
26.00 1913 2 1995 -13.40
|
||||
25.00 3109 3 1995 62.50
|
||||
"-31.90" 1443 4 1995 -53.60
|
||||
130.80 3303 5 1995 128.90
|
||||
85.10 2462 6 1995 -25.50
|
||||
26.00 2013 7 1995 -18.20
|
||||
81.40 4114 8 1995 104.40
|
||||
150.50 4081 9 1995 -0.80
|
||||
29.30 2420 10 1995 -40.70
|
||||
53.10 1731 11 1995 -28.50
|
||||
"-9.80" 2016 12 1995 16.50
|
||||
"-29.80" 1549 1 1996 -23.20
|
||||
32.30 2530 2 1996 63.30
|
||||
19.50 3714 3 1996 46.80
|
||||
65.50 2388 4 1996 -35.70
|
||||
"-8.30" 3028 5 1996 26.80
|
||||
129.60 5652 6 1996 86.70
|
||||
33.00 2678 7 1996 -52.60
|
||||
"-47.50" 2158 8 1996 -19.40
|
||||
"-46.80" 2171 9 1996 0.60
|
||||
36.70 3307 10 1996 52.30
|
||||
103.20 3518 11 1996 6.40
|
||||
89.30 3817 12 1996 8.50
|
||||
101.20 3116 1 1997 -18.40
|
||||
8.70 2750 2 1997 -11.70
|
||||
"-1.10" 3672 3 1997 33.50
|
||||
58.20 3779 4 1997 2.90
|
||||
41.30 4279 5 1997 13.20
|
||||
"-32.40" 3821 6 1997 -10.70
|
||||
56.60 4194 7 1997 9.80
|
||||
59.70 3447 8 1997 -17.80
|
||||
81.80 3946 9 1997 14.50
|
||||
43.60 4748 10 1997 20.30
|
||||
6.40 3743 11 1997 -21.20
|
||||
20.70 4606 12 1997 23.10
|
||||
18.70 3699 1 1998 -19.70
|
||||
22.50 3368 2 1998 -8.90
|
||||
6.60 3914 3 1998 16.20
|
||||
"-5.90" 3557 4 1998 -9.10
|
||||
"-22.90" 3300 5 1998 -7.20
|
||||
7.70 4116 6 1998 24.70
|
||||
"-18.30" 3427 7 1998 -16.70
|
||||
60.70 5539 8 1998 61.60
|
||||
4.80 4136 9 1998 -25.30
|
||||
"-27.20" 3457 10 1998 -16.40
|
||||
"-8.50" 3425 11 1998 -0.90
|
||||
18.90 5475 12 1998 59.90
|
||||
2.70 3799 1 1999 -30.60
|
||||
27.80 4303 2 1999 13.30
|
||||
"-2.20" 3826 3 1999 -11.10
|
||||
"-0.90" 3525 4 1999 -7.90
|
||||
22.80 4051 5 1999 14.90
|
||||
"-18.50" 3353 6 1999 -17.20
|
||||
19.30 4087 7 1999 21.90
|
||||
"-25.50" 4126 8 1999 1.00
|
||||
"-14.60" 3531 9 1999 -14.40
|
||||
"-9.30" 3134 10 1999 -11.20
|
||||
9.30 3744 11 1999 19.50
|
||||
"-27.60" 3965 12 1999 5.90
|
||||
58.80 6031 1 2000 52.10 10256 4225
|
||||
"-18.00" 3528 2 2000 -41.50 7753 4225
|
||||
11.50 4266 3 2000 20.90 8491 4225
|
||||
29.40 4563 4 2000 7.00 8788 4225
|
||||
12.10 4543 5 2000 -0.40 8768 4225
|
||||
81.80 6096 6 2000 34.20 10321 4225
|
||||
13.40 4634 7 2000 -24.00 8859 4225
|
||||
52.40 6290 8 2000 35.70 10515 4225
|
||||
28.40 4535 9 2000 -27.90 8760 4225
|
||||
97.80 6199 10 2000 36.70 10424 4225
|
||||
94.60 7286 11 2000 17.50 11511 4225
|
||||
92.90 7648 12 2000 5.00 11873 4225
|
||||
"-10.30" 5408 1 2001 -29.30 6804 1396
|
||||
75.30 6184 2 2001 14.30 8316 2132
|
||||
44.70 6174 3 2001 -0.20 7183 1009
|
||||
10.70 5049 4 2001 -18.20 8085 3036
|
||||
1.10 4595 5 2001 -9.00 7951 3356
|
||||
7.50 6551 6 2001 42.60 10057 3506
|
||||
15.30 5344 7 2001 -18.40 10642 5298
|
||||
0.30 6312 8 2001 18.10 10997 4685
|
||||
"-17.20" 3756 9 2001 -40.50 8238 4482
|
||||
"-24.20" 4698 10 2001 25.10 11056 6358
|
||||
"-10.00" 6556 11 2001 39.50 10848 4292
|
||||
"-3.40" 7387 12 2001 12.70 10084 2697
|
||||
27.10 7609 1 2002 -14.20 8651 1042
|
||||
"-6.70" 6273 2 2002 -10.30 7759 1486
|
||||
1.10 4957 3 2002 -6.40 7264 2307
|
||||
"-15.30" 4576 4 2002 -5.70 6852 2276
|
||||
17.10 6120 5 2002 35.90 9312 3192
|
||||
"-19.50" 4642 6 2002 -13.00 8100 3458
|
||||
"-4.20" 5838 7 2002 25.90 10199 4361
|
||||
"-16.40" 4984 8 2002 -9.90 9189 4205
|
||||
0.60 3771 9 2002 -9.80 8285 4514
|
||||
"-25.90" 5333 10 2002 -1.20 8189 2856
|
||||
"-12.10" 4770 11 2002 16.40 9532 4762
|
||||
"-21.90" 5842 12 2002 -17.30 7880 2038
|
||||
"-32.10" 4757 1 2003 -25.40 5875 1118
|
||||
"-38.40" 3970 2 2003 -18.70 4778 808
|
||||
"-42.80" 3301 3 2003 -13.00 4156 855
|
||||
"-0.90" 5741 4 2003 63.40 6790 1049
|
||||
"-46.40" 3858 5 2003 -26.60 4987 1129
|
||||
"-42.00" 3656 6 2003 -5.80 4700 1044
|
||||
"-41.60" 4914 7 2003 26.70 5957 1043
|
||||
"-38.70" 4630 8 2003 -5.40 5635 1005
|
||||
"-32.20" 4760 9 2003 -0.30 5620 860
|
||||
2.70 6573 10 2003 49.60 8408 1835
|
||||
"-36.70" 4450 11 2003 -28.20 6033 1583
|
||||
"-5.20" 6790 12 2003 23.80 7471 681
|
||||
4.30 5000 1 2004 -18.00 6129 1129
|
||||
12.20 4823 2 2004 -12.50 5361 538
|
||||
73.50 6304 3 2004 34.50 7212 908
|
||||
"-5.60" 5309 4 2004 -11.10 6409 1100
|
||||
33.20 5009 5 2004 3.60 6641 1632
|
||||
61.90 6397 6 2004 14.60 7611 1214
|
||||
26.80 5461 7 2004 -0.70 7554 2093
|
||||
23.40 5233 8 2004 -8.00 6951 1718
|
||||
43.10 6725 9 2004 15.70 8043 1318
|
||||
"-5.90" 5927 10 2004 -1.60 7912 1985
|
||||
9.80 5430 11 2004 -16.20 6627 1197
|
||||
29.90 8232 12 2004 46.40 9703 1471
|
||||
"-29.90" 3367 1 2005 -55.70 4295 928
|
||||
19.40 5254 2 2005 49.00 6400 1146
|
||||
9.90 6456 3 2005 23.80 7923 1467
|
||||
13.20 5864 4 2005 -8.40 7256 1392
|
||||
6.30 5391 5 2005 -2.70 7062 1671
|
||||
17.30 7702 6 2005 26.40 8928 1226
|
||||
"-6.60" 5412 7 2005 -21.00 7055 1643
|
||||
20.70 6058 8 2005 18.90 8390 2332
|
||||
"-22.00" 4166 9 2005 -25.20 6272 2106
|
||||
"-12.80" 5887 10 2005 10.00 6902 1015
|
||||
7.50 5367 11 2005 3.20 7121 1754
|
||||
"-26.60" 6163 12 2005 0.00 7124 961
|
||||
"-9.20" 2288 1 2006 -45.30 3898 1610
|
||||
"-8.70" 4525 2 2006 49.90 5845 1320
|
||||
"-9.80" 5353 3 2006 22.30 7148 1795
|
||||
"-19.50" 4560 4 2006 -18.30 5839 1279
|
||||
13.00 6108 5 2006 36.70 7980 1872
|
||||
"-22.70" 4800 6 2006 -13.50 6903 2103
|
||||
"-10.10" 4319 7 2006 -8.20 6340 2021
|
||||
"-4.10" 5593 8 2006 26.90 8043 2450
|
||||
"-5.40" 3788 9 2006 -26.20 5935 2147
|
||||
"-4.70" 4297 10 2006 10.90 6581 2284
|
||||
"-4.30" 4692 11 2006 3.60 6815 2123
|
||||
"-13.60" 5240 12 2006 -9.70 6155 915
|
||||
43.80 4108 1 2007 -8.90 5605 1497
|
||||
"-5.20" 3959 2 2007 -1.20 5539 1580
|
||||
"-27.10" 3624 3 2007 -6.00 5209 1585
|
||||
"-9.80" 3591 4 2007 1.10 5268 1677
|
||||
"-23.40" 3743 5 2007 16.10 6115 2372
|
||||
5.40 5098 6 2007 19.00 7274 2176
|
||||
"-0.30" 3877 7 2007 -13.10 6322 2445
|
||||
"-6.40" 4671 8 2007 19.10 7530 2859
|
||||
"-5.20" 3354 9 2007 -25.30 5624 2270
|
||||
8.60 4967 10 2007 27.10 7146 2179
|
||||
"-22.70" 2946 11 2007 -26.30 5268 2322
|
||||
73.30 9073 12 2007 102.50 10668 1595
|
||||
"-10.00" 3450 1 2008 -52.70 5045 1595
|
||||
1.20 3845 2 2008 11.10 5606 1761
|
||||
19.90 4501 3 2008 11.40 6247 1746
|
||||
54.40 5738 4 2008 30.20 8132 2394
|
||||
3.30 5103 5 2008 -22.30 6318 1215
|
||||
"-13.50" 4636 6 2008 -0.40 6294 1658
|
||||
32.80 5839 7 2008 33.40 8395 2556
|
||||
"-9.40" 4076 8 2008 -18.80 6820 2744
|
||||
11.60 4308 9 2008 -7.90 6279 1971
|
||||
12.20 5519 10 2008 27.60 8015 2496
|
||||
5.20 3673 11 2008 -30.80 5543 1870
|
||||
"-26.30" 5806 12 2008 41.90 7865 2059
|
||||
"-8.70" 3215 1 2009 -41.40 4607 1392
|
||||
3.80 4491 2 2009 26.30 5819 1328
|
||||
"-6.10" 4465 3 2009 0.80 5865 1400
|
||||
"-5.50" 5963 4 2009 31.10 7688 1725
|
||||
"-0.60" 4481 5 2009 -18.30 6278 1797
|
||||
"-12.40" 4213 6 2009 -12.20 5515 1302
|
||||
"-2.70" 5437 7 2009 48.10 8169 2732
|
||||
"-16.70" 4133 8 2009 -30.40 5682 1549
|
||||
11.70 5284 9 2009 23.50 7016 1732
|
||||
"-21.10" 4201 10 2009 -9.80 6327 2126
|
||||
"-3.60" 3731 11 2009 -15.50 5345 1614
|
||||
"-9.90" 6223 12 2009 32.60 7087 864
|
||||
0.70 3499 1 2010 -34.50 4639 1140
|
||||
"-6.30" 4329 2 2010 17.60 5455 1126
|
||||
19.90 5770 3 2010 28.90 7034 1264
|
||||
"-19.00" 4426 4 2010 -11.40 6231 1805
|
||||
"-3.60" 4735 5 2010 -2.90 6049 1314
|
||||
40.00 6027 6 2010 27.70 7723 1696
|
||||
"-28.20" 3977 7 2010 -24.00 5869 1892
|
||||
18.50 4419 8 2010 14.80 6735 2316
|
||||
3.50 5470 9 2010 7.80 7263 1793
|
||||
"-6.70" 3994 10 2010 -18.70 5906 1912
|
||||
"-1.60" 3598 11 2010 -11.00 5259 1661
|
||||
2.60 5786 12 2010 38.20 7270 1484
|
||||
"-3.50" 3335 1 2011 -38.40 4475 1140
|
||||
8.20 4750 2 2011 31.90 5904 1154
|
||||
11.30 6319 3 2011 32.70 7832 1513
|
||||
24.40 6088 4 2011 -1.00 7753 1665
|
||||
"-28.60" 2534 5 2011 -44.30 4319 1785
|
||||
"-2.30" 5889 6 2011 74.80 7548 1659
|
||||
11.10 4361 7 2011 -13.60 6519 2158
|
||||
3.50 4666 8 2011 7.00 6974 2308
|
||||
6.90 5586 9 2011 11.30 7764 2178
|
||||
"-12.50" 3680 10 2011 -33.50 5165 1485
|
||||
80.50 8221 11 2011 83.80 9493 1272
|
||||
"-14.00" 4981 12 2011 -34.10 6253 1272
|
||||
2.40 3310 1 2012 -26.70 4583 1273
|
||||
4.20 4878 2 2012 34.20 6152 1274
|
||||
"-25.00" 4602 3 2012 -4.50 5877 1275
|
||||
"-17.90" 5092 4 2012 8.40 6368 1276
|
||||
31.50 4404 5 2012 -10.80 5681 1277
|
||||
"-1.50" 6155 6 2012 30.80 7433 1278
|
||||
"-34.80" 2970 7 2012 -42.80 4249 1279
|
||||
27.50 7610 8 2012 109.20 8890 1280
|
||||
9.20 7198 9 2012 -4.60 8479 1281
|
||||
37.30 5809 10 2012 -16.40 7091 1282
|
||||
"-47.40" 3712 11 2012 -29.60 4995 1283
|
||||
27.60 12 2012 59.70 7979
|
||||
4.00 1 2013 -40.30 4766
|
||||
"-15.40" 2 2013 9.20 5205
|
||||
2.10 3 2013 15.30 6003
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
||||
""
|
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- This web.xml file is not required when using Servlet 3.0 container,
|
||||
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
|
||||
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
|
||||
<servlet>
|
||||
<servlet-name>Vizir Database API</servlet-name>
|
||||
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
|
||||
<init-param>
|
||||
<param-name>jersey.config.server.provider.packages</param-name>
|
||||
<param-value>org.vizirdb.server</param-value>
|
||||
</init-param>
|
||||
<init-param>
|
||||
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>Vizir Database API</servlet-name>
|
||||
<url-pattern>/api/v1/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
</web-app>
|
|
@ -0,0 +1,587 @@
|
|||
/*!
|
||||
* Bootstrap v3.3.6 (http://getbootstrap.com)
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
.btn-default,
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-info,
|
||||
.btn-warning,
|
||||
.btn-danger {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-primary:active,
|
||||
.btn-success:active,
|
||||
.btn-info:active,
|
||||
.btn-warning:active,
|
||||
.btn-danger:active,
|
||||
.btn-default.active,
|
||||
.btn-primary.active,
|
||||
.btn-success.active,
|
||||
.btn-info.active,
|
||||
.btn-warning.active,
|
||||
.btn-danger.active {
|
||||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-primary.disabled,
|
||||
.btn-success.disabled,
|
||||
.btn-info.disabled,
|
||||
.btn-warning.disabled,
|
||||
.btn-danger.disabled,
|
||||
.btn-default[disabled],
|
||||
.btn-primary[disabled],
|
||||
.btn-success[disabled],
|
||||
.btn-info[disabled],
|
||||
.btn-warning[disabled],
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
fieldset[disabled] .btn-primary,
|
||||
fieldset[disabled] .btn-success,
|
||||
fieldset[disabled] .btn-info,
|
||||
fieldset[disabled] .btn-warning,
|
||||
fieldset[disabled] .btn-danger {
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-default .badge,
|
||||
.btn-primary .badge,
|
||||
.btn-success .badge,
|
||||
.btn-info .badge,
|
||||
.btn-warning .badge,
|
||||
.btn-danger .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.btn:active,
|
||||
.btn.active {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-default {
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dbdbdb;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.btn-default:hover,
|
||||
.btn-default:focus {
|
||||
background-color: #e0e0e0;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
border-color: #dbdbdb;
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-default[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default[disabled]:hover,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default[disabled]:focus,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default[disabled].focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default[disabled]:active,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-primary {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary:hover,
|
||||
.btn-primary:focus {
|
||||
background-color: #265a88;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-primary:active,
|
||||
.btn-primary.active {
|
||||
background-color: #265a88;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary.disabled,
|
||||
.btn-primary[disabled],
|
||||
fieldset[disabled] .btn-primary,
|
||||
.btn-primary.disabled:hover,
|
||||
.btn-primary[disabled]:hover,
|
||||
fieldset[disabled] .btn-primary:hover,
|
||||
.btn-primary.disabled:focus,
|
||||
.btn-primary[disabled]:focus,
|
||||
fieldset[disabled] .btn-primary:focus,
|
||||
.btn-primary.disabled.focus,
|
||||
.btn-primary[disabled].focus,
|
||||
fieldset[disabled] .btn-primary.focus,
|
||||
.btn-primary.disabled:active,
|
||||
.btn-primary[disabled]:active,
|
||||
fieldset[disabled] .btn-primary:active,
|
||||
.btn-primary.disabled.active,
|
||||
.btn-primary[disabled].active,
|
||||
fieldset[disabled] .btn-primary.active {
|
||||
background-color: #265a88;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success:hover,
|
||||
.btn-success:focus {
|
||||
background-color: #419641;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-success:active,
|
||||
.btn-success.active {
|
||||
background-color: #419641;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success.disabled,
|
||||
.btn-success[disabled],
|
||||
fieldset[disabled] .btn-success,
|
||||
.btn-success.disabled:hover,
|
||||
.btn-success[disabled]:hover,
|
||||
fieldset[disabled] .btn-success:hover,
|
||||
.btn-success.disabled:focus,
|
||||
.btn-success[disabled]:focus,
|
||||
fieldset[disabled] .btn-success:focus,
|
||||
.btn-success.disabled.focus,
|
||||
.btn-success[disabled].focus,
|
||||
fieldset[disabled] .btn-success.focus,
|
||||
.btn-success.disabled:active,
|
||||
.btn-success[disabled]:active,
|
||||
fieldset[disabled] .btn-success:active,
|
||||
.btn-success.disabled.active,
|
||||
.btn-success[disabled].active,
|
||||
fieldset[disabled] .btn-success.active {
|
||||
background-color: #419641;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info:hover,
|
||||
.btn-info:focus {
|
||||
background-color: #2aabd2;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-info:active,
|
||||
.btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info.disabled,
|
||||
.btn-info[disabled],
|
||||
fieldset[disabled] .btn-info,
|
||||
.btn-info.disabled:hover,
|
||||
.btn-info[disabled]:hover,
|
||||
fieldset[disabled] .btn-info:hover,
|
||||
.btn-info.disabled:focus,
|
||||
.btn-info[disabled]:focus,
|
||||
fieldset[disabled] .btn-info:focus,
|
||||
.btn-info.disabled.focus,
|
||||
.btn-info[disabled].focus,
|
||||
fieldset[disabled] .btn-info.focus,
|
||||
.btn-info.disabled:active,
|
||||
.btn-info[disabled]:active,
|
||||
fieldset[disabled] .btn-info:active,
|
||||
.btn-info.disabled.active,
|
||||
.btn-info[disabled].active,
|
||||
fieldset[disabled] .btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning:hover,
|
||||
.btn-warning:focus {
|
||||
background-color: #eb9316;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-warning:active,
|
||||
.btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning.disabled,
|
||||
.btn-warning[disabled],
|
||||
fieldset[disabled] .btn-warning,
|
||||
.btn-warning.disabled:hover,
|
||||
.btn-warning[disabled]:hover,
|
||||
fieldset[disabled] .btn-warning:hover,
|
||||
.btn-warning.disabled:focus,
|
||||
.btn-warning[disabled]:focus,
|
||||
fieldset[disabled] .btn-warning:focus,
|
||||
.btn-warning.disabled.focus,
|
||||
.btn-warning[disabled].focus,
|
||||
fieldset[disabled] .btn-warning.focus,
|
||||
.btn-warning.disabled:active,
|
||||
.btn-warning[disabled]:active,
|
||||
fieldset[disabled] .btn-warning:active,
|
||||
.btn-warning.disabled.active,
|
||||
.btn-warning[disabled].active,
|
||||
fieldset[disabled] .btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger:hover,
|
||||
.btn-danger:focus {
|
||||
background-color: #c12e2a;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-danger:active,
|
||||
.btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger.disabled,
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-danger,
|
||||
.btn-danger.disabled:hover,
|
||||
.btn-danger[disabled]:hover,
|
||||
fieldset[disabled] .btn-danger:hover,
|
||||
.btn-danger.disabled:focus,
|
||||
.btn-danger[disabled]:focus,
|
||||
fieldset[disabled] .btn-danger:focus,
|
||||
.btn-danger.disabled.focus,
|
||||
.btn-danger[disabled].focus,
|
||||
fieldset[disabled] .btn-danger.focus,
|
||||
.btn-danger.disabled:active,
|
||||
.btn-danger[disabled]:active,
|
||||
fieldset[disabled] .btn-danger:active,
|
||||
.btn-danger.disabled.active,
|
||||
.btn-danger[disabled].active,
|
||||
fieldset[disabled] .btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
background-image: none;
|
||||
}
|
||||
.thumbnail,
|
||||
.img-thumbnail {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
background-color: #e8e8e8;
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
background-color: #2e6da4;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.navbar-default {
|
||||
background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
||||
background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.navbar-default .navbar-nav > .open > a,
|
||||
.navbar-default .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
|
||||
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
|
||||
}
|
||||
.navbar-inverse {
|
||||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
||||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.navbar-inverse .navbar-nav > .open > a,
|
||||
.navbar-inverse .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
|
||||
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
|
||||
}
|
||||
.navbar-inverse .navbar-brand,
|
||||
.navbar-inverse .navbar-nav > li > a {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
|
||||
}
|
||||
.navbar-static-top,
|
||||
.navbar-fixed-top,
|
||||
.navbar-fixed-bottom {
|
||||
border-radius: 0;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
|
||||
color: #fff;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
}
|
||||
.alert {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
|
||||
}
|
||||
.alert-success {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b2dba1;
|
||||
}
|
||||
.alert-info {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #9acfea;
|
||||
}
|
||||
.alert-warning {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #f5e79e;
|
||||
}
|
||||
.alert-danger {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dca7a7;
|
||||
}
|
||||
.progress {
|
||||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-striped {
|
||||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
|
||||
}
|
||||
.list-group {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.list-group-item.active,
|
||||
.list-group-item.active:hover,
|
||||
.list-group-item.active:focus {
|
||||
text-shadow: 0 -1px 0 #286090;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #2b669a;
|
||||
}
|
||||
.list-group-item.active .badge,
|
||||
.list-group-item.active:hover .badge,
|
||||
.list-group-item.active:focus .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.panel {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
|
||||
}
|
||||
.panel-default > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-primary > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-success > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-info > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-warning > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-danger > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.well {
|
||||
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dcdcdc;
|
||||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-theme.css.map */
|
|
@ -0,0 +1,15 @@
|
|||
/*!
|
||||
* IE10 viewport hack for Surface/desktop Windows 8 bug
|
||||
* Copyright 2014-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
/*
|
||||
* See the Getting Started docs for more information:
|
||||
* http://getbootstrap.com/getting-started/#support-ie10-width
|
||||
*/
|
||||
@-webkit-viewport { width: device-width; }
|
||||
@-moz-viewport { width: device-width; }
|
||||
@-ms-viewport { width: device-width; }
|
||||
@-o-viewport { width: device-width; }
|
||||
@viewport { width: device-width; }
|
|
@ -0,0 +1,21 @@
|
|||
body {
|
||||
padding-top: 70px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
span.cmd-txt {
|
||||
font-weight: bold;
|
||||
}
|
||||
span.cmd-para {
|
||||
color: #1C09E6;
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
top: -5px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
div.panel-form {
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */
|
||||
html,
|
||||
body,
|
||||
div,
|
||||
span,
|
||||
applet,
|
||||
object,
|
||||
iframe,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
blockquote,
|
||||
pre,
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
big,
|
||||
cite,
|
||||
code,
|
||||
del,
|
||||
dfn,
|
||||
em,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
q,
|
||||
s,
|
||||
samp,
|
||||
small,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
sup,
|
||||
tt,
|
||||
var,
|
||||
b,
|
||||
u,
|
||||
i,
|
||||
center,
|
||||
dl,
|
||||
dt,
|
||||
dd,
|
||||
ol,
|
||||
ul,
|
||||
li,
|
||||
fieldset,
|
||||
form,
|
||||
label,
|
||||
legend,
|
||||
table,
|
||||
caption,
|
||||
tbody,
|
||||
tfoot,
|
||||
thead,
|
||||
tr,
|
||||
th,
|
||||
td,
|
||||
article,
|
||||
aside,
|
||||
canvas,
|
||||
details,
|
||||
embed,
|
||||
figure,
|
||||
figcaption,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
output,
|
||||
ruby,
|
||||
section,
|
||||
summary,
|
||||
time,
|
||||
mark,
|
||||
audio,
|
||||
video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol,
|
||||
ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote,
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before,
|
||||
blockquote:after,
|
||||
q:before,
|
||||
q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
|
@ -0,0 +1,250 @@
|
|||
.swagger-section #header a#logo {
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
background: transparent url(../images/logo.png) no-repeat left center;
|
||||
padding: 20px 0 20px 40px;
|
||||
}
|
||||
#text-head {
|
||||
font-size: 80px;
|
||||
font-family: 'Roboto', sans-serif;
|
||||
color: #ffffff;
|
||||
float: right;
|
||||
margin-right: 20%;
|
||||
}
|
||||
.navbar-fixed-top .navbar-nav {
|
||||
height: auto;
|
||||
}
|
||||
.navbar-fixed-top .navbar-brand {
|
||||
height: auto;
|
||||
}
|
||||
.navbar-header {
|
||||
height: auto;
|
||||
}
|
||||
.navbar-inverse {
|
||||
background-color: #000;
|
||||
border-color: #000;
|
||||
}
|
||||
#navbar-brand {
|
||||
margin-left: 20%;
|
||||
}
|
||||
.navtext {
|
||||
font-size: 10px;
|
||||
}
|
||||
.h1,
|
||||
h1 {
|
||||
font-size: 60px;
|
||||
}
|
||||
.navbar-default .navbar-header .navbar-brand {
|
||||
color: #a2dfee;
|
||||
}
|
||||
/* tag titles */
|
||||
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a {
|
||||
color: #393939;
|
||||
font-family: 'Arvo', serif;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover {
|
||||
color: black;
|
||||
}
|
||||
.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 {
|
||||
color: #525252;
|
||||
padding-left: 0px;
|
||||
display: block;
|
||||
clear: none;
|
||||
float: left;
|
||||
font-family: 'Arvo', serif;
|
||||
font-weight: bold;
|
||||
}
|
||||
.navbar-default .navbar-collapse,
|
||||
.navbar-default .navbar-form {
|
||||
border-color: #0A0A0A;
|
||||
}
|
||||
.container1 {
|
||||
width: 1500px;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
background-image: url('../images/shield.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: -40px -20px;
|
||||
margin-bottom: 210px;
|
||||
}
|
||||
.container-inner {
|
||||
width: 1200px;
|
||||
margin: auto;
|
||||
background-color: rgba(223, 227, 228, 0.75);
|
||||
padding-bottom: 40px;
|
||||
padding-top: 40px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.header-content {
|
||||
padding: 0;
|
||||
width: 1000px;
|
||||
}
|
||||
.title1 {
|
||||
font-size: 80px;
|
||||
font-family: 'Vollkorn', serif;
|
||||
color: #404040;
|
||||
text-align: center;
|
||||
padding-top: 40px;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
#icon {
|
||||
margin-top: -18px;
|
||||
}
|
||||
.subtext {
|
||||
font-size: 25px;
|
||||
font-style: italic;
|
||||
color: #08b;
|
||||
text-align: right;
|
||||
padding-right: 250px;
|
||||
}
|
||||
.bg-primary {
|
||||
background-color: #00468b;
|
||||
}
|
||||
.navbar-default .nav > li > a,
|
||||
.navbar-default .nav > li > a:focus {
|
||||
color: #08b;
|
||||
}
|
||||
.navbar-default .nav > li > a,
|
||||
.navbar-default .nav > li > a:hover {
|
||||
color: #08b;
|
||||
}
|
||||
.navbar-default .nav > li > a,
|
||||
.navbar-default .nav > li > a:focus:hover {
|
||||
color: #08b;
|
||||
}
|
||||
.text-faded {
|
||||
font-size: 25px;
|
||||
font-family: 'Vollkorn', serif;
|
||||
}
|
||||
.section-heading {
|
||||
font-family: 'Vollkorn', serif;
|
||||
font-size: 45px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
hr {
|
||||
border-color: #00468b;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.description {
|
||||
margin-top: 20px;
|
||||
padding-bottom: 200px;
|
||||
}
|
||||
.description li {
|
||||
font-family: 'Vollkorn', serif;
|
||||
font-size: 25px;
|
||||
color: #525252;
|
||||
margin-left: 28%;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.gap {
|
||||
margin-top: 200px;
|
||||
}
|
||||
.troubleshootingtext {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
padding-left: 30%;
|
||||
}
|
||||
.troubleshootingtext li {
|
||||
list-style-type: circle;
|
||||
font-size: 25px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
.block.response_body.json:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
.backdrop {
|
||||
color: blue;
|
||||
}
|
||||
#myModal {
|
||||
height: 100%;
|
||||
}
|
||||
.modal-backdrop {
|
||||
bottom: 0;
|
||||
position: fixed;
|
||||
}
|
||||
.curl {
|
||||
padding: 10px;
|
||||
font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace;
|
||||
font-size: 0.9em;
|
||||
max-height: 400px;
|
||||
margin-top: 5px;
|
||||
overflow-y: auto;
|
||||
background-color: #fcf6db;
|
||||
border: 1px solid #e5e0c6;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.curl_title {
|
||||
font-size: 1.1em;
|
||||
margin: 0;
|
||||
padding: 15px 0 5px;
|
||||
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
|
||||
font-weight: 500;
|
||||
line-height: 1.1;
|
||||
}
|
||||
.footer {
|
||||
display: none;
|
||||
}
|
||||
.swagger-section .swagger-ui-wrap h2 {
|
||||
padding: 0;
|
||||
}
|
||||
h2 {
|
||||
margin: 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.markdown p {
|
||||
font-size: 15px;
|
||||
font-family: 'Arvo', serif;
|
||||
}
|
||||
.swagger-section .swagger-ui-wrap .code {
|
||||
font-size: 15px;
|
||||
font-family: 'Arvo', serif;
|
||||
}
|
||||
.swagger-section .swagger-ui-wrap b {
|
||||
font-family: 'Arvo', serif;
|
||||
}
|
||||
#signin:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropdown-menu {
|
||||
padding: 15px;
|
||||
}
|
||||
.navbar-right .dropdown-menu {
|
||||
left: 0;
|
||||
right: auto;
|
||||
}
|
||||
#signinbutton {
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
color: #08b;
|
||||
}
|
||||
.navbar-default .nav > li .details {
|
||||
color: #000000;
|
||||
text-transform: none;
|
||||
font-size: 15px;
|
||||
font-weight: normal;
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
font-style: italic;
|
||||
line-height: 20px;
|
||||
top: -2px;
|
||||
}
|
||||
.navbar-default .nav > li .details:hover {
|
||||
color: black;
|
||||
}
|
||||
#signout {
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
color: #08b;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
/* Google Font's Droid Sans */
|
||||
@font-face {
|
||||
font-family: 'Droid Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Droid Sans'), local('DroidSans'), url('../fonts/DroidSans.ttf'), format('truetype');
|
||||
}
|
||||
/* Google Font's Droid Sans Bold */
|
||||
@font-face {
|
||||
font-family: 'Droid Sans';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Droid Sans Bold'), local('DroidSans-Bold'), url('../fonts/DroidSans-Bold.ttf'), format('truetype');
|
||||
}
|
After Width: | Height: | Size: 69 B |
After Width: | Height: | Size: 73 B |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 739 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 739 B |
After Width: | Height: | Size: 770 B |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 9.0 KiB |
After Width: | Height: | Size: 980 B |
|
@ -0,0 +1,102 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Vizir - Database API</title>
|
||||
<link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
|
||||
<link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
|
||||
<link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
|
||||
<link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
|
||||
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
|
||||
<link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
|
||||
<link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
|
||||
|
||||
<script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
|
||||
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
|
||||
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
|
||||
<script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
|
||||
<script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
|
||||
<script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>
|
||||
<script src='lib/js-yaml.min.js' type='text/javascript'></script>
|
||||
<script src='lib/lodash.min.js' type='text/javascript'></script>
|
||||
<script src='lib/backbone-min.js' type='text/javascript'></script>
|
||||
<script src='js/swagger-ui.js' type='text/javascript'></script>
|
||||
<script src='lib/highlight.9.1.0.pack.js' type='text/javascript'></script>
|
||||
<script src='lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script>
|
||||
<script src='lib/jsoneditor.min.js' type='text/javascript'></script>
|
||||
<script src='lib/marked.js' type='text/javascript'></script>
|
||||
<script src='lib/swagger-oauth.js' type='text/javascript'></script>
|
||||
|
||||
<!-- Some basic translations -->
|
||||
<!-- <script src='lang/translator.js' type='text/javascript'></script> -->
|
||||
<!-- <script src='lang/ru.js' type='text/javascript'></script> -->
|
||||
<!-- <script src='lang/en.js' type='text/javascript'></script> -->
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
var url = window.location.search.match(/url=([^&]+)/);
|
||||
if (url && url.length > 1) {
|
||||
url = decodeURIComponent(url[1]);
|
||||
} else {
|
||||
url = "http://vizirdb.7mi5uspdsy.us-west-2.elasticbeanstalk.com/doc/vizir-db.yaml";
|
||||
}
|
||||
|
||||
hljs.configure({
|
||||
highlightSizeThreshold: 5000
|
||||
});
|
||||
|
||||
// Pre load translate...
|
||||
if(window.SwaggerTranslator) {
|
||||
window.SwaggerTranslator.translate();
|
||||
}
|
||||
window.swaggerUi = new SwaggerUi({
|
||||
url: url,
|
||||
dom_id: "swagger-ui-container",
|
||||
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
|
||||
onComplete: function(swaggerApi, swaggerUi){
|
||||
if(typeof initOAuth == "function") {
|
||||
initOAuth({
|
||||
clientId: "your-client-id",
|
||||
clientSecret: "your-client-secret-if-required",
|
||||
realm: "your-realms",
|
||||
appName: "your-app-name",
|
||||
scopeSeparator: ",",
|
||||
additionalQueryStringParams: {}
|
||||
});
|
||||
}
|
||||
|
||||
if(window.SwaggerTranslator) {
|
||||
window.SwaggerTranslator.translate();
|
||||
}
|
||||
},
|
||||
onFailure: function(data) {
|
||||
log("Unable to Load SwaggerUI");
|
||||
},
|
||||
docExpansion: "none",
|
||||
jsonEditor: false,
|
||||
defaultModelRendering: 'schema',
|
||||
showRequestHeaders: false
|
||||
});
|
||||
|
||||
window.swaggerUi.load();
|
||||
|
||||
function log() {
|
||||
if ('console' in window) {
|
||||
console.log.apply(console, arguments);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class="swagger-section">
|
||||
<div id='header'>
|
||||
<div class="swagger-ui-wrap">
|
||||
<a id="logo" href="http://swagger.io"><img class="logo__img" alt="swagger" height="30" width="30" src="images/favicon-32x32.png" /><span class="logo__title">Vizir</span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="message-bar" class="swagger-ui-wrap" data-sw-translate> </div>
|
||||
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,56 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Warning: Deprecated",
|
||||
"Implementation Notes":"Implementation Notes",
|
||||
"Response Class":"Response Class",
|
||||
"Status":"Status",
|
||||
"Parameters":"Parameters",
|
||||
"Parameter":"Parameter",
|
||||
"Value":"Value",
|
||||
"Description":"Description",
|
||||
"Parameter Type":"Parameter Type",
|
||||
"Data Type":"Data Type",
|
||||
"Response Messages":"Response Messages",
|
||||
"HTTP Status Code":"HTTP Status Code",
|
||||
"Reason":"Reason",
|
||||
"Response Model":"Response Model",
|
||||
"Request URL":"Request URL",
|
||||
"Response Body":"Response Body",
|
||||
"Response Code":"Response Code",
|
||||
"Response Headers":"Response Headers",
|
||||
"Hide Response":"Hide Response",
|
||||
"Headers":"Headers",
|
||||
"Try it out!":"Try it out!",
|
||||
"Show/Hide":"Show/Hide",
|
||||
"List Operations":"List Operations",
|
||||
"Expand Operations":"Expand Operations",
|
||||
"Raw":"Raw",
|
||||
"can't parse JSON. Raw result":"can't parse JSON. Raw result",
|
||||
"Example Value":"Example Value",
|
||||
"Model Schema":"Model Schema",
|
||||
"Model":"Model",
|
||||
"Click to set as parameter value":"Click to set as parameter value",
|
||||
"apply":"apply",
|
||||
"Username":"Username",
|
||||
"Password":"Password",
|
||||
"Terms of service":"Terms of service",
|
||||
"Created by":"Created by",
|
||||
"See more at":"See more at",
|
||||
"Contact the developer":"Contact the developer",
|
||||
"api version":"api version",
|
||||
"Response Content Type":"Response Content Type",
|
||||
"Parameter content type:":"Parameter content type:",
|
||||
"fetching resource":"fetching resource",
|
||||
"fetching resource list":"fetching resource list",
|
||||
"Explore":"Explore",
|
||||
"Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.",
|
||||
"Please specify the protocol for":"Please specify the protocol for",
|
||||
"Can't read swagger JSON from":"Can't read swagger JSON from",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI",
|
||||
"Unable to read api":"Unable to read api",
|
||||
"from path":"from path",
|
||||
"server returned":"server returned"
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Advertencia: Obsoleto",
|
||||
"Implementation Notes":"Notas de implementación",
|
||||
"Response Class":"Clase de la Respuesta",
|
||||
"Status":"Status",
|
||||
"Parameters":"Parámetros",
|
||||
"Parameter":"Parámetro",
|
||||
"Value":"Valor",
|
||||
"Description":"Descripción",
|
||||
"Parameter Type":"Tipo del Parámetro",
|
||||
"Data Type":"Tipo del Dato",
|
||||
"Response Messages":"Mensajes de la Respuesta",
|
||||
"HTTP Status Code":"Código de Status HTTP",
|
||||
"Reason":"Razón",
|
||||
"Response Model":"Modelo de la Respuesta",
|
||||
"Request URL":"URL de la Solicitud",
|
||||
"Response Body":"Cuerpo de la Respuesta",
|
||||
"Response Code":"Código de la Respuesta",
|
||||
"Response Headers":"Encabezados de la Respuesta",
|
||||
"Hide Response":"Ocultar Respuesta",
|
||||
"Try it out!":"Pruébalo!",
|
||||
"Show/Hide":"Mostrar/Ocultar",
|
||||
"List Operations":"Listar Operaciones",
|
||||
"Expand Operations":"Expandir Operaciones",
|
||||
"Raw":"Crudo",
|
||||
"can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo",
|
||||
"Example Value":"Valor de Ejemplo",
|
||||
"Model Schema":"Esquema del Modelo",
|
||||
"Model":"Modelo",
|
||||
"apply":"aplicar",
|
||||
"Username":"Nombre de usuario",
|
||||
"Password":"Contraseña",
|
||||
"Terms of service":"Términos de Servicio",
|
||||
"Created by":"Creado por",
|
||||
"See more at":"Ver más en",
|
||||
"Contact the developer":"Contactar al desarrollador",
|
||||
"api version":"versión de la api",
|
||||
"Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta",
|
||||
"fetching resource":"buscando recurso",
|
||||
"fetching resource list":"buscando lista del recurso",
|
||||
"Explore":"Explorar",
|
||||
"Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.",
|
||||
"Please specify the protocol for":"Por favor, especificar el protocola para",
|
||||
"Can't read swagger JSON from":"No se puede leer el JSON de swagger desde",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI",
|
||||
"Unable to read api":"No se puede leer la api",
|
||||
"from path":"desde ruta",
|
||||
"server returned":"el servidor retornó"
|
||||
});
|
|
@ -0,0 +1,54 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Avertissement : Obsolète",
|
||||
"Implementation Notes":"Notes d'implémentation",
|
||||
"Response Class":"Classe de la réponse",
|
||||
"Status":"Statut",
|
||||
"Parameters":"Paramètres",
|
||||
"Parameter":"Paramètre",
|
||||
"Value":"Valeur",
|
||||
"Description":"Description",
|
||||
"Parameter Type":"Type du paramètre",
|
||||
"Data Type":"Type de données",
|
||||
"Response Messages":"Messages de la réponse",
|
||||
"HTTP Status Code":"Code de statut HTTP",
|
||||
"Reason":"Raison",
|
||||
"Response Model":"Modèle de réponse",
|
||||
"Request URL":"URL appelée",
|
||||
"Response Body":"Corps de la réponse",
|
||||
"Response Code":"Code de la réponse",
|
||||
"Response Headers":"En-têtes de la réponse",
|
||||
"Hide Response":"Cacher la réponse",
|
||||
"Headers":"En-têtes",
|
||||
"Try it out!":"Testez !",
|
||||
"Show/Hide":"Afficher/Masquer",
|
||||
"List Operations":"Liste des opérations",
|
||||
"Expand Operations":"Développer les opérations",
|
||||
"Raw":"Brut",
|
||||
"can't parse JSON. Raw result":"impossible de décoder le JSON. Résultat brut",
|
||||
"Example Value":"Exemple la valeur",
|
||||
"Model Schema":"Définition du modèle",
|
||||
"Model":"Modèle",
|
||||
"apply":"appliquer",
|
||||
"Username":"Nom d'utilisateur",
|
||||
"Password":"Mot de passe",
|
||||
"Terms of service":"Conditions de service",
|
||||
"Created by":"Créé par",
|
||||
"See more at":"Voir plus sur",
|
||||
"Contact the developer":"Contacter le développeur",
|
||||
"api version":"version de l'api",
|
||||
"Response Content Type":"Content Type de la réponse",
|
||||
"fetching resource":"récupération de la ressource",
|
||||
"fetching resource list":"récupération de la liste de ressources",
|
||||
"Explore":"Explorer",
|
||||
"Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.",
|
||||
"Please specify the protocol for":"Veuillez spécifier un protocole pour",
|
||||
"Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI",
|
||||
"Unable to read api":"Impossible de lire l'api",
|
||||
"from path":"à partir du chemin",
|
||||
"server returned":"réponse du serveur"
|
||||
});
|
|
@ -0,0 +1,56 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"ყურადღება: აღარ გამოიყენება",
|
||||
"Implementation Notes":"იმპლემენტაციის აღწერა",
|
||||
"Response Class":"რესპონს კლასი",
|
||||
"Status":"სტატუსი",
|
||||
"Parameters":"პარამეტრები",
|
||||
"Parameter":"პარამეტრი",
|
||||
"Value":"მნიშვნელობა",
|
||||
"Description":"აღწერა",
|
||||
"Parameter Type":"პარამეტრის ტიპი",
|
||||
"Data Type":"მონაცემის ტიპი",
|
||||
"Response Messages":"პასუხი",
|
||||
"HTTP Status Code":"HTTP სტატუსი",
|
||||
"Reason":"მიზეზი",
|
||||
"Response Model":"რესპონს მოდელი",
|
||||
"Request URL":"მოთხოვნის URL",
|
||||
"Response Body":"პასუხის სხეული",
|
||||
"Response Code":"პასუხის კოდი",
|
||||
"Response Headers":"პასუხის ჰედერები",
|
||||
"Hide Response":"დამალე პასუხი",
|
||||
"Headers":"ჰედერები",
|
||||
"Try it out!":"ცადე !",
|
||||
"Show/Hide":"გამოჩენა/დამალვა",
|
||||
"List Operations":"ოპერაციების სია",
|
||||
"Expand Operations":"ოპერაციები ვრცლად",
|
||||
"Raw":"ნედლი",
|
||||
"can't parse JSON. Raw result":"JSON-ის დამუშავება ვერ მოხერხდა. ნედლი პასუხი",
|
||||
"Example Value":"მაგალითი",
|
||||
"Model Schema":"მოდელის სტრუქტურა",
|
||||
"Model":"მოდელი",
|
||||
"Click to set as parameter value":"პარამეტრისთვის მნიშვნელობის მისანიჭებლად, დააკლიკე",
|
||||
"apply":"გამოყენება",
|
||||
"Username":"მოხმარებელი",
|
||||
"Password":"პაროლი",
|
||||
"Terms of service":"მომსახურების პირობები",
|
||||
"Created by":"შექმნა",
|
||||
"See more at":"ნახე ვრცლად",
|
||||
"Contact the developer":"დაუკავშირდი დეველოპერს",
|
||||
"api version":"api ვერსია",
|
||||
"Response Content Type":"პასუხის კონტენტის ტიპი",
|
||||
"Parameter content type:":"პარამეტრის კონტენტის ტიპი:",
|
||||
"fetching resource":"რესურსების მიღება",
|
||||
"fetching resource list":"რესურსების სიის მიღება",
|
||||
"Explore":"ნახვა",
|
||||
"Show Swagger Petstore Example Apis":"ნახე Swagger Petstore სამაგალითო Api",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"სერვერთან დაკავშირება ვერ ხერხდება. შეამოწმეთ access-control-origin.",
|
||||
"Please specify the protocol for":"მიუთითეთ პროტოკოლი",
|
||||
"Can't read swagger JSON from":"swagger JSON წაკითხვა ვერ მოხერხდა",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"რესურსების ჩატვირთვა სრულდება. Swagger UI რენდერდება",
|
||||
"Unable to read api":"api წაკითხვა ვერ მოხერხდა",
|
||||
"from path":"მისამართიდან",
|
||||
"server returned":"სერვერმა დააბრუნა"
|
||||
});
|
|
@ -0,0 +1,52 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Attenzione: Deprecato",
|
||||
"Implementation Notes":"Note di implementazione",
|
||||
"Response Class":"Classe della risposta",
|
||||
"Status":"Stato",
|
||||
"Parameters":"Parametri",
|
||||
"Parameter":"Parametro",
|
||||
"Value":"Valore",
|
||||
"Description":"Descrizione",
|
||||
"Parameter Type":"Tipo di parametro",
|
||||
"Data Type":"Tipo di dato",
|
||||
"Response Messages":"Messaggi della risposta",
|
||||
"HTTP Status Code":"Codice stato HTTP",
|
||||
"Reason":"Motivo",
|
||||
"Response Model":"Modello di risposta",
|
||||
"Request URL":"URL della richiesta",
|
||||
"Response Body":"Corpo della risposta",
|
||||
"Response Code":"Oggetto della risposta",
|
||||
"Response Headers":"Intestazioni della risposta",
|
||||
"Hide Response":"Nascondi risposta",
|
||||
"Try it out!":"Provalo!",
|
||||
"Show/Hide":"Mostra/Nascondi",
|
||||
"List Operations":"Mostra operazioni",
|
||||
"Expand Operations":"Espandi operazioni",
|
||||
"Raw":"Grezzo (raw)",
|
||||
"can't parse JSON. Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).",
|
||||
"Model Schema":"Schema del modello",
|
||||
"Model":"Modello",
|
||||
"apply":"applica",
|
||||
"Username":"Nome utente",
|
||||
"Password":"Password",
|
||||
"Terms of service":"Condizioni del servizio",
|
||||
"Created by":"Creato da",
|
||||
"See more at":"Informazioni aggiuntive:",
|
||||
"Contact the developer":"Contatta lo sviluppatore",
|
||||
"api version":"versione api",
|
||||
"Response Content Type":"Tipo di contenuto (content type) della risposta",
|
||||
"fetching resource":"recuperando la risorsa",
|
||||
"fetching resource list":"recuperando lista risorse",
|
||||
"Explore":"Esplora",
|
||||
"Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.",
|
||||
"Please specify the protocol for":"Si prega di specificare il protocollo per",
|
||||
"Can't read swagger JSON from":"Impossibile leggere JSON swagger da:",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata",
|
||||
"Unable to read api":"Impossibile leggere la api",
|
||||
"from path":"da cartella",
|
||||
"server returned":"il server ha restituito"
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"警告: 廃止予定",
|
||||
"Implementation Notes":"実装メモ",
|
||||
"Response Class":"レスポンスクラス",
|
||||
"Status":"ステータス",
|
||||
"Parameters":"パラメータ群",
|
||||
"Parameter":"パラメータ",
|
||||
"Value":"値",
|
||||
"Description":"説明",
|
||||
"Parameter Type":"パラメータタイプ",
|
||||
"Data Type":"データタイプ",
|
||||
"Response Messages":"レスポンスメッセージ",
|
||||
"HTTP Status Code":"HTTPステータスコード",
|
||||
"Reason":"理由",
|
||||
"Response Model":"レスポンスモデル",
|
||||
"Request URL":"リクエストURL",
|
||||
"Response Body":"レスポンスボディ",
|
||||
"Response Code":"レスポンスコード",
|
||||
"Response Headers":"レスポンスヘッダ",
|
||||
"Hide Response":"レスポンスを隠す",
|
||||
"Headers":"ヘッダ",
|
||||
"Try it out!":"実際に実行!",
|
||||
"Show/Hide":"表示/非表示",
|
||||
"List Operations":"操作一覧",
|
||||
"Expand Operations":"操作の展開",
|
||||
"Raw":"Raw",
|
||||
"can't parse JSON. Raw result":"JSONへ解釈できません. 未加工の結果",
|
||||
"Model Schema":"モデルスキーマ",
|
||||
"Model":"モデル",
|
||||
"apply":"実行",
|
||||
"Username":"ユーザ名",
|
||||
"Password":"パスワード",
|
||||
"Terms of service":"サービス利用規約",
|
||||
"Created by":"Created by",
|
||||
"See more at":"See more at",
|
||||
"Contact the developer":"開発者に連絡",
|
||||
"api version":"APIバージョン",
|
||||
"Response Content Type":"レスポンス コンテンツタイプ",
|
||||
"fetching resource":"リソースの取得",
|
||||
"fetching resource list":"リソース一覧の取得",
|
||||
"Explore":"Explore",
|
||||
"Show Swagger Petstore Example Apis":"SwaggerペットストアAPIの表示",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"サーバから読み込めません. 適切なaccess-control-origin設定を持っていない可能性があります.",
|
||||
"Please specify the protocol for":"プロトコルを指定してください",
|
||||
"Can't read swagger JSON from":"次からswagger JSONを読み込めません",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"リソース情報の読み込みが完了しました. Swagger UIを描画しています",
|
||||
"Unable to read api":"APIを読み込めません",
|
||||
"from path":"次のパスから",
|
||||
"server returned":"サーバからの返答"
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Uwaga: Wycofane",
|
||||
"Implementation Notes":"Uwagi Implementacji",
|
||||
"Response Class":"Klasa Odpowiedzi",
|
||||
"Status":"Status",
|
||||
"Parameters":"Parametry",
|
||||
"Parameter":"Parametr",
|
||||
"Value":"Wartość",
|
||||
"Description":"Opis",
|
||||
"Parameter Type":"Typ Parametru",
|
||||
"Data Type":"Typ Danych",
|
||||
"Response Messages":"Wiadomości Odpowiedzi",
|
||||
"HTTP Status Code":"Kod Statusu HTTP",
|
||||
"Reason":"Przyczyna",
|
||||
"Response Model":"Model Odpowiedzi",
|
||||
"Request URL":"URL Wywołania",
|
||||
"Response Body":"Treść Odpowiedzi",
|
||||
"Response Code":"Kod Odpowiedzi",
|
||||
"Response Headers":"Nagłówki Odpowiedzi",
|
||||
"Hide Response":"Ukryj Odpowiedź",
|
||||
"Headers":"Nagłówki",
|
||||
"Try it out!":"Wypróbuj!",
|
||||
"Show/Hide":"Pokaż/Ukryj",
|
||||
"List Operations":"Lista Operacji",
|
||||
"Expand Operations":"Rozwiń Operacje",
|
||||
"Raw":"Nieprzetworzone",
|
||||
"can't parse JSON. Raw result":"nie można przetworzyć pliku JSON. Nieprzetworzone dane",
|
||||
"Model Schema":"Schemat Modelu",
|
||||
"Model":"Model",
|
||||
"apply":"użyj",
|
||||
"Username":"Nazwa użytkownika",
|
||||
"Password":"Hasło",
|
||||
"Terms of service":"Warunki używania",
|
||||
"Created by":"Utworzone przez",
|
||||
"See more at":"Zobacz więcej na",
|
||||
"Contact the developer":"Kontakt z deweloperem",
|
||||
"api version":"wersja api",
|
||||
"Response Content Type":"Typ Zasobu Odpowiedzi",
|
||||
"fetching resource":"ładowanie zasobu",
|
||||
"fetching resource list":"ładowanie listy zasobów",
|
||||
"Explore":"Eksploruj",
|
||||
"Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.",
|
||||
"Please specify the protocol for":"Proszę podać protokół dla",
|
||||
"Can't read swagger JSON from":"Nie można odczytać swagger JSON z",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI",
|
||||
"Unable to read api":"Nie można odczytać api",
|
||||
"from path":"ze ścieżki",
|
||||
"server returned":"serwer zwrócił"
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Aviso: Depreciado",
|
||||
"Implementation Notes":"Notas de Implementação",
|
||||
"Response Class":"Classe de resposta",
|
||||
"Status":"Status",
|
||||
"Parameters":"Parâmetros",
|
||||
"Parameter":"Parâmetro",
|
||||
"Value":"Valor",
|
||||
"Description":"Descrição",
|
||||
"Parameter Type":"Tipo de parâmetro",
|
||||
"Data Type":"Tipo de dados",
|
||||
"Response Messages":"Mensagens de resposta",
|
||||
"HTTP Status Code":"Código de status HTTP",
|
||||
"Reason":"Razão",
|
||||
"Response Model":"Modelo resposta",
|
||||
"Request URL":"URL requisição",
|
||||
"Response Body":"Corpo da resposta",
|
||||
"Response Code":"Código da resposta",
|
||||
"Response Headers":"Cabeçalho da resposta",
|
||||
"Headers":"Cabeçalhos",
|
||||
"Hide Response":"Esconder resposta",
|
||||
"Try it out!":"Tente agora!",
|
||||
"Show/Hide":"Mostrar/Esconder",
|
||||
"List Operations":"Listar operações",
|
||||
"Expand Operations":"Expandir operações",
|
||||
"Raw":"Cru",
|
||||
"can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru",
|
||||
"Model Schema":"Modelo esquema",
|
||||
"Model":"Modelo",
|
||||
"apply":"Aplicar",
|
||||
"Username":"Usuário",
|
||||
"Password":"Senha",
|
||||
"Terms of service":"Termos do serviço",
|
||||
"Created by":"Criado por",
|
||||
"See more at":"Veja mais em",
|
||||
"Contact the developer":"Contate o desenvolvedor",
|
||||
"api version":"Versão api",
|
||||
"Response Content Type":"Tipo de conteúdo da resposta",
|
||||
"fetching resource":"busca recurso",
|
||||
"fetching resource list":"buscando lista de recursos",
|
||||
"Explore":"Explorar",
|
||||
"Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin",
|
||||
"Please specify the protocol for":"Por favor especifique o protocolo",
|
||||
"Can't read swagger JSON from":"Não é possível ler o JSON Swagger de",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI",
|
||||
"Unable to read api":"Não foi possível ler api",
|
||||
"from path":"do caminho",
|
||||
"server returned":"servidor retornou"
|
||||
});
|
|
@ -0,0 +1,56 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Предупреждение: Устарело",
|
||||
"Implementation Notes":"Заметки",
|
||||
"Response Class":"Пример ответа",
|
||||
"Status":"Статус",
|
||||
"Parameters":"Параметры",
|
||||
"Parameter":"Параметр",
|
||||
"Value":"Значение",
|
||||
"Description":"Описание",
|
||||
"Parameter Type":"Тип параметра",
|
||||
"Data Type":"Тип данных",
|
||||
"HTTP Status Code":"HTTP код",
|
||||
"Reason":"Причина",
|
||||
"Response Model":"Структура ответа",
|
||||
"Request URL":"URL запроса",
|
||||
"Response Body":"Тело ответа",
|
||||
"Response Code":"HTTP код ответа",
|
||||
"Response Headers":"Заголовки ответа",
|
||||
"Hide Response":"Спрятать ответ",
|
||||
"Headers":"Заголовки",
|
||||
"Response Messages":"Что может прийти в ответ",
|
||||
"Try it out!":"Попробовать!",
|
||||
"Show/Hide":"Показать/Скрыть",
|
||||
"List Operations":"Операции кратко",
|
||||
"Expand Operations":"Операции подробно",
|
||||
"Raw":"В сыром виде",
|
||||
"can't parse JSON. Raw result":"Не удается распарсить ответ:",
|
||||
"Example Value":"Пример",
|
||||
"Model Schema":"Структура",
|
||||
"Model":"Описание",
|
||||
"Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра",
|
||||
"apply":"применить",
|
||||
"Username":"Имя пользователя",
|
||||
"Password":"Пароль",
|
||||
"Terms of service":"Условия использования",
|
||||
"Created by":"Разработано",
|
||||
"See more at":"Еще тут",
|
||||
"Contact the developer":"Связаться с разработчиком",
|
||||
"api version":"Версия API",
|
||||
"Response Content Type":"Content Type ответа",
|
||||
"Parameter content type:":"Content Type параметра:",
|
||||
"fetching resource":"Получение ресурса",
|
||||
"fetching resource list":"Получение ресурсов",
|
||||
"Explore":"Показать",
|
||||
"Show Swagger Petstore Example Apis":"Показать примеры АПИ",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа",
|
||||
"Please specify the protocol for":"Пожалуйста, укажите протокол для",
|
||||
"Can't read swagger JSON from":"Не получается прочитать swagger json из",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим",
|
||||
"Unable to read api":"Не удалось прочитать api",
|
||||
"from path":"по адресу",
|
||||
"server returned":"сервер сказал"
|
||||
});
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"Uyarı: Deprecated",
|
||||
"Implementation Notes":"Gerçekleştirim Notları",
|
||||
"Response Class":"Dönen Sınıf",
|
||||
"Status":"Statü",
|
||||
"Parameters":"Parametreler",
|
||||
"Parameter":"Parametre",
|
||||
"Value":"Değer",
|
||||
"Description":"Açıklama",
|
||||
"Parameter Type":"Parametre Tipi",
|
||||
"Data Type":"Veri Tipi",
|
||||
"Response Messages":"Dönüş Mesajı",
|
||||
"HTTP Status Code":"HTTP Statü Kodu",
|
||||
"Reason":"Gerekçe",
|
||||
"Response Model":"Dönüş Modeli",
|
||||
"Request URL":"İstek URL",
|
||||
"Response Body":"Dönüş İçeriği",
|
||||
"Response Code":"Dönüş Kodu",
|
||||
"Response Headers":"Dönüş Üst Bilgileri",
|
||||
"Hide Response":"Dönüşü Gizle",
|
||||
"Headers":"Üst Bilgiler",
|
||||
"Try it out!":"Dene!",
|
||||
"Show/Hide":"Göster/Gizle",
|
||||
"List Operations":"Operasyonları Listele",
|
||||
"Expand Operations":"Operasyonları Aç",
|
||||
"Raw":"Ham",
|
||||
"can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç",
|
||||
"Model Schema":"Model Şema",
|
||||
"Model":"Model",
|
||||
"apply":"uygula",
|
||||
"Username":"Kullanıcı Adı",
|
||||
"Password":"Parola",
|
||||
"Terms of service":"Servis şartları",
|
||||
"Created by":"Oluşturan",
|
||||
"See more at":"Daha fazlası için",
|
||||
"Contact the developer":"Geliştirici ile İletişime Geçin",
|
||||
"api version":"api versiyon",
|
||||
"Response Content Type":"Dönüş İçerik Tipi",
|
||||
"fetching resource":"kaynak getiriliyor",
|
||||
"fetching resource list":"kaynak listesi getiriliyor",
|
||||
"Explore":"Keşfet",
|
||||
"Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.",
|
||||
"Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz",
|
||||
"Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor",
|
||||
"Unable to read api":"api okunamadı",
|
||||
"from path":"yoldan",
|
||||
"server returned":"sunucuya dönüldü"
|
||||
});
|
|
@ -0,0 +1,39 @@
|
|||
'use strict';
|
||||
|
||||
/**
|
||||
* Translator for documentation pages.
|
||||
*
|
||||
* To enable translation you should include one of language-files in your index.html
|
||||
* after <script src='lang/translator.js' type='text/javascript'></script>.
|
||||
* For example - <script src='lang/ru.js' type='text/javascript'></script>
|
||||
*
|
||||
* If you wish to translate some new texsts you should do two things:
|
||||
* 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too.
|
||||
* 2. Mark that text it templates this way <anyHtmlTag data-sw-translate>New Phrase</anyHtmlTag> or <anyHtmlTag data-sw-translate value='New Phrase'/>.
|
||||
* The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate.
|
||||
*
|
||||
*/
|
||||
window.SwaggerTranslator = {
|
||||
|
||||
_words:[],
|
||||
|
||||
translate: function(sel) {
|
||||
var $this = this;
|
||||
sel = sel || '[data-sw-translate]';
|
||||
|
||||
$(sel).each(function() {
|
||||
$(this).html($this._tryTranslate($(this).html()));
|
||||
|
||||
$(this).val($this._tryTranslate($(this).val()));
|
||||
$(this).attr('title', $this._tryTranslate($(this).attr('title')));
|
||||
});
|
||||
},
|
||||
|
||||
_tryTranslate: function(word) {
|
||||
return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word;
|
||||
},
|
||||
|
||||
learn: function(wordsMap) {
|
||||
this._words = wordsMap;
|
||||
}
|
||||
};
|
|
@ -0,0 +1,53 @@
|
|||
'use strict';
|
||||
|
||||
/* jshint quotmark: double */
|
||||
window.SwaggerTranslator.learn({
|
||||
"Warning: Deprecated":"警告:已过时",
|
||||
"Implementation Notes":"实现备注",
|
||||
"Response Class":"响应类",
|
||||
"Status":"状态",
|
||||
"Parameters":"参数",
|
||||
"Parameter":"参数",
|
||||
"Value":"值",
|
||||
"Description":"描述",
|
||||
"Parameter Type":"参数类型",
|
||||
"Data Type":"数据类型",
|
||||
"Response Messages":"响应消息",
|
||||
"HTTP Status Code":"HTTP状态码",
|
||||
"Reason":"原因",
|
||||
"Response Model":"响应模型",
|
||||
"Request URL":"请求URL",
|
||||
"Response Body":"响应体",
|
||||
"Response Code":"响应码",
|
||||
"Response Headers":"响应头",
|
||||
"Hide Response":"隐藏响应",
|
||||
"Headers":"头",
|
||||
"Try it out!":"试一下!",
|
||||
"Show/Hide":"显示/隐藏",
|
||||
"List Operations":"显示操作",
|
||||
"Expand Operations":"展开操作",
|
||||
"Raw":"原始",
|
||||
"can't parse JSON. Raw result":"无法解析JSON. 原始结果",
|
||||
"Model Schema":"模型架构",
|
||||
"Model":"模型",
|
||||
"apply":"应用",
|
||||
"Username":"用户名",
|
||||
"Password":"密码",
|
||||
"Terms of service":"服务条款",
|
||||
"Created by":"创建者",
|
||||
"See more at":"查看更多:",
|
||||
"Contact the developer":"联系开发者",
|
||||
"api version":"api版本",
|
||||
"Response Content Type":"响应Content Type",
|
||||
"fetching resource":"正在获取资源",
|
||||
"fetching resource list":"正在获取资源列表",
|
||||
"Explore":"浏览",
|
||||
"Show Swagger Petstore Example Apis":"显示 Swagger Petstore 示例 Apis",
|
||||
"Can't read from server. It may not have the appropriate access-control-origin settings.":"无法从服务器读取。可能没有正确设置access-control-origin。",
|
||||
"Please specify the protocol for":"请指定协议:",
|
||||
"Can't read swagger JSON from":"无法读取swagger JSON于",
|
||||
"Finished Loading Resource Information. Rendering Swagger UI":"已加载资源信息。正在渲染Swagger UI",
|
||||
"Unable to read api":"无法读取api",
|
||||
"from path":"从路径",
|
||||
"server returned":"服务器返回"
|
||||
});
|
|
@ -0,0 +1,34 @@
|
|||
'use strict';
|
||||
|
||||
(function () {
|
||||
var configure, highlightBlock;
|
||||
|
||||
configure = hljs.configure;
|
||||
// "extending" hljs.configure method
|
||||
hljs.configure = function _configure (options) {
|
||||
var size = options.highlightSizeThreshold;
|
||||
|
||||
// added highlightSizeThreshold option to set maximum size
|
||||
// of processed string. Set to null if not a number
|
||||
hljs.highlightSizeThreshold = size === +size ? size : null;
|
||||
|
||||
configure.call(this, options);
|
||||
};
|
||||
|
||||
highlightBlock = hljs.highlightBlock;
|
||||
|
||||
// "extending" hljs.highlightBlock method
|
||||
hljs.highlightBlock = function _highlightBlock (el) {
|
||||
var innerHTML = el.innerHTML;
|
||||
var size = hljs.highlightSizeThreshold;
|
||||
|
||||
// check if highlightSizeThreshold is not set or element innerHTML
|
||||
// is less than set option highlightSizeThreshold
|
||||
if (size == null || size > innerHTML.length) {
|
||||
// proceed with hljs.highlightBlock
|
||||
highlightBlock.call(hljs, el);
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
|
||||
* http://benalman.com/projects/jquery-bbq-plugin/
|
||||
*
|
||||
* Copyright (c) 2010 "Cowboy" Ben Alman
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* http://benalman.com/about/license/
|
||||
*/
|
||||
(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
|
||||
/*
|
||||
* jQuery hashchange event - v1.2 - 2/11/2010
|
||||
* http://benalman.com/projects/jquery-hashchange-plugin/
|
||||
*
|
||||
* Copyright (c) 2010 "Cowboy" Ben Alman
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* http://benalman.com/about/license/
|
||||
*/
|
||||
(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);
|
|
@ -0,0 +1 @@
|
|||
(function(b){b.fn.slideto=function(a){a=b.extend({slide_duration:"slow",highlight_duration:3E3,highlight:true,highlight_color:"#FFFF99"},a);return this.each(function(){obj=b(this);b("body").animate({scrollTop:obj.offset().top},a.slide_duration,function(){a.highlight&&b.ui.version&&obj.effect("highlight",{color:a.highlight_color},a.highlight_duration)})})}})(jQuery);
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
jQuery Wiggle
|
||||
Author: WonderGroup, Jordan Thomas
|
||||
URL: http://labs.wondergroup.com/demos/mini-ui/index.html
|
||||
License: MIT (http://en.wikipedia.org/wiki/MIT_License)
|
||||
*/
|
||||
jQuery.fn.wiggle=function(o){var d={speed:50,wiggles:3,travel:5,callback:null};var o=jQuery.extend(d,o);return this.each(function(){var cache=this;var wrap=jQuery(this).wrap('<div class="wiggle-wrap"></div>').css("position","relative");var calls=0;for(i=1;i<=o.wiggles;i++){jQuery(this).animate({left:"-="+o.travel},o.speed).animate({left:"+="+o.travel*2},o.speed*2).animate({left:"-="+o.travel},o.speed,function(){calls++;if(jQuery(cache).parent().hasClass('wiggle-wrap')){jQuery(cache).parent().replaceWith(cache);}
|
||||
if(calls==o.wiggles&&jQuery.isFunction(o.callback)){o.callback();}});}});};
|
|
@ -0,0 +1,102 @@
|
|||
/**
|
||||
* @license
|
||||
* lodash 3.10.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
|
||||
* Build: `lodash compat -o ./lodash.js`
|
||||
*/
|
||||
;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===w,u=n===n,o=null===t,i=t===w,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););
|
||||
return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function a(n){return Nn[n]}function c(n){return Tn[n]}function l(n,t,r){return t?n=Bn[n]:r&&(n=Dn[n]),"\\"+n}function s(n){return"\\"+Dn[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n);
|
||||
}function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=P,o[++u]=r);return o}function g(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Pn[n]}function m(_){function Nn(n){if(h(n)&&!(Wo(n)||n instanceof zn)){if(n instanceof Pn)return n;if(eu.call(n,"__chain__")&&eu.call(n,"__wrapped__"))return qr(n)}return new Pn(n)}function Tn(){}function Pn(n,t,r){this.__wrapped__=n,this.__actions__=r||[],
|
||||
this.__chain__=!!t}function zn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Cu,this.__views__=[]}function Bn(){this.__data__={}}function Dn(n){var t=n?n.length:0;for(this.data={hash:mu(null),set:new hu};t--;)this.push(n[t])}function Mn(n,t){var r=n.data;return(typeof t=="string"||de(t)?r.set.has(t):r.hash[t])?0:-1}function qn(n,t){var r=-1,e=n.length;for(t||(t=De(e));++r<e;)t[r]=n[r];return t}function Kn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););
|
||||
return n}function Vn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Zn(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function Xn(n,t){for(var r=-1,e=n.length,u=De(e);++r<e;)u[r]=t(n[r],r,n);return u}function Hn(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Qn(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function nt(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;
|
||||
return false}function tt(n,t,r,e){return n!==w&&eu.call(e,r)?n:t}function rt(n,t,r){for(var e=-1,u=Ko(t),o=u.length;++e<o;){var i=u[e],f=n[i],a=r(f,t[i],i,n,t);(a===a?a===f:f!==f)&&(f!==w||i in n)||(n[i]=a)}return n}function et(n,t){return null==t?n:ot(t,Ko(t),n)}function ut(n,t){for(var r=-1,e=null==n,u=!e&&Sr(n),o=u?n.length:0,i=t.length,f=De(i);++r<i;){var a=t[r];f[r]=u?Ur(a,o)?n[a]:w:e?w:n[a]}return f}function ot(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var o=t[e];r[o]=n[o]}return r}function it(n,t,r){
|
||||
var e=typeof n;return"function"==e?t===w?n:Dt(n,t,r):null==n?Ne:"object"==e?At(n):t===w?Be(n):jt(n,t)}function ft(n,t,r,e,u,o,i){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==w)return f;if(!de(n))return n;if(e=Wo(n)){if(f=Ir(n),!t)return qn(n,f)}else{var a=ou.call(n),c=a==K;if(a!=Z&&a!=z&&(!c||u))return Ln[a]?Er(n,a,t):u?n:{};if(Gn(n))return u?n:{};if(f=Rr(c?{}:n),!t)return et(f,n)}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?Kn:gt)(n,function(e,u){f[u]=ft(e,t,r,u,n,o,i);
|
||||
}),f}function at(n,t,r){if(typeof n!="function")throw new Xe(T);return _u(function(){n.apply(w,r)},t)}function ct(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=jr(),f=i===r,a=f&&t.length>=F&&mu&&hu?new Dn(t):null,c=t.length;a&&(i=Mn,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function lt(n,t){var r=true;return zu(n,function(n,e,u){return r=!!t(n,e,u)}),r}function st(n,t,r,e){var u=e,o=u;return zu(n,function(n,i,f){
|
||||
i=+t(n,i,f),(r(i,u)||i===e&&i===o)&&(u=i,o=n)}),o}function pt(n,t){var r=[];return zu(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function ht(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function _t(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];h(i)&&Sr(i)&&(r||Wo(i)||_e(i))?t?_t(i,t,r,e):Hn(e,i):r||(e[e.length]=i)}return e}function vt(n,t){return Du(n,t,Ee)}function gt(n,t){return Du(n,t,Ko)}function yt(n,t){return Mu(n,t,Ko)}function dt(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){
|
||||
var i=t[r];ye(n[i])&&(o[++u]=i)}return o}function mt(n,t,r){if(null!=n){n=Dr(n),r!==w&&r in n&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=Dr(n)[t[r++]];return r&&r==e?n:w}}function wt(n,t,r,e,u,o){if(n===t)return true;if(null==n||null==t||!de(n)&&!h(t))return n!==n&&t!==t;n:{var i=wt,f=Wo(n),a=Wo(t),c=B,l=B;f||(c=ou.call(n),c==z?c=Z:c!=Z&&(f=je(n))),a||(l=ou.call(t),l==z?l=Z:l!=Z&&je(t));var s=c==Z&&!Gn(n),a=l==Z&&!Gn(t),l=c==l;if(!l||f||s){if(!e&&(c=s&&eu.call(n,"__wrapped__"),a=a&&eu.call(t,"__wrapped__"),
|
||||
c||a)){n=i(c?n.value():n,a?t.value():t,r,e,u,o);break n}if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(f?mr:xr)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false}else n=wr(n,t,c)}return n}function xt(n,t,r){var e=t.length,u=e,o=!r;if(null==n)return!u;for(n=Dr(n);e--;){var i=t[e];if(o&&i[2]?i[1]!==n[i[0]]:!(i[0]in n))return false}for(;++e<u;){var i=t[e],f=i[0],a=n[f],c=i[1];if(o&&i[2]){if(a===w&&!(f in n))return false}else if(i=r?r(a,c,f):w,i===w?!wt(c,a,r,true):!i)return false;
|
||||
}return true}function bt(n,t){var r=-1,e=Sr(n)?De(n.length):[];return zu(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function At(n){var t=kr(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:(n=Dr(n),n[r]===e&&(e!==w||r in n))}}return function(n){return xt(n,t)}}function jt(n,t){var r=Wo(n),e=Wr(n)&&t===t&&!de(t),u=n+"";return n=Mr(n),function(o){if(null==o)return false;var i=u;if(o=Dr(o),!(!r&&e||i in o)){if(o=1==n.length?o:mt(o,St(n,0,-1)),null==o)return false;i=Gr(n),o=Dr(o);
|
||||
}return o[i]===t?t!==w||i in o:wt(t,o[i],w,true)}}function kt(n,t,r,e,u){if(!de(n))return n;var o=Sr(t)&&(Wo(t)||je(t)),i=o?w:Ko(t);return Kn(i||t,function(f,a){if(i&&(a=f,f=t[a]),h(f)){e||(e=[]),u||(u=[]);n:{for(var c=a,l=e,s=u,p=l.length,_=t[c];p--;)if(l[p]==_){n[c]=s[p];break n}var p=n[c],v=r?r(p,_,c,n,t):w,g=v===w;g&&(v=_,Sr(_)&&(Wo(_)||je(_))?v=Wo(p)?p:Sr(p)?qn(p):[]:xe(_)||_e(_)?v=_e(p)?Ie(p):xe(p)?p:{}:g=false),l.push(_),s.push(v),g?n[c]=kt(v,_,r,l,s):(v===v?v!==p:p===p)&&(n[c]=v)}}else c=n[a],
|
||||
l=r?r(c,f,a,n,t):w,(s=l===w)&&(l=f),l===w&&(!o||a in n)||!s&&(l===l?l===c:c!==c)||(n[a]=l)}),n}function Ot(n){return function(t){return null==t?w:Dr(t)[n]}}function It(n){var t=n+"";return n=Mr(n),function(r){return mt(r,n,t)}}function Rt(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Ur(e)){var u=e;vu.call(n,e,1)}}return n}function Et(n,t){return n+wu(Ru()*(t-n+1))}function Ct(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function St(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,
|
||||
0>t&&(t=-t>u?0:u+t),r=r===w||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=De(u);++e<u;)r[e]=n[e+t];return r}function Ut(n,t){var r;return zu(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function $t(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Wt(t,r,e){var u=br(),o=-1;return r=Xn(r,function(n){return u(n)}),t=bt(t,function(n){return{a:Xn(r,function(t){return t(n)}),b:++o,c:n}}),$t(t,function(t,r){var u;n:{for(var o=-1,i=t.a,f=r.a,a=i.length,c=e.length;++o<a;)if(u=n(i[o],f[o])){
|
||||
if(o>=c)break n;o=e[o],u*="asc"===o||true===o?1:-1;break n}u=t.b-r.b}return u})}function Ft(n,t){var r=0;return zu(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function Lt(n,t){var e=-1,u=jr(),o=n.length,i=u===r,f=i&&o>=F,a=f&&mu&&hu?new Dn(void 0):null,c=[];a?(u=Mn,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Nt(n,t){for(var r=-1,e=t.length,u=De(e);++r<e;)u[r]=n[t[r]];
|
||||
return u}function Tt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););return r?St(n,e?0:o,e?o+1:u):St(n,e?o+1:0,e?u:o)}function Pt(n,t){var r=n;r instanceof zn&&(r=r.value());for(var e=-1,u=t.length;++e<u;)var o=t[e],r=o.func.apply(o.thisArg,Hn([r],o.args));return r}function zt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Uu){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)&&null!==i?e=o+1:u=o}return u}return Bt(n,t,Ne,r)}function Bt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,a=t===w;u<o;){
|
||||
var c=wu((u+o)/2),l=r(n[c]),s=l!==w,p=l===l;(i?p||e:f?p&&s&&(e||null!=l):a?p&&(e||s):null==l?0:e?l<=t:l<t)?u=c+1:o=c}return ku(o,Su)}function Dt(n,t,r){if(typeof n!="function")return Ne;if(t===w)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Mt(n){var t=new au(n.byteLength);
|
||||
return new gu(t).set(new gu(n)),t}function qt(n,t,r){for(var e=r.length,u=-1,o=ju(n.length-e,0),i=-1,f=t.length,a=De(f+o);++i<f;)a[i]=t[i];for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function Kt(n,t,r){for(var e=-1,u=r.length,o=-1,i=ju(n.length-u,0),f=-1,a=t.length,c=De(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Vt(n,t){return function(r,e,u){var o=t?t():{};if(e=br(e,u,3),Wo(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r);
|
||||
}}else zu(r,function(t,r,u){n(o,t,e(t,r,u),u)});return o}}function Zt(n){return pe(function(t,r){var e=-1,u=null==t?0:r.length,o=2<u?r[u-2]:w,i=2<u?r[2]:w,f=1<u?r[u-1]:w;for(typeof o=="function"?(o=Dt(o,f,5),u-=2):(o=typeof f=="function"?f:w,u-=o?1:0),i&&$r(r[0],r[1],i)&&(o=3>u?w:o,u=1);++e<u;)(i=r[e])&&n(t,i,o);return t})}function Yt(n,t){return function(r,e){var u=r?Vu(r):0;if(!Lr(u))return n(r,e);for(var o=t?u:-1,i=Dr(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function Gt(n){return function(t,r,e){
|
||||
var u=Dr(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){var f=e[i];if(false===r(u[f],f,u))break}return t}}function Jt(n,t){function r(){return(this&&this!==Yn&&this instanceof r?e:n).apply(t,arguments)}var e=Ht(n);return r}function Xt(n){return function(t){var r=-1;t=Fe(Ue(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Ht(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);
|
||||
case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Pu(n.prototype),t=n.apply(r,t);return de(t)?t:r}}function Qt(n){function t(r,e,u){return u&&$r(r,e,u)&&(e=w),r=dr(r,n,w,w,w,w,w,e),r.placeholder=t.placeholder,r}return t}function nr(n,t){return pe(function(r){var e=r[0];return null==e?e:(r.push(t),n.apply(w,r))})}function tr(n,t){return function(r,e,u){
|
||||
if(u&&$r(r,e,u)&&(e=w),e=br(e,u,3),1==e.length){u=r=Wo(r)?r:Br(r);for(var o=e,i=-1,f=u.length,a=t,c=a;++i<f;){var l=u[i],s=+o(l);n(s,a)&&(a=s,c=l)}if(u=c,!r.length||u!==t)return u}return st(r,e,n,t)}}function rr(n,r){return function(e,u,o){return u=br(u,o,3),Wo(e)?(u=t(e,u,r),-1<u?e[u]:w):ht(e,u,n)}}function er(n){return function(r,e,u){return r&&r.length?(e=br(e,u,3),t(r,e,n)):-1}}function ur(n){return function(t,r,e){return r=br(r,e,3),ht(t,r,n,true)}}function or(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,o=De(r);n?e--:++e<r;){
|
||||
var i=o[u++]=arguments[e];if(typeof i!="function")throw new Xe(T);!t&&Pn.prototype.thru&&"wrapper"==Ar(i)&&(t=new Pn([],true))}for(e=t?-1:r;++e<r;){var i=o[e],u=Ar(i),f="wrapper"==u?Ku(i):w;t=f&&Fr(f[0])&&f[1]==(E|k|I|C)&&!f[4].length&&1==f[9]?t[Ar(f[0])].apply(t,f[3]):1==i.length&&Fr(i)?t[u]():t.thru(i)}return function(){var n=arguments,e=n[0];if(t&&1==n.length&&Wo(e)&&e.length>=F)return t.plant(e).value();for(var u=0,n=r?o[u].apply(this,n):e;++u<r;)n=o[u].call(this,n);return n}}}function ir(n,t){
|
||||
return function(r,e,u){return typeof e=="function"&&u===w&&Wo(r)?n(r,e):t(r,Dt(e,u,3))}}function fr(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Dt(r,e,3)),n(t,r,Ee)}}function ar(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Dt(r,e,3)),n(t,r)}}function cr(n){return function(t,r,e){var u={};return r=br(r,e,3),gt(t,function(t,e,o){o=r(t,e,o),e=n?o:e,t=n?t:o,u[e]=t}),u}}function lr(n){return function(t,r,e){return t=u(t),(n?t:"")+_r(t,r,e)+(n?"":t)}}function sr(n){
|
||||
var t=pe(function(r,e){var u=v(e,t.placeholder);return dr(r,n,w,e,u)});return t}function pr(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&o===w&&Wo(r)?n(r,e,u,i):Ct(r,br(e,o,4),u,i,t)}}function hr(n,t,r,e,u,o,i,f,a,c){function l(){for(var m=arguments.length,x=m,j=De(m);x--;)j[x]=arguments[x];if(e&&(j=qt(j,e,u)),o&&(j=Kt(j,o,i)),_||y){var x=l.placeholder,k=v(j,x),m=m-k.length;if(m<c){var O=f?qn(f):w,m=ju(c-m,0),E=_?k:w,k=_?w:k,C=_?j:w,j=_?w:j;return t|=_?I:R,t&=~(_?R:I),
|
||||
g||(t&=~(b|A)),j=[n,t,r,C,E,j,k,O,a,m],O=hr.apply(w,j),Fr(n)&&Zu(O,j),O.placeholder=x,O}}if(x=p?r:this,O=h?x[n]:n,f)for(m=j.length,E=ku(f.length,m),k=qn(j);E--;)C=f[E],j[E]=Ur(C,m)?k[C]:w;return s&&a<j.length&&(j.length=a),this&&this!==Yn&&this instanceof l&&(O=d||Ht(n)),O.apply(x,j)}var s=t&E,p=t&b,h=t&A,_=t&k,g=t&j,y=t&O,d=h?w:Ht(n);return l}function _r(n,t,r){return n=n.length,t=+t,n<t&&bu(t)?(t-=n,r=null==r?" ":r+"",$e(r,du(t/r.length)).slice(0,t)):""}function vr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=De(c+f);++a<c;)l[a]=e[a];
|
||||
for(;f--;)l[a++]=arguments[++t];return(this&&this!==Yn&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&b,i=Ht(n);return u}function gr(n){var t=Ve[n];return function(n,r){return(r=r===w?0:+r||0)?(r=su(10,r),t(n*r)/r):t(n)}}function yr(n){return function(t,r,e,u){var o=br(e);return null==e&&o===it?zt(t,r,n):Bt(t,r,o(e,u,1),n)}}function dr(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Xe(T);var c=e?e.length:0;if(c||(t&=~(I|R),e=u=w),c-=u?u.length:0,t&R){var l=e,s=u;e=u=w}var p=a?w:Ku(n);
|
||||
return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==E&&e==k||t==E&&e==C&&r[7].length<=p[8]||t==(E|C)&&e==k,(f<E||u)&&(t&b&&(r[2]=p[2],f|=e&b?0:j),(e=p[3])&&(u=r[3],r[3]=u?qt(u,e,p[4]):qn(e),r[4]=u?v(r[3],P):qn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?Kt(u,e,p[6]):qn(e),r[6]=u?v(r[5],P):qn(p[6])),(e=p[7])&&(r[7]=qn(e)),t&E&&(r[8]=null==r[8]?p[8]:ku(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:ju(f-c,0)||0,n=t==b?Jt(r[0],r[2]):t!=I&&t!=(b|I)||r[4].length?hr.apply(w,r):vr.apply(w,r),
|
||||
(p?qu:Zu)(n,r)}function mr(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length;if(a!=c&&(!u||c<=a))return false;for(;++f<a;){var l=n[f],c=t[f],s=e?e(u?c:l,u?l:c,f):w;if(s!==w){if(s)continue;return false}if(u){if(!nt(t,function(n){return l===n||r(l,n,e,u,o,i)}))return false}else if(l!==c&&!r(l,c,e,u,o,i))return false}return true}function wr(n,t,r){switch(r){case D:case M:return+n==+t;case q:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:n==+t;case Y:case G:return n==t+""}return false}function xr(n,t,r,e,u,o,i){
|
||||
var f=Ko(n),a=f.length,c=Ko(t).length;if(a!=c&&!u)return false;for(c=a;c--;){var l=f[c];if(!(u?l in t:eu.call(t,l)))return false}for(var s=u;++c<a;){var l=f[c],p=n[l],h=t[l],_=e?e(u?h:p,u?p:h,l):w;if(_===w?!r(p,h,e,u,o,i):!_)return false;s||(s="constructor"==l)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function br(n,t,r){var e=Nn.callback||Le,e=e===Le?it:e;return r?e(n,t,r):e}function Ar(n){
|
||||
for(var t=n.name+"",r=Fu[t],e=r?r.length:0;e--;){var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function jr(n,t,e){var u=Nn.indexOf||Yr,u=u===Yr?r:u;return n?u(n,t,e):u}function kr(n){n=Ce(n);for(var t=n.length;t--;){var r,e=n[t];r=n[t][1],r=r===r&&!de(r),e[2]=r}return n}function Or(n,t){var r=null==n?w:n[t];return me(r)?r:w}function Ir(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&eu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Rr(n){return n=n.constructor,
|
||||
typeof n=="function"&&n instanceof n||(n=Ye),new n}function Er(n,t,r){var e=n.constructor;switch(t){case J:return Mt(n);case D:case M:return new e(+n);case X:case H:case Q:case nn:case tn:case rn:case en:case un:case on:return e instanceof e&&(e=Lu[t]),t=n.buffer,new e(r?Mt(t):t,n.byteOffset,n.length);case V:case G:return new e(n);case Y:var u=new e(n.source,kn.exec(n));u.lastIndex=n.lastIndex}return u}function Cr(n,t,r){return null==n||Wr(t,n)||(t=Mr(t),n=1==t.length?n:mt(n,St(t,0,-1)),t=Gr(t)),
|
||||
t=null==n?n:n[t],null==t?w:t.apply(n,r)}function Sr(n){return null!=n&&Lr(Vu(n))}function Ur(n,t){return n=typeof n=="number"||Rn.test(n)?+n:-1,t=null==t?$u:t,-1<n&&0==n%1&&n<t}function $r(n,t,r){if(!de(r))return false;var e=typeof t;return("number"==e?Sr(r)&&Ur(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&dn.test(n)||"number"==r?true:Wo(n)?false:!yn.test(n)||null!=t&&n in Dr(t)}function Fr(n){var t=Ar(n),r=Nn[t];return typeof r=="function"&&t in zn.prototype?n===r?true:(t=Ku(r),
|
||||
!!t&&n===t[0]):false}function Lr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=$u}function Nr(n,t){return n===w?t:Fo(n,t,Nr)}function Tr(n,t){n=Dr(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Pr(n,t){var r={};return vt(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function zr(n){for(var t=Ee(n),r=t.length,e=r&&n.length,u=!!e&&Lr(e)&&(Wo(n)||_e(n)||Ae(n)),o=-1,i=[];++o<r;){var f=t[o];(u&&Ur(f,e)||eu.call(n,f))&&i.push(f)}return i}function Br(n){return null==n?[]:Sr(n)?Nn.support.unindexedChars&&Ae(n)?n.split(""):de(n)?n:Ye(n):Se(n);
|
||||
}function Dr(n){if(Nn.support.unindexedChars&&Ae(n)){for(var t=-1,r=n.length,e=Ye(n);++t<r;)e[t]=n.charAt(t);return e}return de(n)?n:Ye(n)}function Mr(n){if(Wo(n))return n;var t=[];return u(n).replace(mn,function(n,r,e,u){t.push(e?u.replace(An,"$1"):r||n)}),t}function qr(n){return n instanceof zn?n.clone():new Pn(n.__wrapped__,n.__chain__,qn(n.__actions__))}function Kr(n,t,r){return n&&n.length?((r?$r(n,t,r):null==t)&&(t=1),St(n,0>t?0:t)):[]}function Vr(n,t,r){var e=n?n.length:0;return e?((r?$r(n,t,r):null==t)&&(t=1),
|
||||
t=e-(+t||0),St(n,0,0>t?0:t)):[]}function Zr(n){return n?n[0]:w}function Yr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?ju(u+e,0):e;else if(e)return e=zt(n,t),e<u&&(t===t?t===n[e]:n[e]!==n[e])?e:-1;return r(n,t,e||0)}function Gr(n){var t=n?n.length:0;return t?n[t-1]:w}function Jr(n){return Kr(n,1)}function Xr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=$r(n,t,u)?w:t,t=false);var o=br();if((null!=e||o!==it)&&(e=o(e,u,3)),t&&jr()===r){t=e;var i;e=-1,
|
||||
u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=Lt(n,e);return n}function Hr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Zn(n,function(n){return Sr(n)?(r=ju(n.length,r),true):void 0});for(var e=De(r);++t<r;)e[t]=Xn(n,Ot(t));return e}function Qr(n,t,r){return n&&n.length?(n=Hr(n),null==t?n:(t=Dt(t,r,4),Xn(n,function(n){return Qn(n,t,w,true)}))):[]}function ne(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Wo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1]);
|
||||
}return u}function te(n){return n=Nn(n),n.__chain__=true,n}function re(n,t,r){return t.call(r,n)}function ee(n,t,r){var e=Wo(n)?Vn:lt;return r&&$r(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=br(t,r,3)),e(n,t)}function ue(n,t,r){var e=Wo(n)?Zn:pt;return t=br(t,r,3),e(n,t)}function oe(n,t,r,e){var u=n?Vu(n):0;return Lr(u)||(n=Se(n),u=n.length),r=typeof r!="number"||e&&$r(t,r,e)?0:0>r?ju(u+r,0):r||0,typeof n=="string"||!Wo(n)&&Ae(n)?r<=u&&-1<n.indexOf(t,r):!!u&&-1<jr(n,t,r)}function ie(n,t,r){var e=Wo(n)?Xn:bt;
|
||||
return t=br(t,r,3),e(n,t)}function fe(n,t,r){if(r?$r(n,t,r):null==t){n=Br(n);var e=n.length;return 0<e?n[Et(0,e-1)]:w}r=-1,n=Oe(n);var e=n.length,u=e-1;for(t=ku(0>t?0:+t||0,e);++r<t;){var e=Et(r,u),o=n[e];n[e]=n[r],n[r]=o}return n.length=t,n}function ae(n,t,r){var e=Wo(n)?nt:Ut;return r&&$r(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=br(t,r,3)),e(n,t)}function ce(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Xe(T);var e=n;n=t,t=e}return function(){return 0<--n&&(r=t.apply(this,arguments)),
|
||||
1>=n&&(t=w),r}}function le(n,t,r){function e(t,r){r&&cu(r),a=p=h=w,t&&(_=wo(),c=n.apply(s,f),p||a||(f=s=w))}function u(){var n=t-(wo()-l);0>=n||n>t?e(h,a):p=_u(u,n)}function o(){e(g,p)}function i(){if(f=arguments,l=wo(),s=this,h=g&&(p||!y),false===v)var r=y&&!p;else{a||y||(_=l);var e=v-(l-_),i=0>=e||e>v;i?(a&&(a=cu(a)),_=l,c=n.apply(s,f)):a||(a=_u(o,e))}return i&&p?p=cu(p):p||t===v||(p=_u(u,t)),r&&(i=true,c=n.apply(s,f)),!i||p||a||(f=s=w),c}var f,a,c,l,s,p,h,_=0,v=false,g=true;if(typeof n!="function")throw new Xe(T);
|
||||
if(t=0>t?0:+t||0,true===r)var y=true,g=false;else de(r)&&(y=!!r.leading,v="maxWait"in r&&ju(+r.maxWait||0,t),g="trailing"in r?!!r.trailing:g);return i.cancel=function(){p&&cu(p),a&&cu(a),_=0,a=p=h=w},i}function se(n,t){if(typeof n!="function"||t&&typeof t!="function")throw new Xe(T);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)};return r.cache=new se.Cache,r}function pe(n,t){if(typeof n!="function")throw new Xe(T);return t=ju(t===w?n.length-1:+t||0,0),
|
||||
function(){for(var r=arguments,e=-1,u=ju(r.length-t,0),o=De(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o);case 2:return n.call(this,r[0],r[1],o)}for(u=De(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function he(n,t){return n>t}function _e(n){return h(n)&&Sr(n)&&eu.call(n,"callee")&&!pu.call(n,"callee")}function ve(n,t,r,e){return e=(r=typeof r=="function"?Dt(r,e,3):w)?r(n,t):w,e===w?wt(n,t,r):!!e}function ge(n){return h(n)&&typeof n.message=="string"&&ou.call(n)==q;
|
||||
}function ye(n){return de(n)&&ou.call(n)==K}function de(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function me(n){return null==n?false:ye(n)?fu.test(ru.call(n)):h(n)&&(Gn(n)?fu:In).test(n)}function we(n){return typeof n=="number"||h(n)&&ou.call(n)==V}function xe(n){var t;if(!h(n)||ou.call(n)!=Z||Gn(n)||_e(n)||!(eu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return Nn.support.ownLast?(vt(n,function(n,t,e){return r=eu.call(e,t),false}),false!==r):(vt(n,function(n,t){
|
||||
r=t}),r===w||eu.call(n,r))}function be(n){return de(n)&&ou.call(n)==Y}function Ae(n){return typeof n=="string"||h(n)&&ou.call(n)==G}function je(n){return h(n)&&Lr(n.length)&&!!Fn[ou.call(n)]}function ke(n,t){return n<t}function Oe(n){var t=n?Vu(n):0;return Lr(t)?t?Nn.support.unindexedChars&&Ae(n)?n.split(""):qn(n):[]:Se(n)}function Ie(n){return ot(n,Ee(n))}function Re(n){return dt(n,Ee(n))}function Ee(n){if(null==n)return[];de(n)||(n=Ye(n));for(var t=n.length,r=Nn.support,t=t&&Lr(t)&&(Wo(n)||_e(n)||Ae(n))&&t||0,e=n.constructor,u=-1,e=ye(e)&&e.prototype||nu,o=e===n,i=De(t),f=0<t,a=r.enumErrorProps&&(n===Qe||n instanceof qe),c=r.enumPrototypes&&ye(n);++u<t;)i[u]=u+"";
|
||||
for(var l in n)c&&"prototype"==l||a&&("message"==l||"name"==l)||f&&Ur(l,t)||"constructor"==l&&(o||!eu.call(n,l))||i.push(l);if(r.nonEnumShadows&&n!==nu)for(t=n===tu?G:n===Qe?q:ou.call(n),r=Nu[t]||Nu[Z],t==Z&&(e=nu),t=Wn.length;t--;)l=Wn[t],u=r[l],o&&u||(u?!eu.call(n,l):n[l]===e[l])||i.push(l);return i}function Ce(n){n=Dr(n);for(var t=-1,r=Ko(n),e=r.length,u=De(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u}function Se(n){return Nt(n,Ko(n))}function Ue(n){return(n=u(n))&&n.replace(En,a).replace(bn,"");
|
||||
}function $e(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!bu(t))return r;do t%2&&(r+=n),t=wu(t/2),n+=n;while(t);return r}function We(n,t,r){var e=n;return(n=u(n))?(r?$r(e,t,r):null==t)?n.slice(g(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function Fe(n,t,r){return r&&$r(n,t,r)&&(t=w),n=u(n),n.match(t||Un)||[]}function Le(n,t,r){return r&&$r(n,t,r)&&(t=w),h(n)?Te(n):it(n,t)}function Ne(n){return n}function Te(n){return At(ft(n,true))}function Pe(n,t,r){if(null==r){var e=de(t),u=e?Ko(t):w;((u=u&&u.length?dt(t,u):w)?u.length:e)||(u=false,
|
||||
r=t,t=n,n=this)}u||(u=dt(t,Ko(t)));var o=true,e=-1,i=ye(n),f=u.length;false===r?o=false:de(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=qn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return t.apply(n,Hn([this.value()],arguments))}}(a))}return n}function ze(){}function Be(n){return Wr(n)?Ot(n):It(n)}_=_?Jn.defaults(Yn.Object(),_,Jn.pick(Yn,$n)):Yn;
|
||||
var De=_.Array,Me=_.Date,qe=_.Error,Ke=_.Function,Ve=_.Math,Ze=_.Number,Ye=_.Object,Ge=_.RegExp,Je=_.String,Xe=_.TypeError,He=De.prototype,Qe=qe.prototype,nu=Ye.prototype,tu=Je.prototype,ru=Ke.prototype.toString,eu=nu.hasOwnProperty,uu=0,ou=nu.toString,iu=Yn._,fu=Ge("^"+ru.call(eu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),au=_.ArrayBuffer,cu=_.clearTimeout,lu=_.parseFloat,su=Ve.pow,pu=nu.propertyIsEnumerable,hu=Or(_,"Set"),_u=_.setTimeout,vu=He.splice,gu=_.Uint8Array,yu=Or(_,"WeakMap"),du=Ve.ceil,mu=Or(Ye,"create"),wu=Ve.floor,xu=Or(De,"isArray"),bu=_.isFinite,Au=Or(Ye,"keys"),ju=Ve.max,ku=Ve.min,Ou=Or(Me,"now"),Iu=_.parseInt,Ru=Ve.random,Eu=Ze.NEGATIVE_INFINITY,Cu=Ze.POSITIVE_INFINITY,Su=4294967294,Uu=2147483647,$u=9007199254740991,Wu=yu&&new yu,Fu={},Lu={};
|
||||
Lu[X]=_.Float32Array,Lu[H]=_.Float64Array,Lu[Q]=_.Int8Array,Lu[nn]=_.Int16Array,Lu[tn]=_.Int32Array,Lu[rn]=gu,Lu[en]=_.Uint8ClampedArray,Lu[un]=_.Uint16Array,Lu[on]=_.Uint32Array;var Nu={};Nu[B]=Nu[M]=Nu[V]={constructor:true,toLocaleString:true,toString:true,valueOf:true},Nu[D]=Nu[G]={constructor:true,toString:true,valueOf:true},Nu[q]=Nu[K]=Nu[Y]={constructor:true,toString:true},Nu[Z]={constructor:true},Kn(Wn,function(n){for(var t in Nu)if(eu.call(Nu,t)){var r=Nu[t];r[n]=eu.call(r,n)}});var Tu=Nn.support={};!function(n){
|
||||
var t=function(){this.x=n},r={0:n,length:n},e=[];t.prototype={valueOf:n,y:n};for(var u in new t)e.push(u);Tu.enumErrorProps=pu.call(Qe,"message")||pu.call(Qe,"name"),Tu.enumPrototypes=pu.call(t,"prototype"),Tu.nonEnumShadows=!/valueOf/.test(e),Tu.ownLast="x"!=e[0],Tu.spliceObjects=(vu.call(r,0,1),!r[0]),Tu.unindexedChars="xx"!="x"[0]+Ye("x")[0]}(1,0),Nn.templateSettings={escape:_n,evaluate:vn,interpolate:gn,variable:"",imports:{_:Nn}};var Pu=function(){function n(){}return function(t){if(de(t)){n.prototype=t;
|
||||
var r=new n;n.prototype=w}return r||{}}}(),zu=Yt(gt),Bu=Yt(yt,true),Du=Gt(),Mu=Gt(true),qu=Wu?function(n,t){return Wu.set(n,t),n}:Ne,Ku=Wu?function(n){return Wu.get(n)}:ze,Vu=Ot("length"),Zu=function(){var n=0,t=0;return function(r,e){var u=wo(),o=W-(u-t);if(t=u,0<o){if(++n>=$)return r}else n=0;return qu(r,e)}}(),Yu=pe(function(n,t){return h(n)&&Sr(n)?ct(n,_t(t,false,true)):[]}),Gu=er(),Ju=er(true),Xu=pe(function(n){for(var t=n.length,e=t,u=De(l),o=jr(),i=o===r,f=[];e--;){var a=n[e]=Sr(a=n[e])?a:[];u[e]=i&&120<=a.length&&mu&&hu?new Dn(e&&a):null;
|
||||
}var i=n[0],c=-1,l=i?i.length:0,s=u[0];n:for(;++c<l;)if(a=i[c],0>(s?Mn(s,a):o(f,a,0))){for(e=t;--e;){var p=u[e];if(0>(p?Mn(p,a):o(n[e],a,0)))continue n}s&&s.push(a),f.push(a)}return f}),Hu=pe(function(t,r){r=_t(r);var e=ut(t,r);return Rt(t,r.sort(n)),e}),Qu=yr(),no=yr(true),to=pe(function(n){return Lt(_t(n,false,true))}),ro=pe(function(n,t){return Sr(n)?ct(n,t):[]}),eo=pe(Hr),uo=pe(function(n){var t=n.length,r=2<t?n[t-2]:w,e=1<t?n[t-1]:w;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,
|
||||
e):w,e=w),n.length=t,Qr(n,r,e)}),oo=pe(function(n){return n=_t(n),this.thru(function(t){t=Wo(t)?t:[Dr(t)];for(var r=n,e=-1,u=t.length,o=-1,i=r.length,f=De(u+i);++e<u;)f[e]=t[e];for(;++o<i;)f[e++]=r[o];return f})}),io=pe(function(n,t){return Sr(n)&&(n=Br(n)),ut(n,_t(t))}),fo=Vt(function(n,t,r){eu.call(n,r)?++n[r]:n[r]=1}),ao=rr(zu),co=rr(Bu,true),lo=ir(Kn,zu),so=ir(function(n,t){for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Bu),po=Vt(function(n,t,r){eu.call(n,r)?n[r].push(t):n[r]=[t]}),ho=Vt(function(n,t,r){
|
||||
n[r]=t}),_o=pe(function(n,t,r){var e=-1,u=typeof t=="function",o=Wr(t),i=Sr(n)?De(n.length):[];return zu(n,function(n){var f=u?t:o&&null!=n?n[t]:w;i[++e]=f?f.apply(n,r):Cr(n,t,r)}),i}),vo=Vt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),go=pr(Qn,zu),yo=pr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Bu),mo=pe(function(n,t){if(null==n)return[];var r=t[2];return r&&$r(t[0],t[1],r)&&(t.length=1),Wt(n,_t(t),[])}),wo=Ou||function(){return(new Me).getTime();
|
||||
},xo=pe(function(n,t,r){var e=b;if(r.length)var u=v(r,xo.placeholder),e=e|I;return dr(n,e,t,r,u)}),bo=pe(function(n,t){t=t.length?_t(t):Re(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=dr(n[u],b,n)}return n}),Ao=pe(function(n,t,r){var e=b|A;if(r.length)var u=v(r,Ao.placeholder),e=e|I;return dr(t,e,n,r,u)}),jo=Qt(k),ko=Qt(O),Oo=pe(function(n,t){return at(n,1,t)}),Io=pe(function(n,t,r){return at(n,t,r)}),Ro=or(),Eo=or(true),Co=pe(function(n,t){if(t=_t(t),typeof n!="function"||!Vn(t,e))throw new Xe(T);
|
||||
var r=t.length;return pe(function(e){for(var u=ku(e.length,r);u--;)e[u]=t[u](e[u]);return n.apply(this,e)})}),So=sr(I),Uo=sr(R),$o=pe(function(n,t){return dr(n,C,w,w,w,_t(t))}),Wo=xu||function(n){return h(n)&&Lr(n.length)&&ou.call(n)==B},Fo=Zt(kt),Lo=Zt(function(n,t,r){return r?rt(n,t,r):et(n,t)}),No=nr(Lo,function(n,t){return n===w?t:n}),To=nr(Fo,Nr),Po=ur(gt),zo=ur(yt),Bo=fr(Du),Do=fr(Mu),Mo=ar(gt),qo=ar(yt),Ko=Au?function(n){var t=null==n?w:n.constructor;return typeof t=="function"&&t.prototype===n||(typeof n=="function"?Nn.support.enumPrototypes:Sr(n))?zr(n):de(n)?Au(n):[];
|
||||
}:zr,Vo=cr(true),Zo=cr(),Yo=pe(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Xn(_t(t),Je),Tr(n,ct(Ee(n),t));var r=Dt(t[0],t[1],3);return Pr(n,function(n,t,e){return!r(n,t,e)})}),Go=pe(function(n,t){return null==n?{}:"function"==typeof t[0]?Pr(n,Dt(t[0],t[1],3)):Tr(n,_t(t))}),Jo=Xt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t)}),Xo=Xt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Ho=lr(),Qo=lr(true),ni=Xt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase();
|
||||
}),ti=Xt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),ri=pe(function(n,t){try{return n.apply(w,t)}catch(r){return ge(r)?r:new qe(r)}}),ei=pe(function(n,t){return function(r){return Cr(r,n,t)}}),ui=pe(function(n,t){return function(r){return Cr(n,r,t)}}),oi=gr("ceil"),ii=gr("floor"),fi=tr(he,Eu),ai=tr(ke,Cu),ci=gr("round");return Nn.prototype=Tn.prototype,Pn.prototype=Pu(Tn.prototype),Pn.prototype.constructor=Pn,zn.prototype=Pu(Tn.prototype),zn.prototype.constructor=zn,
|
||||
Bn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Bn.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Bn.prototype.has=function(n){return"__proto__"!=n&&eu.call(this.__data__,n)},Bn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Dn.prototype.push=function(n){var t=this.data;typeof n=="string"||de(n)?t.set.add(n):t.hash[n]=true},se.Cache=Bn,Nn.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Xe(T);
|
||||
var r=n;n=t,t=r}return n=bu(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&$r(n,t,r)&&(t=w),t=n&&null==t?n.length:ju(+t||0,0),dr(n,E,w,w,w,w,t)},Nn.assign=Lo,Nn.at=io,Nn.before=ce,Nn.bind=xo,Nn.bindAll=bo,Nn.bindKey=Ao,Nn.callback=Le,Nn.chain=te,Nn.chunk=function(n,t,r){t=(r?$r(n,t,r):null==t)?1:ju(wu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=De(du(e/t));r<e;)o[++u]=St(n,r,r+=t);return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){
|
||||
var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=fo,Nn.create=function(n,t,r){var e=Pu(n);return r&&$r(n,t,r)&&(t=w),t?et(e,t):e},Nn.curry=jo,Nn.curryRight=ko,Nn.debounce=le,Nn.defaults=No,Nn.defaultsDeep=To,Nn.defer=Oo,Nn.delay=Io,Nn.difference=Yu,Nn.drop=Kr,Nn.dropRight=Vr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Tt(n,br(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){return n&&n.length?Tt(n,br(t,r,3),true):[]},Nn.fill=function(n,t,r,e){
|
||||
var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&$r(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===w||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=ue,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&$r(n,t,r)&&(t=false),e?_t(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?_t(n,true):[]},Nn.flow=Ro,Nn.flowRight=Eo,Nn.forEach=lo,Nn.forEachRight=so,Nn.forIn=Bo,Nn.forInRight=Do,Nn.forOwn=Mo,Nn.forOwnRight=qo,Nn.functions=Re,
|
||||
Nn.groupBy=po,Nn.indexBy=ho,Nn.initial=function(n){return Vr(n,1)},Nn.intersection=Xu,Nn.invert=function(n,t,r){r&&$r(n,t,r)&&(t=w),r=-1;for(var e=Ko(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?eu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Nn.invoke=_o,Nn.keys=Ko,Nn.keysIn=Ee,Nn.map=ie,Nn.mapKeys=Vo,Nn.mapValues=Zo,Nn.matches=Te,Nn.matchesProperty=function(n,t){return jt(n,ft(t,true))},Nn.memoize=se,Nn.merge=Fo,Nn.method=ei,Nn.methodOf=ui,Nn.mixin=Pe,Nn.modArgs=Co,Nn.negate=function(n){if(typeof n!="function")throw new Xe(T);
|
||||
return function(){return!n.apply(this,arguments)}},Nn.omit=Yo,Nn.once=function(n){return ce(2,n)},Nn.pairs=Ce,Nn.partial=So,Nn.partialRight=Uo,Nn.partition=vo,Nn.pick=Go,Nn.pluck=function(n,t){return ie(n,Be(t))},Nn.property=Be,Nn.propertyOf=function(n){return function(t){return mt(n,Mr(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=jr(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)vu.call(t,o,1);return t},Nn.pullAt=Hu,Nn.range=function(n,t,r){
|
||||
r&&$r(n,t,r)&&(t=r=w),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=ju(du((t-n)/(r||1)),0);for(var u=De(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=$o,Nn.reject=function(n,t,r){var e=Wo(n)?Zn:pt;return t=br(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,o=[],i=n.length;for(t=br(t,r,3);++u<i;)r=n[u],t(r,u,n)&&(e.push(r),o.push(u));return Rt(n,o),e},Nn.rest=Jr,Nn.restParam=pe,Nn.set=function(n,t,r){if(null==n)return n;
|
||||
var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Mr(t);for(var e=-1,u=t.length,o=u-1,i=n;null!=i&&++e<u;){var f=t[e];de(i)&&(e==o?i[f]=r:null==i[f]&&(i[f]=Ur(t[e+1])?[]:{})),i=i[f]}return n},Nn.shuffle=function(n){return fe(n,Cu)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&$r(n,t,r)&&(t=0,r=e),St(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&$r(n,t,r)&&(t=w);var e=-1;return t=br(t,r,3),n=bt(n,function(n,r,u){return{a:t(n,r,u),b:++e,c:n}}),$t(n,f)},Nn.sortByAll=mo,
|
||||
Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&$r(t,r,e)&&(r=w),Wo(t)||(t=null==t?[]:[t]),Wo(r)||(r=null==r?[]:[r]),Wt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Xe(T);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?$r(n,t,r):null==t)&&(t=1),St(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?$r(n,t,r):null==t)&&(t=1),t=e-(+t||0),St(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){return n&&n.length?Tt(n,br(t,r,3),false,true):[];
|
||||
},Nn.takeWhile=function(n,t,r){return n&&n.length?Tt(n,br(t,r,3)):[]},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Xe(T);return false===r?e=false:de(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),le(n,t,{leading:e,maxWait:+t,trailing:u})},Nn.thru=re,Nn.times=function(n,t,r){if(n=wu(n),1>n||!bu(n))return[];var e=-1,u=De(ku(n,4294967295));for(t=Dt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e);return u},Nn.toArray=Oe,
|
||||
Nn.toPlainObject=Ie,Nn.transform=function(n,t,r,e){var u=Wo(n)||je(n);return t=br(t,e,4),null==r&&(u||de(n)?(e=n.constructor,r=u?Wo(n)?new e:[]:Pu(ye(e)?e.prototype:w)):r={}),(u?Kn:gt)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=to,Nn.uniq=Xr,Nn.unzip=Hr,Nn.unzipWith=Qr,Nn.values=Se,Nn.valuesIn=function(n){return Nt(n,Ee(n))},Nn.where=function(n,t){return ue(n,At(t))},Nn.without=ro,Nn.wrap=function(n,t){return t=null==t?Ne:t,dr(t,I,w,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){
|
||||
var r=arguments[n];if(Sr(r))var e=e?Hn(ct(e,r),ct(r,e)):r}return e?Lt(e):[]},Nn.zip=eo,Nn.zipObject=ne,Nn.zipWith=uo,Nn.backflow=Eo,Nn.collect=ie,Nn.compose=Eo,Nn.each=lo,Nn.eachRight=so,Nn.extend=Lo,Nn.iteratee=Le,Nn.methods=Re,Nn.object=ne,Nn.select=ue,Nn.tail=Jr,Nn.unique=Xr,Pe(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=ri,Nn.camelCase=Jo,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.ceil=oi,Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&$r(n,t,r)?t=false:typeof t=="function"&&(e=r,
|
||||
r=t,t=false),typeof r=="function"?ft(n,t,Dt(r,e,3)):ft(n,t)},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ft(n,true,Dt(t,r,3)):ft(n,true)},Nn.deburr=Ue,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===w?e:ku(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&hn.test(n)?n.replace(sn,c):n},Nn.escapeRegExp=function(n){return(n=u(n))&&xn.test(n)?n.replace(wn,l):n||"(?:)"},Nn.every=ee,Nn.find=ao,Nn.findIndex=Gu,Nn.findKey=Po,Nn.findLast=co,
|
||||
Nn.findLastIndex=Ju,Nn.findLastKey=zo,Nn.findWhere=function(n,t){return ao(n,At(t))},Nn.first=Zr,Nn.floor=ii,Nn.get=function(n,t,r){return n=null==n?w:mt(n,Mr(t),t+""),n===w?r:n},Nn.gt=he,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=eu.call(n,t);if(!r&&!Wr(t)){if(t=Mr(t),n=1==t.length?n:mt(n,St(t,0,-1)),null==n)return false;t=Gr(t),r=eu.call(n,t)}return r||Lr(n.length)&&Ur(t,n.length)&&(Wo(n)||_e(n)||Ae(n))},Nn.identity=Ne,Nn.includes=oe,Nn.indexOf=Yr,Nn.inRange=function(n,t,r){
|
||||
return t=+t||0,r===w?(r=t,t=0):r=+r||0,n>=ku(t,r)&&n<ju(t,r)},Nn.isArguments=_e,Nn.isArray=Wo,Nn.isBoolean=function(n){return true===n||false===n||h(n)&&ou.call(n)==D},Nn.isDate=function(n){return h(n)&&ou.call(n)==M},Nn.isElement=function(n){return!!n&&1===n.nodeType&&h(n)&&!xe(n)},Nn.isEmpty=function(n){return null==n?true:Sr(n)&&(Wo(n)||Ae(n)||_e(n)||h(n)&&ye(n.splice))?!n.length:!Ko(n).length},Nn.isEqual=ve,Nn.isError=ge,Nn.isFinite=function(n){return typeof n=="number"&&bu(n)},Nn.isFunction=ye,Nn.isMatch=function(n,t,r,e){
|
||||
return r=typeof r=="function"?Dt(r,e,3):w,xt(n,kr(t),r)},Nn.isNaN=function(n){return we(n)&&n!=+n},Nn.isNative=me,Nn.isNull=function(n){return null===n},Nn.isNumber=we,Nn.isObject=de,Nn.isPlainObject=xe,Nn.isRegExp=be,Nn.isString=Ae,Nn.isTypedArray=je,Nn.isUndefined=function(n){return n===w},Nn.kebabCase=Xo,Nn.last=Gr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?ju(e+r,0):ku(r||0,e-1))+1;else if(r)return u=zt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;
|
||||
if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=ke,Nn.lte=function(n,t){return n<=t},Nn.max=fi,Nn.min=ai,Nn.noConflict=function(){return Yn._=iu,this},Nn.noop=ze,Nn.now=wo,Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&bu(t)?(e=(t-e)/2,t=wu(e),e=du(e),r=_r("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Ho,Nn.padRight=Qo,Nn.parseInt=function(n,t,r){return(r?$r(n,t,r):null==t)?t=0:t&&(t=+t),n=We(n),Iu(n,t||(On.test(n)?16:10))},Nn.random=function(n,t,r){r&&$r(n,t,r)&&(t=r=w);
|
||||
var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=Ru(),ku(n+r*(t-n+lu("1e-"+((r+"").length-1))),t)):Et(n,t)},Nn.reduce=go,Nn.reduceRight=yo,Nn.repeat=$e,Nn.result=function(n,t,r){var e=null==n?w:Dr(n)[t];return e===w&&(null==n||Wr(t,n)||(t=Mr(t),n=1==t.length?n:mt(n,St(t,0,-1)),e=null==n?w:Dr(n)[Gr(t)]),e=e===w?r:e),ye(e)?e.call(n):e},Nn.round=ci,Nn.runInContext=m,Nn.size=function(n){
|
||||
var t=n?Vu(n):0;return Lr(t)?t:Ko(n).length},Nn.snakeCase=ni,Nn.some=ae,Nn.sortedIndex=Qu,Nn.sortedLastIndex=no,Nn.startCase=ti,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:ku(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){if(r&&$r(n,t,r)&&(t=w),t=br(t,r,3),1==t.length){n=Wo(n)?n:Br(n),r=n.length;for(var e=0;r--;)e+=+t(n[r])||0;n=e}else n=Ft(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&$r(n,t,r)&&(t=r=w),n=u(n),t=rt(et({},r||t),e,tt),r=rt(et({},t.imports),e.imports,tt);
|
||||
var o,i,f=Ko(r),a=Nt(r,f),c=0;r=t.interpolate||Cn;var l="__p+='";r=Ge((t.escape||Cn).source+"|"+r.source+"|"+(r===gn?jn:Cn).source+"|"+(t.evaluate||Cn).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Sn,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(fn,""):l).replace(an,"$1").replace(cn,"$1;"),
|
||||
l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=ri(function(){return Ke(f,p+"return "+l).apply(w,a)}),t.source=l,ge(t))throw t;return t},Nn.trim=We,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?$r(e,t,r):null==t)?g(n):o(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?$r(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n;
|
||||
},Nn.trunc=function(n,t,r){r&&$r(n,t,r)&&(t=w);var e=S;if(r=U,null!=t)if(de(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;if(t=n.slice(0,e),null==o)return t+r;if(be(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ge(o.source,(kn.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o),
|
||||
-1<o&&(t=t.slice(0,o)));return t+r},Nn.unescape=function(n){return(n=u(n))&&pn.test(n)?n.replace(ln,d):n},Nn.uniqueId=function(n){var t=++uu;return u(n)+t},Nn.words=Fe,Nn.all=ee,Nn.any=ae,Nn.contains=oe,Nn.eq=ve,Nn.detect=ao,Nn.foldl=go,Nn.foldr=yo,Nn.head=Zr,Nn.include=oe,Nn.inject=go,Pe(Nn,function(){var n={};return gt(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=fe,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return fe(t,n)}):fe(this.value());
|
||||
},Nn.VERSION=x,Kn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Kn(["drop","take"],function(n,t){zn.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new zn(this);r=null==r?1:ju(wu(r)||0,0);var u=this.clone();return e?u.__takeCount__=ku(u.__takeCount__,r):u.__views__.push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},zn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),Kn(["filter","map","takeWhile"],function(n,t){
|
||||
var r=t+1,e=r!=N;zn.prototype[n]=function(n,t){var u=this.clone();return u.__iteratees__.push({iteratee:br(n,t,1),type:r}),u.__filtered__=u.__filtered__||e,u}}),Kn(["first","last"],function(n,t){var r="take"+(t?"Right":"");zn.prototype[n]=function(){return this[r](1).value()[0]}}),Kn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");zn.prototype[n]=function(){return this.__filtered__?new zn(this):this[r](1)}}),Kn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?At:Be;zn.prototype[n]=function(n){
|
||||
return this[r](e(n))}}),zn.prototype.compact=function(){return this.filter(Ne)},zn.prototype.reject=function(n,t){return n=br(n,t,1),this.filter(function(t){return!n(t)})},zn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return r.__filtered__&&(0<n||0>t)?new zn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==w&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r)},zn.prototype.takeRightWhile=function(n,t){return this.reverse().takeWhile(n,t).reverse()},zn.prototype.toArray=function(){return this.take(Cu);
|
||||
},gt(zn.prototype,function(n,t){var r=/^(?:filter|map|reject)|While$/.test(t),e=/^(?:first|last)$/.test(t),u=Nn[e?"take"+("last"==t?"Right":""):t];u&&(Nn.prototype[t]=function(){var t=e?[1]:arguments,o=this.__chain__,i=this.__wrapped__,f=!!this.__actions__.length,a=i instanceof zn,c=t[0],l=a||Wo(i);l&&r&&typeof c=="function"&&1!=c.length&&(a=l=false);var s=function(n){return e&&o?u(n,1)[0]:u.apply(w,Hn([n],t))},c={func:re,args:[s],thisArg:w},f=a&&!f;return e&&!o?f?(i=i.clone(),i.__actions__.push(c),
|
||||
n.call(i)):u.call(w,this.value())[0]:!e&&l?(i=f?i:new zn(this),i=n.apply(i,t),i.__actions__.push(c),new Pn(i,o)):this.thru(s)})}),Kn("join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?tu:He)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=!Tu.spliceObjects&&/^(?:pop|shift|splice)$/.test(n),u=/^(?:join|pop|replace|shift)$/.test(n),o=e?function(){var n=t.apply(this,arguments);return 0===this.length&&delete this[0],n}:t;Nn.prototype[n]=function(){
|
||||
var n=arguments;return u&&!this.__chain__?o.apply(this.value(),n):this[r](function(t){return o.apply(t,n)})}}),gt(zn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name+"";(Fu[e]||(Fu[e]=[])).push({name:t,func:r})}}),Fu[hr(w,A).name]=[{name:"wrapper",func:w}],zn.prototype.clone=function(){var n=new zn(this.__wrapped__);return n.__actions__=qn(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=qn(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=qn(this.__views__),
|
||||
n},zn.prototype.reverse=function(){if(this.__filtered__){var n=new zn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},zn.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=Wo(t),u=0>r,o=e?t.length:0;n=0;for(var i=o,f=this.__views__,a=-1,c=f.length;++a<c;){var l=f[a],s=l.size;switch(l.type){case"drop":n+=s;break;case"dropRight":i-=s;break;case"take":i=ku(i,n+s);break;case"takeRight":n=ju(n,i-s)}}if(n={start:n,end:i},i=n.start,f=n.end,n=f-i,
|
||||
u=u?f:i-1,i=this.__iteratees__,f=i.length,a=0,c=ku(n,this.__takeCount__),!e||o<F||o==n&&c==n)return Pt(t,this.__actions__);e=[];n:for(;n--&&a<c;){for(u+=r,o=-1,l=t[u];++o<f;){var p=i[o],s=p.type,p=p.iteratee(l);if(s==N)l=p;else if(!p){if(s==L)continue n;break n}}e[a++]=l}return e},Nn.prototype.chain=function(){return te(this)},Nn.prototype.commit=function(){return new Pn(this.value(),this.__chain__)},Nn.prototype.concat=oo,Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Tn;){var e=qr(r);
|
||||
t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){var n=this.__wrapped__,t=function(n){return n.reverse()};return n instanceof zn?(this.__actions__.length&&(n=new zn(this)),n=n.reverse(),n.__actions__.push({func:re,args:[t],thisArg:w}),new Pn(n,this.__chain__)):this.thru(t)},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return Pt(this.__wrapped__,this.__actions__);
|
||||
},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var w,x="3.10.1",b=1,A=2,j=4,k=8,O=16,I=32,R=64,E=128,C=256,S=30,U="...",$=150,W=16,F=200,L=1,N=2,T="Expected a function",P="__lodash_placeholder__",z="[object Arguments]",B="[object Array]",D="[object Boolean]",M="[object Date]",q="[object Error]",K="[object Function]",V="[object Number]",Z="[object Object]",Y="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nn="[object Int16Array]",tn="[object Int32Array]",rn="[object Uint8Array]",en="[object Uint8ClampedArray]",un="[object Uint16Array]",on="[object Uint32Array]",fn=/\b__p\+='';/g,an=/\b(__p\+=)''\+/g,cn=/(__e\(.*?\)|\b__t\))\+'';/g,ln=/&(?:amp|lt|gt|quot|#39|#96);/g,sn=/[&<>"'`]/g,pn=RegExp(ln.source),hn=RegExp(sn.source),_n=/<%-([\s\S]+?)%>/g,vn=/<%([\s\S]+?)%>/g,gn=/<%=([\s\S]+?)%>/g,yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,dn=/^\w*$/,mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wn=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,xn=RegExp(wn.source),bn=/[\u0300-\u036f\ufe20-\ufe23]/g,An=/\\(\\)?/g,jn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,kn=/\w*$/,On=/^0[xX]/,In=/^\[object .+?Constructor\]$/,Rn=/^\d+$/,En=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Cn=/($^)/,Sn=/['\n\r\u2028\u2029\\]/g,Un=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),$n="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Wn="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),Fn={};
|
||||
Fn[X]=Fn[H]=Fn[Q]=Fn[nn]=Fn[tn]=Fn[rn]=Fn[en]=Fn[un]=Fn[on]=true,Fn[z]=Fn[B]=Fn[J]=Fn[D]=Fn[M]=Fn[q]=Fn[K]=Fn["[object Map]"]=Fn[V]=Fn[Z]=Fn[Y]=Fn["[object Set]"]=Fn[G]=Fn["[object WeakMap]"]=false;var Ln={};Ln[z]=Ln[B]=Ln[J]=Ln[D]=Ln[M]=Ln[X]=Ln[H]=Ln[Q]=Ln[nn]=Ln[tn]=Ln[V]=Ln[Z]=Ln[Y]=Ln[G]=Ln[rn]=Ln[en]=Ln[un]=Ln[on]=true,Ln[q]=Ln[K]=Ln["[object Map]"]=Ln["[object Set]"]=Ln["[object WeakMap]"]=false;var Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a",
|
||||
"\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y",
|
||||
"\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Tn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Pn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},zn={"function":true,object:true},Bn={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Dn={"\\":"\\",
|
||||
"'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mn=zn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=zn[typeof module]&&module&&!module.nodeType&&module,Kn=zn[typeof self]&&self&&self.Object&&self,Vn=zn[typeof window]&&window&&window.Object&&window,Zn=qn&&qn.exports===Mn&&Mn,Yn=Mn&&qn&&typeof global=="object"&&global&&global.Object&&global||Vn!==(this&&this.window)&&Vn||Kn||this,Gn=function(){try{Object({toString:0}+"")}catch(n){return function(){return false}}return function(n){
|
||||
return typeof n.toString!="function"&&typeof(n+"")=="string"}}(),Jn=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Yn._=Jn, define(function(){return Jn})):Mn&&qn?Zn?(qn.exports=Jn)._=Jn:Mn._=Jn:Yn._=Jn}).call(this);
|
|
@ -0,0 +1,23 @@
|
|||
if (typeof Object.assign != 'function') {
|
||||
(function () {
|
||||
Object.assign = function (target) {
|
||||
'use strict';
|
||||
if (target === undefined || target === null) {
|
||||
throw new TypeError('Cannot convert undefined or null to object');
|
||||
}
|
||||
|
||||
var output = Object(target);
|
||||
for (var index = 1; index < arguments.length; index++) {
|
||||
var source = arguments[index];
|
||||
if (source !== undefined && source !== null) {
|
||||
for (var nextKey in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, nextKey)) {
|
||||
output[nextKey] = source[nextKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return output;
|
||||
};
|
||||
})();
|
||||
}
|
|
@ -0,0 +1,339 @@
|
|||
var appName;
|
||||
var popupMask;
|
||||
var popupDialog;
|
||||
var clientId;
|
||||
var realm;
|
||||
var redirect_uri;
|
||||
var clientSecret;
|
||||
var scopeSeparator;
|
||||
var additionalQueryStringParams;
|
||||
|
||||
function handleLogin() {
|
||||
var scopes = [];
|
||||
|
||||
var auths = window.swaggerUi.api.authSchemes || window.swaggerUi.api.securityDefinitions;
|
||||
if(auths) {
|
||||
var key;
|
||||
var defs = auths;
|
||||
for(key in defs) {
|
||||
var auth = defs[key];
|
||||
if(auth.type === 'oauth2' && auth.scopes) {
|
||||
var scope;
|
||||
if(Array.isArray(auth.scopes)) {
|
||||
// 1.2 support
|
||||
var i;
|
||||
for(i = 0; i < auth.scopes.length; i++) {
|
||||
scopes.push(auth.scopes[i]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 2.0 support
|
||||
for(scope in auth.scopes) {
|
||||
scopes.push({scope: scope, description: auth.scopes[scope], OAuthSchemeKey: key});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(window.swaggerUi.api
|
||||
&& window.swaggerUi.api.info) {
|
||||
appName = window.swaggerUi.api.info.title;
|
||||
}
|
||||
|
||||
$('.api-popup-dialog').remove();
|
||||
popupDialog = $(
|
||||
[
|
||||
'<div class="api-popup-dialog">',
|
||||
'<div class="api-popup-title">Select OAuth2.0 Scopes</div>',
|
||||
'<div class="api-popup-content">',
|
||||
'<p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.',
|
||||
'<a href="#">Learn how to use</a>',
|
||||
'</p>',
|
||||
'<p><strong>' + appName + '</strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>',
|
||||
'<ul class="api-popup-scopes">',
|
||||
'</ul>',
|
||||
'<p class="error-msg"></p>',
|
||||
'<div class="api-popup-actions"><button class="api-popup-authbtn api-button green" type="button">Authorize</button><button class="api-popup-cancel api-button gray" type="button">Cancel</button></div>',
|
||||
'</div>',
|
||||
'</div>'].join(''));
|
||||
$(document.body).append(popupDialog);
|
||||
|
||||
//TODO: only display applicable scopes (will need to pass them into handleLogin)
|
||||
popup = popupDialog.find('ul.api-popup-scopes').empty();
|
||||
for (i = 0; i < scopes.length; i ++) {
|
||||
scope = scopes[i];
|
||||
str = '<li><input type="checkbox" id="scope_' + i + '" scope="' + scope.scope + '"' +'" oauthtype="' + scope.OAuthSchemeKey +'"/>' + '<label for="scope_' + i + '">' + scope.scope ;
|
||||
if (scope.description) {
|
||||
if ($.map(auths, function(n, i) { return i; }).length > 1) //if we have more than one scheme, display schemes
|
||||
str += '<br/><span class="api-scope-desc">' + scope.description + ' ('+ scope.OAuthSchemeKey+')' +'</span>';
|
||||
else
|
||||
str += '<br/><span class="api-scope-desc">' + scope.description + '</span>';
|
||||
}
|
||||
str += '</label></li>';
|
||||
popup.append(str);
|
||||
}
|
||||
|
||||
var $win = $(window),
|
||||
dw = $win.width(),
|
||||
dh = $win.height(),
|
||||
st = $win.scrollTop(),
|
||||
dlgWd = popupDialog.outerWidth(),
|
||||
dlgHt = popupDialog.outerHeight(),
|
||||
top = (dh -dlgHt)/2 + st,
|
||||
left = (dw - dlgWd)/2;
|
||||
|
||||
popupDialog.css({
|
||||
top: (top < 0? 0 : top) + 'px',
|
||||
left: (left < 0? 0 : left) + 'px'
|
||||
});
|
||||
|
||||
popupDialog.find('button.api-popup-cancel').click(function() {
|
||||
popupMask.hide();
|
||||
popupDialog.hide();
|
||||
popupDialog.empty();
|
||||
popupDialog = [];
|
||||
});
|
||||
|
||||
$('button.api-popup-authbtn').unbind();
|
||||
popupDialog.find('button.api-popup-authbtn').click(function() {
|
||||
popupMask.hide();
|
||||
popupDialog.hide();
|
||||
|
||||
var authSchemes = window.swaggerUi.api.authSchemes;
|
||||
var host = window.location;
|
||||
var pathname = location.pathname.substring(0, location.pathname.lastIndexOf("/"));
|
||||
var defaultRedirectUrl = host.protocol + '//' + host.host + pathname + '/o2c.html';
|
||||
var redirectUrl = window.oAuthRedirectUrl || defaultRedirectUrl;
|
||||
var url = null;
|
||||
var scopes = []
|
||||
var o = popup.find('input:checked');
|
||||
var OAuthSchemeKeys = [];
|
||||
var state;
|
||||
for(k =0; k < o.length; k++) {
|
||||
var scope = $(o[k]).attr('scope');
|
||||
if (scopes.indexOf(scope) === -1)
|
||||
scopes.push(scope);
|
||||
var OAuthSchemeKey = $(o[k]).attr('oauthtype');
|
||||
if (OAuthSchemeKeys.indexOf(OAuthSchemeKey) === -1)
|
||||
OAuthSchemeKeys.push(OAuthSchemeKey);
|
||||
}
|
||||
|
||||
//TODO: merge not replace if scheme is different from any existing
|
||||
//(needs to be aware of schemes to do so correctly)
|
||||
window.enabledScopes=scopes;
|
||||
|
||||
for (var key in authSchemes) {
|
||||
if (authSchemes.hasOwnProperty(key) && OAuthSchemeKeys.indexOf(key) != -1) { //only look at keys that match this scope.
|
||||
var flow = authSchemes[key].flow;
|
||||
|
||||
if(authSchemes[key].type === 'oauth2' && flow && (flow === 'implicit' || flow === 'accessCode')) {
|
||||
var dets = authSchemes[key];
|
||||
url = dets.authorizationUrl + '?response_type=' + (flow === 'implicit' ? 'token' : 'code');
|
||||
window.swaggerUi.tokenName = dets.tokenName || 'access_token';
|
||||
window.swaggerUi.tokenUrl = (flow === 'accessCode' ? dets.tokenUrl : null);
|
||||
state = key;
|
||||
}
|
||||
else if(authSchemes[key].type === 'oauth2' && flow && (flow === 'application')) {
|
||||
var dets = authSchemes[key];
|
||||
window.swaggerUi.tokenName = dets.tokenName || 'access_token';
|
||||
clientCredentialsFlow(scopes, dets.tokenUrl, key);
|
||||
return;
|
||||
}
|
||||
else if(authSchemes[key].grantTypes) {
|
||||
// 1.2 support
|
||||
var o = authSchemes[key].grantTypes;
|
||||
for(var t in o) {
|
||||
if(o.hasOwnProperty(t) && t === 'implicit') {
|
||||
var dets = o[t];
|
||||
var ep = dets.loginEndpoint.url;
|
||||
url = dets.loginEndpoint.url + '?response_type=token';
|
||||
window.swaggerUi.tokenName = dets.tokenName;
|
||||
}
|
||||
else if (o.hasOwnProperty(t) && t === 'accessCode') {
|
||||
var dets = o[t];
|
||||
var ep = dets.tokenRequestEndpoint.url;
|
||||
url = dets.tokenRequestEndpoint.url + '?response_type=code';
|
||||
window.swaggerUi.tokenName = dets.tokenName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
redirect_uri = redirectUrl;
|
||||
|
||||
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
|
||||
url += '&realm=' + encodeURIComponent(realm);
|
||||
url += '&client_id=' + encodeURIComponent(clientId);
|
||||
url += '&scope=' + encodeURIComponent(scopes.join(scopeSeparator));
|
||||
url += '&state=' + encodeURIComponent(state);
|
||||
for (var key in additionalQueryStringParams) {
|
||||
url += '&' + key + '=' + encodeURIComponent(additionalQueryStringParams[key]);
|
||||
}
|
||||
|
||||
window.open(url);
|
||||
});
|
||||
|
||||
popupMask.show();
|
||||
popupDialog.show();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
function handleLogout() {
|
||||
for(key in window.swaggerUi.api.clientAuthorizations.authz){
|
||||
window.swaggerUi.api.clientAuthorizations.remove(key)
|
||||
}
|
||||
window.enabledScopes = null;
|
||||
$('.api-ic.ic-on').addClass('ic-off');
|
||||
$('.api-ic.ic-on').removeClass('ic-on');
|
||||
|
||||
// set the info box
|
||||
$('.api-ic.ic-warning').addClass('ic-error');
|
||||
$('.api-ic.ic-warning').removeClass('ic-warning');
|
||||
}
|
||||
|
||||
function initOAuth(opts) {
|
||||
var o = (opts||{});
|
||||
var errors = [];
|
||||
|
||||
appName = (o.appName||errors.push('missing appName'));
|
||||
popupMask = (o.popupMask||$('#api-common-mask'));
|
||||
popupDialog = (o.popupDialog||$('.api-popup-dialog'));
|
||||
clientId = (o.clientId||errors.push('missing client id'));
|
||||
clientSecret = (o.clientSecret||null);
|
||||
realm = (o.realm||errors.push('missing realm'));
|
||||
scopeSeparator = (o.scopeSeparator||' ');
|
||||
additionalQueryStringParams = (o.additionalQueryStringParams||{});
|
||||
|
||||
if(errors.length > 0){
|
||||
log('auth unable initialize oauth: ' + errors);
|
||||
return;
|
||||
}
|
||||
|
||||
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
|
||||
$('.api-ic').unbind();
|
||||
$('.api-ic').click(function(s) {
|
||||
if($(s.target).hasClass('ic-off'))
|
||||
handleLogin();
|
||||
else {
|
||||
handleLogout();
|
||||
}
|
||||
false;
|
||||
});
|
||||
}
|
||||
|
||||
function clientCredentialsFlow(scopes, tokenUrl, OAuthSchemeKey) {
|
||||
var params = {
|
||||
'client_id': clientId,
|
||||
'client_secret': clientSecret,
|
||||
'scope': scopes.join(' '),
|
||||
'grant_type': 'client_credentials'
|
||||
}
|
||||
$.ajax(
|
||||
{
|
||||
url : tokenUrl,
|
||||
type: "POST",
|
||||
data: params,
|
||||
success:function(data, textStatus, jqXHR)
|
||||
{
|
||||
onOAuthComplete(data,OAuthSchemeKey);
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown)
|
||||
{
|
||||
onOAuthComplete("");
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
window.processOAuthCode = function processOAuthCode(data) {
|
||||
var OAuthSchemeKey = data.state;
|
||||
var params = {
|
||||
'client_id': clientId,
|
||||
'code': data.code,
|
||||
'grant_type': 'authorization_code',
|
||||
'redirect_uri': redirect_uri
|
||||
};
|
||||
|
||||
if (clientSecret) {
|
||||
params.client_secret = clientSecret;
|
||||
}
|
||||
|
||||
$.ajax(
|
||||
{
|
||||
url : window.swaggerUi.tokenUrl,
|
||||
type: "POST",
|
||||
data: params,
|
||||
success:function(data, textStatus, jqXHR)
|
||||
{
|
||||
onOAuthComplete(data, OAuthSchemeKey);
|
||||
},
|
||||
error: function(jqXHR, textStatus, errorThrown)
|
||||
{
|
||||
onOAuthComplete("");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
window.onOAuthComplete = function onOAuthComplete(token,OAuthSchemeKey) {
|
||||
if(token) {
|
||||
if(token.error) {
|
||||
var checkbox = $('input[type=checkbox],.secured')
|
||||
checkbox.each(function(pos){
|
||||
checkbox[pos].checked = false;
|
||||
});
|
||||
alert(token.error);
|
||||
}
|
||||
else {
|
||||
var b = token[window.swaggerUi.tokenName];
|
||||
if (!OAuthSchemeKey){
|
||||
OAuthSchemeKey = token.state;
|
||||
}
|
||||
if(b){
|
||||
// if all roles are satisfied
|
||||
var o = null;
|
||||
$.each($('.auth .api-ic .api_information_panel'), function(k, v) {
|
||||
var children = v;
|
||||
if(children && children.childNodes) {
|
||||
var requiredScopes = [];
|
||||
$.each((children.childNodes), function (k1, v1){
|
||||
var inner = v1.innerHTML;
|
||||
if(inner)
|
||||
requiredScopes.push(inner);
|
||||
});
|
||||
var diff = [];
|
||||
for(var i=0; i < requiredScopes.length; i++) {
|
||||
var s = requiredScopes[i];
|
||||
if(window.enabledScopes && window.enabledScopes.indexOf(s) == -1) {
|
||||
diff.push(s);
|
||||
}
|
||||
}
|
||||
if(diff.length > 0){
|
||||
o = v.parentNode.parentNode;
|
||||
$(o.parentNode).find('.api-ic.ic-on').addClass('ic-off');
|
||||
$(o.parentNode).find('.api-ic.ic-on').removeClass('ic-on');
|
||||
|
||||
// sorry, not all scopes are satisfied
|
||||
$(o).find('.api-ic').addClass('ic-warning');
|
||||
$(o).find('.api-ic').removeClass('ic-error');
|
||||
}
|
||||
else {
|
||||
o = v.parentNode.parentNode;
|
||||
$(o.parentNode).find('.api-ic.ic-off').addClass('ic-on');
|
||||
$(o.parentNode).find('.api-ic.ic-off').removeClass('ic-off');
|
||||
|
||||
// all scopes are satisfied
|
||||
$(o).find('.api-ic').addClass('ic-info');
|
||||
$(o).find('.api-ic').removeClass('ic-warning');
|
||||
$(o).find('.api-ic').removeClass('ic-error');
|
||||
}
|
||||
}
|
||||
});
|
||||
window.swaggerUi.api.clientAuthorizations.add(window.OAuthSchemeKey, new SwaggerClient.ApiKeyAuthorization('Authorization', 'Bearer ' + b, 'header'));
|
||||
window.swaggerUi.load();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|