diff --git a/dist/layers/LayerEsriMapServer.d.ts b/dist/layers/LayerEsriMapServer.d.ts
index 273eab29c6b2e43b21834dcb80944d70a3227bfd..6b916ab9fefacbaeb11c6a6281f2c78539e07963 100644
--- a/dist/layers/LayerEsriMapServer.d.ts
+++ b/dist/layers/LayerEsriMapServer.d.ts
@@ -15,6 +15,7 @@ export declare function localCacheUrl(folder: string, service: string): string;
 export interface LayerEsriMapServerOptions extends LayerBaseOptions {
     addPopup?: boolean;
     showLayers?: Array<number>;
+    getLegend?: boolean;
 }
 /**
  * esri mapserver layer
diff --git a/dist/layers/LayerEsriMapServer.js b/dist/layers/LayerEsriMapServer.js
index f0bf467eb34e707930923db508d812397e477ea0..14d3078f5b86f40cad71010ee5786c82032667b4 100644
--- a/dist/layers/LayerEsriMapServer.js
+++ b/dist/layers/LayerEsriMapServer.js
@@ -88,7 +88,10 @@ var LayerEsriMapServer = (function (_super) {
         options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
         _this._esriFormat = new ol.format.EsriJSON();
         _this._popupRequest = null;
-        _this.addLegendContent();
+        options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;
+        if (options.getLegend) {
+            _this.addLegendContent();
+        }
         if (options.addPopup) {
             mapPopup_1.default.addMapServicePopup(_this);
         }
diff --git a/dist/layers/LayerEsriMapServer.js.map b/dist/layers/LayerEsriMapServer.js.map
index 099b47e3e6a63bf12f181131c0b598b68a6ff784..6721a3bf716a1df90611b4aa2202ce7ed6578762 100644
--- a/dist/layers/LayerEsriMapServer.js.map
+++ b/dist/layers/LayerEsriMapServer.js.map
@@ -1 +1 @@
-{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../src/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer`\r\n}\r\n\r\nexport function localCacheUrl(folder: string, service: string): string{\r\n    let loc = window.location.href;\r\n\r\n    let url = `/mapserver/${folder}/${service}`;\r\n\r\n    if (loc.indexOf('transportal.cee.wisc.edu') > -1){\r\n        if (loc.toLowerCase().indexOf('webmapsstage') > -1){\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmapsstage' + url;\r\n        } else {\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n        }\r\n    }\r\n\r\n\r\n    return url;\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n    _showLayers: number[];\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url: string, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._showLayers = options.showLayers || [];\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.Tile,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d, this._showLayers);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams: {[s: string]: any}) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n"]}
\ No newline at end of file
+{"version":3,"file":"LayerEsriMapServer.js","sourceRoot":"","sources":["../../src/layers/LayerEsriMapServer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport {LayerBase, LayerBaseOptions} from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol = require('custom-ol');\r\nimport $ = require('jquery');\r\n\r\nconst nm = provide('layers');\r\n\r\n\r\n\r\n/**\r\n * Helper to return the url to the service on the production server\r\n * @param {string} folder\r\n * @param {string} service\r\n * @returns {string}\r\n */\r\nexport function makeServiceUrl(folder: string, service: string): string{\r\n    return `https://transportal.cee.wisc.edu/applications/arcgis2/rest/services/${folder}/${service}/MapServer`\r\n}\r\n\r\nexport function localCacheUrl(folder: string, service: string): string{\r\n    let loc = window.location.href;\r\n\r\n    let url = `/mapserver/${folder}/${service}`;\r\n\r\n    if (loc.indexOf('transportal.cee.wisc.edu') > -1){\r\n        if (loc.toLowerCase().indexOf('webmapsstage') > -1){\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmapsstage' + url;\r\n        } else {\r\n            url = 'https://transportal.cee.wisc.edu/gis/webmaps' + url\r\n        }\r\n    }\r\n\r\n\r\n    return url;\r\n}\r\n\r\n\r\n\r\n\r\nexport interface LayerEsriMapServerOptions extends LayerBaseOptions {\r\n    addPopup?: boolean;\r\n    showLayers?: Array<number>;\r\n    getLegend?: boolean;\r\n}\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nexport class LayerEsriMapServer extends LayerBase {\r\n    _esriFormat: ol.format.EsriJSON;\r\n    _popupRequest: JQueryXHR;\r\n    _showLayers: number[];\r\n\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} [options] - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     * @param {undefined|Array<number>} [options.showLayers=undefined] if a popup should be added\r\n     */\r\n    constructor(url: string, options: LayerEsriMapServerOptions = {}) {\r\n\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest(\r\n            {\r\n                url: this.url == '' ? undefined : this.url,\r\n                params: typeof options.showLayers == 'undefined' ? undefined : {layers: 'show:' + options.showLayers.join(',')}\r\n            }\r\n        );\r\n\r\n        this._showLayers = options.showLayers || [];\r\n\r\n        this._olLayer = new ol.layer.Tile({\r\n            source: this._source as ol.source.Tile,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution\r\n        });\r\n\r\n\r\n        this._olLayer.setZIndex(this._zIndex);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;\r\n\r\n        if (options.getLegend){\r\n            this.addLegendContent();\r\n        }\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent?: string) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        $.get(urlCopy, {}, (d) => {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d, this._showLayers);\r\n            super.addLegendContent(newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams: {[s: string]: any}) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let __this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(__this._esriFormat.readFeature(r), __this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json');\r\n\r\n        this._popupRequest.always(function () {\r\n            __this._popupRequest = null;\r\n        });\r\n\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source(): ol.source.TileArcGISRest {\r\n        return super.getSource() as ol.source.TileArcGISRest;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns the ol layer\r\n     */\r\n    get olLayer(): ol.layer.Tile {\r\n        return super.getOlLayer() as ol.layer.Tile;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n"]}
\ No newline at end of file
diff --git a/src/layers/LayerEsriMapServer.ts b/src/layers/LayerEsriMapServer.ts
index 49b2f0ce18f4e78c7a0a8fd31199811fc1a4a237..21f561ce745d640b4557ea49ee99d0556ad55280 100644
--- a/src/layers/LayerEsriMapServer.ts
+++ b/src/layers/LayerEsriMapServer.ts
@@ -45,6 +45,7 @@ export function localCacheUrl(folder: string, service: string): string{
 export interface LayerEsriMapServerOptions extends LayerBaseOptions {
     addPopup?: boolean;
     showLayers?: Array<number>;
+    getLegend?: boolean;
 }
 
 /**
@@ -95,6 +96,7 @@ export class LayerEsriMapServer extends LayerBase {
             maxResolution: this._maxResolution
         });
 
+
         this._olLayer.setZIndex(this._zIndex);
 
         options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;
@@ -102,7 +104,11 @@ export class LayerEsriMapServer extends LayerBase {
         this._esriFormat = new ol.format.EsriJSON();
         this._popupRequest = null;
 
-        this.addLegendContent();
+        options.getLegend = typeof options.getLegend === 'boolean' ? options.getLegend : true;
+
+        if (options.getLegend){
+            this.addLegendContent();
+        }
 
         if (options.addPopup) {
             mapPopup.addMapServicePopup(this);
diff --git a/test/serve/html/itsMap.html b/test/serve/html/itsMap.html
index eaebd51497c870735d929a7d8e045f8a571d0e53..ce32e73eb95733f7bee1c14591c37afbfff198b8 100644
--- a/test/serve/html/itsMap.html
+++ b/test/serve/html/itsMap.html
@@ -14,21 +14,44 @@
 
 </head>
 <body>
+<!--<ul class="project-list ">-->
+    <!--<li>-->
+        <!--<a data-siteid="143" href="/veronard/">-->
+            <!--<i class="fa fa-caret-right" style="color: #f8983a"></i>-->
+            <!--Verona Road (US 18/151) Project</a></li>-->
+    <!--<li><a data-siteid="145" href="/i-39-90/"><i class="fa fa-caret-right" style="color: #f8983a"></i>I-39/90 Expansion-->
+        <!--Project</a></li>-->
+    <!--<li><a data-siteid="271" href="/beltlinebridges/"><i class="fa fa-caret-right" style="color: #f8983a"></i>Madison-->
+        <!--Beltline (US 12/18) bridges over Yahara River</a></li>-->
+    <!--<li><a data-siteid="294" href="/i39wis19/"><i class="fa fa-caret-right" style="color: #f8983a"></i>I-39/90/94 - WIS-->
+        <!--19 and CPR Overpass</a></li>-->
+    <!--<li><a data-siteid="357" href="/exit3/"><i class="fa fa-caret-right" style="color: #f8983a"></i>Exit 3 (I-90/US-->
+        <!--53/WIS 35) Interchange Reconstruction</a></li>-->
+    <!--<li><a data-siteid="393" href="/us18151countyid/"><i class="fa fa-caret-right" style="color: #f8983a"></i>US 18/151-->
+        <!--and County ID Interchange</a></li>-->
+    <!--<li><a data-siteid="398" href="/i39wis33us51/"><i class="fa fa-caret-right" style="color: #f8983a"></i>I-39 (WIS 33-->
+        <!--to US 51)</a></li>-->
+    <!--<li><a data-siteid="402" href="/wis13-wisconsindells/"><i class="fa fa-caret-right" style="color: #f8983a"></i>WIS-->
+        <!--13 (Broadway Street)</a></li>-->
+
+
+<!--</ul>-->
 <div id="header">
-    <span>WisDOT ITS Inventory </span>
-    <a title="Traffic Operations and Safety Lab" href="http://www.topslab.wisc.edu/">
-        <img src="http://transportal.cee.wisc.edu/gis/webmapsstatic/img/tops-logo.png">
-    </a>
-    <a title="WisDOT" href="http://wisconsindot.gov/Pages/home.aspx">
-        <img src="http://transportal.cee.wisc.edu/gis/webmapsstatic/img/wisdot.png">
-    </a>
+<span>WisDOT ITS Inventory </span>
+<a title="Traffic Operations and Safety Lab" href="http://www.topslab.wisc.edu/">
+<img src="http://transportal.cee.wisc.edu/gis/webmapsstatic/img/tops-logo.png">
+</a>
+<a title="WisDOT" href="http://wisconsindot.gov/Pages/home.aspx">
+<img src="http://transportal.cee.wisc.edu/gis/webmapsstatic/img/wisdot.png">
+</a>
 </div>
 <div id="container">
-    <div id="left">
-        <div id="legend-container"></div>
-    </div>
-    <div id="map"></div>
+<div id="left">
+<div id="legend-container"></div>
 </div>
+<div id="map"></div>
+</div>
+
 
 <script>
     var glob = {};
@@ -38,5 +61,104 @@
 <script src="../lib/ol.js"></script>
 <script src="../js/itsMap.js"></script>
 
+<!--<script>-->
+    <!--/**-->
+     <!--* Priority order, list project names to appear at top in array-->
+     <!--* Others ordered alphabetically-->
+     <!--* Example: var order = ['First site', 'Second Site'];-->
+     <!--* Be sure to include brackets and matching single or double quotes-->
+     <!--*/-->
+    <!--var order = ['I-39/90 Expansion Project', 'Verona Road (US 18/151) Project'];-->
+
+    <!--function shortName(n) {-->
+        <!--return n.replace(/<.*>/, '').replace(/(\s|\n|\t)/g, '').toLowerCase()-->
+    <!--}-->
+
+    <!--function projectSort() {-->
+
+        <!--var ul = jQuery('.project-list');-->
+        <!--var lis = ul.find('li');-->
+
+        <!--var checkOrder = [];-->
+        <!--var sites = [];-->
+        <!--var non_priorities = [];-->
+        <!--var $refLi;-->
+
+        <!--for (var i = 0; i < order.length; i++) {-->
+            <!--checkOrder.push(shortName(order[i]));-->
+        <!--}-->
+
+        <!--for (i = 0; i < lis.length; i++) {-->
+            <!--var $li = jQuery(lis[i]);-->
+
+            <!--if (i === 0) {-->
+                <!--$refLi = $li;-->
+            <!--}-->
+
+            <!--var name = shortName(lis[i].getElementsByTagName('a')[0].innerHTML);-->
+            <!--var cont = false;-->
+
+            <!--for (let j = 0; j < checkOrder.length; j++) {-->
+                <!--if (name === checkOrder[j]) {-->
+                    <!--sites.push({name: name, el: $li});-->
+                    <!--cont = true;-->
+                    <!--break;-->
+                <!--}-->
+            <!--}-->
+
+            <!--if (cont) {-->
+                <!--continue;-->
+            <!--}-->
+
+            <!--non_priorities.push({name: name, el: $li})-->
+        <!--}-->
+
+        <!--sites.sort(function (a, b) {-->
+            <!--let indexA = checkOrder.indexOf(a['name']);-->
+            <!--let indexB = checkOrder.indexOf(b['name']);-->
+
+            <!--if (indexA === indexB) {-->
+                <!--return 0;-->
+            <!--} else {-->
+                <!--return indexA < indexB ? -1 : 1;-->
+            <!--}-->
+        <!--});-->
+
+        <!--non_priorities.sort(function (a, b) {-->
+            <!--let nameA = a['name'];-->
+            <!--let nameB = b['name'];-->
+
+            <!--if (nameA === nameB) {-->
+                <!--return 0;-->
+            <!--} else {-->
+                <!--return nameA < nameB ? -1 : 1;-->
+            <!--}-->
+        <!--});-->
+
+        <!--sites.push.apply(sites, non_priorities);-->
+
+
+        <!--if (sites.length > 0) {-->
+            <!--if ($refLi !== sites[0]['el']) {-->
+                <!--$refLi.before(sites[0]['el']);-->
+                <!--$refLi = sites[0]['el'];-->
+            <!--}-->
+
+            <!--if (sites.length > 1){-->
+                <!--for (i = 1; i < sites.length; i++){-->
+                    <!--sites[i]['el'].insertAfter($refLi);-->
+                    <!--$refLi = sites[i]['el'];-->
+                <!--}-->
+            <!--}-->
+        <!--}-->
+    <!--}-->
+
+    <!--jQuery(function () {-->
+        <!--projectSort();-->
+    <!--});-->
+
+
+<!--</script>-->
+
 </body>
 </html>
\ No newline at end of file