diff --git a/.husky/pre-commit b/.husky/pre-commit index a54ec8f25..ca19898d3 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,5 +1,6 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" +echo "Running pre-commit hooks. In a hurry? Add --no-verify flag to your command." yarn run test yarn run lint-staged diff --git a/app/models/map-features/lot.js b/app/models/map-features/lot.js index bf46de77b..3607fe71f 100644 --- a/app/models/map-features/lot.js +++ b/app/models/map-features/lot.js @@ -4,6 +4,7 @@ import { computed } from '@ember/object'; import { alias } from '@ember/object/computed'; import carto from 'labs-zola/utils/carto'; import config from 'labs-zola/config/environment'; +import { handleCommercialZoningExceptions as getPrimaryZone } from 'labs-zola/models/map-features/zoning-district'; const { specialDistrictCrosswalk } = config; @@ -14,14 +15,6 @@ const specialPurposeDistrictsSQL = function(table, spdist1, spdist2, spdist3) { WHERE sdlbl IN ('${spdist1}', '${spdist2}', '${spdist3}')`; }; -const getPrimaryZone = (zonedist = '') => { - if (!zonedist) return ''; - let primary = zonedist.match(/\w\d*/)[0].toLowerCase(); - // special handling for c1 and c2 - if ((primary === 'c1') || (primary === 'c2')) primary = 'c1-c2'; - return primary; -}; - const bldgclassLookup = { A0: 'One Family Dwellings - Cape Cod', A1: 'One Family Dwellings - Two Stories Detached (Small or Moderate Size, With or Without Attic)', diff --git a/app/models/map-features/zoning-district.js b/app/models/map-features/zoning-district.js index b351020dd..7702da61c 100644 --- a/app/models/map-features/zoning-district.js +++ b/app/models/map-features/zoning-district.js @@ -83,6 +83,32 @@ const zoningAbbr = { BPC: 'bpc', }; +// Performs case insensitive string equality check. +// Uses "accent" level sensitivity: +// "accent": Only strings that differ in base letters or accents and other diacritic marks compare as unequal. +// Examples: a ≠ b, a ≠ á, a = A. +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#parameters. +const isSimilar = (string1, string2) => string1.localeCompare(string2, undefined, { sensitivity: 'accent' }) === 0; + +// This is purely intended to conform to DCP website's zoning district URL scheme. +// Originally added to make it possible to link out to DCP website: +// https://github.com/NYCPlanning/labs-zola/commit/889cd2ddaf8b17f37a977fb5f84409e3c5535695 +export const handleCommercialZoningExceptions = (primaryzone) => { + if (!primaryzone) return ''; + + let code = primaryzone.match(/\w\d*/)[0].toLowerCase(); + + // Check case insensitive similarity because zoning codes are represented either + // capitalized or otherwise + if (isSimilar(primaryzone, 'c1') || isSimilar(primaryzone, 'c2')) { + code = 'c1-c2'; + } else if (isSimilar(primaryzone, 'c3')) { + code = 'c3-c3a'; + } + + return code; +}; + const { attr } = DS; // this model fragment structures the "properties" @@ -91,12 +117,12 @@ export default class ZoningDistrictFragment extends MF.Fragment { @attr('string') zonedist; + // Used to clean up the 'zonedist' field to build a URL to the DCP website @computed('zonedist') - get primaryzone() { + get dcpWebsiteFileName() { const zonedist = this.get('zonedist'); - // convert R6A to r6 - const primary = zonedist.match(/\w\d*/)[0].toLowerCase(); - return primary; + + return handleCommercialZoningExceptions(zonedist); } @computed('zonedist') @@ -117,20 +143,4 @@ export default class ZoningDistrictFragment extends MF.Fragment { return zoningDescriptions[zoneabbr]; } - - @computed('primaryzone') - get primaryzoneURL() { - const primaryzone = this.get('primaryzone'); - let url = ''; - - if ((primaryzone === 'c1') || (primaryzone === 'c2')) { - url = 'c1-c2'; - } else if (primaryzone === 'c3') { - url = 'c3-c3a'; - } else { - url = primaryzone; - } - - return url; - } } diff --git a/app/templates/components/layer-record-views/zoning-district.hbs b/app/templates/components/layer-record-views/zoning-district.hbs index 5719e165f..7cc795980 100644 --- a/app/templates/components/layer-record-views/zoning-district.hbs +++ b/app/templates/components/layer-record-views/zoning-district.hbs @@ -10,7 +10,7 @@ {{#unless (eq this.model.zonedist "BPC")}}