PageSourceSearch

https://pdap.io/assets/index-uRWQ7pij.js

js pdap.io collected 2026-10-04 00:24:28 UTC 19,570 bytes, 1 lines download raw bytes

1import{a as e,r as a,o as t,c as s,b as o,d as n,e as l,w as r,m as i,u as c,t as u,F as d,f as p,g as m,h as f,i as h,j as g,k as b,l as y,n as w,p as v,q as x,s as k,v as P,x as j,y as A,z as q,A as C,B as D,C as S,D as _,E}from"./index-CcZ45_S5.js";import{S as F}from"./SearchForm-BO2fa65f.js";import{D as T,g as O}from"./map-ihFO6Rcf.js";import{F as R}from"./index.es-0vjt-INv.js";import{g as z}from"./data-sources-CbhDqZAQ.js";import{g as W}from"./locations-9kelygEn.js";import{f as K}from"./search-CcyELERH.js";import{f as L}from"./dateFormatters-DQQfWKxD.js";import{g as B}from"./locationFormatters-B5SIoJWC.js";import{S as I,P as U}from"./queryKeys-DpAWY-q4.js";import{u as G}from"./useQueryClient-D_RWsVuD.js";import{u as Q}from"./useQuery-CfbMjajd.js";import{u as $}from"./useMutation-Ca8CgNX9.js";import{u as H}from"./search-CuDkYLOj.js";import{b as N}from"./route-block-B_A1xBdJ.js";import"./typeahead-BamTYUl9.js";import"./test-ids-C_9vcHPk.js";import"./searchParams-C9f9AeG4.js";import"./_plugin-vue_export-helper-BCo6x5W8.js";import"./pluralize-j_3i0FJb.js";const J={"Content-Type":"application/json",authorization:"Basic c93ccbf8-1a4b-45d1-9f56-24e75a4fac73"};const M="https://api.github.com";const V={class:"mb-24 grid grid-cols-3 max-w-5xl mx-auto @container w-full"},X={class:"col-span-full"},Y={class:"text-med bg-wineneutral-100 p-4 mb-6 border-2 border-dotted border-wineneutral-300"},Z={class:"px-2 md:px-4 col-span-full relative left-[50%] right-[50%] -ml-[50vw] -mr-[50vw] w-[calc(100vw-0.5rem)]"},ee={class:"block"},ae={class:"col-span-full"},te={class:"col-span-full text-lg"},se={key:0},oe={key:1},ne={key:2,class:"grid grid-cols-3 mt-6 gap-4"},le=["href"],re={class:"pdap-grid-container col-span-full pt-6 mt-8 border-t-[3px] border-wineneutral-100"},ie={class:"col-span-full text-lg"},ce={class:"col-span-full pdap-flex-container pt-6 mt-8 border-t-[3px] border-wineneutral-100"},ue={class:"flex-row"},de={class:"pt-8"},pe={key:0},me={class:"flex-row"},fe={class:"pt-4 col-span-full"},he={key:1,class:"grid grid-cols-3 mt-6 gap-4 text-lg"},ge=["href"],be={class:"col-span-full pdap-grid-container grid-cols-2 pt-6 mt-8 border-t-[3px] border-wineneutral-100"},ye={class:"col-span-full pdap-grid-container grid-cols-2 text-lg"},we={class:"col-span-full my-0"},ve={class:"col-span-full my-0"},xe={class:"col-span-full pdap-flex-container pt-6 mt-8 border-t-[3px] border-wineneutral-100"},ke={key:0},Pe={key:1},je={key:2},Ae={key:3},qe={class:"flex flex-row pt-2"},Ce={class:"flex flex-row pt-2"},De={class:"flex flex-row pt-2"},Se={class:"flex flex-row pt-2"},_e={class:"flex flex-row pt-2"},Ee={class:"flex flex-row pt-2"},Fe={class:"flex flex-row pt-2"},Te={__name:"index",setup(N){const Te=G(),Oe=H(),{data:Re}=Q({queryFn:async()=>await z(),queryKey:["recentSources"],onError:e=>{console.error("Error fetching recent sources:",e)},staleTime:3e5}),ze=S(()=>{var e;return null==(e=Re.value)?void 0:e.map(e=>({...e,formattedCreatedAt:L(e.createdAt)}))}),{data:We}=Q({queryFn:async()=>await O(),queryKey:["mapLocations"],onError:e=>{console.error("Error fetching map locations:",e)},staleTime:36e5}),{data:Ke}=Q({queryFn:async()=>{const a=await async function(){return(await e.get("https://data-sources.pdap.io/api/v2/metrics",{headers:J})).data}();return{sourceCount:a.source_count,agencyCount:a.agency_count,countyCount:a.county_count,stateCount:a.state_count}},queryKey:["metricsData"],onError:e=>{console.error("Error fetching metrics:",e)},staleTime:3e5}),{data:Le,isLoading:Be}=Q({queryFn:async()=>await async function(){const a=(await async function(){return await e.get(`${M}/orgs/Police-Data-Accessibility-Project/repos`)}()).data.length,t=(await async function(){return await e.get(`${M}/search/issues?q=org:Police-Data-Accessibility-Project+is:pr+is:merged`)}()).data.total_count,s=(await async function(){return await e.get(`${M}/search/issues?q=org:Police-Data-Accessibility-Project+label:"good first issue"+state:open+-label:"resolved in dev"&sort=created&order=desc&per_page=3`)}()).data.items.map(e=>({title:e.title,url:e.html_url}));return{repoCount:a,mergeCount:t,goodFirstIssues:s}}(),queryKey:["githubData"],onError:e=>{console.error("Error fetching data:",e)},staleTime:3e5}),Ie=$({mutationFn:async e=>{await K(e);const a=await W(e);E.success(`Search followed for ${B(a.data)}.`)},onSuccess:()=>
1{Te.invalidateQueries({queryKey:[I]}),Te.invalidateQueries({queryKey:[U]})},onError:()=>{E.error("Error following search location. Please try again.")}}),Ue=_(!1);return(e,S)=>{var _,E,O,z,W;const K=a("router-link");return t(),s("main",V,[o("section",X,[o("div",Y,[S[3]||(S[3]=o("strong",null,"Announcement:",-1)),S[4]||(S[4]=n(" We are open for public signups! ",-1)),l(K,{to:"/sign-up"},{default:r(()=>[...S[2]||(S[2]=[n("Create a free account here.",-1)])]),_:1})])]),S[69]||(S[69]=o("section",{class:"col-span-full"},[o("h1",null,"Explore data about police systems")],-1)),o("section",Z,[o("div",ee,[l(T,i({class:"mb-6 w-full md:border-[1px] md:border-wineneutral-400 p-1"},{...(null==(_=c(We))?void 0:_.data.locations)??{},federal:(null==(E=c(We))?void 0:E.data.sources)??[]},{"use-dynamic-breakpoints":!0,onOnFollow:S[0]||(S[0]=e=>c(Ie).mutate(e)),onOnSelectLocation:S[1]||(S[1]=e=>c(Oe).setActiveLocation((null==e?void 0:e.data)??e??null))}),null,16)])]),o("section",ae,[S[5]||(S[5]=o("h2",{class:"hidden md:block"},"Search for something specific",-1)),l(F)]),o("section",te,[S[14]||(S[14]=o("h2",null,"About the data",-1)),S[15]||(S[15]=o("p",null,[n(" Each "),o("a",{href:"https://docs.pdap.io/about/terms-and-definitions/what-is-a-data-source"},' "Data Source" '),n(" is a place on the internet where public records can be found about a police system. Our database is community-maintained, with help from our open-source apps. To help add to the database, "),o("a",{href:"https://docs.pdap.io/"},"start with the docs!")],-1)),c(Ke)?(t(),s("p",se,[S[6]||(S[6]=n(" Our database contains ",-1)),o("strong",null,u(c(Ke).sourceCount)+" Sources",1),S[7]||(S[7]=n(" about ",-1)),S[8]||(S[8]=o("br",null,null,-1)),o("strong",null,u(c(Ke).agencyCount)+" agencies",1),S[9]||(S[9]=n(" in ",-1)),o("strong",null,u(c(Ke).countyCount)+" counties",1),S[10]||(S[10]=n(" across ",-1)),S[11]||(S[11]=o("strong",null,"all 50 states",-1)),S[12]||(S[12]=n(" and the District of Columbia, plus aggregated sources covering many agencies at once. They are published by both government agencies and independent organizations. ",-1))])):(t(),s("p",oe," Our database contains Sources about agencies in hundreds of counties across all 50 states and the District of Columbia, plus aggregated sources covering many agencies at once. They are published by both government agencies and independent organizations. ")),ze.value?(t(),s("div",ne,[S[13]||(S[13]=o("h3",{class:"col-span-3"},"Recently added Data Sources",-1)),(t(!0),s(d,null,p(ze.value,e=>
1(t(),s("div",{key:e.id,class:"col-span-full md:col-span-1 flex-column outline outline-2 outline-goldneutral-200 px-4 py-2"},[o("p",null,[o("strong",null,u(e.name)+" ",1),o("a",{href:e.sourceUrl,target:"_blank",rel:"noopener noreferrer"},[l(c(R),{icon:c(m)},null,8,["icon"])],8,le)]),o("p",null,[n(" Added "+u(e.formattedCreatedAt)+" ",1),l(K,{to:e.route},{default:r(()=>[l(c(R),{icon:c(f)},null,8,["icon"])]),_:1},8,["to"])])]))),128))])):h("",!0)]),o("section",re,[S[21]||(S[21]=g('<h1 class="col-span-full pt-8 mb-0">Programs</h1><div class="col-span-full md:col-span-1 flex-column content-end justify-stretch"><img src="/assets/mapping.svg" class="w-3/12 place-self-center md:block md:w-10/12" alt="A map scattered with icons representing different kinds of data."><p class="font-semibold lg:text-center"> Finding and cataloguing sources of data </p></div><div class="col-span-full md:col-span-1 flex-column content-end"><img src="/assets/searching.svg" class="w-3/12 place-self-center md:block md:pb-6 md:w-11/12" alt="An eye looking through a magnifying glass at a police website."><p class="font-semibold lg:text-center"> Project-based scraping and records requests </p></div><div class="col-span-full md:col-span-1 flex-column content-end"><img src="/assets/sharing.svg" class="w-3/12 place-self-center md:block md:w-9/12" alt="A piece of police data being distributed to several people."><p class="font-semibold lg:text-center"> Connecting people to data and each other </p></div>',4)),o("div",ie,[S[18]||(S[18]=o("p",null,[n(" The problem we address is the inaccessibility of data about the systems with the "),o("strong",null,"greatest impact on our lives."),n(" Records which should be public are often disorganized, scattered across obscure municipal websites, kept behind tedious request processes, or not published at all. ")],-1)),S[19]||(S[19]=o("p",null,[o("strong",null,"We envision a future"),n(" where every community in the United States can access public data to evaluate local police systems and other crisis response programs. ")],-1)),S[20]||(S[20]=o("p",null,[n(" All of our programs exist to help people answer questions big and small about one of our most impactful local systems. Accessible data is the first step. "),o("strong",null,"If you are starting a data project, we can help.")],-1)),l(K,{class:"pdap-button-primary mt-4",to:"/data-requests/create"},{default:r(()=>[...S[16]||(S[16]=[n(" Open a Data Request ",-1)])]),_:1}),l(K,{class:"pdap-button-secondary sm:ml-4 mt-4",to:"/sign-up"},{default:r(()=>[...S[17]||(S[17]=[n(" Sign up for an account ",-1)])]),_:1})])]),o("section",ce,[S[33]||(S[33]=o("h1",null,"Take action",-1)),S[34]||(S[34]=o("p",null,[n(" This work is multidisciplinary and beginner-friendly. No matter what your level of experience, you can be a valuable contributor! The most important skill is "),o("strong",null,"persistence.")],-1)),S[35]||(S[35]=o("p",null,[n(" Our documentation at "),o("strong",null,[o("a",{href:"https://docs.pdap.io"},"docs.pdap.io"),n(" is the starting point ")]),n(" for using our tools to volunteer and use data. ")],-1)),o("h2",null,[l(c(R),{icon:c(b),class:"text-brand-wine-300"},null,8,["icon"]),S[22]||(S[22]=n(" Locate sources ",-1))]),S[36]||(S[36]=o("p",null," Some public records are already online, waiting to be indexed and used. Adding them to our database makes them more accessible to everyone. ",-1)),o("div",ue,[l(K,{class:"mt-2 pdap-button-primary",to:"/annotate"},{default:r(()=>[...S[23]||(S[23]=[n(" Help add Data Sources to our database ",-1)])]),_:1}),l(K,{class:"pdap-button-secondary mt-2 md:ml-2",to:"/data-sources/create"},{default:r(()=>[...S[24]||(S[24]=[n(" Submit a source you found ",-1)])]),_:1})]),o("h2",de,[l(c(R),{icon:c(y),class:"text-brand-wine-300"},null,8,["icon"]),S[25]||(S[25]=n(" Collaborate on data projects ",-1))]),S[37]||(S[37]=o("p",null," Some research projects could benefit from help with data analysis, web scraping, or records requests. PDAP is a place for collaborators to find each other. ",-1)),Ue.value?(t(),s("div",pe,[S[27]||(S[27]=o("h3",{class:"mt-2"},"Open data requests",-1)),o("ul",null,[(t(!0),s(d,null,p(e.recentRequests,e=>(t(),s("li",{key:e.id}
1,[o("strong",null,u(e.title),1),n(" Location: "+u(e.locationDisplayName)+" ",1),l(K,{to:e.route},{default:r(()=>[S[26]||(S[26]=n(" Details ",-1)),l(c(R),{icon:c(m)},null,8,["icon"])]),_:1},8,["to"])]))),128))])])):h("",!0),o("div",me,[S[29]||(S[29]=o("a",{class:"pdap-button-primary mt-2",href:"https://github.com/orgs/Police-Data-Accessibility-Project/projects/26"}," See open Data Requests ",-1)),l(K,{class:"pdap-button-secondary mt-2 md:ml-2",to:"/data-requests/create"},{default:r(()=>[...S[28]||(S[28]=[n(" Open a Data Request ",-1)])]),_:1})]),o("h2",fe,[l(c(R),{icon:c(w),class:"text-brand-wine-300"},null,8,["icon"]),S[30]||(S[30]=n(" Contribute code ",-1))]),S[38]||(S[38]=o("p",{class:"col-span-full"}," Everything you see is open source, built by a small team of volunteers and staff. We use Python for most backend and web scraping, and VueJS for front end. ",-1)),!c(Be)&&(null==(O=c(Le))?void 0:O.goodFirstIssues.length)?(t(),s("div",he,[S[31]||(S[31]=o("h3",{class:"col-span-3"},"Good first issues",-1)),(t(!0),s(d,null,p(c(Le).goodFirstIssues,(e,a)=>(t(),s("div",{key:a,class:"col-span-full md:col-span-1 flex-column outline outline-2 outline-goldneutral-200 px-4 py-2"},[o("p",null,[o("strong",null,u(e.title)+" ",1),o("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},[l(c(R),{icon:c(m)},null,8,["icon"])],8,ge)])]))),128)),S[32]||(S[32]=o("a",{class:"pdap-button-primary mt-2 col-span-full",href:"https://github.com/orgs/Police-Data-Accessibility-Project/projects/25/views/1",target:"blank"}," View more Good First Issues ",-1))])):h("",!0)]),S[70]||(S[70]=g('<section class="pdap-flex-container col-span-full text-lg pt-6 mt-8 border-t-[3px] border-wineneutral-100"><h1>Praise for our work</h1><div class="p-4 my-2 mx-0 border-2 border-solid border-goldneutral-200"><p> “PDAP&#39;s work was invaluable in helping us find and access data we wouldn&#39;t have been able to otherwise.” </p><p class="italic mb-0"> —Dr. Jesse Wozniak, Director of Law &amp; Public Policy at the <a href="https://apa-pgh.org/">Alliance for Police Accountability</a></p></div><div class="p-4 my-2 mx-0 border-2 border-solid border-goldneutral-200"><p> “PDAP&#39;s feedback helped us revise our published data to be more beneficial to the public.” </p><p class="italic mb-0"> —Philip Lukens, Chief of Police in <a href="https://www.cityofalliance.net/186/Police">Alliance, NE</a></p></div><div class="p-4 my-2 mx-0 border-2 border-solid border-goldneutral-200"><p> “PDAP provides data necessary to understand how police use-of-force incidents are processed in the courts, which reveals whether legal accountability mechanisms actually work on-the-ground.” </p><p class="italic mb-0"> — <a href="https://www.kylabourne.net/">Dr. Kyla Bourne</a> at UC Berkeley </p></div></section>',1)),o("section",be,[S[50]||(S[50]=o("div",{class:"col-span-full"},[o("h1",null,"How our data is used"),o("p",null," Our goal is to make independent research, journalism, and analysis possible by helping people find the data they need to start any investigation. ")],-1)),o("div",ye,[S[47]||(S[47]=o("h2",{class:"my-0 col-span-full"},"Data for investigative projects",-1)),o("div",null,[o("h3",null,[l(c(R),{icon:c(v)},null,8,["icon"]),S[39]||(S[39]=n(" Transparency & Oversight ",-1))]),S[40]||(S[40]=o("p",null," Misconduct, use of force, complaints, and disciplinary records are some examples of tools for public oversight and incident reporting. ",-1))]),o("div",null,[o("h3",null,[l(c(R),{icon:c(x)},null,8,["icon"]),S[41]||(S[41]=n(" Operational Analysis ",-1))]),S[42]||(S[42]=o("p",null," Understanding the effectiveness of emergency response strategies requires records about dispatch, calls for service, crime, budgets, staffing, and more. ",-1))]),o("div",null,[o("h3",null,[l(c(R),{icon:c(k)},null,8,["icon"]),S[43]||(S[43]=n(" Studying Policy & Reform ",-1))]),S[44]||(S[44]=o("p",null," When a new emergency response strategy is developed, comparable records from different jurisdictions may be required to understand policy changes and their effects. ",-1))]),o("div",null,[o("h3",null,[l(c(R),{icon:c(P)},null,8,["icon"]),S[45]||(S[45]=n(" Performance & Outcome Analysis ",-1))]),S[46]||(S[46]=o("p",null," The outcomes of policing carry through to incarceration and prosecution. A variety of consistent records over a longer time period are required to understand things like demographic disparities and recidivism. ",-1))])]),S[51]||(S[51]=o("div",{class:"col-span-full"},[o("h2",{class:"my-0"},"Examples")],-1)),o("h3",we,[l(c(R),{icon:c(j),class:"text-brand-wine-300"},null,8,["icon"]),S[48]||(S[48]=n(" Sharing access to Traffic Stop data ",-1))]),S[52]||(S[52]=g('<div class="text-lg"><p>Several researchers in Pittsburgh were asking:</p><p class="border-l-2 border-brand-wine/20 pl-4 my-5 italic"> What is the reality of traffic enforcement in Pittsburgh, given changed policies about enforcing minor traffic violations? </p></div><div class="text-lg"><p> We requested data from the City of Pittsburgh and <a href="https://pdap.io/data-sources/198"> shared it in our database. </a></p><p> It led to <a href="https://www.publicsource.org/pittsburgh-police-traffic-stop-disparity-accountability-race/"> this article in Public Source </a> , among other research. </p></div>',2)),o("h3",ve,[l(c(R),{icon:c(A),class:"text-brand-wine-300"},null,8,["icon"]),S[49]||(S[49]=n(" Preserving Calls for Service data in Oakland CA ",-1))]),S[53]||(S[53]=g('<div class="text-lg"><p class="mb-4">A journalist in Oakland, CA asked:</p><p class="border-l-2 border-brand-wine/20 pl-4 italic"> How does Oakland dispatch its police force to address community needs? </p></div><div class="text-lg"><p> Calls for police service were published by the city, but only stayed online for 1–2 days. </p><p> We made a web scraper ( <a href="https://docs.pdap.io/activities/terms-and-definitions/terminology" target="blank" aria-label="Terminology definition"><i class="fa fa-question-circle"></i></a> ) to archive the data every day, automatically, for free. <a href="https://github.com/Police-Data-Accessibility-Project/github-actions-demo/tree/main"> We made it open-source </a> , so it can be reused by anyone for future zero-budget research projects. </p></div>',2))]),o("section",xe,[o("h1",null,[l(c(R),{icon:c(q),class:"text-brand-wine-300"}
1,null,8,["icon"]),S[54]||(S[54]=n(" Software roadmap ",-1))]),o("p",null,[S[57]||(S[57]=n(" We have merged ",-1)),(null==(z=c(Le))?void 0:z.mergeCount)?(t(),s("span",ke,[o("strong",null,u(c(Le).mergeCount)+" Pull Requests",1)])):(t(),s("span",Pe,[...S[55]||(S[55]=[o("strong",null,"over 1000 Pull Requests",-1)])])),S[58]||(S[58]=n(" (new features and improvements) across ",-1)),(null==(W=c(Le))?void 0:W.repoCount)?(t(),s("span",je,[o("strong",null,u(c(Le).repoCount)+" code repositories.",1)])):(t(),s("span",Ae,[...S[56]||(S[56]=[o("strong",null,"our code repositories.",-1)])]))]),o("ul",null,[S[67]||(S[67]=o("h3",null,"2023–2024",-1)),o("li",qe,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[59]||(S[59]=n(" Develop a database for tracking sources of police data ",-1))]),o("li",Ce,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[60]||(S[60]=n(" Seed the database with volunteer-documented sources and existing collections ",-1))]),o("li",De,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[61]||(S[61]=n(" Build an app for searching our database ",-1))]),o("li",Se,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[62]||(S[62]=n(" Respond to 100+ Data Requests to learn how people use public data, and where they get stuck ",-1))]),S[68]||(S[68]=o("h3",null,"2025",-1)),o("li",_e,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[63]||(S[63]=n(" Add accounts & login, and the ability to “follow” any search location ",-1))]),o("li",Ee,[l(c(R),{icon:c(C),class:"pt-1.5 pr-3 text-brand-wine-500"},null,8,["icon"]),S[64]||(S[64]=n(" Use and refine our toolset for locating and documenting data sources ",-1))]),o("li",Fe,[l(c(R),{icon:c(D),class:"pt-1.5 pr-3 text-brand-wine-100"},null,8,["icon"]),o("span",null,[S[66]||(S[66]=n(" Grow our database, prioritizing locations followed by our users. To participate, ",-1)),l(K,{to:"/annotate"},{default:r(()=>[...S[65]||(S[65]=[n(" sign up for data labeling here! ",-1)])]),_:1})])])])])])}}};"function"==typeof N&&N(Te);export{Te as default};

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.