diff --git a/app/main.js b/app/main.js
index 0f01fee..d046ef7 100755
--- a/app/main.js
+++ b/app/main.js
@@ -8,6 +8,7 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
var webmapId = "7eca81856e22478da183da6a33c24dfe";
var queryResults;
var pageResults;
+ var featureResults;
var currentPage;
var numberOfPages;
var initialExtent = null;
@@ -15,6 +16,9 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
var liveDirNode = document.getElementById("dir");
var liveDetailsNode = document.getElementById("details");
var numberPerPage = 7;
+ /* some constants for toggling */
+ var addTable = true;
+ var visTableAttr = [["Name", 'NAME'], ['Address', 'Address'], ['Elevation (ft)', 'Elevation'], ['Horseback riding', 'HorseTrail'], ['ADA accessibility rating', 'ADAtrail'], ['Dogs allowed', 'TH_LEASH'], ['Biking Allowed', 'BikeTrail'], ['Picnic tables available', 'PICNIC']];
var urlObject = urlUtils.urlToObject(document.location.href);
if (urlObject && urlObject.query) {
if (urlObject.query.webmap) {
@@ -191,10 +195,10 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
*/
function popupKeyHandler() {
if (view.popup.visible) {
- view.popup.container.addEventListener('keydown', popupKeyHandlerFunction);
+ view.popup.container.addEventListener('keyup', popupKeyHandlerFunction);
}
else {
- view.popup.container.removeEventListener('keydown', popupKeyHandlerFunction);
+ view.popup.container.removeEventListener('keyup', popupKeyHandlerFunction);
}
}
/**
@@ -202,6 +206,8 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
* @param keyEvt
*/
function popupKeyHandlerFunction(keyEvt) {
+ keyEvt.preventDefault();
+ keyEvt.stopPropagation();
var key = keyEvt.key;
if (key === "Escape") {
view.popup.close();
@@ -343,10 +349,12 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
}
/**
* Display popup for selected feature
- * @param key number key pressed to identify selected feature
+ * @param {number} key number key pressed to identify selected feature
+ * @param {Graphic[]} [resultsArray=pageResults] Optional: array of graphics to display as pop-up feature
*/
- function displayFeatureInfo(key) {
- var selectedGraphic = pageResults[key - 1];
+ function displayFeatureInfo(key, resultsArray) {
+ if (resultsArray === void 0) { resultsArray = pageResults; }
+ var selectedGraphic = resultsArray[key - 1];
if (selectedGraphic) {
var location_1;
if (selectedGraphic.geometry.type === "point") {
@@ -355,6 +363,10 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
else if (selectedGraphic.geometry.extent && selectedGraphic.geometry.extent.center) {
location_1 = selectedGraphic.geometry.extent.center;
}
+ //if location is not within the ui extent, move extent to include location
+ if (!view.extent.contains(location_1)) {
+ view.goTo(location_1);
+ }
liveDetailsNode.innerHTML = "Displaying content for selected feature. Press esc to close.";
view.popup.open({
location: location_1,
@@ -365,7 +377,16 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
popupKeyHandler();
});
watchUtils.whenFalseOnce(view.popup, "visible", function () {
- addFocusToMap();
+ //if last focus is set return there, else go to map
+ var destination = document.getElementById("esri-a11y-last-focus");
+ if (destination) {
+ document.getElementById("intro").innerHTML = "";
+ destination.focus();
+ destination.id = "";
+ }
+ else {
+ addFocusToMap();
+ }
popupKeyHandler();
});
}
@@ -414,5 +435,185 @@ define(["require", "exports", "esri/WebMap", "esri/core/urlUtils", "esri/views/M
console.log("display", displayValue);
liveDirNode.innerHTML = "Currently searching near " + displayValue;
}
+ /**
+ * Create table of pop-up data
+ */
+ if (addTable) {
+ view.when(function () {
+ var tableComponent = document.createElement("div");
+ tableComponent.className = "esri-a11y-map-table-component";
+ tableComponent.id = "esri-a11y-table-component";
+ //create toggle button
+ var tableToggle = document.getElementById("esri-a11y-table-toggle");
+ tableToggle.classList.remove("hidden");
+ view.ui.add({
+ component: tableToggle,
+ position: "top-left"
+ });
+ var tableContainer = document.createElement("div");
+ tableContainer.className = "esri-a11y-map-table-container";
+ var tableNode = createTable();
+ tableContainer.appendChild(tableNode);
+ tableComponent.appendChild(tableContainer);
+ view.ui.add(tableComponent);
+ });
+ }
+ /**
+ * Function to fill feature table
+ * Queries operational layers and uses features to populate table
+ */
+ function createTable() {
+ var tableNode = document.createElement("table");
+ //tableNode.className = "esri-a11y-map-popup-table";
+ var tableRow = document.createElement("tr");
+ var tableData;
+ for (var _i = 0, visTableAttr_1 = visTableAttr; _i < visTableAttr_1.length; _i++) {
+ var labelArray = visTableAttr_1[_i];
+ tableData = document.createElement("th");
+ tableData.innerText = labelArray[0];
+ tableRow.appendChild(tableData);
+ }
+ tableNode.appendChild(tableRow);
+ map.layers.forEach(function (layer) {
+ //how should we seperate table for seperate layers?
+ if (layer.type == "feature") { //are there any operational types that wouldnt be included ?
+ if (!featureResults) {
+ featureResults = [];
+ }
+ var featLayer = layer;
+ var query = featLayer.createQuery();
+ query.returnGeometry = true;
+ featLayer.queryFeatures(query).then(function (results) {
+ results.features.forEach(function (feature, index) {
+ featureResults.push(feature);
+ tableRow = document.createElement("tr");
+ for (var _i = 0, visTableAttr_2 = visTableAttr; _i < visTableAttr_2.length; _i++) {
+ var labelArray = visTableAttr_2[_i];
+ tableData = document.createElement("td");
+ if (labelArray[1] == 'Address') {
+ var addLink = document.createElement("a");
+ addLink.href = "#";
+ addLink.className = "esri-table-point-reference";
+ //addLink.dataset.id = "" + (index + 1); //to compensate for the displayFeatureInfo function subtracting 1 by default
+ addLink.innerText = feature.attributes[labelArray[1]];
+ addLink.tabIndex = -1;
+ tableData.appendChild(addLink);
+ }
+ else {
+ tableData.innerText = feature.attributes[labelArray[1]];
+ }
+ tableRow.appendChild(tableData);
+ }
+ tableRow.dataset.id = "" + (index + 1); //to compensate for the displayFeatureInfo function subtracting 1 by default
+ tableRow.tabIndex = -1;
+ tableRow.className = "esri-a11y-map-table-row";
+ tableNode.appendChild(tableRow);
+ });
+ }).then(addUIToTable);
+ }
+ });
+ return tableNode;
+ }
+ /**
+ * Adds a functional UI to table which lets users use links to bring up the locations pop-ups
+ */
+ function addUIToTable() {
+ //click handler for addresses
+ var tableClickHandler = function (e) {
+ e.preventDefault;
+ e.stopPropagation;
+ e.currentTarget.id = "esri-a11y-last-focus";
+ var id = this.getAttribute("data-id");
+ displayFeatureInfo(id, featureResults);
+ };
+ var tableFocusHandler = function (e) {
+ var target = e.currentTarget;
+ var featureName = target.firstElementChild.innerHTML;
+ // detail read of table items
+ liveDetailsNode.innerHTML = featureName;
+ };
+ //click handler for table toggler
+ var toggleBtn = document.getElementById("esri-a11y-table-toggle");
+ var toggleClickHandler = function (e) {
+ e.preventDefault;
+ e.stopPropagation;
+ var tableContainer = document.getElementById("esri-a11y-table-component");
+ var containerClasses = tableContainer.classList;
+ var tableRows = tableContainer.getElementsByClassName("esri-a11y-map-table-row");
+ if (!containerClasses.contains("open")) {
+ tableContainer.classList.add("open");
+ for (var i = 0; i < tableRows.length; i++) {
+ tableRows[i].setAttribute("tabIndex", "0");
+ tableRows[i].addEventListener('click', tableClickHandler, false);
+ tableRows[i].addEventListener('focus', tableFocusHandler, false);
+ }
+ //add keyboard handlers
+ tableContainer.addEventListener("keyup", tableKeyHandlers);
+ //move focus to table
+ tableRows[0].focus({ preventScroll: true });
+ // directions of how to use table and show live region
+ liveNode.classList.remove("hidden");
+ document.getElementById("intro").innerHTML = "Use the up and down arrow keys to navigate the table and find features. Use the enter key to toggle more information on the feature. \n To return to the map, press escape.";
+ }
+ else {
+ tableContainer.classList.remove("open");
+ for (var i = 0; i < tableRows.length; i++) {
+ tableRows[i].setAttribute("tabIndex", "-1");
+ tableRows[i].removeEventListener('click', tableClickHandler);
+ tableRows[i].removeEventListener('focus', tableFocusHandler);
+ }
+ //remove key handlers
+ tableContainer.removeEventListener("keyup", tableKeyHandlers);
+ // remove directions of how to use table and hide live region
+ document.getElementById("intro").innerHTML = "";
+ liveDetailsNode.innerHTML = "";
+ liveNode.classList.add("hidden");
+ //move focus back to toggle button
+ toggleBtn.focus();
+ }
+ };
+ //Hitting enter triggers click of button
+ var toggleEnterHandler = function (e) {
+ var key = e.which || e.keyCode;
+ if (key == 13) {
+ var event_1 = new Event("click");
+ e.target.dispatchEvent(event_1);
+ }
+ return;
+ };
+ toggleBtn.addEventListener('click', toggleClickHandler, false);
+ toggleBtn.addEventListener('keyup', toggleEnterHandler, false);
+ }
+ /**
+ * Key handlers from Table
+ */
+ function tableKeyHandlers(keyEvt) {
+ var key = keyEvt.key;
+ if (key === "Escape") {
+ // esc to exit to toggle button
+ var toggleBtn = document.getElementById("esri-a11y-table-toggle");
+ toggleBtn.dispatchEvent((new Event("click")));
+ }
+ else if (key === "ArrowUp") {
+ // up arrow to go previous row
+ var prev = keyEvt.target.previousElementSibling;
+ if (!prev || !prev.hasAttribute("tabIndex")) {
+ prev = keyEvt.target.parentElement.lastElementChild;
+ }
+ prev.focus();
+ }
+ else if (key === "ArrowDown") {
+ // down arrow to go next row
+ var next = keyEvt.target.nextElementSibling;
+ if (!next || !next.hasAttribute("tabIndex")) {
+ next = keyEvt.target.parentElement.firstElementChild.nextElementSibling;
+ }
+ next.focus();
+ }
+ else if (key === "Enter") {
+ // enter trigger click
+ keyEvt.target.dispatchEvent((new Event("click")));
+ }
+ }
});
//# sourceMappingURL=main.js.map
\ No newline at end of file
diff --git a/app/main.js.map b/app/main.js.map
index f8168da..7e12471 100755
--- a/app/main.js.map
+++ b/app/main.js.map
@@ -1 +1 @@
-{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/app/main.ts b/app/main.ts
index 37fc68a..8346c75 100755
--- a/app/main.ts
+++ b/app/main.ts
@@ -14,6 +14,10 @@ import Search = require("esri/widgets/Search");
import Home = require("esri/widgets/Home");
import Locator = require("esri/tasks/Locator");
+import FeatureLayer = require("esri/layers/FeatureLayer");
+import Point = require("esri/geometry/Point");
+import Collection = require("esri/core/Collection");
+
import esri = __esri;
@@ -26,6 +30,7 @@ let webmapId = "7eca81856e22478da183da6a33c24dfe";
let queryResults: Graphic[];
let pageResults: Graphic[];
+let featureResults: Graphic[];
let currentPage: number;
let numberOfPages: number;
@@ -38,6 +43,9 @@ const liveDetailsNode = document.getElementById("details");
const numberPerPage: number = 7;
+/* some constants for toggling */
+const addTable: boolean = true;
+const visTableAttr: Array<[string, string]> = [["Name", 'NAME'], ['Address', 'Address'], ['Elevation (ft)', 'Elevation'], ['Horseback riding', 'HorseTrail'], ['ADA accessibility rating', 'ADAtrail'], ['Dogs allowed', 'TH_LEASH'], ['Biking Allowed', 'BikeTrail'], ['Picnic tables available', 'PICNIC']];
const urlObject = urlUtils.urlToObject(document.location.href);
if (urlObject && urlObject.query) {
@@ -224,9 +232,9 @@ function setupKeyHandlers() {
*/
function popupKeyHandler():void {
if(view.popup.visible){
- (view.popup.container).addEventListener('keydown', popupKeyHandlerFunction);
+ (view.popup.container).addEventListener('keyup', popupKeyHandlerFunction);
} else {
- (view.popup.container).removeEventListener('keydown', popupKeyHandlerFunction);
+ (view.popup.container).removeEventListener('keyup', popupKeyHandlerFunction);
}
}
/**
@@ -234,6 +242,8 @@ function popupKeyHandler():void {
* @param keyEvt
*/
function popupKeyHandlerFunction(keyEvt: any): void {
+ keyEvt.preventDefault();
+ keyEvt.stopPropagation();
const key = keyEvt.key;
if (key === "Escape") {
view.popup.close();
@@ -393,11 +403,12 @@ function generateList(): void {
/**
* Display popup for selected feature
- * @param key number key pressed to identify selected feature
+ * @param {number} key number key pressed to identify selected feature
+ * @param {Graphic[]} [resultsArray=pageResults] Optional: array of graphics to display as pop-up feature
*/
-function displayFeatureInfo(key: number): void {
+function displayFeatureInfo(key: number, resultsArray: Graphic[] = pageResults): void {
- const selectedGraphic = pageResults[key - 1];
+ const selectedGraphic = resultsArray[key - 1];
if (selectedGraphic) {
let location: esri.Point;
@@ -406,6 +417,12 @@ function displayFeatureInfo(key: number): void {
} else if (selectedGraphic.geometry.extent && selectedGraphic.geometry.extent.center) {
location = selectedGraphic.geometry.extent.center;
}
+
+ //if location is not within the ui extent, move extent to include location
+ if( !view.extent.contains(location) ) {
+ view.goTo(location);
+ }
+
liveDetailsNode.innerHTML = "Displaying content for selected feature. Press esc to close.";
view.popup.open({
location: location,
@@ -416,7 +433,15 @@ function displayFeatureInfo(key: number): void {
popupKeyHandler();
})
watchUtils.whenFalseOnce(view.popup, "visible", () => {
- addFocusToMap();
+ //if last focus is set return there, else go to map
+ let destination = document.getElementById("esri-a11y-last-focus");
+ if(destination){
+ document.getElementById("intro").innerHTML = "";
+ destination.focus();
+ destination.id = "";
+ } else {
+ addFocusToMap();
+ }
popupKeyHandler();
});
}
@@ -472,3 +497,188 @@ function calculateLocation(address: any) {
liveDirNode.innerHTML = `Currently searching near ${displayValue}`;
}
+/**
+ * Create table of pop-up data
+ */
+if(addTable){
+ view.when(function(){ //function for when all feaeture layers are laoaded?
+ const tableComponent = document.createElement("div");
+ tableComponent.className = "esri-a11y-map-table-component";
+ tableComponent.id = "esri-a11y-table-component";
+ //create toggle button
+ const tableToggle = document.getElementById("esri-a11y-table-toggle");
+ tableToggle.classList.remove("hidden");
+ view.ui.add({
+ component: tableToggle,
+ position: "top-left"
+ });
+ const tableContainer = document.createElement("div");
+ tableContainer.className = "esri-a11y-map-table-container";
+ const tableNode = createTable();
+ tableContainer.appendChild(tableNode);
+ tableComponent.appendChild(tableContainer);
+ view.ui.add(tableComponent);
+ });
+}
+
+/**
+ * Function to fill feature table
+ * Queries operational layers and uses features to populate table
+ */
+function createTable(): HTMLElement {
+ const tableNode = document.createElement("table");
+ //tableNode.className = "esri-a11y-map-popup-table";
+ let tableRow = document.createElement("tr");
+ let tableData: HTMLElement;
+ for (let labelArray of visTableAttr){
+ tableData = document.createElement("th");
+ tableData.innerText = labelArray[0];
+ tableRow.appendChild(tableData);
+ }
+ tableNode.appendChild(tableRow);
+ map.layers.forEach(function(layer){
+ //how should we seperate table for seperate layers?
+ if(layer.type == "feature") { //are there any operational types that wouldnt be included ?
+ if(!featureResults) {
+ featureResults = [];
+ }
+ let featLayer = layer;
+ let query = featLayer.createQuery();
+ query.returnGeometry = true;
+ featLayer.queryFeatures(query).then(function(results){
+ results.features.forEach((feature, index) => {
+ featureResults.push(feature);
+ tableRow = document.createElement("tr");
+ for (let labelArray of visTableAttr) {
+ tableData = document.createElement("td");
+ if (labelArray[1] == 'Address'){
+ let addLink = document.createElement("a");
+ addLink.href = "#";
+ addLink.className = "esri-table-point-reference";
+ //addLink.dataset.id = "" + (index + 1); //to compensate for the displayFeatureInfo function subtracting 1 by default
+ addLink.innerText = feature.attributes[labelArray[1]];
+ addLink.tabIndex = -1;
+ tableData.appendChild(addLink);
+ } else {
+ tableData.innerText = feature.attributes[labelArray[1]];
+ }
+ tableRow.appendChild(tableData);
+ }
+ tableRow.dataset.id = "" + (index + 1); //to compensate for the displayFeatureInfo function subtracting 1 by default
+ tableRow.tabIndex = -1;
+ tableRow.className = "esri-a11y-map-table-row";
+ tableNode.appendChild(tableRow);
+ });
+ }).then(addUIToTable);
+ }
+ });
+ return tableNode;
+}
+/**
+ * Adds a functional UI to table which lets users use links to bring up the locations pop-ups
+ */
+function addUIToTable(): void{
+ //click handler for addresses
+ const tableClickHandler = function(e: Event) {
+ e.preventDefault;
+ e.stopPropagation;
+ (e.currentTarget as Element ).id = "esri-a11y-last-focus";
+ let id = this.getAttribute("data-id");
+ displayFeatureInfo(id, featureResults);
+ };
+ const tableFocusHandler = function(e: Event) {
+ const target = e.currentTarget as Element;
+ let featureName = target.firstElementChild.innerHTML;
+ // detail read of table items
+ liveDetailsNode.innerHTML = featureName;
+ }
+
+ //click handler for table toggler
+ const toggleBtn = document.getElementById("esri-a11y-table-toggle");
+ const toggleClickHandler = function(e: Event) {
+ e.preventDefault;
+ e.stopPropagation;
+ const tableContainer = document.getElementById("esri-a11y-table-component");
+ let containerClasses = tableContainer.classList;
+ let tableRows = tableContainer.getElementsByClassName("esri-a11y-map-table-row");
+ if(!containerClasses.contains("open")) {
+ tableContainer.classList.add("open");
+ for (let i = 0; i < tableRows.length; i++){
+ tableRows[i].setAttribute("tabIndex", "0");
+ tableRows[i].addEventListener('click', tableClickHandler, false);
+ tableRows[i].addEventListener('focus', tableFocusHandler, false);
+ }
+ //add keyboard handlers
+ tableContainer.addEventListener("keyup", tableKeyHandlers);
+
+
+ //move focus to table
+ (tableRows[0] as HTMLElement).focus({preventScroll:true});
+
+ // directions of how to use table and show live region
+ liveNode.classList.remove("hidden");
+ document.getElementById("intro").innerHTML = `Use the up and down arrow keys to navigate the table and find features. Use the enter key to toggle more information on the feature.
+ To return to the map, press escape.`;
+
+ } else {
+ tableContainer.classList.remove("open");
+ for (let i = 0; i < tableRows.length; i++){
+ tableRows[i].setAttribute("tabIndex", "-1");
+ tableRows[i].removeEventListener('click', tableClickHandler);
+ tableRows[i].removeEventListener('focus', tableFocusHandler);
+ }
+ //remove key handlers
+ tableContainer.removeEventListener("keyup", tableKeyHandlers);
+
+ // remove directions of how to use table and hide live region
+ document.getElementById("intro").innerHTML = "";
+ liveDetailsNode.innerHTML = "";
+ liveNode.classList.add("hidden");
+
+ //move focus back to toggle button
+ toggleBtn.focus();
+ }
+ };
+ //Hitting enter triggers click of button
+ const toggleEnterHandler = function(e: KeyboardEvent) : void {
+ let key = e.which || e.keyCode;
+ if(key == 13) {
+ let event = new Event("click");
+ e.target.dispatchEvent(event);
+ }
+ return;
+ };
+ toggleBtn.addEventListener('click', toggleClickHandler, false);
+ toggleBtn.addEventListener('keyup', toggleEnterHandler, false);
+}
+
+/**
+ * Key handlers from Table
+ */
+function tableKeyHandlers (keyEvt: any) {
+ const key = keyEvt.key;
+ if (key === "Escape") {
+ // esc to exit to toggle button
+ const toggleBtn = document.getElementById("esri-a11y-table-toggle");
+ toggleBtn.dispatchEvent( (new Event("click")) );
+ } else if (key === "ArrowUp") {
+ // up arrow to go previous row
+ let prev = keyEvt.target.previousElementSibling;
+ if( !prev || !prev.hasAttribute("tabIndex") ){
+ prev = keyEvt.target.parentElement.lastElementChild;
+ }
+ prev.focus();
+
+ } else if (key === "ArrowDown") {
+ // down arrow to go next row
+ let next = keyEvt.target.nextElementSibling;
+ if( !next || !next.hasAttribute("tabIndex") ){
+ next = keyEvt.target.parentElement.firstElementChild.nextElementSibling;
+ }
+ next.focus();
+ } else if (key === "Enter") {
+ // enter trigger click
+ keyEvt.target.dispatchEvent( (new Event("click")) );
+ }
+}
+
diff --git a/css/main.css b/css/main.css
index 2f30398..d49d946 100755
--- a/css/main.css
+++ b/css/main.css
@@ -103,4 +103,56 @@
.esri-search__suggestions-list li {
margin: 0;
+ }
+
+ .esri-a11y-map-table-component {
+ position: absolute;
+ bottom: 0;
+ z-index: 1;
+ }
+
+ .esri-a11y-map-table-container {
+ max-height: 0;
+ min-height: 0;
+ width: 100%;
+ overflow-y: scroll;
+ bottom: 0;
+ -webkit-transition: max-height .5s ease-in-out;
+ -moz-transition: max-height .5s ease-in-out;
+ /* -ms-transition: max-height .5s ease-in-out;
+ -o-transition: max-height .5s ease-in-out; */
+ transition: max-height .5s ease-in-out;
+ }
+
+ .esri-a11y-map-table-container table {
+ margin: 0;
+ opacity: 0;
+ -webkit-transition: opacity .5s ease-in-out;
+ -moz-transition: opacity .5s ease-in-out;
+ /* -ms-transition: opacity .5s ease-in-out;
+ -o-transition: opacity .5s ease-in-out; */
+ transition: opacity .5s ease-in-out;
+ }
+
+ .esri-a11y-map-table-container th {
+ font-weight: 500;
+ }
+
+ .esri-a11y-map-table-component.open .esri-a11y-map-table-container {
+ max-height: 40vh;
+ }
+
+ .esri-a11y-map-table-component.open table {
+ opacity: 1;
+ }
+
+ .esri-a11y-map-table-row:hover ,
+ .esri-a11y-map-table-row:active ,
+ .esri-a11y-map-table-row:focus {
+ background: #f0f0f0;
+ }
+
+ button.esri-toggle-table {
+ border: none;
+ font-size: 16px;
}
\ No newline at end of file
diff --git a/index.html b/index.html
index 1415823..55584dc 100755
--- a/index.html
+++ b/index.html
@@ -42,10 +42,13 @@
+