img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px } Three Facts about Crime | City Journal {"@context":"https://schema.org","@graph":[{"@type":"NewsArticle","@id":"https://www.city-journal.org/article/concentrating-on-crime/#article","isPartOf":{"@id":"https://www.city-journal.org/article/concentrating-on-crime/"},"author":[{"@type":"Person","@id":"https://www.city-journal.org#/schema/Person/46344","name":"John M. MacDonald","url":"https://www.city-journal.org/person/john-m-macdonald/","image":"https://media4.manhattan-institute.org/wp-content/uploads/John-MacDonald.jpg"},{"@type":"Person","@id":"https://www.city-journal.org#/schema/Person/46655","name":"Thomas Hogan","url":"https://www.city-journal.org/person/thomas-hogan/"}],"headline":"Concentrating on Crime","datePublished":"2021-09-28T15:27:50+00:00","dateModified":"2023-03-23T23:11:03+00:00","mainEntityOfPage":{"@id":"https://www.city-journal.org/article/concentrating-on-crime/"},"wordCount":815,"commentCount":0,"publisher":{"@id":"https://www.city-journal.org/#organization"},"image":[{"@id":"https://www.city-journal.org/article/concentrating-on-crime/#primaryimage"}],"thumbnailUrl":"","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https://www.city-journal.org/article/concentrating-on-crime/#respond"]}],"copyrightYear":"2021","copyrightHolder":{"@id":"https://manhattan.institute/#organization"},"mentions":[{"@type":["Thing","Place","AdministrativeArea","Country"],"@id":"kg:/g/09c7w0","name":"United States","description":"country located primarily in North America","image":"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQB0_FKgauM3h5wkHna7JjIXInv4my0VIlPDbnQv9nwQ7rRsH7P","containedInPlace":{"@type":"Country","name":"United States"},"sameAs":["https://www.google.com/search?kgmid=/m/09c7w0","https://www.wikidata.org/wiki/Q30","https://twitter.com/usagov","https://www.facebook.com/USAGov"]},{"@type":["Thing","Place","AdministrativeArea","City","Cemetery"],"@id":"kg:/g/0dclg","name":"Philadelphia","description":"largest city in Pennsylvania, United States","url":"https://phila.gov","image":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRHd6UaeY4_Hd_QRAq4O2F5rHQf9LwsQEycipZoU9X4IN4__5yO","containedInPlace":{"@type":"Country","name":"United States"},"sameAs":["https://www.google.com/search?kgmid=/m/0dclg","https://www.wikidata.org/wiki/Q1345"]},{"@type":["Thing","Organization","Corporation","GovernmentOrganization"],"@id":"kg:/g/01lvn4","name":"New York City Police Department","description":"municipal police force in the United States","url":"https://www1.nyc.gov/site/nypd/index.page","image":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQLLonf6bSwJA8rrWzBsfT4Yhd1pZ4Zv3nNURA5vjetk6yzkDpq","foundingDate":null,"location":{"@type":"Country","name":"United States"},"sameAs":["https://www.google.com/search?kgmid=/m/01lvn4","https://www.wikidata.org/wiki/Q328473","https://twitter.com/nypdnews","https://www.facebook.com/NYPD"]},{"@type":["Thing","Place","Organization","Corporation","CollegeOrUniversity","EducationalOrganization","MovieTheater"],"@id":"kg:/g/07tds","name":"University of Pennsylvania","description":"private research university in Philadelphia, Pennsylvania, United States","url":"https://upenn.edu","image":"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQamcRUcT0sg-EGMuzatoMkDHWqkXjWyDD_qjBu6ro8jA7vl_GN","containedInPlace":{"@type":"Country","name":"United States"},"foundingDate":null,"location":{"@type":"Country","name":"United States"},"sameAs":["https://www.google.com/search?kgmid=/m/07tds","https://www.wikidata.org/wiki/Q49117","https://twitter.com/Penn","https://www.facebook.com/UnivPennsylvania"]},{"@type":["Thing","Person"],"@id":"kg:/g/03_js","name":"John Adams","description":"Founding Father, U.S. president from 1797 to 1801","image":"https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQDdZLikG1eTGhl88mOU_Yous8Gi1J8Wqtn73qaMmDbWitnFnzP","birthDate":null,"sameAs":["https://www.google.com/search?kgmid=/m/03_js","https://www.wikidata.org/wiki/Q11806","https://www.imdb.com/title/nm1547016"]},{"@type":["Thing","Person"],"@id":"kg:/g/05x87wq","name":"David Weisburd","description":"American criminologist","birthDate":null,"sameAs":["https://www.google.com/search?kgmid=/m/05x87wq","https://www.wikidata.org/wiki/Q17493331"]}]},{"@type":"WebPage","@id":"https://www.city-journal.org/article/concentrating-on-crime/","url":"https://www.city-journal.org/article/concentrating-on-crime/","name":"Three Facts about Crime | City Journal","isPartOf":{"@id":"https://www.city-journal.org/#website"},"primaryImageOfPage":{"@id":"https://www.city-journal.org/article/concentrating-on-crime/#primaryimage"},"image":{"@id":"https://www.city-journal.org/article/concentrating-on-crime/#primaryimage"},"thumbnailUrl":"","datePublished":"2021-09-28T15:27:50+00:00","dateModified":"2023-03-23T23:11:03+00:00","description":"It is concentrated by place, among individuals, and at certain times.","breadcrumb":{"@id":"https://www.city-journal.org/article/concentrating-on-crime/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://www.city-journal.org/article/concentrating-on-crime/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.city-journal.org/article/concentrating-on-crime/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https://www.city-journal.org/article/concentrating-on-crime/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.city-journal.org/"},{"@type":"ListItem","position":2,"name":"Concentrating on Crime"}]},{"@type":"WebSite","@id":"https://www.city-journal.org/#website","url":"https://www.city-journal.org/","name":"City Journal","description":"City Journal is America’s premier urban-policy magazine.","publisher":{"@id":"https://www.city-journal.org/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.city-journal.org/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://www.city-journal.org/#organization","name":"City Journal","url":"https://www.city-journal.org/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.city-journal.org/#/schema/logo/image/","url":"","contentUrl":"","caption":"City Journal"},"image":{"@id":"https://www.city-journal.org/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/CityJournal","https://x.com/cityjournal","https://www.linkedin.com/company/manhattan-institute","https://www.youtube.com/ManhattanInst","https://www.instagram.com/cityjournal_mi"],"telephone":"212-99-7000","legalName":"Manhattan Institute For Policy Research Inc","foundingDate":"1978-01-01","taxID":"13-2912529"}]} /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} window.wp_variables = { template_directory_uri: "https://www.city-journal.org/wp-content/themes/cj-theme" } (function() { const match = document.cookie.match(/(?:^|; )geo=([^;]*)/); const geo = match ? decodeURIComponent(match[1]) : null; if (geo === 'CA') { const s = document.createElement('script'); s.src = 'https://cmp.osano.com/xjWujcT8l1/e4b96363-c5b1-4b42-b57d-20f0d906a1b3/osano.js?variant=three'; s.dataset.cfasync = 'false'; const head = document.head; head.insertBefore(s, head.firstChild); } else{ const s = document.createElement('script'); s.src = 'https://cmp.osano.com/xjWujcT8l1/e5e01854-7d31-4549-8523-1f1c5b6b9884/osano.js?variant=three'; s.dataset.cfasync = 'false'; const head = document.head; head.insertBefore(s, head.firstChild); } })(); window._vwo_code || (function() { var account_id=1061061, version=2.1, settings_tolerance=2000, hide_element='body', hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;transition:none !important;', /* DO NOT EDIT BELOW THIS LINE */ f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={nonce:v&&v.nonce,use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}v&&t.setAttribute('nonce',v.nonce);d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var n=this.getSettings(),i=d.createElement('script'),r=this;t=t||{};if(n){i.textContent=n;d.getElementsByTagName('head')[0].appendChild(i);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200||o.status===304){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var n=this.hide_element(),i=n?n+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=i;else t.appendChild(d.createTextNode(i));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var i=d.createElement('div');i.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;display: block !important;';i.setAttribute('id','_vis_opt_path_hides');i.classList.add('_vis_hide_layer');t.parentNode.insertBefore(i,t.nextSibling)}var o=window._vis_opt_url||d.URL,s='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(o)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:s})}else{this.load(s+'&x=true')}}};w._vwo_code=code;code.init();})(); (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-N8CVZ65'); (function(w,d,s,n,a){if(!w[n]){var l='call,catch,on,once,set,then,track,openCheckout' .split(','),i,o=function(n){return'function'==typeof n?o.l.push([arguments])&&o :function(){return o.l.push([n,arguments])&&o}},t=d.getElementsByTagName(s)[0], j=d.createElement(s);j.async=!0;j.src='https://cdn.fundraiseup.com/widget/'+a+''; t.parentNode.insertBefore(j,t);o.s=Date.now();o.v=5;o.h=w.location.href;o.l=[]; for(i=0;i window.integrator = { preview_endpoint_base_url: 'https://search.manhattan.institute/api/cj/preview' }; window.search = {"mi":{"endpoint_base_url":"https://search.manhattan.institute/api/mi/search"},"cj":{"endpoint_base_url":"https://search.manhattan.institute/api/cj/search"},"tass":{"endpoint_base_url":"https://search.manhattan.institute/api/tass/search"},"":{"endpoint_base_url":null},"pm":{"endpoint_base_url":null}}; window.sites = {"mi":{"url":"https://manhattan.institute"},"cj":{"url":"https://www.city-journal.org"},"tass":{"url":"https://www.adamsmithsociety.com"},"":{"url":"https://manhattan.institute/presidents-update-2024"},"pm":{"url":"https://www.proxymonitor.org"}}; window.site = 'cj'; 2025 College Rankings Search The Magazine Podcasts Topics About City Journal Contributors Manhattan Institute Subscribe Email Alerts Subscribe Donate Login My Profile Logout 2025 College Rankings Search The Magazine Podcasts Topics About City Journal Contributors Manhattan Institute Subscribe Email Alerts Subscribe Donate John M. MacDonald , Thomas Hogan Concentrating on Crime An outsize share of lawbreaking occurs at certain places and times—and is perpetrated by a small group of people. / Public Safety September 28, 2021 / Share / Eye on the News / Public Safety Sep 28 2021 / Share Though academics, the media, and politicians can’t seem to agree on much when it comes to crime in the United States, three stubborn facts generally apply. First, crime is heavily concentrated by place. As a general matter, 5 percent of the locations in a given city account for 50 percent of that city’s crime. This finding has been replicated so often that it is sometimes referred to as “ the law of crime concentration .” As David Weisburd and Taryn Zastrow note in a recent Manhattan Institute report , “there is tremendous consistency in the degree to which crime is concentrated at hot spots across cities.” This is not just a matter of neighborhoods: between 3 percent and 5 percent of specific addresses on city blocks generate 50 percent or more of reported crimes. And if the focus is strictly on violent crime, such as shootings , then even fewer locations— perhaps a drug house or a liquor-store check-cashing operation—are magnets for an even greater percentage of violent crime. .signup-wrap{max-width:640px;margin:0 auto} .signup-banner{margin-bottom:12px;padding:10px 12px;border-radius:3px;display:none} .signup-banner.show{display:block} .signup-banner.info{background:#f5f6ff;color:#1f2aa0;border:1px solid #dfe3ff} .signup-banner.success{background:#ecfdf5;color:#166534;border:1px solid #bbf7d0} .signup-banner.error{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca} .signup-form{background:#fff;border-radius:3px;padding:6px 6px 22px} .signup-row{display:grid;gap:12px} .signup-row.grid-2{grid-template-columns:1fr} @media(min-width:680px){.signup-row.grid-2{grid-template-columns:1fr 1fr}} .signup-field{position:relative} .signup-label{display:none;} .signup-input{ width:100%;border:1.5px solid #00afcf;border-radius:3px; padding: 8px 10px;font-size:13px;font-family: "GT America", sans-serif;transition:border-color .15s,box-shadow .15s; } .signup-input:focus{border-color:#40c2e3;box-shadow:0 0 0 4px #dfe3ff;outline:0} .signup-field.invalid .signup-input{border-color:#b91c1c} .signup-hint{margin:6px 2px 0;font-size:12px;color:#b91c1c;min-height:16px} .signup-hint:empty {min-height: 0;} .signup-actions{display:flex;justify-content:center;margin-top:18px} .signup-btn{ background:#00afcf;color:#fff;font-weight:700;border:0;border-radius:3px; padding:0.5rem 1rem;font-size:1rem;cursor:pointer;transition:background .15s,transform .05s; } .signup-btn:hover{background:#40c2e3} .signup-btn:active{transform:translateY(1px)} .signup-btn[disabled]{opacity:.6;cursor:progress} .success-message{display:none;text-align:center;font-size:18px;color:#166534;padding:20px} .signup-form.success .signup-row{display:none} .signup-form.success .signup-actions{display:none} .signup-form.success .success-message{display:block} .hcaptcha-notice{font-size:12px;color:#475569;margin-top:8px;text-align:center} .hcaptcha-notice a{color:#3a52e6;text-decoration:underline} .hcaptcha-notice a:hover{color:#2f40d3} /* when device is 992 pixels wide or wider */ /* when device is 992 pixels wide or wider */ @media (min-width: 992px) { } div.u_sticky-content { border-radius: unset; box-shadow: none; max-width: 350px; margin:25px auto 10px auto; padding: 15px 10px 15px 15px; border-top: 1px solid #ababab; border-bottom: 1px solid #ababab; } div.u_sticky-content iframe { height: 194px; } .m_information-box div.u_sticky-content iframe { height: 208px; } p.cta-heading { text-align:center; font-family: GT America, sans-serif; font-size: 24px; line-height: 32px; font-stretch: condensed; margin-bottom:4px !important;; color:#00afcf; font-weight:600 } p.cta-subheading { text-align:center; font-family: GT America, sans-serif; font-size: 15px; color:#ababab; margin-bottom: 9px; } Finally, a reason to check your email. Sign up for our free newsletter today. First Name* Last Name* Email* Sign Up This site is protected by hCaptcha and its Privacy Policy and Terms of Service apply. Thank you for signing up! /* ===== CONFIG ===== */ const BACKEND_URL = 'https://newsletterFormSubmit.manhattan.institute/newsletterFormSubmit'; const SITE_KEY = '213cbc42-6014-462c-8b04-0e8459429fc4'; const DEBUG = false; // flip to true to see logs /* ===== Helpers ===== */ const $id = id => document.getElementById(id); const log = (...a) => DEBUG && console.log('[signup]', ...a); const strip = s => String(s).replace(/[\u0000-\u001F\u007F]/g, ''); const trim = s => String(s ?? '').replace(/\s+/g, ' ').trim(); const sanitizeName = v => trim(strip(v)).replace(/[<>"`{}()[\]]/g,'').slice(0,80); const sanitizeEmail = v => strip(String(v).trim()).toLowerCase().replace(/[<>\s]/g,'').slice(0,254); const sanitizeList = raw => strip(String(raw ?? '')).replace(/[;|]/g, ',') .split(',').map(p => trim(p).replace(/[<>"`{}()[\]]/g,'')).filter(Boolean).join(', ').slice(0,300); const sanitizeSite = raw => String(raw ?? '').toLowerCase().replace(/[^a-z0-9.-]/g,'').slice(0,80); const sanitizeKey = raw => String(raw ?? '').trim().replace(/[^A-Za-z0-9_-]/g,'').slice(0,120); const NAME_RE = /^[A-Za-z'’ \-]{1,80}$/; const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/; const fieldError = (id, msg='') => { $id('f-' + id)?.classList.toggle('invalid', !!msg); const hint = $id('err-' + id); if (hint) hint.textContent = msg; }; const clearErrors = () => ['first','last','email','hcaptcha'].forEach(f => fieldError(f)); const showBanner = (type, text) => { const b = $id('signupBanner'); if (!b) return; b.className = `signup-banner show ${type}`; b.textContent = text; // belt & suspenders in case theme CSS fights us: b.style.display = 'block'; requestAnimationFrame(() => b.scrollIntoView({ block: 'nearest', behavior: 'smooth' })); }; /* ===== hCaptcha (explicit, invisible) ===== */ let widgetId = null; let busy = false; let pendingPayload = null; window.onloadHCaptcha = () => { try { if (typeof hcaptcha?.getWidgetIds === 'function') { const ids = hcaptcha.getWidgetIds(); if (ids.length) { widgetId = ids[0]; return; } } widgetId = hcaptcha.render('hcaptcha-container', { sitekey: SITE_KEY, size: 'invisible', callback: onSolve, 'error-callback': onCaptchaError, 'expired-callback': () => fieldError('hcaptcha','Please complete the CAPTCHA.') }); log('hCaptcha rendered:', widgetId); } catch (err) { console.error('hCaptcha render failed', err); showBanner('error','CAPTCHA failed to load. Please refresh.'); } }; const onCaptchaError = (err) => { console.error('hCaptcha error', err); fieldError('hcaptcha','CAPTCHA error—please try again.'); busy = false; $id('newsletterSignupBtn')?.removeAttribute('disabled'); }; /* ===== Validate + build (ALWAYS writes banner on error) ===== */ const validateAndBuild = () => { const first = sanitizeName($id('firstName')?.value); const last = sanitizeName($id('lastName')?.value); const email = sanitizeEmail($id('email')?.value); const list_names = sanitizeList($id('listNames')?.value); const site = sanitizeSite($id('siteHidden')?.value); const page_key = sanitizeKey($id('pageKey')?.value); const form_key = sanitizeKey($id('formKey')?.value); clearErrors(); const errors = []; if (!first || !NAME_RE.test(first)) { fieldError('first','Invalid first name.'); errors.push('First name is invalid.'); } if (!last || !NAME_RE.test(last)) { fieldError('last','Invalid last name.'); errors.push('Last name is invalid.'); } if (!email || !EMAIL_RE.test(email)) { fieldError('email','Invalid email address.'); errors.push('Email is invalid.'); } if (errors.length) { return null; } return { first_name: first, last_name : last, email, list_names, site, page_key, form_key, page_url: location.href, timestamp: new Date().toISOString() }; }; /* ===== JS-only submit flow ===== */ const onSolve = async (token) => { try { const payload = { ...(pendingPayload ?? {}), hcaptcha_token: token }; if (!payload.first_name) throw new Error('Missing payload'); showBanner('info','Submitting…'); const res = await fetch(BACKEND_URL, { method: 'POST', headers: { 'Content-Type':'application/json' }, body: JSON.stringify(payload), }); const json = await res.json().catch(() => null); if (!res.ok || !json?.ok) throw new Error('Bad response'); // Success → hide fields/actions, show success message $id('signupForm')?.classList.add('success'); showBanner('success','Thank you for signing up!'); window.dataLayer?.push?.({ event: 'newsletter_form_submit', ...(json.data ?? {}) }); } catch (err) { console.error(err); showBanner('error','Sorry—something went wrong. Please try again.'); busy = false; $id('newsletterSignupBtn')?.removeAttribute('disabled'); widgetId != null && window.hcaptcha?.reset?.(widgetId); } }; const startFlow = () => { if (busy) { log('blocked: busy'); return; } busy = true; log('startFlow'); const formEl = $id('signupForm'); // Honeypot → fake success, but show banner for UX consistency if (formEl?.website?.value.trim()) { formEl.classList.add('success'); showBanner('success','Thank you for signing up!'); return; } const base = validateAndBuild(); if (!base) { // invalid: banner & field errors already shown busy = false; return; } if (!window.hcaptcha || widgetId == null || !window.hcaptcha.execute) { fieldError('hcaptcha','CAPTCHA not ready. Please try again in a moment.'); showBanner('error','Please complete the CAPTCHA.'); busy = false; return; } pendingPayload = base; $id('newsletterSignupBtn')?.setAttribute('disabled',''); fieldError('hcaptcha',''); try { window.hcaptcha.execute(widgetId); } catch (err) { onCaptchaError(err); } }; /* ===== Wire up (capture-phase + delegated fallback) ===== */ document.addEventListener('DOMContentLoaded', () => { const formEl = $id('signupForm'); const btn = $id('newsletterSignupBtn'); log('DOM ready. form:', !!formEl, 'btn:', !!btn); if (!formEl || !btn) return; // JS-only: no native form submit ever formEl.removeAttribute('action'); formEl.setAttribute('novalidate',''); // Kill any native submit (FundraiseUp, etc.) document.addEventListener('submit', (e) => { if (e.target === formEl) { e.preventDefault(); e.stopImmediatePropagation(); } }, { capture: true }); // Enter key → trigger our button instead of submitting formEl.addEventListener('keydown', (e) => { if (e.key === 'Enter' && e.target.tagName !== 'TEXTAREA') { e.preventDefault(); e.stopPropagation(); btn.click(); } }, { capture: true }); // Primary button handler (capture-phase to win precedence) btn.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); startFlow(); }, { capture: true }); // Delegated fallback in case the button is re-rendered by WP/blocks document.addEventListener('click', (e) => { const target = e.target?.closest?.('#newsletterSignupBtn'); if (!target) return; e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); startFlow(); }, { capture: true }); }); This first rule has important implications for law enforcement. Identifying and concentrating on hot spots can yield big rewards. Merely parking a patrol car outside of these addresses can lessen crime; even better to identify what exactly is going on there. Some crime may be displaced to other locations when the police shut down hot spots, but evidence shows that suppressing crime at these magnet addresses may create a diffusion of benefits that extends beyond the hot spot. After all, setting up another stash house or problematic liquor store is not always so simple. Second, violent crime is heavily concentrated in a relatively few individuals. In general, 5 percent of the criminal offenders (not 5 percent of the general population) in a given city commit about 50 percent of that city’s violent crime. One study found that just 1 percent of offenders were responsible for over 60 percent of violent crime. The concentration of crime among people reinforces the need for precision policing. If the police and prosecutors are able to focus on this high-offending cohort, they can respond with enhanced investigative efforts and increase the chance that these “violence generators” will face arrest, conviction, and sentencing for their crimes . Identifying the small fraction of the most dangerous criminals and taking them out of circulation reduces the violent crime rate—in a recent paper, Penn criminologist Aaron Chalfin notes that when the NYPD arrested and prosecuted members of violent criminal gangs, gun violence in gang areas fell by approximately one-third in the first year after a gang takedown . Focusing on the worst of the worst also eases the load on the criminal-justice system. In a hypothetical city of 1.5 million people with 100,000 criminal offenders, the police department has an achievable goal of targeting 5,000 violent offenders, rather than the Sisyphean task of proactively monitoring every criminal. Creative diversion programs for low-risk offenders can also preserve space in correctional facilities. Third and finally, crime is concentrated in time. It is predictable by hours, days of the week, and season. The small percentage of chronic offenders who generate the majority of serious crime and violence aren’t actively committing crime all day, every day. Instead, the criminal activity in crime hot spots and among chronic offenders tends to occur at night, during the weekends (Thursday night through early Sunday morning), and in the summer. In Philadelphia, for example, robberies and murder peak during the evenings between 10:00 p.m. and 1:00 a.m. The weekends are obvious triggers for violent crime, as there are simply more potential offenders and victims on the streets. And summer is the most dangerous time of year in most of the United States. The concentration of crime by place, people, and time provides three facts that suggest crime control policy should be similarly focused on the “ power few ”—the small percentage of locations, offenders, and times that generate the majority of serious crime and violence. Staffing and visible police presence should peak during dangerous times. Evidence suggests that crime prevention that focuses on the power few will yield major benefits, all while not creating collateral consequences for the communities and individuals most likely to suffer from criminal victimization. Facts are stubborn things, as John Adams reminded us. Crime is highly concentrated in specific locations, among relatively few individuals, and disproportionately during specific times of the day and year. The police know the where, who, and when of violent crime. Targeting those attributes can make law-abiding citizens safer. While chronic offenders responsible for the disproportionate share of crime may be less amenable to the threat of punishment, efforts that focus on reducing the risks of incidents by place, offenders, and time will have major crime control benefits. Each of these three facts has straightforward implications for crime-control policy in America. John MacDonald is a professor of criminology and sociology at the University of Pennsylvania and the author of Changing Places: The Science and Art of New Urban Planning . Thomas Hogan has served as a federal prosecutor, local prosecutor, and elected district attorney. He currently is in private practice. Photo by David Inderlied/picture alliance via Getty Images Donate City Journal is a publication of the Manhattan Institute for Policy Research (MI), a leading free-market think tank. Are you interested in supporting the magazine? As a 501(c)(3) nonprofit, donations in support of MI and City Journal are fully tax-deductible as provided by law (EIN #13-2912529). Related Articles - - - Further Reading - - - article - - - article - - - article - - - article --> Terms of Use Privacy Policy Copyright © 2026 Manhattan Institute for Policy Research, Inc. All rights reserved. 52 Vanderbilt Avenue New York, NY 10017 (212) 599-7000 Published by Publications Eye on the News From the Magazine Podcasts Books and Culture Video 2025 College Rankings About City Journal Contributors Subscribe Donate Contact Us Quick Links Advertise Manhattan Institute Privacy Policy Terms of Use Bug Bounty Program Copyright © 2026 Manhattan Institute for Policy Research, Inc. All rights reserved. EIN #13-2912529 Your opt-out rights Terms of Use Privacy Policy Copyright © 2026 Manhattan Institute for Policy Research, Inc. All rights reserved. (function(src){var a=document.createElement("script");a.type="text/javascript";a.id="piano-script";a.async=true;a.src=src;var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)})("https://experience.tinypass.com/xbuilder/experience/load?aid=COJfrw1jpu"); {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/cj\/*"},{"not":{"href_matches":["\/cj\/wp-*.php","\/cj\/wp-admin\/*","\/cj\/wp-content\/uploads\/*","\/cj\/wp-content\/*","\/cj\/wp-content\/plugins\/*","\/cj\/wp-content\/themes\/cj-theme\/*","\/cj\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} (function (config) { var s = document.createElement('script'); s.src = 'https://cdn.virtuoussoftware.com/tracker/virtuous.tracker.shim.min.js'; s.type = 'text/javascript'; s.onload = function () { virtuousTrackerShim.init(config); }; document.getElementsByTagName('script')[0].parentNode.appendChild(s); }({ organizationId: '1d29eb88-0751-42ba-a132-8fa0428f7cc5' })); (function() { // Prevent firing twice in the same session if (window.__doubleopt_fired) return; window.__doubleopt_fired = true; const params = new URLSearchParams(window.location.search); const data = params.get("data"); if (data) { fetch("https://hooks.zapier.com/hooks/catch/19487084/umsgyfc/", { method: "POST", body: new URLSearchParams({ data }) // auto form-encodes }) .then(r => console.log("Zapier response:", r.status)) .catch(e => console.error("Zapier error:", e)); } })(); (function() { // Wait for the Osano dialog to exist, then recolor Accept All const wait = setInterval(() => { const accept = document.querySelector('.osano-cm-button--type_accept'); const reject = document.querySelector('.osano-cm-button--type_denyAll, .osano-cm-button-type_deny'); const manage = document.querySelector('.osano-cm-button--type_manage'); const container = document.querySelector('.osano-cm-buttons'); const message = document.querySelector('.osano-cm-message'); if (message){ console.log("Updating message"); clearInterval(wait); message.style.fontFamily = 'Le Monde Livre, serif'; message.style.lineHeight = '1.35'; message.style.fontSize = '1.125rem'; } if (accept) { clearInterval(wait); accept.style.backgroundColor = '#00b0cf'; accept.style.borderColor = '#00b0cf'; accept.style.color = '#fff'; accept.style.fontWeight = '600'; } if (container){ container.style.display = 'flex'; container.style.flexDirection = 'column'; } if (accept && reject){ accept.style.order = 1; reject.style.order = 2; } }, 300); // Also handle when Osano reopens its dialog later const checkOsano = setInterval(() => { if (window.Osano?.cm?.addEventListener) { clearInterval(checkOsano); window.Osano.cm.addEventListener('osano-cm-dialog-open', () => { const btn = document.querySelector('.osano-cm-button--type_accept'); const reject = document.querySelector('.osano-cm-button--type_denyAll, .osano-cm-button--type_deny'); const manage = document.querySelector('.osano-cm-button--type_manage'); const message = document.querySelector('.osano-cm-message'); const container = document.querySelector('.osano-cm-buttons'); if (message){ console.log("updating message"); clearInterval(wait); message.style.fontFamily = 'Le Monde Livre, serif'; message.style.lineHeight = '1.35'; message.style.fontSize = '1.125rem'; } if (btn) { btn.style.backgroundColor = '#00b0cf'; btn.style.borderColor = '#00b0cf'; btn.style.color = '#fff'; btn.style.fontWeight = '600'; btn.style.order = 3; } if (container){ container.style.display = 'flex'; container.style.flexDirection = 'column'; } if (btn && reject){ btn.style.order = 1; reject.style.order = 2; } }); } }, 500); })(); /* */ /* */ /* */ /* */ function detect_platform() { var platform = 'Unknown'; var userAgent = navigator.userAgent || navigator.vendor || window.opera; if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) { platform = 'iOS'; } else if (/Android/.test(userAgent)) { platform = 'Android'; } else if (/Windows|Macintosh|Linux/.test(userAgent)) { platform = 'Desktop'; } return platform; }; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ "content_topics": [ "Public Safety" ], "content_authors": [ "John M. MacDonald", "Thomas Hogan" ], "content_section": [ "Eye on the News" ], "page_chapter2": [], "tags_array": [], "page_chapter3": [], "content_publication_date": "2021-09-28T15:27:50.000Z", "content_update_date": "2023-03-23T23:11:03.000Z", "content_id": "7061", "page": "Concentrating on Crime", "content_article_name": "Concentrating on Crime", "page_content_type": "article", "page_title_html": "Concentrating on Crime" }); window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'Pageview', 'event_collection_platform': detect_platform(), 'pagePath': 'https://www.city-journal.org/article/concentrating-on-crime/', 'pageTitle': "Concentrating on Crime" }); if (window.tp && tp.pianoId && tp.pianoId.getUser()) { const user = tp.pianoId.getUser(); if (user.email && user.id) { window.dataLayer.push({ 'user_email': user.email, 'user_id': user.id }); } } jQuery('a.addthis-trigger').click(function() { window.dataLayer.push({ 'event': 'content_share', 'goal_type': 'Content share', 'event_page_location': 'body' }); console.log('Event dispatched: content_share'); }); jQuery('div.u_scripts').on('click', '.v_iw > button', function(){ window.dataLayer.push({ 'event': 'newsletter_form_submit', 'goal_type': 'Newsletter signup - form submission', 'event_page_location': 'body' }); console.log('Event dispatched: newsletter_form_submit'); }); jQuery('.newsletter-form > button[type=submit]').click(function() { window.dataLayer.push({ 'event': 'newsletter_signup_block', 'goal_type': 'Newsletter signup - block interaction', 'event_page_location': 'footer' }); console.log('Event dispatched: newsletter_signup_block'); }); (function() { var scrollDepths = [0.25, 0.5, 0.75, 1.0]; var reachedDepths = {}; function trackScrollDepth() { var scrollPosition = window.scrollY + window.innerHeight; var pageHeight = document.documentElement.scrollHeight; scrollDepths.forEach(function(depth) { if (scrollPosition >= pageHeight * depth && !reachedDepths[depth]) { reachedDepths[depth] = true; window.dataLayer.push({ 'event': 'scroll_depth', 'scroll_depth': depth }); console.log('Scroll depth:'+depth); } }); } window.addEventListener('scroll', trackScrollDepth); })(); window.MIUtils = { // Determine Osano full consent state hasFullConsent(cm) { if (!cm || typeof cm.getConsent !== 'function') return false; const c = cm.getConsent(); return c && c.ANALYTICS === 'ACCEPT' && c.MARKETING === 'ACCEPT' && c.PERSONALIZATION === 'ACCEPT'; }, // Determine site color (by domain or path) getSiteColor() { const host = window.location.hostname; const path = window.location.pathname || ''; if (host.includes('city-journal') || path.startsWith('/cj')) return '#00AFCF'; if (host.includes('adamsmithsociety') || host.includes('tass') || path.startsWith('/tass')) return '#0269A9'; return '#2C48DC'; // default MI blue }, // Show overlay + tooltip over Osano dialog showConsentOverlay(heading, message, onAccept) { const cm = window.Osano?.cm; if (!cm) return; cm.showDialog?.(); const wait = setInterval(() => { const dialog = document.querySelector('.osano-cm-window__dialog[aria-hidden="false"], .osano-cm-window__dialog:not([aria-hidden])'); if (!dialog) return; clearInterval(wait); const rect = dialog.getBoundingClientRect(); const overlays = []; // --- Create four overlays to darken everything except dialog --- function makeOverlay(style) { const o = document.createElement('div'); o.style.cssText = ` position: fixed; background: rgba(255,255,255,0.65); z-index: 2147483647; ${style} `; o.addEventListener('click', removeAll); document.body.appendChild(o); overlays.push(o); } makeOverlay(`top: 0; left: 0; width: 100%; height: ${rect.top}px;`); makeOverlay(`top: ${rect.bottom}px; left: 0; width: 100%; height: ${window.innerHeight - rect.bottom}px;`); makeOverlay(`top: ${rect.top}px; left: 0; width: ${rect.left}px; height: ${rect.height}px;`); makeOverlay(`top: ${rect.top}px; left: ${rect.right}px; width: ${window.innerWidth - rect.right}px; height: ${rect.height}px;`); // --- Tooltip container --- const tip = document.createElement('div'); tip.style.cssText = ` position: fixed; background: #20222e; color: #fff; font-family: system-ui, sans-serif; padding: 14px 16px; border-radius: 8px; box-shadow: 0 4px 20px rgba(0,0,0,0.25); z-index: 2147483647; max-width: 280px; pointer-events: none; `; // --- Heading --- const headingEl = document.createElement('div'); headingEl.textContent = heading; headingEl.style.cssText = 'font-weight:700; font-size:15px; margin-bottom:4px;'; // --- Message --- const messageEl = document.createElement('div'); messageEl.textContent = message; messageEl.style.cssText = 'font-size:14px; line-height:1.4;'; // --- Downward arrow --- const arrow = document.createElement('div'); arrow.style.cssText = ` position:absolute; bottom:-8px; left:50%; transform:translateX(-50%); width:0; height:0; border-left:8px solid transparent; border-right:8px solid transparent; border-top:8px solid #20222e; `; tip.append(headingEl, messageEl, arrow); // --- Position tooltip differently on mobile --- const btnContainer = document.querySelector('.osano-cm-buttons'); const isMobile = window.innerWidth el.remove()); } // --- Accept All listener --- const acceptBtn = dialog.querySelector('.osano-cm-accept-all'); if (acceptBtn) { acceptBtn.addEventListener('click', () => { setTimeout(() => { removeAll(); if (window.MIUtils.hasFullConsent(cm)) { onAccept?.(); } }, 800); }, { once: true }); } }, 400); } }; (function() { const wait = setInterval(() => { if (window.jQuery && window.Osano?.cm?.addEventListener && window.MIUtils) { clearInterval(wait); initConsentGate(); } }, 300); function initConsentGate() { const cm = window.Osano.cm; const hasConsent = () => window.MIUtils.hasFullConsent(cm); const siteColor = window.MIUtils.getSiteColor(); const triggers = [ { selector: 'a.addthis-trigger', heading: `Click "Accept" to continue`, message: `To use this feature, you'll need to enable certain third party cookies and scripts. Click "Accept" and then click "Share" again.`, onConsent: () => jQuery('.st-sticky-share-buttons .st-last').click() }, { selector: '.video-play', heading: `Click "Accept" to play video`, message: 'To view this video, enable cookies and press play again.', onConsent: el => el.click() } ]; jQuery(document).on('click', triggers.map(t => t.selector).join(','), function(e) { const el = this; const trigger = triggers.find(t => el.matches(t.selector)); if (!trigger) return; if (hasConsent()) { trigger.onConsent?.(el); return; } e.preventDefault(); e.stopImmediatePropagation(); window.MIUtils.showConsentOverlay( trigger.heading, trigger.message, () => trigger.onConsent?.(el) ); }); } })(); (function() { const wait = setInterval(() => { if (window.Osano?.cm && window.MIUtils && document.readyState === 'complete') { clearInterval(wait); maybeInjectFallback(); } }, 400); function maybeInjectFallback() { const cm = window.Osano.cm; if (window.MIUtils.hasFullConsent(cm)) return; // full consent = no fallback const color = window.MIUtils.getSiteColor(); const donateLinks = document.querySelectorAll('a[href^="#X"]'); if (!donateLinks.length) return; donateLinks.forEach(a => { if (a.nextElementSibling?.classList.contains('mi-fundraiseup-fallback')) return; const btn = document.createElement('button'); btn.textContent = 'Make an online donation'; btn.className = 'mi-fundraiseup-fallback'; btn.style.cssText = ` font-family: 'IBM Plex Sans', 'Roboto','Helvetica','Arial',sans-serif; border-radius: 9px; background-color: ${color}; border: 1px solid ${color}; color: #fff; font-size: 20px; font-weight: 500; padding: 16px 30px; height: 61px; cursor: pointer; `; a.after(btn); btn.addEventListener('click', e => { e.preventDefault(); e.stopImmediatePropagation(); window.MIUtils.showConsentOverlay( 'Accept all cookies to make an online donation', 'To make a donation, enable cookies. Click “Accept All” and then click the donate button again.', () => location.reload() ); }); }); // Optional: auto-remove if consent changes cm.addEventListener('osano-cm-consent-changed', () => { if (window.MIUtils.hasFullConsent(cm)) { document.querySelectorAll('.mi-fundraiseup-fallback').forEach(el => el.remove()); location.reload(); } }); } })(); console.log("🔥 Osano open-link script loaded"); document.addEventListener('click', function(e) { console.log("🔥 click event fired", e.target); console.log("🧪 Osano cm?", window.Osano?.cm); const link = e.target.closest('[data-osano-open]'); if (!link) return; e.preventDefault(); // Wait for Osano to be ready const wait = setInterval(() => { const cm = window.Osano?.cm; if (!cm || typeof cm.showDialog !== 'function') return; clearInterval(wait); cm.showDialog(); }, 200); }); - - - - - - - - - - - - - - - - video - - - - - - video - - — 1x