PageSourceSearch

https://www.arbo.org/cope/optometrist-search

html arbo.org collected 2026-10-02 10:05:39 UTC 41,568 bytes, 680 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en" translate="no">
3<head>
4  <title>Find an Optometrist — ARBO</title>
5  <meta charset="utf-8" />
6  <meta http-equiv="Content-Language" content="en" />
7  <meta name="google" content="notranslate" />
8  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui"/>
9  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
10  <meta name="description" content="ARBO template made using Bootstrap 5 and it has huge amount of ready made feature, UI components, pages which completely fulfills any dashboard needs."/>
11  <meta name="keywords" content="flat ui, admin Admin , Responsive, Landing, Bootstrap, App, Template, Mobile, iOS, Android, apple, creative app"/>
12  <meta name="author" content="arbo" />
13  <link rel="icon" href="/dist-v1/assets/images/favicon.ico" type="image/x-icon"/>
14  <link rel="preconnect" href="https://fonts.googleapis.com" />
15  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
16  <link href="https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;600;700&family=Source+Serif+4:opsz,[email protected],400;8..60,600;8..60,700&display=swap" rel="stylesheet" />
17  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" />
18  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css">
19
20  <link rel="stylesheet" href="https://cdn.datatables.net/3.0.3/css/dataTables.bootstrap5.min.css" />
21  <link rel="stylesheet" href="https://cdn.datatables.net/responsive/4.0.3/css/responsive.bootstrap5.min.css" />
22  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/css/bootstrap-datepicker.standalone.min.css" integrity="sha512-D5/oUZrMTZE/y4ldsD6UOeuPR4lwjLnfNMWkjC0pffPTCVlqzcHTNvkn3dhL7C0gYifHQJAIrRTASbMvLmpEug==" crossorigin="anonymous" referrerpolicy="no-referrer">
23  <link rel="stylesheet" type="text/css" href="/dist-v1/assets/css/arbo-public.css"/>
24  </head>
25<body>
26
27<a class="arbo-skip-link" href="#main">Skip to main content</a>
28
29<!-- Utility bar ------------------------------------------------------------->
30<div class="arbo-utility">
31  <div class="container d-flex flex-wrap align-items-center justify-content-between gap-3 py-2">
32    <nav class="d-none d-md-flex align-items-center gap-4" aria-label="Utility">
33      <a href="/contact-us">Contact Us</a>
34      <a href="/faq">FAQ</a>
35      <a href="/cope/optometrist-search">Find an Optometrist</a>
36      <a href="/publications">Publications</a>
37    </nav>
38    <div class="d-flex align-items-center ms-auto gap-3">
39            <div class="dropdown">
40        <button class="btn btn-sm btn-arbo-gold dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Log in</button>
41        <ul class="dropdown-menu dropdown-menu-end">
42          <li><a class="dropdown-item" href="/oetracker/login"><span class="fst-italic">OE TRACKER</span></a></li>
43          <li><a class="dropdown-item" href="/reviewer/login">COPE Reviewer</a></li>
44          <li><a class="dropdown-item" href="/orgs/login">COPE Administrator</a></li>
45          <li><a class="dropdown-item" href="/memberboards/login">ARBO Member Boards</a></li>
46        </ul>
47      </div>
48          </div>
49  </div>
50</div>
51
52<!-- Main navigation --------------------------------------------------------->
53<nav class="navbar navbar-expand-lg arbo-navbar" aria-label="Main">
54  <div class="container position-relative">
55
56    <a class="navbar-brand d-flex align-items-center gap-2" href="/">
57      <img src="/images/logo_transparent_500px.png" alt="ARBO — Association of Regulatory Boards of Optometry" />
58    </a>
59
60    <button class="navbar-toggler border-0 my-2" type="button" data-bs-toggle="offcanvas" data-bs-target="#arboNav" aria-controls="arboNav" aria-label="Toggle navigation">
61      <span class="navbar-toggler-icon"></span>
62    </button>
63
64    <div class="offcanvas offcanvas-end offcanvas-lg arbo-offcanvas" tabindex="-1" id="arboNav" aria-labelledby="arboNavLabel">
65      <div class="offcanvas-header">
66        <span class="offcanvas-title" id="arboNavLabel">Menu</span>
67        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" data-bs-target="#arboNav" aria-label="Close"></button>
68      </div>
69      <div class="offcanvas-body p-0">
70        <ul class="navbar-nav ms-lg-auto align-items-lg-center">
71
72          <!-- COPE -->
73          <li class="nav-item dropdown position-lg-static">
74            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">COPE</a>
75            <div class="dropdown-menu arbo-mega">
76              <div class="container">
77                <div class="row g-4">
78                  <div class="col-lg-3 col-md-6">
79                    <div class="col-title">COPE Program</div>
80                    <a href="/cope">COPE Mission</a>
81                    <a href="/cope/overview">COPE Overview</a>
82                    <a href="/cope/info">COPE Information</a>
83                    <a href="/new-standards-integrity">Standards for Integrity</a>
84                    <a href="/cope/news">COPE News</a>
85                    <a href="/cope/committee">COPE Council</a>
86                    <a href="/cope-webinars">COPE Webinars</a>
87                  </div>
88                  <div class="col-lg-3 col-md-6">
89                    <div class="col-title">Courses</div>
90                    <a href="/cope/qualifications">Course Qualification</a>
91                    <a href="/courses/new">Course Submission</a>
92                    <a href="/courses/search">Course Search</a>
93                    <a href="/cope/review-fees">Course Review Fees</a>
94                    <div class="col-title mt-4">Reviewers</div>
95                    <a href="/reviewer">Become a COPE Reviewer</a>
96                    <a href="/reviewer/login">COPE Reviewer Login</a>
97                  </div>
98                  <div class="col-lg-3 col-md-6">
99                    <div class="col-title">Activities</div>
100                    <a href="/events">Activity Accreditation Info</a>
101                    <a href="/events/fees">Activity Fees</a>
102                    <a href="/orgs/admin">Activity Submission</a>
103                    <a href="/events/search">Activity Search</a>
104                    <div class="col-title mt-4">Administrators</div>
105                    <a href="/orgs">Become a COPE Admin</a>
106                    <a href="/orgs/login">COPE Admin Login</a>
107                    <a href="/orgs/adminlist">COPE Admin List</a>
108                  </div>
109                  <div class="col-lg-3 col-md-6">
110                    <div class="arbo-news arbo-news-rail">
111                      <div class="col-title mb-2">COPE News</div>
112                      <a href="#"><span class="hd">2025 COPE Data Report — get more information</span></a>
113                      <a href="#"><span class="hd">Summer 2026 GreenSheet</span></a>
114                      <a href="https://blog.arbo.org/"><span class="hd">Latest ARBO news on our blog</span></a>
115                      <div class="arbo-mega-promo mt-3">
116                        <div class="arbo-serif fs-6 mb-1">State &amp; Provincial CE Requirements</div>
117                        <a href="/cestateinfo" class="fw-semibold small" style="border-bottom:0;">Open the lookup &rarr;</a>
118                      </div>
119                    </div>
120                  </div>
121                </div>
122              </div>
123            </div>
124          </li>
125
126          <!-- OE TRACKER -->
127          <li class="nav-item dropdown position-lg-static">
128            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"><span class="fst-italic">OE TRACKER</span></a>
129            <div class="dropdown-menu arbo-mega">
130              <div class="container">
131                <div class="row g-4">
132                  <div class="col-lg-3 col-md-6">
133                    <div class="col-title">About</div>
134                    <a href="/oetracker">Features</a>
135                    <a href="/oetracker/fees">Fees</a>
136                    <a href="/oetracker/mobile">Mobile App</a>
137                    <a href="/mobileapp-comments">Mobile App Comments Form</a>
138                  </div>
139                  <div class="col-lg-3 col-md-6">
140                    <div class="col-title">Optometrists</div>
141                    <a href="/oetracker/setup-account">
141Create <span class="fst-italic">OE TRACKER</span> Account</a>
142                    <a href="/oetracker/login">Optometrist <span class="fst-italic">OE TRACKER</span> Login</a>
143                  </div>
144                  <div class="col-lg-3 col-md-6">
145                    <div class="col-title">Tools</div>
146                    <a href="/oetracker/lookup"><span class="fst-italic">OE TRACKER</span> Lookup</a>
147                    <a href="https://s3.amazonaws.com/arbo.org/public/OET+Fax+Cover+Sheet+2021.pdf" target="_blank"><span class="fst-italic">OE TRACKER</span> Fax Cover Sheet (PDF)</a>
148                  </div>
149                  <div class="col-lg-3 col-md-6">
150                    <div class="arbo-news arbo-news-rail">
151                      <div class="col-title mb-2"><span class="fst-italic">OE TRACKER</span> News</div>
152                      <a href="/oetracker/mobile"><span class="hd"><span class="fst-italic">OE TRACKER</span> Mobile App</span></a>
153                      <a href="#"><span class="hd">Summer 2026 GreenSheet</span></a>
154                      <a href="https://blog.arbo.org/"><span class="hd">Latest ARBO news on our blog</span></a>
155                      <div class="arbo-mega-promo mt-3">
156                        <div class="arbo-serif fs-6 mb-1">Track CE from anywhere</div>
157                        <a href="/oetracker/mobile" class="fw-semibold small" style="border-bottom:0;">Get the mobile app &rarr;</a>
158                      </div>
159                    </div>
160                  </div>
161                </div>
162              </div>
163            </div>
164          </li>
165
166          <!-- CELMO -->
167          <li class="nav-item dropdown position-lg-static">
168            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">CELMO</a>
169            <div class="dropdown-menu arbo-mega">
170              <div class="container">
171                <div class="row g-4">
172                  <div class="col-lg-3 col-md-6">
173                    <div class="col-title">Program</div>
174                    <a href="/celmo">Program Overview</a>
175                    <a href="/celmo/requirements">Certificate Requirements</a>
176                    <a href="https://s3.amazonaws.com/arbo.org/public/celmo_flowchart.pdf" target="_blank">CELMO Process (PDF)</a>
177                  </div>
178                  <div class="col-lg-3 col-md-6">
179                    <div class="col-title">Apply</div>
180                    <a href="/celmo/application">Application</a>
181                    <a href="/celmo/faq">CELMO FAQ</a>
182                  </div>
183                </div>
184              </div>
185            </div>
186          </li>
187
188          <!-- Meetings -->
189          <li class="nav-item dropdown position-lg-static">
190            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Meetings</a>
191            <div class="dropdown-menu arbo-mega">
192              <div class="container">
193                <div class="row g-4">
194                  <div class="col-lg-3 col-md-6">
195                    <div class="col-title">Annual Meetings</div>
196                    <a href="/meetings/2027">2027 Annual Meeting</a>
197                    <a href="/meetings/future">Future Annual Meetings</a>
198                  </div>
199                  <div class="col-lg-3 col-md-6">
200                    <div class="col-title">Webinars</div>
201                    <a href="/regulatory-webinars">ARBO Regulatory Webinars</a>
202                  </div>
203                  <div class="col-lg-3 col-md-6">
204                    <div class="arbo-mega-promo">
205                      <div class="col-title mb-2">Next up</div>
206                      <div class="arbo-serif fs-5 mb-2">2027 Annual Meeting — Boston, MA</div>
207                      <a href="/meetings/2027" class="fw-semibold" style="border-bottom:0;">Meeting details &rarr;</a>
208                    </div>
209                  </div>
210                </div>
211              </div>
212            </div>
213          </li>
214
215          <!-- About -->
216          <li class="nav-item dropdown position-lg-static">
217            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">About</a>
218            <div class="dropdown-menu arbo-mega">
219              <div class="container">
220                <div class="row g-4">
221                  <div class="col-lg-3 col-md-6">
222                    <div class="col-title">The Association</div>
223                    <a href="/history">ARBO History</a>
224                    <a href="/directors">Board of Directors</a>
225                    <a href="/committee-staff">Committees &amp; Staff</a>
226                    <a href="https://s3.amazonaws.com/arbo.org/public/ARBO+Bylaws+Amended+June+2024+FINAL.pdf" target="_blank">ARBO Bylaws (PDF)</a>
227                  </div>
228                  <div class="col-lg-3 col-md-6">
229                    <div class="col-title">Connect</div>
230                    <a href="/memberboards">Directory of Member Boards</a>
231                    <a href="/contact-us">Contact Us</a>
232                  </div>
233                </div>
234              </div>
235            </div>
236          </li>
237
238          <!-- Member Boards -->
239          <li class="nav-item dropdown position-lg-static">
240            <a class="nav-link arbo-nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Member Boards</a>
241            <div class="dropdown-menu arbo-mega">
242              <div class="container">
243                <div class="row g-4">
244                  <div class="col-lg-3 col-md-6">
245                    <div class="col-title">Resources</div>
246                    <a href="/cestateinfo">State/Provincial CE Requirements</a>
247                    <a href="/cestate-licensure-reqs">State/Provincial Licensing Requirements</a>
248                    <a href="/memberboards">Directory of Member Boards</a>
249                    <a href="/memberboards/login">Licensing Board Login</a>
250                  </div>
251                  <div class="col-lg-3 col-md-6">
252                    <div class="col-title">Info Center</div>
253                    <a href="https://blog.arbo.org">ARBO Blog</a>
254                    <a href="/publications">Publications</a>
255                    <a href="/documents">Public Documents</a>
256                    <a href="/links">Public Links</a>
257                    <a href="/security">Privacy &amp; Security</a>
258                  </div>
259                </div>
260              </div>
261            </div>
262          </li>
263
264        </ul>
265      </div>
266    </div>
267  </div>
268</nav>
269
270<!-- Hero -------------------------------------------------------------------->
271<section class="arbo-page-header">
272    <div class="container">
273        <div class="row align-items-center g-4">
274            <div class="col-lg-8">
275                <div class="arbo-eyebrow mb-3">Association of Regulatory Boards of Optometry</div>
276                <h1>Find an Optometrist</h1>
277                <p class="sub">Search optometrists in the ARBO database.</p>
278            </div>
279            <div class="col-lg-4 d-flex justify-content-lg-end">
280                <div class="arbo-logo-plate" style="padding:18px 22px;">
281                    <img src="/images/logo_transparent_500px.png" alt="Optometrist examining a patient at a slit lamp" width="249" height="133" style="display:block; width:186px; height:auto;" />
282                </div>
283            </div>
284
285
286        </div>
287    </div>
288</section>
289
290
291<!-- Main -------------------------------------------------------------------->
292<div class="container py-5" id="main">
293    <div class="arbo-table-panel">
294
295        <div class="arbo-table-toolbar">
296            <div class="d-flex flex-wrap align-items-center justify-content-between gap-3">
297                <div>
298                    <h2>Optometrist List</h2>
299                    <p class="hint">Search by name, city or state. Only optometrists who have chosen to be listed appear in these results.</p>
300                </div>
301                <button class="btn btn-arbo-gold px-4 py-2" type="button" data-bs-toggle="modal" data-bs-target="#optoSearchModal">Find an Optometrist</button>
302            </div>
303
304            <div class="arbo-filter-chips mt-3 d-none" id="activeFilters">
305                <span class="arbo-eyebrow me-1">Search</span>
306            </div>
307        </div>
308
309        <div class="p-4 p-md-5 text-center" id="startState">
310            <p class="arbo-eyebrow mb-2">No search yet</p>
311            <p class="arbo-serif fs-4 mb-2" style="color:var(--arbo-green-dark);">Start with a name, city or state</p>
312            <p class="arbo-empty mb-4">Results appear here once you run a search.</p>
313            <button class="btn btn-arbo-gold px-4 py-2" type="button" data-bs-toggle="modal" data-bs-target="#optoSearchModal">Open search</button>
314        </div>
315
316        <div class="table-responsive d-none" id="resultsWrap">
317            <table id="optoTable" class="table w-100">
318                <thead>
319                <tr>
320                    <th scope="col">Name</th>
321                    <th scope="col">Practice address</th>
322                    <th scope="col">State</th>
323                    <th scope="col">Phone</th>
324                </tr>
325                </thead>
326                <tbody></tbody>
327            </table>
328        </div>
329    </div>
330
331    <p class="mt-4 mb-0" style="font-size:14px; color:var(--arbo-muted); max-width:70ch;">Contact details are supplied by the optometrist and maintained in their <span class="fst-italic">OE TRACKER</span> account. To correct or remove a listing, <a href="/contact-us">contact ARBO</a>.</p>
332</div>
333
334<!-- Optometrist Search modal ------------------------------------------------>
335<div class="modal fade" id="optoSearchModal" tabindex="-1" aria-labelledby="optoSearchLabel" aria-hidden="true">
336    <div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
337        <div class="modal-content">
338
339            <div class="modal-header">
340                <h2 class="modal-title" id="optoSearchLabel">Optometrist Search</h2>
341                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
342            </div>
343
344            <form id="optoSearchForm">
345                <div class="modal-body">
346                    <div class="arbo-callout arbo-callout-error mb-4 d-none" id="searchError" role="alert">
347                        <p class="hd">Too many results</p>
348                        <p class="mb-0" id="searchErrorMsg">Please provide more specific search terms.</p>
349                    </div>
350
351                    <fieldset class="arbo-fieldset">
352                        <legend>Name</legend>
353                        <div class="row g-3">
354                            <div class="col-md-6">
355                                <label class="form-label" for="qFirst">First name</label>
356                                <input class="form-control" type="text" id="qFirst" name="fname" maxlength="255" placeholder="Starts with" />
357                            </div>
358                            <div class="col-md-6">
359                                <label class="form-label" for="qLast">Last name</label>
360                                <input class="form-control" type="text" id="qLast" name="lname" maxlength="255" placeholder="Starts with" />
361                            </div>
362                        </div>
363                    </fieldset>
364
365                    <fieldset class="arbo-fieldset mb-0">
366                        <legend>Location</legend>
367                        <div class="row g-3">
368                            <div class="col-md-6">
369                                <label class="form-label" for="qCity">City</label>
370                                <input class="form-control" type="text" id="qCity" name="city" maxlength="255" placeholder="Starts with" />
371                            </div>
372                            <div class="col-md-6">
373                                <label class="form-label" for="qState">State / Province</label>
374                                <select class="form-select" id="qState" name="state">
375                                    <option value="" selected>Any State</option>
376                                                                        <option value="AB" >AB - Alberta
377                                                                        <option value="AK" >AK - Alaska
378                                                                        <option value="AL" >AL - Alabama
379                                                                        <option value="AR" >AR - Arkansas
380                                                                        <option value="AU" >AU - Australia
381                                                                        <option value="AZ" >AZ - Arizona
382                                                                        <option value="BC" >BC - British Columbia
383                                                                        <option value="CA" >CA - California
384                                                                        <option value="CO" >CO - Colorado
385                                                                        <option value="CT" >CT - Connecticut
386                                                                        <option value="DC" >DC - District of Columbia
387                                                                        <option value="DE" >DE - Delaware
388                                                                        <option value="FL" >FL - Florida
389                                                                        <option value="GA" >GA - Georgia
390                                                                        <option value="GU" >GU - Guam
391                                                                        <option value="HI" >HI - Hawaii
392                                                                        <option value="IA" >IA - Iowa
393                                                                        <option value="ID" >ID - Idaho
394                                                                        <option value="IL" >IL - Illinois
395                                                                        <option value="IN" >IN - Indiana
396                                                                        <option value="KS" >KS - Kansas
397                                                                        <option value="KY" >KY - Kentucky
398                                                                        <option value="LA" >
398LA - Louisiana
399                                                                        <option value="MA" >MA - Massachusetts
400                                                                        <option value="MB" >MB - Manitoba
401                                                                        <option value="MD" >MD - Maryland
402                                                                        <option value="ME" >ME - Maine
403                                                                        <option value="MI" >MI - Michigan
404                                                                        <option value="MN" >MN - Minnesota
405                                                                        <option value="MO" >MO - Missouri
406                                                                        <option value="MS" >MS - Mississippi
407                                                                        <option value="MT" >MT - Montana
408                                                                        <option value="NB" >NB - New Brunswick
409                                                                        <option value="NC" >NC - North Carolina
410                                                                        <option value="ND" >ND - North Dakota
411                                                                        <option value="NE" >NE - Nebraska
412                                                                        <option value="NF" >NF - Newfoundland and Labrador
413                                                                        <option value="NH" >NH - New Hampshire
414                                                                        <option value="NJ" >NJ - New Jersey
415                                                                        <option value="NL" >NL - Newfoundland and Labrador
416                                                                        <option value="NM" >NM - New Mexico
417                                                                        <option value="NS" >NS - Nova Scotia
418                                                                        <option value="NT" >NT - Northwest Territories
419                                                                        <option value="NU" >NU - Nunavut
420                                                                        <option value="NV" >NV - Nevada
421                                                                        <option value="NY" >NY - New York
422                                                                        <option value="NZ" >NZ - New Zealand
423                                                                        <option value="OH" >OH - Ohio
424                                                                        <option value="OK" >OK - Oklahoma
425                                                                        <option value="ON" >ON - Ontario
426                                                                        <option value="OR" >OR - Oregon
427                                                                        <option value="PA" >PA - Pennsylvania
428                                                                        <option value="PE" >PE - Prince Edward Island
429                                                                        <option value="PR" >PR - Puerto Rico
430                                                                        <option value="QC" >QC - Quebec
431                                                                        <option value="RI" >RI - Rhode Island
432                                                                        <option value="SC" >SC - South Carolina
433                                                                        <option value="SD" >SD - South Dakota
434                                                                        <option value="SK" >SK - Saskatchewan
435                                                                        <option value="TN" >TN - Tennessee
436                                                                        <option value="TX" >TX - Texas
437                                                                        <option value="UT" >UT - Utah
438                                                                        <option value="VA" >VA - Virginia
439                                                                        <option value="VI" >VI - Virgin Islands
440                                                                        <option value="VT" >VT - Vermont
441                                                                        <option value="WA" >WA - Washington
442                                                                        <option value="WI" >WI - Wisconsin
443                                                                        <option value="WV" >
443WV - West Virginia
444                                                                        <option value="WY" >WY - Wyoming
445                                                                        <option value="YT" >YT - Yukon Territories
446                                                                    </select>
447                            </div>
448                        </div>
449                    </fieldset>
450
451                </div>
452
453                <div class="modal-footer d-flex justify-content-between">
454                    <button class="btn btn-outline-secondary" type="reset">Reset</button>
455                    <button class="btn btn-arbo-gold px-5" type="button" id="optoSearchSubmitBtn">Search</button>
456                </div>
457            </form>
458
459        </div>
460    </div>
461</div>
462
463<!-- Footer ------------------------------------------------------------------>
464<footer class="arbo-footer">
465  <div class="container d-flex flex-wrap justify-content-between align-items-center gap-3">
466    <div>Copyright &copy; 2026 ARBO. All rights reserved.</div>
467    <a href="https://www.facebook.com/Association-of-Regulatory-Boards-of-Optometry-127983077242338/">Visit our Facebook page</a>
468  </div>
469</footer>
470
471<script type="text/javascript" src="/dist-v1/bower_components/jquery/js/jquery.min.js"></script>
vendor: 1 bytes, line 471
471
472<script type="text/javascript" src="/dist-v1/bower_components/jquery-ui/js/jquery-ui.min.js"></script>
vendor: 1 bytes, line 472
472
473<script type="text/javascript" src="/dist-v1/bower_components/popper.js/js/popper.min.js"></script>
vendor: 1 bytes, line 473
473
474<script type="text/javascript" src="/dist-v1/bower_components/bootstrap/js/bootstrap.min.js"></script>
474
475<!-- waves js -->
476<script src="/dist-v1/assets/pages/waves/js/waves.min.js"></script>
476
477<!-- jquery slimscroll js -->
478<script type="text/javascript" src="/dist-v1/bower_components/jquery-slimscroll/js/jquery.slimscroll.js"></script>
478
479<!-- modernizr js -->
480<script type="text/javascript" src="/dist-v1/bower_components/modernizr/js/modernizr.js"></script>
vendor: 1 bytes, line 480
480
481<script type="text/javascript" src="/dist-v1/bower_components/modernizr/js/css-scrollbars.js"></script>
481
482
483<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.30.1/moment.min.js"></script>
483
484<!-- data-table js -->
485<!--
486<script src="https://cdn.datatables.net/2.2.2/js/dataTables.min.js"></script>
vendor: 1 bytes, line 486
486
487<script src="https://cdn.datatables.net/2.2.2/js/dataTables.bootstrap5.min.js"></script>
vendor: 1 bytes, line 487
487
488<script src="https://cdn.datatables.net/buttons/3.2.2/js/dataTables.buttons.min.js"></script>
vendor: 1 bytes, line 488
488
489<script src="https://cdn.datatables.net/buttons/3.2.2/js/buttons.bootstrap5.min.js"></script>
vendor: 1 bytes, line 489
489
490<script src="https://cdn.datatables.net/responsive/3.0.4/js/dataTables.responsive.min.js"></script>
vendor: 1 bytes, line 490
490
491<script src="https://cdn.datatables.net/responsive/3.0.4/js/responsive.bootstrap5.min.js"></script>
491
492
493
494<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
vendor: 1 bytes, line 494
494
495<script src="https://cdn.datatables.net/2.1.8/js/dataTables.min.js"></script>
vendor: 1 bytes, line 495
495
496<script src="https://cdn.datatables.net/2.1.8/js/dataTables.bootstrap5.min.js"></script>
vendor: 1 bytes, line 496
496
497<script src="https://cdn.datatables.net/responsive/3.0.3/js/dataTables.responsive.min.js"></script>
vendor: 1 bytes, line 497
497
498<script src="https://cdn.datatables.net/responsive/3.0.3/js/responsive.bootstrap5.min.js"></script>
498
499
500
501https://cdn.datatables.net/3.0.3/css/dataTables.bootstrap5.min.css
502https://cdn.datatables.net/responsive/4.0.3/css/responsive.bootstrap5.min.css
503
504
505
506<script src="/dist-v1/assets/datatables_custom/datatables.min.js"></script>
506
507-->
508
509<script src="https://cdn.datatables.net/3.0.3/js/dataTables.min.js"></script>
vendor: 1 bytes, line 509
509
510<script src="https://cdn.datatables.net/3.0.3/js/dataTables.bootstrap5.min.js"></script>
vendor: 1 bytes, line 510
510
511<script src="https://cdn.datatables.net/responsive/4.0.3/js/dataTables.responsive.min.js"></script>
vendor: 1 bytes, line 511
511
512<script src="https://cdn.datatables.net/responsive/4.0.3/js/responsive.bootstrap5.min.js"></script>
512
513
514
515<script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.9.2/parsley.min.js" integrity="sha512-eyHL1atYNycXNXZMDndxrDhNAegH2BDWt1TmkXJPoGf1WLlNYt08CSjkqF5lnCRmdm3IrkHid8s2jOUY4NIZVQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 515
515
516<script src="https://cdnjs.cloudflare.com/ajax/libs/filepond/4.32.7/filepond.min.js" integrity="sha512-/kcyaB84QgojPP9E91b3lmeLZXKMG6wGqIGaTIld4RtbyTBFB0DHBSL7/WPwU/fAftwmpvYYvdq/S96smP8Ppw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 516
516
517<script src="https://unpkg.com/jquery-filepond/filepond.jquery.js"></script>
517
518
519<!-- Bootstrap date-time-picker js -->
520<script type="text/javascript" src="/dist-v1/assets/pages/advance-elements/moment-with-locales.min.js"></script>
vendor: 1 bytes, line 520
520
521<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/js/bootstrap-datepicker.min.js" integrity="sha512-LsnSViqQyaXpD4mBBdRYeP6sRwJiJveh2ZIbW41EBrNmKxgr/LFZIiWT6yr+nycvhvauz8c2nYMhrP80YhG7Cw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 521
521
522<script type="text/javascript" src="/dist-v1/assets/pages/advance-elements/bootstrap-datetimepicker.min.js"></script>
522
523<!-- Date-range picker js -->
524<script type="text/javascript" src="/dist-v1/bower_components/bootstrap-daterangepicker/js/daterangepicker.js"></script>
vendor: 1 bytes, line 524
524
525<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
vendor: 1 bytes, line 525
525
526<script src="https://cdnjs.cloudflare.com/ajax/libs/uuid/8.2.0/uuid.min.js" integrity="sha512-X0CJvcClD8EXFn5Oq8BD5lIsznKDfxb0Sf9Wr8MCCTyAEWaAAxr0Jvm3qyofsmN7eSHMZ0PPQGjVKroLAfexrA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 526
526
527<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.4.16/purify.min.js" integrity="sha512-flQmhkXNRQ3iUfvtdCobtpMjCb6kE+zLnTiAulAQJ3WykVfy84JvCMOo6vhwWXHTXjR25h9Zj+LyGFRWKjRoag==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
vendor: 1 bytes, line 527
527
528<script src="/dist-v1/js/common.js?rnd=16447531841407264416"></script>
528
529
530
531
532
533
534<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
vendor: 1 bytes, line 534
534
535<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quill.js"></script>
vendor: 1 bytes, line 535
535
536<script src="https://cdnjs.cloudflare.com/ajax/libs/he/1.2.0/he.min.js"></script>
536
537
538<script>
539    $(document).ready(function () {
540        $("#optoSearchModal").modal('show');
541        const searchUrl = "/cope/optometrist-search/ajax";
542        let formData = { fname: '', lname: '', city: '', state: '' };
543        const formDataLabels = { fname: 'First name', lname: 'Last name', city: 'City', state: 'State' };
544        const optoTable = $("#optoTable").DataTable({
545            createdRow: function (row, data, dataIndex) {
546                //to monitor row creation
547            },
548            ajax: {
549                url: searchUrl,
550                type: "POST",
551                data: function (d) {
552                    console.log(d);
553                    return $.extend({}, d, formData); // keep DataTables params + add form fields
554                },
555                dataSrc: function (json) {
556                    json.data.forEach(function (part, index, theArray) {
557                        //const fullName = Utils.joinStringsWith(" ", [part.fname, part.lname]);
558                        //theArray[index].fullName = '<span class="title">' + Utils.joinStringsWith(", ", [fullName, part.degrees]) + '</span>';
559
560                        theArray[index].fullName = DOMPurify.sanitize('<span class="title">' + Utils.escapeHtml(part.full_name) + '</span>');
561
562
563                        const addressLine1 = DOMPurify.sanitize(Utils.joinStringsWithAndReturnNull(", ", [part.office1addr, part.office1addr2]));
564                        const addressLine2 = DOMPurify.sanitize(Utils.joinStringsWithAndReturnNull(", ", [part.office1city, Utils.joinStringsWithAndReturnNull(" ", [part.office1st, part.office1zip])]));
565                        if(!addressLine1 && !addressLine2) {
566                            theArray[index].address = "N/A";
567                        } else {
568                            theArray[index].address = DOMPurify.sanitize(Utils.joinStringsWith("<br />", [Utils.escapeHtml(addressLine1), Utils.escapeHtml(addressLine2)]));
569                        }
570
571                        if(Utils.isNullOrEmpty(part.office1phone)) {
572                            theArray[index].phone = '<span class="arbo-empty">Not listed</span>';
573                        } else {
574                            theArray[index].phone = Utils.formatPhone(part.office1phone, true);
575                        }
576
577
578                        if(Utils.isNullOrEmpty(part.office1st)) {
579                            theArray[index].state = "";
580                        } else {
581                            theArray[index].state = DOMPurify.sanitize('<span class="arbo-pill">' + Utils.escapeHtml(part.office1st) + '</span>');
582                        }
583                    });
584                    return json.data;
585                },
586                error: function (xhr, error, thrown) {
587                    if (xhr.responseJSON && xhr.responseJSON.message) {
588                        alert(xhr.responseJSON.message);
589                    } else {
590                        alert("An unexpected error occurred. Please try again later.");
591                    }
592                }
593            },
594            columns: [
595                { data: "fullName", className: "text-start wrap-text-dt align-middle", orderable: true},
596                { data: "address", width: "20%", className: "text-center wrap-text-dt align-middle", orderable: false},
597                { data: "state", className: "text-center wrap-text-dt align-middle", orderable: true},
598                { data: "phone", className: "text-center wrap-text-dt align-middle", orderable: true},
599            ],
600            columnDefs: [
601                { targets: "_all", orderSequence: ["asc", "desc"] }
602            ],
603            //layout: { topStart: ['pageLength', 'search'], topEnd: null, bottomStart: 'info', bottomEnd: 'paging' },
604            layout: { topStart: ['pageLength'], topEnd: null, bottomStart: 'info', bottomEnd: 'paging' },
605            serverSide: true,
606            pageLength: 25,
607            lengthMenu: [25, 50, 100],
608            responsive: true,
609            autoWidth: false,
610            deferRender: true,
611            deferLoading: 0, // here
612            processing: true,
613            order: [[0, "asc"]],
614            language: {
615                //search: '',
616                //searchPlaceholder: 'Filter these results…',
617                //lengthMenu: 'Show _MENU_ Filter Optometrists',
618                lengthMenu: 'Show _MENU_ ',
619                info: 'Showing _START_–_END_ of _TOTAL_ optometrists',
620                infoEmpty: 'No optometrists found',
621                infoFiltered: '(filtered from _MAX_ matches)',
622                zeroRecords: 'No optometrists match this search. Open the search to change your criteria.',
623                emptyTable: 'No optometrists match this search. Open the search to change your criteria.',
624                paginate: { previous: '‹ Prev', next: 'Next ›' }
625            }
626        });
627        function setupFilterChips(){
628            $("#activeFilters").empty();
629            $("#activeFilters").append('<span class="arbo-eyebrow me-1">Search</span>');
630            //go over the formData and add chips for each non-empty value
631            let filterCount = 0;
632            for (var key in formData) {
633                if(!Utils.isNullOrEmpty(formData[key])) {
634                    const value = DOMPurify.sanitize(formData[key]);
635                    $("#activeFilters").append('<span class="arbo-chip"><span><strong>' + formDataLabels[key] + ': ' + value + '</strong></span>' +
636                        '<button type="button" class="filter-btn-remove" aria-label="Remove the First name filter"  data-key="' + key + '">&times</button></span>'); //store the key in the data attribute of the button
637                    filterCount++;
638                }
639            }
640
641            $(".filter-btn-remove").on("click", function (event) {
642                const key = $(this).data("key");
643                formData[key] = ""; //clear the value in the formData object
644                setupFilterChips();
645                optoTable.ajax.reload();
646            });
647            if(filterCount === 0) {
648                $("#activeFilters").hideBs();
649            } else {
650                $("#activeFilters").append('<button type="button" class="btn btn-link p-0 ms-1 remove-all-filter-btn" style="font-size: 13px">Clear search</button>');
651                $("#activeFilters").showBs();
652                $(".remove-all-filter-btn").on("click", function (event) {
653                    formData = { fname: '', lname: '', city: '', state: '' };
654                    setupFilterChips();
655                    optoTable.ajax.reload();
656                });
657            }
658        }
659
660        $("#optoSearchSubmitBtn").on("click", function (event) {
661            $(this).blur();
662            formData = $("#optoSearchForm").serializeFormJSON();
663            formData.fname = DOMPurify.sanitize(formData.fname).trim();
664            formData.lname = DOMPurify.sanitize(formData.lname).trim();
665            formData.city = DOMPurify.sanitize(formData.city).trim();
666            setupFilterChips();
667            $("#optoSearchModal").modal('hide');
668            optoTable.ajax.reload();
669            $("#resultsWrap").showBs();
670            $("#startState").hideBs();
671        });
672
673        $("#optoSearchModal").on("shown.bs.modal", function () {
674            $("#optoSearchForm").resetForm();
675            formData = { fname: '', lname: '', city: '', state: '' };
676        });
677    });
678</script>
678
679</body>
680</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.