Compare commits
40 Commits
ca1c6d8ed5
...
new-redesi
| Author | SHA1 | Date | |
|---|---|---|---|
| d8a5d93342 | |||
| 2a72d1cecb | |||
| 537be9ed04 | |||
| f23f669f76 | |||
| e32bbee062 | |||
| 9228769274 | |||
| 0b850b97e1 | |||
| 72f517fdbb | |||
| e2392081bf | |||
| 52be65f6ba | |||
| 3af97b1d4d | |||
| 0297cca236 | |||
| 03e0a54399 | |||
| 18d7a3e7b1 | |||
| a33c4ca92b | |||
| b2ad4697f0 | |||
| 084a613467 | |||
| 60b0023a9d | |||
| 44e4ae5fa9 | |||
| 63efd8c449 | |||
| bd390adcc1 | |||
| 439b1fe95e | |||
| 898e2b6136 | |||
| 60b2df5e90 | |||
| a595129d6d | |||
| 7efe413ce4 | |||
| f07bda7dfa | |||
| aad72fd649 | |||
| 51b369dfbc | |||
| c8600fc92d | |||
| 9268a94fb0 | |||
| 54ffbadf2e | |||
| b9508dbc68 | |||
| 94d7b26ab9 | |||
| df8be56edc | |||
| 3308da03e0 | |||
| 7a6c7f4df2 | |||
| d9ef8e9655 | |||
| e5dc4296d3 | |||
| 05f88dbf22 |
@@ -1,4 +1,11 @@
|
||||
pipeline:
|
||||
clone:
|
||||
git:
|
||||
image: woodpeckerci/plugin-git
|
||||
settings:
|
||||
partial: false
|
||||
depth: 15
|
||||
|
||||
steps:
|
||||
build:
|
||||
image: docker
|
||||
commands:
|
||||
@@ -6,8 +13,8 @@
|
||||
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD registry.yetaga.in
|
||||
- docker build -t registry.yetaga.in/bookstores:latest .
|
||||
- docker push registry.yetaga.in/bookstores:latest
|
||||
- 'curl http://172.17.0.1:4000/api/fetch -H "Authorization: Bearer $COMPOSE_TOKEN"'
|
||||
- 'curl http://172.17.0.1:4000/api/update -H "Authorization: Bearer $COMPOSE_TOKEN"'
|
||||
- 'curl http://100.113.98.36:4000/api/fetch -H "Authorization: Bearer $COMPOSE_TOKEN"'
|
||||
- 'curl http://100.113.98.36:4000/api/update -H "Authorization: Bearer $COMPOSE_TOKEN"'
|
||||
secrets: [docker_username, docker_password, compose_token]
|
||||
when:
|
||||
branch: "master"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
FROM node:19-slim AS builder
|
||||
FROM node:20 AS builder
|
||||
|
||||
COPY . /src
|
||||
WORKDIR /src
|
||||
RUN npm install && node ./index.js
|
||||
|
||||
FROM caddy:2.6.4
|
||||
FROM caddy:2.7.5
|
||||
|
||||
COPY img /usr/share/caddy/img
|
||||
COPY css /usr/share/caddy/css
|
||||
|
||||
105
css/site.css
105
css/site.css
@@ -1,38 +1,33 @@
|
||||
/* Page Specific CSS */
|
||||
|
||||
body {
|
||||
font-family: "Lato", sans-serif;
|
||||
background: #fff;
|
||||
color: #333;
|
||||
font-size: 18px;
|
||||
font-size: 16px;
|
||||
margin: 0px;
|
||||
padding: 20px 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 80px;
|
||||
font-size: 40px;
|
||||
font-family: "Acme", sans-serif;
|
||||
font-weight: normal;
|
||||
margin: 0px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 40px;
|
||||
font-size: 30px;
|
||||
font-family: "Acme", sans-serif;
|
||||
font-weight: normal;
|
||||
margin: 0px 0px;
|
||||
}
|
||||
h3 {
|
||||
font-family: "Acme", sans-serif;
|
||||
font-size: 30px;
|
||||
font-size: 20px;
|
||||
margin: 10px 0px;
|
||||
}
|
||||
h4 {
|
||||
font-family: "Lato", sans-serif;
|
||||
font-size: 24px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
p a,
|
||||
a {
|
||||
color: #333;
|
||||
@@ -43,10 +38,6 @@ a {
|
||||
a:hover {
|
||||
color: #47ccfc;
|
||||
}
|
||||
small {
|
||||
padding: 10px 0px;
|
||||
font-size: 10px;
|
||||
}
|
||||
p {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
@@ -56,22 +47,14 @@ li {
|
||||
line-height: 19px;
|
||||
font-size: 15px;
|
||||
}
|
||||
ol {
|
||||
line-height: 24px;
|
||||
}
|
||||
.clearfix {
|
||||
clear: both;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#map {
|
||||
height: 500px;
|
||||
width: 480px;
|
||||
min-width: 300px;
|
||||
height: 100vh;
|
||||
width: 100%;
|
||||
background: #ffffff;
|
||||
float: left;
|
||||
}
|
||||
#map a {
|
||||
border: none;
|
||||
@@ -83,13 +66,19 @@ ol {
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
margin: 0px auto;
|
||||
padding: 40px;
|
||||
max-width: 1000px;
|
||||
max-width: 500px;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 24px 0px;
|
||||
.bubble {
|
||||
background-color: white;
|
||||
margin: 10px 0px;
|
||||
padding: 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
ul.nav {
|
||||
@@ -105,7 +94,7 @@ ul.nav li {
|
||||
}
|
||||
ul.nav li:not(:first-child) {
|
||||
border-left: 1px #333 solid;
|
||||
padding-left: 10px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
ul.nav li h2 {
|
||||
font-family: "Lato";
|
||||
@@ -126,15 +115,9 @@ ul.nav li a:hover {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#selected {
|
||||
max-width: 500px;
|
||||
width: 100%;
|
||||
float: left;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
#selected .description {
|
||||
padding-top: 7px;
|
||||
font-size: 16px;
|
||||
padding: 4px 0px;
|
||||
line-height: 22px;
|
||||
text-align: justify;
|
||||
}
|
||||
@@ -143,61 +126,55 @@ ul.nav li a:hover {
|
||||
margin: 15px 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#info {
|
||||
max-width: 500px;
|
||||
width: 100%;
|
||||
float: left;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.storeDetails {
|
||||
font-size: 15px;
|
||||
display: inline;
|
||||
padding-right: 6px;
|
||||
}
|
||||
#info p {
|
||||
font-size: 15px;
|
||||
padding: 4px;
|
||||
line-height: 22px;
|
||||
text-align: justify;
|
||||
}
|
||||
#info details {
|
||||
font-size: 15px;
|
||||
line-height: 22px;
|
||||
text-align: justify;
|
||||
}
|
||||
#info details summary {
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#Stores {
|
||||
margin: 0 auto;
|
||||
width: 80%;
|
||||
}
|
||||
#Stores tr {
|
||||
cursor: pointer;
|
||||
}
|
||||
#Stores tr td {
|
||||
padding: 4px 10px;
|
||||
padding: 2px 0px;
|
||||
}
|
||||
#Stores tr:not(:last-child) td {
|
||||
border-bottom: 1px #ddd solid;
|
||||
}
|
||||
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 320px) and (max-width: 1120px) {
|
||||
h1 {
|
||||
font-size: 60px;
|
||||
}
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 5px;
|
||||
}
|
||||
#wrapper {
|
||||
max-width: 480px;
|
||||
padding-top: 20px;
|
||||
position: static;
|
||||
padding: 10px;
|
||||
}
|
||||
.bubble {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border-radius: 0px;
|
||||
}
|
||||
#map {
|
||||
height: 400px;
|
||||
}
|
||||
#Stores,
|
||||
#map {
|
||||
min-width: 224px;
|
||||
width: 100%;
|
||||
}
|
||||
#map,
|
||||
#info,
|
||||
#selected {
|
||||
width: 100%;
|
||||
margin: 10px 0px;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
349
index.html
349
index.html
@@ -1,20 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script
|
||||
async=""
|
||||
src="https://www.googletagmanager.com/gtag/js?id=G-BNVKSB6DVW"
|
||||
defer=""
|
||||
data-domain="nycbookstores.org"
|
||||
src="https://stats.yetaga.in/js/script.hash.outbound-links.js"
|
||||
></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag("js", new Date());
|
||||
|
||||
gtag("config", "G-BNVKSB6DVW");
|
||||
</script>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<title>
|
||||
@@ -40,7 +31,7 @@
|
||||
media="screen"
|
||||
rel="stylesheet"
|
||||
type="text/css"
|
||||
href="/css/site.css?1678239113605"
|
||||
href="/css/site.css?1698627633277"
|
||||
/>
|
||||
<meta
|
||||
property="title"
|
||||
@@ -75,15 +66,11 @@
|
||||
/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
<div id="wrapper">
|
||||
<header class="bubble">
|
||||
<h1>NYC Bookstores</h1>
|
||||
<div>
|
||||
<ul class="nav">
|
||||
<li>
|
||||
<h2 id="subhed">
|
||||
The Many Independent Bookstores of New York City
|
||||
</h2>
|
||||
</li>
|
||||
<li>
|
||||
<a id="viewInfo" href="#info" onclick="event.preventDefault()"
|
||||
>intro</a
|
||||
@@ -102,10 +89,8 @@
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div id="map"></div>
|
||||
<div id="info">
|
||||
</header>
|
||||
<div id="info" class="bubble">
|
||||
<p>
|
||||
New York City loves its independent bookstores. It
|
||||
<a
|
||||
@@ -113,8 +98,7 @@
|
||||
target="_blank"
|
||||
>eulogizes those that have faded</a
|
||||
>
|
||||
and celebrates when new ventures are launched. And while the
|
||||
historic
|
||||
and celebrates when new ventures are launched. And while the historic
|
||||
<a
|
||||
href="https://untappedcities.com/2015/08/26/4th-avenue-the-history-of-nycs-book-row/"
|
||||
target="_blank"
|
||||
@@ -128,8 +112,8 @@
|
||||
<p>
|
||||
While Manhattan and Brooklyn still lead the pack, Queens has a
|
||||
respectable number of stores, and all five boroughs are represented,
|
||||
with the Bronx and Staten Island both hosting lone independent
|
||||
stores. Lower Manhattan has the highest density of booksellers.
|
||||
with the Bronx and Staten Island both hosting lone independent stores.
|
||||
Lower Manhattan has the highest density of booksellers.
|
||||
</p>
|
||||
<p>
|
||||
The listings here are kept up-to-date to the best of my ability;
|
||||
@@ -152,23 +136,40 @@
|
||||
survives at this point).
|
||||
</p>
|
||||
<p>
|
||||
There are currently <span id="storeCount">111</span> stores indexed
|
||||
on this page. Last updated
|
||||
<span id="updatedOn">March 7, 2023</span>.
|
||||
There are currently <span id="storeCount">114</span> stores indexed on
|
||||
this page. Last updated <span id="updatedOn">October 29, 2023</span>.
|
||||
</p>
|
||||
</div>
|
||||
<div id="selected"></div>
|
||||
<details>
|
||||
<summary>Recent Changes</summary>
|
||||
<ul id="changesList">
|
||||
<li>
|
||||
October 26, 2023 - Return Three Lives to its original corner
|
||||
location.
|
||||
</li>
|
||||
<li>
|
||||
October 26, 2023 - Idlewild Books appears to have transitioned
|
||||
entirely to language classes as opposed to bookselling
|
||||
</li>
|
||||
<li>
|
||||
October 26, 2023 - remove Boulevard Books; correct Alabaster
|
||||
Bookshop Instagram link
|
||||
</li>
|
||||
<li>
|
||||
October 26, 2023 - Add Topos Too, currently in a "soft opening"
|
||||
</li>
|
||||
</ul>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
<div id="selected" class="bubble hidden"></div>
|
||||
|
||||
<div class="container">
|
||||
<div class="bubble">
|
||||
<div id="Stores">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr id="0" class="spotRow">
|
||||
<td class="name">1804 Books</td>
|
||||
<td>320 W 37th Street, New York</td>
|
||||
<td>320 W 37th St, New York</td>
|
||||
</tr>
|
||||
<tr id="1" class="spotRow">
|
||||
<td class="name">192 Books</td>
|
||||
@@ -176,7 +177,7 @@
|
||||
</tr>
|
||||
<tr id="2" class="spotRow">
|
||||
<td class="name">Adanne</td>
|
||||
<td>234 Water Street, Brooklyn</td>
|
||||
<td>115 Ralph Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="3" class="spotRow">
|
||||
<td class="name">Aeon Bookstore</td>
|
||||
@@ -192,7 +193,7 @@
|
||||
</tr>
|
||||
<tr id="6" class="spotRow">
|
||||
<td class="name">Archestratus</td>
|
||||
<td>160 Huron St, Brooklyn</td>
|
||||
<td>164 Huron St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="7" class="spotRow">
|
||||
<td class="name">Argosy Books</td>
|
||||
@@ -200,24 +201,24 @@
|
||||
</tr>
|
||||
<tr id="8" class="spotRow">
|
||||
<td class="name">Astoria Bookshop</td>
|
||||
<td>31-29 31st St, Astoria</td>
|
||||
<td>36-19 30th St, Astoria</td>
|
||||
</tr>
|
||||
<tr id="9" class="spotRow">
|
||||
<td class="name">Avoid The Day Bookstore & Cafe</td>
|
||||
<td>99-04 A Rockaway Beach Blvd, Rockaway Park</td>
|
||||
</tr>
|
||||
<tr id="10" class="spotRow">
|
||||
<td class="name">Berl's Brooklyn Poetry Shop</td>
|
||||
<td>126A Front St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="11" class="spotRow">
|
||||
<tr id="10" class="spotRow">
|
||||
<td class="name">Better Read Than Dead</td>
|
||||
<td>867 Broadway, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="12" class="spotRow">
|
||||
<tr id="11" class="spotRow">
|
||||
<td class="name">Better Read Than Dead & Burly Coffee</td>
|
||||
<td>90 Kosciuszko St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="12" class="spotRow">
|
||||
<td class="name">Black Spring Books</td>
|
||||
<td>672 Driggs Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="13" class="spotRow">
|
||||
<td class="name">Bluestockings Cooperative</td>
|
||||
<td>116 Suffolk Street, New York</td>
|
||||
@@ -275,261 +276,259 @@
|
||||
<td>42 West 17th St, New York</td>
|
||||
</tr>
|
||||
<tr id="27" class="spotRow">
|
||||
<td class="name">Boulevard Books</td>
|
||||
<td>7518 13th Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="28" class="spotRow">
|
||||
<td class="name">Bravo's Book Nook</td>
|
||||
<td>115 MacDougal St, New York</td>
|
||||
</tr>
|
||||
<tr id="29" class="spotRow">
|
||||
<tr id="28" class="spotRow">
|
||||
<td class="name">Burnt Books</td>
|
||||
<td>1014 Manhattan Ave, Brooklyn</td>
|
||||
<td>157 Huron St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="30" class="spotRow">
|
||||
<tr id="29" class="spotRow">
|
||||
<td class="name">Cafe con Libros</td>
|
||||
<td>724 Prospect Place, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="31" class="spotRow">
|
||||
<tr id="30" class="spotRow">
|
||||
<td class="name">Catland</td>
|
||||
<td>987 Flushing Ave, Brooklyn</td>
|
||||
<td>985 Flushing Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="32" class="spotRow">
|
||||
<tr id="31" class="spotRow">
|
||||
<td class="name">Chartwell Booksellers</td>
|
||||
<td>55 E 52nd St, New York</td>
|
||||
</tr>
|
||||
<tr id="33" class="spotRow">
|
||||
<tr id="32" class="spotRow">
|
||||
<td class="name">Codex Books</td>
|
||||
<td>1 Bleecker St, New York</td>
|
||||
</tr>
|
||||
<tr id="34" class="spotRow">
|
||||
<tr id="33" class="spotRow">
|
||||
<td class="name">Community Bookstore</td>
|
||||
<td>143 7th Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="35" class="spotRow">
|
||||
<tr id="34" class="spotRow">
|
||||
<td class="name">Cups and Books</td>
|
||||
<td>2024 Bedford Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="36" class="spotRow">
|
||||
<tr id="35" class="spotRow">
|
||||
<td class="name">Dashwood Books</td>
|
||||
<td>33 Bond St, New York</td>
|
||||
</tr>
|
||||
<tr id="37" class="spotRow">
|
||||
<tr id="36" class="spotRow">
|
||||
<td class="name">Dear Friend Books</td>
|
||||
<td>343A Tompkins Avenue, Brooklyn</td>
|
||||
<td>343A Tompkins Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="38" class="spotRow">
|
||||
<tr id="37" class="spotRow">
|
||||
<td class="name">Desert Island Comics</td>
|
||||
<td>540 Metropolitan Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="39" class="spotRow">
|
||||
<tr id="38" class="spotRow">
|
||||
<td class="name">East Village Books</td>
|
||||
<td>99 St. Mark's Place, New York</td>
|
||||
</tr>
|
||||
<tr id="40" class="spotRow">
|
||||
<tr id="39" class="spotRow">
|
||||
<td class="name">ETG Book Cafe</td>
|
||||
<td>208 Bay St, Staten Island</td>
|
||||
</tr>
|
||||
<tr id="41" class="spotRow">
|
||||
<tr id="40" class="spotRow">
|
||||
<td class="name">Freebird Books</td>
|
||||
<td>123 Columbia St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="42" class="spotRow">
|
||||
<tr id="41" class="spotRow">
|
||||
<td class="name">Greenlight Bookstore</td>
|
||||
<td>686 Fulton St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="43" class="spotRow">
|
||||
<td class="name">
|
||||
Greenlight Bookstore (Prospect Lefferts Gardens)
|
||||
</td>
|
||||
<td>632 Flatbush Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="44" class="spotRow">
|
||||
<tr id="42" class="spotRow">
|
||||
<td class="name">Here's A Book Store</td>
|
||||
<td>1964 Coney Island Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="45" class="spotRow">
|
||||
<tr id="43" class="spotRow">
|
||||
<td class="name">Hey Kids! Comics</td>
|
||||
<td>157 Huron St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="46" class="spotRow">
|
||||
<tr id="44" class="spotRow">
|
||||
<td class="name">Housing Works Bookstore Café</td>
|
||||
<td>126 Crosby St, New York</td>
|
||||
</tr>
|
||||
<tr id="47" class="spotRow">
|
||||
<tr id="45" class="spotRow">
|
||||
<td class="name">Human Relations Books</td>
|
||||
<td>1067 Flushing Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="48" class="spotRow">
|
||||
<td class="name">Idlewild Books</td>
|
||||
<td>170 7th Avenue S, New York</td>
|
||||
</tr>
|
||||
<tr id="49" class="spotRow">
|
||||
<tr id="46" class="spotRow">
|
||||
<td class="name">James Cummins Bookseller</td>
|
||||
<td>699 Madison Ave, 7th Floor, New York</td>
|
||||
</tr>
|
||||
<tr id="50" class="spotRow">
|
||||
<tr id="47" class="spotRow">
|
||||
<td class="name">Joanne Hendricks Cookbooks</td>
|
||||
<td>488 Greenwich St, New York</td>
|
||||
</tr>
|
||||
<tr id="51" class="spotRow">
|
||||
<tr id="48" class="spotRow">
|
||||
<td class="name">Karma Bookstore</td>
|
||||
<td>136 East Third St, New York</td>
|
||||
</tr>
|
||||
<tr id="52" class="spotRow">
|
||||
<tr id="49" class="spotRow">
|
||||
<td class="name">Kew & Willow Books</td>
|
||||
<td>81-63 Lefferts Boulevard, New York</td>
|
||||
</tr>
|
||||
<tr id="53" class="spotRow">
|
||||
<tr id="50" class="spotRow">
|
||||
<td class="name">Kinokunya</td>
|
||||
<td>1073 Avenue of the Americas, New York</td>
|
||||
</tr>
|
||||
<tr id="54" class="spotRow">
|
||||
<tr id="51" class="spotRow">
|
||||
<td class="name">Kitchen Arts & Letters</td>
|
||||
<td>1435 Lexington Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="55" class="spotRow">
|
||||
<tr id="52" class="spotRow">
|
||||
<td class="name">Leaves Bookstore</td>
|
||||
<td>140 Nassau Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="56" class="spotRow">
|
||||
<tr id="53" class="spotRow">
|
||||
<td class="name">Left Bank Books</td>
|
||||
<td>41 Perry Street, New York</td>
|
||||
<td>41 Perry St, New York</td>
|
||||
</tr>
|
||||
<tr id="57" class="spotRow">
|
||||
<tr id="54" class="spotRow">
|
||||
<td class="name">Lofty Pigeon Books</td>
|
||||
<td>743 Church Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="55" class="spotRow">
|
||||
<td class="name">Logos Bookstore</td>
|
||||
<td>1575 York Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="58" class="spotRow">
|
||||
<tr id="56" class="spotRow">
|
||||
<td class="name">Mast Books</td>
|
||||
<td>72 Avenue A, New York</td>
|
||||
</tr>
|
||||
<tr id="59" class="spotRow">
|
||||
<tr id="57" class="spotRow">
|
||||
<td class="name">McNally Jackson Books</td>
|
||||
<td>52 Prince St, New York</td>
|
||||
<td>134 Prince St, New York</td>
|
||||
</tr>
|
||||
<tr id="60" class="spotRow">
|
||||
<tr id="58" class="spotRow">
|
||||
<td class="name">McNally Jackson Books City Point</td>
|
||||
<td>445 Albee Square W, Unit G112, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="61" class="spotRow">
|
||||
<tr id="59" class="spotRow">
|
||||
<td class="name">McNally Jackson Books Seaport</td>
|
||||
<td>4 Fulton St, New York</td>
|
||||
</tr>
|
||||
<tr id="62" class="spotRow">
|
||||
<tr id="60" class="spotRow">
|
||||
<td class="name">McNally Jackson Books Williamsburg</td>
|
||||
<td>76 North 4th St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="63" class="spotRow">
|
||||
<tr id="61" class="spotRow">
|
||||
<td class="name">McNally Jackson Rockefeller Center</td>
|
||||
<td>1 Rockefeller Plaza, New York</td>
|
||||
</tr>
|
||||
<tr id="64" class="spotRow">
|
||||
<tr id="62" class="spotRow">
|
||||
<td class="name">Melville House Publishers</td>
|
||||
<td>46 John St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="65" class="spotRow">
|
||||
<tr id="63" class="spotRow">
|
||||
<td class="name">Mercer Street Books & Records</td>
|
||||
<td>206 Mercer St, New York</td>
|
||||
</tr>
|
||||
<tr id="66" class="spotRow">
|
||||
<tr id="64" class="spotRow">
|
||||
<td class="name">Mil Mundos Books</td>
|
||||
<td>323 Linden St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="67" class="spotRow">
|
||||
<tr id="65" class="spotRow">
|
||||
<td class="name">Molasses Books</td>
|
||||
<td>770 Hart St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="68" class="spotRow">
|
||||
<tr id="66" class="spotRow">
|
||||
<td class="name">Namaste Bookshop</td>
|
||||
<td>2 W 14th St, New York</td>
|
||||
</tr>
|
||||
<tr id="69" class="spotRow">
|
||||
<tr id="67" class="spotRow">
|
||||
<td class="name">P&T Knitwear</td>
|
||||
<td>180 Orchard Street, New York</td>
|
||||
<td>180 Orchard St, New York</td>
|
||||
</tr>
|
||||
<tr id="70" class="spotRow">
|
||||
<tr id="68" class="spotRow">
|
||||
<td class="name">Passageway Books</td>
|
||||
<td>150 9th Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="69" class="spotRow">
|
||||
<td class="name">Pillow-Cat Books</td>
|
||||
<td>328 East 9th St, New York</td>
|
||||
</tr>
|
||||
<tr id="71" class="spotRow">
|
||||
<tr id="70" class="spotRow">
|
||||
<td class="name">Posman Books Chelsea Market</td>
|
||||
<td>75 9th Avenue, New York</td>
|
||||
</tr>
|
||||
<tr id="72" class="spotRow">
|
||||
<tr id="71" class="spotRow">
|
||||
<td class="name">POWERHOUSE @ IC</td>
|
||||
<td>220 36th Street, Building #2, Brooklyn</td>
|
||||
<td>220 36th St, Building #2, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="73" class="spotRow">
|
||||
<tr id="72" class="spotRow">
|
||||
<td class="name">POWERHOUSE Arena</td>
|
||||
<td>28 Adams St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="74" class="spotRow">
|
||||
<tr id="73" class="spotRow">
|
||||
<td class="name">POWERHOUSE on 8th</td>
|
||||
<td>1111 8th Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="75" class="spotRow">
|
||||
<tr id="74" class="spotRow">
|
||||
<td class="name">Printed Matter</td>
|
||||
<td>231 11th Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="76" class="spotRow">
|
||||
<tr id="75" class="spotRow">
|
||||
<td class="name">Printed Matter St. Marks</td>
|
||||
<td>38 St. Marks Pl, New York</td>
|
||||
</tr>
|
||||
<tr id="77" class="spotRow">
|
||||
<tr id="76" class="spotRow">
|
||||
<td class="name">Quest Bookshop</td>
|
||||
<td>240 E 53rd St, New York</td>
|
||||
</tr>
|
||||
<tr id="78" class="spotRow">
|
||||
<tr id="77" class="spotRow">
|
||||
<td class="name">Quimby's Bookstore</td>
|
||||
<td>536 Metropolitan Avenue, Brooklyn</td>
|
||||
<td>536 Metropolitan Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="79" class="spotRow">
|
||||
<tr id="78" class="spotRow">
|
||||
<td class="name">Recirculation</td>
|
||||
<td>876 Riverside Dr, New York</td>
|
||||
</tr>
|
||||
<tr id="80" class="spotRow">
|
||||
<tr id="79" class="spotRow">
|
||||
<td class="name">Respect For Life Books-N-Things</td>
|
||||
<td>537 Nostrand Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="81" class="spotRow">
|
||||
<tr id="80" class="spotRow">
|
||||
<td class="name">Revolution Books</td>
|
||||
<td>437 Malcolm X Blvd, New York</td>
|
||||
</tr>
|
||||
<tr id="82" class="spotRow">
|
||||
<tr id="81" class="spotRow">
|
||||
<td class="name">Rizzoli Bookstore</td>
|
||||
<td>1133 Broadway, New York</td>
|
||||
</tr>
|
||||
<tr id="83" class="spotRow">
|
||||
<tr id="82" class="spotRow">
|
||||
<td class="name">Shakespeare & Company</td>
|
||||
<td>939 Lexington Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="84" class="spotRow">
|
||||
<tr id="83" class="spotRow">
|
||||
<td class="name">
|
||||
Shakespeare & Company (Upper West Side)
|
||||
</td>
|
||||
<td>2020 Broadway, New York</td>
|
||||
</tr>
|
||||
<tr id="85" class="spotRow">
|
||||
<tr id="84" class="spotRow">
|
||||
<td class="name">Sister's Uptown Bookstore</td>
|
||||
<td>1942 Amsterdam Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="86" class="spotRow">
|
||||
<tr id="85" class="spotRow">
|
||||
<td class="name">Spoonbill & Sugartown, Booksellers</td>
|
||||
<td>218 Bedford Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="87" class="spotRow">
|
||||
<tr id="86" class="spotRow">
|
||||
<td class="name">Standards Manual</td>
|
||||
<td>212 Franklin Street, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="88" class="spotRow">
|
||||
<tr id="87" class="spotRow">
|
||||
<td class="name">Strand Bookstore</td>
|
||||
<td>828 Broadway, New York</td>
|
||||
</tr>
|
||||
<tr id="89" class="spotRow">
|
||||
<tr id="88" class="spotRow">
|
||||
<td class="name">Sweet Pickle Books</td>
|
||||
<td>47 Orchard St, New York</td>
|
||||
</tr>
|
||||
<tr id="89" class="spotRow">
|
||||
<td class="name">Taylor & Co. Books</td>
|
||||
<td>1021 Cortelyou Rd, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="90" class="spotRow">
|
||||
<td class="name">Terrace Books</td>
|
||||
<td>242 Prospect Park West, Brooklyn</td>
|
||||
@@ -563,56 +562,68 @@
|
||||
<td>58 Warren St, New York</td>
|
||||
</tr>
|
||||
<tr id="98" class="spotRow">
|
||||
<td class="name">The Strand At Columbus Ave</td>
|
||||
<td>450 Columbus Avenue, New York</td>
|
||||
<td class="name">The Ripped Bodice</td>
|
||||
<td>218 5th Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="99" class="spotRow">
|
||||
<td class="name">The Word Is Change</td>
|
||||
<td>368 Tompkins Avenue, Brooklyn</td>
|
||||
<td class="name">The Strand At Columbus Ave</td>
|
||||
<td>450 Columbus Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="100" class="spotRow">
|
||||
<td class="name">Three Lives & Company</td>
|
||||
<td>238 West 10th St, New York</td>
|
||||
<td class="name">The Word Is Change</td>
|
||||
<td>368 Tompkins Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="101" class="spotRow">
|
||||
<td class="name">Three Lives & Company</td>
|
||||
<td>154 W 10th St, New York</td>
|
||||
</tr>
|
||||
<tr id="102" class="spotRow">
|
||||
<td class="name">Topos Bookstore Cafe</td>
|
||||
<td>788 Woodward Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="102" class="spotRow">
|
||||
<tr id="103" class="spotRow">
|
||||
<td class="name">Topos Too</td>
|
||||
<td>59-22 Myrtle Ave, Queens</td>
|
||||
</tr>
|
||||
<tr id="104" class="spotRow">
|
||||
<td class="name">Troubled Sleep Books</td>
|
||||
<td>129 6th Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="103" class="spotRow">
|
||||
<tr id="105" class="spotRow">
|
||||
<td class="name">Turn The Page... Again</td>
|
||||
<td>39-15a Bell Blvd, Flushing</td>
|
||||
</tr>
|
||||
<tr id="104" class="spotRow">
|
||||
<tr id="106" class="spotRow">
|
||||
<td class="name">Unnameable Books</td>
|
||||
<td>600 Vanderbilt Ave, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="105" class="spotRow">
|
||||
<tr id="107" class="spotRow">
|
||||
<td class="name">Ursus Books</td>
|
||||
<td>50 East 78th St, Suite 1C, New York</td>
|
||||
</tr>
|
||||
<tr id="106" class="spotRow">
|
||||
<tr id="108" class="spotRow">
|
||||
<td class="name">Village Works</td>
|
||||
<td>12 St. Marks Pl, New York</td>
|
||||
</tr>
|
||||
<tr id="109" class="spotRow">
|
||||
<td class="name">Westsider Rare & Used Books</td>
|
||||
<td>2246 Broadway, New York</td>
|
||||
</tr>
|
||||
<tr id="107" class="spotRow">
|
||||
<tr id="110" class="spotRow">
|
||||
<td class="name">Westsider Records</td>
|
||||
<td>233 West 72nd St, New York</td>
|
||||
</tr>
|
||||
<tr id="108" class="spotRow">
|
||||
<tr id="111" class="spotRow">
|
||||
<td class="name">Word Bookstore</td>
|
||||
<td>126 Franklin St, Brooklyn</td>
|
||||
</tr>
|
||||
<tr id="109" class="spotRow">
|
||||
<tr id="112" class="spotRow">
|
||||
<td class="name">Word Up Books</td>
|
||||
<td>2113 Amsterdam Ave, New York</td>
|
||||
</tr>
|
||||
<tr id="110" class="spotRow">
|
||||
<tr id="113" class="spotRow">
|
||||
<td class="name">Yu and Me Books</td>
|
||||
<td>44 Mulberry St, New York</td>
|
||||
<td>115 Delancey St Stall #11, New York</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -672,7 +683,6 @@
|
||||
${city}, NY ${postcode}
|
||||
</p>
|
||||
<p>
|
||||
View in:
|
||||
<a
|
||||
href="https://maps.google.com/maps?q=${encodeURIComponent(
|
||||
name
|
||||
@@ -693,17 +703,13 @@
|
||||
: ""
|
||||
}
|
||||
</p>
|
||||
<ul>
|
||||
${
|
||||
website
|
||||
? `<li><a href="${website}" target="_blank">${cleanWebsite(
|
||||
? `<p><a href="${website}" target="_blank">${cleanWebsite(
|
||||
website
|
||||
)}</a></li>`
|
||||
)}</a></p>`
|
||||
: ""
|
||||
}
|
||||
<li class="storeDetails">Events: ${events}</li>
|
||||
<li class="storeDetails">Café: ${cafe}</li>
|
||||
</ul>
|
||||
${description ? `<p class="description">${description}</p>` : ""}`;
|
||||
}
|
||||
|
||||
@@ -807,6 +813,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
function isStacked() {
|
||||
return screen.width < 1120;
|
||||
}
|
||||
|
||||
function boundingBox(point) {
|
||||
// add some buffer to a point to give the user some leeway
|
||||
return [
|
||||
@@ -816,7 +826,11 @@
|
||||
}
|
||||
|
||||
function updateSelectedStore(store, pushState = false) {
|
||||
map.flyTo({ center: [store.long, store.lat], zoom: 12 });
|
||||
map.flyTo({
|
||||
center: [store.long, store.lat],
|
||||
offset: [isStacked() ? 0 : -250, 0],
|
||||
zoom: 13,
|
||||
});
|
||||
|
||||
popup.setLngLat([store.long, store.lat]).setHTML(store.name).addTo(map);
|
||||
|
||||
@@ -838,8 +852,6 @@
|
||||
}
|
||||
|
||||
function loadMap(data) {
|
||||
var geolocate = new mapboxgl.GeolocateControl();
|
||||
|
||||
var points = [];
|
||||
data.forEach((value, key) => {
|
||||
points.push({
|
||||
@@ -870,7 +882,6 @@
|
||||
},
|
||||
});
|
||||
map.addControl(new mapboxgl.NavigationControl(), "top-left");
|
||||
map.addControl(geolocate, "top-right");
|
||||
updateViewBySlug(window.location.hash.split("#")[1]);
|
||||
});
|
||||
|
||||
@@ -903,20 +914,12 @@
|
||||
map.getCanvas().style.cursor = features.length ? "pointer" : "";
|
||||
});
|
||||
|
||||
geolocate.on("geolocate", function (e) {
|
||||
map.setZoom(14);
|
||||
popup
|
||||
.setLngLat([e.coords.longitude, e.coords.latitude])
|
||||
.setHTML("Current Location")
|
||||
.addTo(map);
|
||||
});
|
||||
|
||||
setContent("Stores", TableViewTemplate(data));
|
||||
document.querySelectorAll("#Stores tbody tr").forEach((element) => {
|
||||
element.addEventListener("click", () => {
|
||||
updateSelectedStore(data[element.id], true);
|
||||
document
|
||||
.getElementById("subhed")
|
||||
.getElementById(isStacked() ? "map" : "selected")
|
||||
.scrollIntoView({ behavior: "smooth" });
|
||||
});
|
||||
});
|
||||
@@ -924,29 +927,5 @@
|
||||
document.getElementById("viewInfo").addEventListener("click", showInfo);
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
(function (i, s, o, g, r, a, m) {
|
||||
i["GoogleAnalyticsObject"] = r;
|
||||
(i[r] =
|
||||
i[r] ||
|
||||
function () {
|
||||
(i[r].q = i[r].q || []).push(arguments);
|
||||
}),
|
||||
(i[r].l = 1 * new Date());
|
||||
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
|
||||
a.async = 1;
|
||||
a.src = g;
|
||||
m.parentNode.insertBefore(a, m);
|
||||
})(
|
||||
window,
|
||||
document,
|
||||
"script",
|
||||
"https://www.google-analytics.com/analytics.js",
|
||||
"ga"
|
||||
);
|
||||
|
||||
ga("create", "UA-100418882-1", "auto");
|
||||
ga("send", "pageview");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
34
index.js
34
index.js
@@ -1,7 +1,39 @@
|
||||
import { load } from "cheerio";
|
||||
import { readFile, writeFile } from "fs";
|
||||
import process from "child_process";
|
||||
import stores from "./stores.json" assert { type: "json" };
|
||||
|
||||
function GetRecentChanges() {
|
||||
const res = process
|
||||
.execSync('git log -15 --pretty=format:"%ct %s"')
|
||||
.toString();
|
||||
return res.split("\n");
|
||||
}
|
||||
|
||||
function ChangeLog(logs) {
|
||||
let res = "\n";
|
||||
let i = 0;
|
||||
logs.forEach((l) => {
|
||||
if (
|
||||
i > 3 ||
|
||||
l.includes("[skip]") ||
|
||||
l.includes("caddy") ||
|
||||
l.includes("renovate")
|
||||
) {
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
const s = l.split(" ");
|
||||
const date = new Date(s[0] * 1000).toLocaleDateString("en-US", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
});
|
||||
res = res + `<li>${date} - ${s.slice(1).join(" ")}</li>\n`;
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
function TableViewTemplate(rows) {
|
||||
let table = "<table>";
|
||||
rows.forEach((row, key) => {
|
||||
@@ -20,6 +52,7 @@ function TableRowTemplate({ rowNumber, name, address, city }) {
|
||||
}
|
||||
|
||||
readFile("./index.html", function (err, data) {
|
||||
const changeList = GetRecentChanges();
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
@@ -40,6 +73,7 @@ readFile("./index.html", function (err, data) {
|
||||
day: "numeric",
|
||||
})
|
||||
);
|
||||
$("#changesList").html(ChangeLog(changeList));
|
||||
const cssurl = $("link[type='text/css']").attr("href").split("?")[0];
|
||||
$("link[type='text/css']").attr("href", cssurl + "?" + new Date().getTime());
|
||||
writeFile("./index.html", $.html(), (err) => {
|
||||
|
||||
3
renovate.json
Normal file
3
renovate.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
||||
}
|
||||
204
stores.json
204
stores.json
@@ -43,13 +43,13 @@
|
||||
},
|
||||
{
|
||||
"name": "Astoria Bookshop",
|
||||
"address": "31-29 31st St",
|
||||
"address": "36-19 30th St",
|
||||
"city": "Astoria",
|
||||
"state": "NY",
|
||||
"postcode": "11106",
|
||||
"description": "The Astoria Bookshop is a general-interest bookstore with a decently-sized children's department. It also hosts book clubs and signings.",
|
||||
"lat": "40.763494",
|
||||
"long": "-73.923838",
|
||||
"lat": "40.7563539364933",
|
||||
"long": "-73.93073227116471",
|
||||
"country": "USA",
|
||||
"website": "https://www.astoriabookshop.com/",
|
||||
"events": "Yes",
|
||||
@@ -149,7 +149,7 @@
|
||||
"lat": "40.733032",
|
||||
"long": "-73.98996",
|
||||
"country": "USA",
|
||||
"website": "https://www.instagram.com/alabasterbooks/",
|
||||
"website": "https://www.instagram.com/alabasterbookshop/",
|
||||
"events": "No",
|
||||
"cafe": "No"
|
||||
},
|
||||
@@ -195,20 +195,6 @@
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Greenlight Bookstore (Prospect Lefferts Gardens)",
|
||||
"address": "632 Flatbush Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11225",
|
||||
"description": "",
|
||||
"lat": "40.657927",
|
||||
"long": "-73.960535",
|
||||
"country": "USA",
|
||||
"website": "https://www.greenlightbookstore.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Dashwood Books",
|
||||
"address": "33 Bond St",
|
||||
@@ -309,13 +295,13 @@
|
||||
},
|
||||
{
|
||||
"name": "Three Lives & Company",
|
||||
"address": "238 West 10th St",
|
||||
"address": "154 W 10th St",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10014",
|
||||
"description": "Unselfconsciously old-fashioned, Three Lives (the name comes from the trio of women founders as well as the Gertrude Stein novel) occupies a former deli. A gorgeous space with dark wood everywhere, they sell mainly literary fiction, with a selection of literary magazines and travel guides as well. The staff are enthusiastic and deeply knowledgable. Temporarily moved from 154 West 10th St.",
|
||||
"lat": "40.733749",
|
||||
"long": "-74.005438",
|
||||
"description": "Unselfconsciously old-fashioned, Three Lives (the name comes from the trio of women founders as well as the Gertrude Stein novel) occupies a former deli. A gorgeous space with dark wood everywhere, they sell mainly literary fiction, with a selection of literary magazines and travel guides as well. The staff are enthusiastic and deeply knowledgable.",
|
||||
"lat": "40.734402117180856",
|
||||
"long": "-74.00149889306957",
|
||||
"country": "USA",
|
||||
"website": "http://www.threelives.com/",
|
||||
"events": "Yes",
|
||||
@@ -433,20 +419,6 @@
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Idlewild Books",
|
||||
"address": "170 7th Avenue S",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10014",
|
||||
"description": "Idlewild Books started off as a store for travel guides and books for armchair travelers; over time, the selection has started to cater more to those interested in learning another language, but the Manhattan location has maintained a large selection of books from and about far-flung corners of the globe. Langauge classes are also available here and at the other two locations in the city.",
|
||||
"lat": "40.7355778",
|
||||
"long": "-74.0017457",
|
||||
"country": "USA",
|
||||
"website": "https://www.idlewildbooks.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Posman Books Chelsea Market",
|
||||
"address": "75 9th Avenue",
|
||||
@@ -685,20 +657,6 @@
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Boulevard Books",
|
||||
"address": "7518 13th Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11228",
|
||||
"description": "",
|
||||
"lat": "40.61998",
|
||||
"long": "-74.0080949",
|
||||
"country": "USA",
|
||||
"website": "https://facebook.com/boulevardbookstore/",
|
||||
"events": "Yes",
|
||||
"cafe": "Yes"
|
||||
},
|
||||
{
|
||||
"name": "Better Read Than Dead",
|
||||
"address": "867 Broadway",
|
||||
@@ -813,13 +771,13 @@
|
||||
},
|
||||
{
|
||||
"name": "Catland",
|
||||
"address": "987 Flushing Ave",
|
||||
"address": "985 Flushing Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11206",
|
||||
"description": "New York City has an occult bookstore again, thanks to Catland. This store caters to those interested in the various schools of modern magical thought, and we're not talking about stage magic. New titles are available from various occult publishers, including imports from Europe and other hard-to-find titles, and there are also used and out-of-print resources. The store also sells candles, minerals, and other paraphenalia for the serious occultist, and has an adjacent event space for... other purposes.",
|
||||
"lat": "40.70313",
|
||||
"long": "-73.933208",
|
||||
"lat": "40.70308451154855",
|
||||
"long": "-73.9332990716122",
|
||||
"country": "USA",
|
||||
"website": "https://www.catlandbooks.com/",
|
||||
"events": "Yes",
|
||||
@@ -869,17 +827,17 @@
|
||||
},
|
||||
{
|
||||
"name": "Archestratus",
|
||||
"address": "160 Huron St",
|
||||
"address": "164 Huron St",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11222",
|
||||
"description": "Archestratus is a combination cookbook bookstore, café, and restaurant on Thursday evenings serving Sicilian-inspired food. A gorgeous, bright space with a wide selection of cookbooks, both new and used, as well as fiction and non-fiction on and relating to gustatory pleasure. Includes stationary, a small selection of pantry items, and a children's section.",
|
||||
"lat": "40.732808",
|
||||
"long": "-73.955144",
|
||||
"description": "Archestratus is a combination cookbook-bookstore and grocery. A gorgeous, bright space with a wide selection of cookbooks, both new and used, as well as fiction and non-fiction on and relating to gustatory pleasure. Includes stationary, a small selection of pantry items, and a children's section.",
|
||||
"lat": "40.73291914466089",
|
||||
"long": "-73.955081286067",
|
||||
"country": "USA",
|
||||
"website": "https://www.archestrat.us/",
|
||||
"events": "Yes",
|
||||
"cafe": "Yes"
|
||||
"cafe": "Sandwiches and Groceries"
|
||||
},
|
||||
{
|
||||
"name": "Quest Bookshop",
|
||||
@@ -1203,20 +1161,6 @@
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Avoid The Day Bookstore & Cafe",
|
||||
"address": "99-04 A Rockaway Beach Blvd",
|
||||
"city": "Rockaway Park",
|
||||
"state": "NY",
|
||||
"postcode": "11694",
|
||||
"description": "",
|
||||
"lat": "40.584264",
|
||||
"long": "-73.820613",
|
||||
"country": "USA",
|
||||
"website": "https://www.avoidtheday.org/",
|
||||
"events": "Yes",
|
||||
"cafe": "Yes"
|
||||
},
|
||||
{
|
||||
"name": "Bravo's Book Nook",
|
||||
"address": "115 MacDougal St",
|
||||
@@ -1303,17 +1247,17 @@
|
||||
},
|
||||
{
|
||||
"name": "Yu and Me Books",
|
||||
"address": "44 Mulberry St",
|
||||
"address": "115 Delancey St Stall #11",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10013",
|
||||
"description": "",
|
||||
"lat": "40.7150026491681",
|
||||
"long": "-73.99949344452915",
|
||||
"postcode": "10002",
|
||||
"description": "Temporarily located in Essex Market after a fire ruined their original Chinatown location.",
|
||||
"lat": "40.71799108242515",
|
||||
"long": "-73.98821173877292",
|
||||
"country": "USA",
|
||||
"website": "https://www.yuandmebooks.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "Yes?"
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Bookoff Brooklyn",
|
||||
@@ -1359,17 +1303,17 @@
|
||||
},
|
||||
{
|
||||
"name": "Burnt Books",
|
||||
"address": "1014 Manhattan Ave",
|
||||
"address": "157 Huron St",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11222",
|
||||
"description": "Inside the bodega at this address.",
|
||||
"lat": "40.733568440405016",
|
||||
"long": "-73.95461455767136",
|
||||
"description": "Inside Hey Kids! Comics.",
|
||||
"lat": "40.73311524313807",
|
||||
"long": "-73.95524501396707",
|
||||
"country": "USA",
|
||||
"website": "https://www.instagram.com/burnt_books_/",
|
||||
"events": "No",
|
||||
"cafe": "Yes?"
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Hey Kids! Comics",
|
||||
@@ -1471,13 +1415,13 @@
|
||||
},
|
||||
{
|
||||
"name": "Adanne",
|
||||
"address": "234 Water St",
|
||||
"address": "115 Ralph Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11201",
|
||||
"postcode": "11221",
|
||||
"description": "",
|
||||
"lat": "40.70288951770088",
|
||||
"long": "-73.98444221660601",
|
||||
"lat": "40.686078937932145",
|
||||
"long": "-73.92321820991805",
|
||||
"country": "USA",
|
||||
"website": "https://adanne.co/",
|
||||
"events": "Yes",
|
||||
@@ -1531,7 +1475,7 @@
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10014",
|
||||
"description": "",
|
||||
"description": "A revival of an older shop by the same name in the same neighborhood, Left Bank Books is a used-book seller specializing in fiction, art and photo books, as well as 'first or interesting editions of books in good condition'. The storefront is small and tidy, with a varied, interesting selection.",
|
||||
"lat": "40.73571487088914",
|
||||
"long": "-74.00279887704167",
|
||||
"country": "USA",
|
||||
@@ -1566,5 +1510,89 @@
|
||||
"website": "https://www.blackspringbookstore.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Passageway Books",
|
||||
"address": "150 9th Ave",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10011",
|
||||
"description": "",
|
||||
"lat": "40.74412894095414",
|
||||
"long": "-74.00282753618434",
|
||||
"country": "USA",
|
||||
"website": "https://www.instagram.com/passageway_books/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Taylor & Co. Books",
|
||||
"address": "1021 Cortelyou Rd",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11218",
|
||||
"description": "",
|
||||
"lat": "40.63931763103944",
|
||||
"long": "-73.96838123421915",
|
||||
"country": "USA",
|
||||
"website": "https://www.taylorcobooks.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "The Ripped Bodice",
|
||||
"address": "218 5th Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11215",
|
||||
"description": "",
|
||||
"lat": "40.67614895922998",
|
||||
"long": "-73.98099066262628",
|
||||
"country": "USA",
|
||||
"website": "https://www.therippedbodicela.com/ripped-bodice-brooklyn",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Lofty Pigeon Books",
|
||||
"address": "743 Church Ave",
|
||||
"city": "Brooklyn",
|
||||
"state": "NY",
|
||||
"postcode": "11218",
|
||||
"description": "",
|
||||
"lat": "40.646037403744415",
|
||||
"long": "-73.97189664018556",
|
||||
"country": "USA",
|
||||
"website": "https://www.loftypigeonbooks.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "No"
|
||||
},
|
||||
{
|
||||
"name": "Village Works",
|
||||
"address": "12 St. Marks Pl",
|
||||
"city": "New York",
|
||||
"state": "NY",
|
||||
"postcode": "10003",
|
||||
"description": "",
|
||||
"lat": "40.72914082270099",
|
||||
"long": "-73.98920772389302",
|
||||
"country": "USA",
|
||||
"website": "https://www.villageworksnyc.com/",
|
||||
"events": "Yes",
|
||||
"cafe": "Soon?"
|
||||
},
|
||||
{
|
||||
"name": "Topos Too",
|
||||
"address": "59-22 Myrtle Ave",
|
||||
"city": "Queens",
|
||||
"state": "NY",
|
||||
"postcode": "11385",
|
||||
"description": "",
|
||||
"lat": "40.70042656211568",
|
||||
"long": "-73.89895900901953",
|
||||
"country": "USA",
|
||||
"website": "https://www.toposbookstore.com/",
|
||||
"events": "?",
|
||||
"cafe": "No"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user