<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script> <style> @import url("https://fonts.googleapis.com/css2?family=Open+Sans&display=swap"); :root { --primary: #015478; --white: #fff; --icon-clr: #aaaaaa; --facebook-clr: #3b5998; --twitter-clr: #55acee; --instagram-clr: #bc2a8d; --reddit-clr: #ff4500; } * { margin: 0; padding: 0; box-sizing: border-box; list-style: none; text-decoration: none; font-family: "Open Sans", sans-serif; user-select: none; } .ss_wrap { position: relative; margin: 0px !important; } .ss_wrap .ss_btn { background: var(--white); color: var(--icon-clr); width: 50px; height: 50px; display: flex; justify-content: center; align-items: center; gap: 3px; font-size: 1.4rem; border-radius: 3px; cursor: pointer; } .ss_btn .icon { display: flex; } .dd_list .icon{ font-size: 1.3rem; } .ss_wrap .dd_list { position: absolute; } .ss_wrap .dd_list ul { display: none; width: auto; background: var(--white); margin: 0 10px; box-shadow: 0px 0px 20px #ededed; border-radius: 3px; position: relative; } .ss_wrap .dd_list ul li a { display: flex; width: 50px; height: 50px; margin: 0 10px; justify-content: center; align-items: center; color: var(--icon-clr); } .ss_wrap .dd_list ul:before { content: ""; position: absolute; border: 8px solid; } /* social share 3 */ .ss_wrap.ss_wrap_3 { display: flex; justify-content: center; align-items: center; } .ss_wrap.ss_wrap_3 .dd_list { top: 50px; left: 50%; transform: translateX(-50%); } .ss_wrap.ss_wrap_3 .dd_list ul { flex-direction: column; width: 175px; border-radius: 3px; } .ss_wrap.ss_wrap_3 .dd_list ul li a { width: 100%; margin: 0; justify-content: unset; padding: 0 10px; } .ss_wrap.ss_wrap_3 .dd_list ul li a span { display: flex; } .ss_wrap.ss_wrap_3 .dd_list ul li a span.icon { width: 25px; margin-right: 10px; } .ss_wrap.ss_wrap_3 .dd_list ul li a span.text { width: 125px; } .ss_wrap.ss_wrap_3 .dd_list ul:before { top: -15px; left: 50%; transform: translateX(-50%); border-color: transparent transparent var(--primary) transparent; } .ss_wrap.ss_wrap_3 .icon{ color: black; } .ss_wrap.ss_wrap_3 span.text:hover { color: var(--primary); } .ss_wrap .ss_btn.active + .dd_list ul { display: flex; } </style> </head> <body> <div class="social_share_wrap"> <div class="ss_wrap ss_wrap_3"> <div class="ss_btn"> <span class="icon"> <ion-icon name="share-social"></ion-icon> </span>Share </div> <div class="dd_list"> <ul> <li><a href="#" class="facebook" onclick="shareFacebook()"> <span class="icon"> <ion-icon name="logo-facebook"></ion-icon> </span> <span class="text"> Facebook </span> </a></li> <li><a href="#" class="whatsapp" onclick="shareWhatsapp()"> <span class="icon"> <ion-icon name="logo-whatsapp"></ion-icon> </span> <span class="text"> Whatsapp </span> </a></li> <li><a href="#" class="email" onclick="shareEmail()"> <span class="icon"> <ion-icon name="mail"></ion-icon> </span> <span class="text"> Email </span> </a></li> <li><a href="#" class="sms" onclick="shareSMS()"> <span class="icon"> <ion-icon name="chatbox"></ion-icon> </span> <span class="text"> SMS </span> </a></li> <li><a href="#" class="copy-link" onclick="copyLink()"> <span class="icon"> <ion-icon name="copy"></ion-icon> </span> <span class="text"> Copy Link </span> </a></li> </ul> </div> </div> </div> <script> document.addEventListener('DOMContentLoaded', function () { var ss_btn_3 = document.querySelector(".ss_wrap_3 .ss_btn"); var dd_list_3 = document.querySelector(".ss_wrap_3 .dd_list"); ss_btn_3.addEventListener("click", function (event) { event.stopPropagation(); this.classList.toggle("active"); }); dd_list_3.addEventListener("click", function (event) { event.stopPropagation(); }); // Add an event listener to close the dropdown when clicking anywhere outside document.addEventListener('click', function () { ss_btn_3.classList.remove("active"); }); // Prevent event propagation when clicking on icons var icons = document.querySelectorAll(".ss_wrap_3 .icon"); icons.forEach(function (icon) { icon.addEventListener("click", function (event) { event.stopPropagation(); }); }); }); function showCopiedMessage() { alert('Link Copied'); } function shareFacebook() { window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(window.location.href)); } function shareWhatsapp() { window.open('https://api.whatsapp.com/send?text=' + encodeURIComponent(window.location.href)); } function shareEmail() { window.open('mailto:?body=Check this out: ' + encodeURIComponent(window.location.href)); } function shareSMS() { window.open('sms:&body=' + encodeURIComponent(window.location.href)); } function copyLink() { var dummy = document.createElement("textarea"); document.body.appendChild(dummy); dummy.value = window.location.href; dummy.select(); document.execCommand("copy"); document.body.removeChild(dummy); // Show the "Link Copied" message showCopiedMessage(); } // Add an event listener to close the share box when clicking anywhere on the screen document.body.addEventListener('click', function (event) { // Check if the click is outside the share box var shareBox = document.querySelector('.social_share_wrap'); if (!shareBox.contains(event.target)) { // Clicked outside the share box, close it var ss_btn = document.querySelector(".ss_wrap_3 .ss_btn"); ss_btn.classList.remove("active"); } }); </script> </body> </html>
{"link":{"rel":"self","url":"https://www.sciencebase.gov/catalog/item/5e432067e4b0edb47be84657"},"relatedItems":{"link":{"url":"https://www.sciencebase.gov/catalog/itemLinks?itemId=5e432067e4b0edb47be84657","rel":"related"}},"id":"5e432067e4b0edb47be84657","title":"State-wide Layers","summary":"Each state has a zipped folder that contains six Geotiff files: 1- <StateName>_avg.tif ===> The value of each cell in this raster layer is the avarage area of all buildings that intersect the cell. The unit is sq meter. 2- <StateName>_cnt.tif ===> The value of each cell in this raster layer is the number of buildings that intersect the cell. 3- <StateName>_max.tif ===> The value of each cell in this raster layer is the maximum of area of all building that intersect the cell. The unit is sq meter. 4- <StateName>_min.tif ===> The value of each cell in this raster layer is the minimum of area of all building that intersect the cell. The unit is sq meter. 5- <StateName>_sum.tif ===> The value of each cell in this raster layer is [...]","body":"Each state has a zipped folder that contains six Geotiff files:<br>\n<br>\n1- <StateName>_avg.tif ===> The value of each cell in this raster layer is the avarage area of all buildings that intersect the cell. The unit is sq meter. <br>\n2- <StateName>_cnt.tif ===> The value of each cell in this raster layer is the number of buildings that intersect the cell. <br>\n3- <StateName>_max.tif ===> The value of each cell in this raster layer is the maximum of area of all building that intersect the cell. The unit is sq meter.<br>\n4- <StateName>_min.tif ===> The value of each cell in this raster layer is the minimum of area of all building that intersect the cell. The unit is sq meter.<br>\n5- <StateName>_sum.tif ===> The value of each cell in this raster layer is the area of the cell that is covered by building footprints The unit is sq meter. the range is 0 to 900 sq meter.<br>\n6- <StateName>_cntroid.tif ===> The value of each cell in this raster layer is the number of building centroids that intersect the cell. ","citation":"Heris, M.P., Foks, N., Bagstad, K., and Troy, A., 2020, A national dataset of rasterized building footprints for the U.S.: U.S. Geological Survey data release, https://doi.org/10.5066/P9J2Y1WG.","provenance":{"dataSource":"Input directly","dateCreated":"2020-02-11T21:45:11Z","lastUpdated":"2022-08-28T21:14:53Z"},"hasChildren":false,"parentId":"5d27a8dfe4b0941bde650fc7","contacts":[{"name":"Mehdi Pourpeikari Heris","oldPartyId":75894,"type":"Point of Contact","contactType":"person","email":"mpourpeikariheris@usgs.gov","active":true,"jobTitle":"volunteer","firstName":"Mehdi","lastName":"Pourpeikari Heris","organization":{"displayText":"Geosciences and Environmental Change Science Center"},"primaryLocation":{"name":"CN=Mehdi Pourpeikari Heris,OU=GECSC,OU=Users,OU=DenverCO-G GEC,OU=DenverCO-M,OU=CR,DC=gs,DC=doi,DC=net - Primary Location","building":"DFC Bldg 25","buildingCode":"KAE","officePhone":"3032361330","streetAddress":{"line1":"W 6th Ave Kipling St","city":"Lakewood","state":"CO","zip":"80225","country":"US"},"mailAddress":{}}},{"name":"Mehdi Pourpeikari Heris","oldPartyId":75894,"type":"Originator","contactType":"person","email":"mpourpeikariheris@usgs.gov","active":true,"jobTitle":"volunteer","firstName":"Mehdi","lastName":"Pourpeikari Heris","organization":{"displayText":"Geosciences and Environmental Change Science Center"},"primaryLocation":{"name":"CN=Mehdi Pourpeikari Heris,OU=GECSC,OU=Users,OU=DenverCO-G GEC,OU=DenverCO-M,OU=CR,DC=gs,DC=doi,DC=net - Primary Location","building":"DFC Bldg 25","buildingCode":"KAE","officePhone":"3032361330","streetAddress":{"line1":"W 6th Ave Kipling St","city":"Lakewood","state":"CO","zip":"80225","country":"US"},"mailAddress":{}}},{"name":"Nathan Foks","type":"Originator","email":"nfoks@mymail.mines.edu","active":true,"firstName":"Nathan","lastName":"Foks","organization":{},"primaryLocation":{"streetAddress":{},"mailAddress":{}}},{"name":"Kenneth J Bagstad","oldPartyId":24439,"type":"Originator","contactType":"person","email":"kjbagstad@usgs.gov","active":true,"jobTitle":"Research Economist","firstName":"Kenneth","middleName":"J","lastName":"Bagstad","organization":{"displayText":"Geosciences and Environmental Change Science Center"},"primaryLocation":{"name":"Kenneth J Bagstad/GEOG/USGS/DOI - Primary Location","building":"DFC Bldg 25","buildingCode":"KAE","officePhone":"3032361330","faxPhone":"3032365349","streetAddress":{"line1":"W 6th Ave Kipling St","city":"Lakewood","state":"CO","zip":"80225","country":"US"},"mailAddress":{}},"orcId":"0000-0001-8857-5615"},{"name":"Austin Troy","type":"Originator","organization":{},"primaryLocation":{"streetAddress":{},"mailAddress":{}}},{"name":"Mehdi Pourpeikari Heris","oldPartyId":75894,"type":"Metadata Contact","contactType":"person","email":"mpourpeikariheris@usgs.gov","active":true,"jobTitle":"volunteer","firstName":"Mehdi","lastName":"Pourpeikari Heris","organization":{"displayText":"Geosciences and Environmental Change Science Center"},"primaryLocation":{"name":"CN=Mehdi Pourpeikari Heris,OU=GECSC,OU=Users,OU=DenverCO-G GEC,OU=DenverCO-M,OU=CR,DC=gs,DC=doi,DC=net - Primary Location","building":"DFC Bldg 25","buildingCode":"KAE","officePhone":"3032361330","streetAddress":{"line1":"W 6th Ave Kipling St","city":"Lakewood","state":"CO","zip":"80225","country":"US"},"mailAddress":{}}},{"name":"U.S. Geological Survey","oldPartyId":18139,"type":"Publisher","contactType":"organization","onlineResource":"http://www.usgs.gov/","active":true,"aliases":["{\"name\":\"USGS\"}","{\"name\":\"Geological Survey (U.S.)\"}","{\"name\":\"U.S. GEOLOGICAL SURVEY\"}"],"fbmsCodes":["GG00000000"],"logoUrl":"http://my.usgs.gov/static-cache/images/dataOwner/v1/logosMed/USGSLogo.gif","smallLogoUrl":"http://my.usgs.gov/static-cache/images/dataOwner/v1/logosSmall/USGSLogo.gif","organization":{},"primaryLocation":{"name":"U.S. Geological Survey - Location","streetAddress":{},"mailAddress":{}}},{"name":"U.S. Geological Survey - ScienceBase","oldPartyId":70157,"type":"Distributor","contactType":"organization","onlineResource":"https://www.sciencebase.gov","email":"sciencebase@usgs.gov","organization":{},"primaryLocation":{"name":"U.S. Geological Survey - ScienceBase - Location","officePhone":"18882758747","streetAddress":{},"mailAddress":{"line1":"Denver Federal Center","line2":"Building 810","mailStopCode":"302","city":"Denver","state":"CO","zip":"80225","country":"United States"}}}],"dates":[{"type":"Publication","dateString":"2020-02-28","label":"Publication Date"}],"files":[{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"DistrictofColumbia.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__c1/53/e1/c153e196622c92951ff942df8df492a91c15881a","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":3413856,"dateUploaded":"2020-02-11T23:06:25Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"ea65377e5967904eec49c38934f4afca","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__c1%2F53%2Fe1%2Fc153e196622c92951ff942df8df492a91c15881a","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__c1%2F53%2Fe1%2Fc153e196622c92951ff942df8df492a91c15881a"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"RhodeIsland.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__9e/3c/7d/9e3c7d1dbebfb6210512b91f988ed0b6ad807409","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":20232974,"dateUploaded":"2020-02-11T23:07:36Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"3d64e3627d7dbc095fd5bb77cc57d83c","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__9e%2F3c%2F7d%2F9e3c7d1dbebfb6210512b91f988ed0b6ad807409","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__9e%2F3c%2F7d%2F9e3c7d1dbebfb6210512b91f988ed0b6ad807409"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Delaware.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__95/25/e8/9525e8b796c7387cc77efc226e04896aa53aa0c5","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":22992871,"dateUploaded":"2020-02-11T23:07:43Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"84eae35374a2eb25e670d1d3b4dbf945","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__95%2F25%2Fe8%2F9525e8b796c7387cc77efc226e04896aa53aa0c5","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__95%2F25%2Fe8%2F9525e8b796c7387cc77efc226e04896aa53aa0c5"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Vermont.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__15/16/da/1516da81b1c881ff9fb528f3ffa15ec6930c355a","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":29878415,"dateUploaded":"2020-02-11T23:08:09Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"3e33629cb2009579a0ca4175fef37241","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__15%2F16%2Fda%2F1516da81b1c881ff9fb528f3ffa15ec6930c355a","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__15%2F16%2Fda%2F1516da81b1c881ff9fb528f3ffa15ec6930c355a"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Wyoming.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__63/95/8f/63958fef36806c385a6163c681fdc3d8d2630f6f","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":31025768,"dateUploaded":"2020-02-11T23:08:20Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"34222e282e005be4b480e69f5f90168c","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__63%2F95%2F8f%2F63958fef36806c385a6163c681fdc3d8d2630f6f","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__63%2F95%2F8f%2F63958fef36806c385a6163c681fdc3d8d2630f6f"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Utah.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__99/02/2b/99022b0e3a8f1d158fa595d818e83ce490f16736","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":34773757,"dateUploaded":"2020-02-11T23:08:27Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"a21404c85c374d8cdc9819c2ebc4c680","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__99%2F02%2F2b%2F99022b0e3a8f1d158fa595d818e83ce490f16736","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__99%2F02%2F2b%2F99022b0e3a8f1d158fa595d818e83ce490f16736"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"SouthDakota.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__92/d2/f8/92d2f845b18a1e4db3fe3373a66ce0293de6fd23","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":44655285,"dateUploaded":"2020-02-11T23:09:08Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"ca1e48ca289e6574fc209e62a62d9a39","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__92%2Fd2%2Ff8%2F92d2f845b18a1e4db3fe3373a66ce0293de6fd23","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__92%2Fd2%2Ff8%2F92d2f845b18a1e4db3fe3373a66ce0293de6fd23"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NewHampshire.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__69/bf/f9/69bff90f5b538a12c0a8be312956a32ee116b99f","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":44827838,"dateUploaded":"2020-02-11T23:09:08Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"8e17a957a36b2955b4f305e138af82a1","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__69%2Fbf%2Ff9%2F69bff90f5b538a12c0a8be312956a32ee116b99f","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__69%2Fbf%2Ff9%2F69bff90f5b538a12c0a8be312956a32ee116b99f"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NorthDakota.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__21/16/af/2116af2a512bcbf49166269371f40c786ed6a723","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":45632865,"dateUploaded":"2020-02-11T23:09:10Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"bc6ebe342bd36e2215ed56a66a906655","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__21%2F16%2Faf%2F2116af2a512bcbf49166269371f40c786ed6a723","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__21%2F16%2Faf%2F2116af2a512bcbf49166269371f40c786ed6a723"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Nevada.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__4b/02/ac/4b02ac3471c150d2c82948635742dfa083b6bef0","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":48203368,"dateUploaded":"2020-02-11T23:09:21Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"c64c6ba1d4623d7002933e73761ee7b8","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__4b%2F02%2Fac%2F4b02ac3471c150d2c82948635742dfa083b6bef0","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__4b%2F02%2Fac%2F4b02ac3471c150d2c82948635742dfa083b6bef0"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Maine.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__b0/7d/10/b07d10c3535b9ab4295e8f5fa21bd9bec5adbeed","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":61782571,"dateUploaded":"2020-02-11T23:10:05Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"23e280844ac369cf651e3155a45c82b1","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b0%2F7d%2F10%2Fb07d10c3535b9ab4295e8f5fa21bd9bec5adbeed","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b0%2F7d%2F10%2Fb07d10c3535b9ab4295e8f5fa21bd9bec5adbeed"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Montana.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__eb/7b/fd/eb7bfd7a9d2e20731126c9428dc7bcac14b9338a","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":62631678,"dateUploaded":"2020-02-11T23:10:08Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"c6913e8370cd65f35cf082dc5dd5ebd2","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__eb%2F7b%2Ffd%2Feb7bfd7a9d2e20731126c9428dc7bcac14b9338a","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__eb%2F7b%2Ffd%2Feb7bfd7a9d2e20731126c9428dc7bcac14b9338a"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Idaho.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__f1/c9/82/f1c982cfff40a1cd1c99d4f91b245e6f81628403","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":67336491,"dateUploaded":"2020-02-11T23:10:27Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"0fd34db3149330aed7866c757860b92e","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__f1%2Fc9%2F82%2Ff1c982cfff40a1cd1c99d4f91b245e6f81628403","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__f1%2Fc9%2F82%2Ff1c982cfff40a1cd1c99d4f91b245e6f81628403"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NewMexico.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__79/83/f4/7983f4752e44828684298cdbe4256e26c1362515","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":73594544,"dateUploaded":"2020-02-11T23:10:41Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"12c8432d7dc498ce96506253da5531ee","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__79%2F83%2Ff4%2F7983f4752e44828684298cdbe4256e26c1362515","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__79%2F83%2Ff4%2F7983f4752e44828684298cdbe4256e26c1362515"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"WestVirginia.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__3e/e7/50/3ee750b0755f0193c41a333eb6cff634b67fbabc","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":78537646,"dateUploaded":"2020-02-11T23:10:56Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"355343048b274b2369c1f07e7f461925","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3e%2Fe7%2F50%2F3ee750b0755f0193c41a333eb6cff634b67fbabc","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3e%2Fe7%2F50%2F3ee750b0755f0193c41a333eb6cff634b67fbabc"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Connecticut.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__62/ac/0e/62ac0ee07103e36e0a31a746e8d7679b6a2e5701","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":79880971,"dateUploaded":"2020-02-11T23:10:59Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"820bb88869391090cbca91739d2c20db","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__62%2Fac%2F0e%2F62ac0ee07103e36e0a31a746e8d7679b6a2e5701","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__62%2Fac%2F0e%2F62ac0ee07103e36e0a31a746e8d7679b6a2e5701"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Nebraska.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__6b/8f/4e/6b8f4e11000e60d96fc22fab176c613ef7f224a4","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":81664701,"dateUploaded":"2020-02-11T23:11:07Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"dea5f3ccc8cafda74c5a8b91c1d40b2b","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6b%2F8f%2F4e%2F6b8f4e11000e60d96fc22fab176c613ef7f224a4","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6b%2F8f%2F4e%2F6b8f4e11000e60d96fc22fab176c613ef7f224a4"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Arkansas.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__e8/da/bc/e8dabcf428a0e0797002af179850ea8ec7d8f1bd","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":106720294,"dateUploaded":"2020-02-11T23:12:19Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"35de97a2eb606aa5b8466ecd97b25727","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e8%2Fda%2Fbc%2Fe8dabcf428a0e0797002af179850ea8ec7d8f1bd","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e8%2Fda%2Fbc%2Fe8dabcf428a0e0797002af179850ea8ec7d8f1bd"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Alabama.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__e9/2b/da/e92bda9e67f366d707c780c1820e36fe95e54c68","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":105868777,"dateUploaded":"2020-02-11T23:12:17Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"36febb18b754fc36177e50f9ce38562e","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e9%2F2b%2Fda%2Fe92bda9e67f366d707c780c1820e36fe95e54c68","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e9%2F2b%2Fda%2Fe92bda9e67f366d707c780c1820e36fe95e54c68"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Kansas.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__3b/4c/6f/3b4c6f519173caa15da2ee2cbe7c8cfae708eae4","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":113496834,"dateUploaded":"2020-02-11T23:12:32Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"3d2a1a91b504951a2bbea809f7e37463","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3b%2F4c%2F6f%2F3b4c6f519173caa15da2ee2cbe7c8cfae708eae4","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3b%2F4c%2F6f%2F3b4c6f519173caa15da2ee2cbe7c8cfae708eae4"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Oregon.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__b6/d6/0a/b6d60a88a221b0e6ae87da9ab260be3b888b622a","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":118448308,"dateUploaded":"2020-02-11T23:12:45Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"a202ba6c4c1d9a2312e36ce9b003fac0","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b6%2Fd6%2F0a%2Fb6d60a88a221b0e6ae87da9ab260be3b888b622a","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b6%2Fd6%2F0a%2Fb6d60a88a221b0e6ae87da9ab260be3b888b622a"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Massachusetts.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__21/6f/e9/216fe97c8ce5ca5d2a53e07a462f4fe351a4113e","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":126716009,"dateUploaded":"2020-02-11T23:13:06Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"19888804b4f75251212e17a9ea80fb31","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__21%2F6f%2Fe9%2F216fe97c8ce5ca5d2a53e07a462f4fe351a4113e","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__21%2F6f%2Fe9%2F216fe97c8ce5ca5d2a53e07a462f4fe351a4113e"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Oklahoma.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__c0/0a/a7/c00aa7b08dfcc0d75f280b9f4c11072e6634b733","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":128675964,"dateUploaded":"2020-02-11T23:13:10Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"fadc3c2d79c418d46274f28e852e5438","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__c0%2F0a%2Fa7%2Fc00aa7b08dfcc0d75f280b9f4c11072e6634b733","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__c0%2F0a%2Fa7%2Fc00aa7b08dfcc0d75f280b9f4c11072e6634b733"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Colorado.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__8b/dc/f9/8bdcf9300aa71392c7023562728643baa811f555","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":130950905,"dateUploaded":"2020-02-11T23:13:13Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"173b12c0cd20a53f1b3630f7941b6344","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__8b%2Fdc%2Ff9%2F8bdcf9300aa71392c7023562728643baa811f555","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__8b%2Fdc%2Ff9%2F8bdcf9300aa71392c7023562728643baa811f555"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Mississippi.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__dc/10/60/dc106083d59ff68e45a83adc0b27ed809898ab09","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":129653398,"dateUploaded":"2020-02-11T23:13:14Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"e02476f4818fd1a46c78698b86e1ad83","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__dc%2F10%2F60%2Fdc106083d59ff68e45a83adc0b27ed809898ab09","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__dc%2F10%2F60%2Fdc106083d59ff68e45a83adc0b27ed809898ab09"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Maryland.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__2f/ed/3b/2fed3b753d900bde2e7304ff626424ee73b5c991","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":137253837,"dateUploaded":"2020-02-11T23:13:27Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"d3e9292f95985091bb0c129d4bc8f93b","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2f%2Fed%2F3b%2F2fed3b753d900bde2e7304ff626424ee73b5c991","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2f%2Fed%2F3b%2F2fed3b753d900bde2e7304ff626424ee73b5c991"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Louisiana.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__e7/4c/43/e74c43f7fb1a7118f8f055caa3126d1364067983","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":144820967,"dateUploaded":"2020-02-11T23:13:39Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"b0bd98014c02cab0208ec8338387918a","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e7%2F4c%2F43%2Fe74c43f7fb1a7118f8f055caa3126d1364067983","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e7%2F4c%2F43%2Fe74c43f7fb1a7118f8f055caa3126d1364067983"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Iowa.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__e1/d4/a8/e1d4a8eec8ef2f21ac68db9a67211ae9c4b58423","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":143801765,"dateUploaded":"2020-02-11T23:13:39Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"e53625c7c0c9f4ad3bc13d8f4efaf312","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e1%2Fd4%2Fa8%2Fe1d4a8eec8ef2f21ac68db9a67211ae9c4b58423","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__e1%2Fd4%2Fa8%2Fe1d4a8eec8ef2f21ac68db9a67211ae9c4b58423"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Arizona.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__57/8f/46/578f464e065b48b8f24082ea9f95b3fa77a9eb7c","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":147197055,"dateUploaded":"2020-02-11T23:13:47Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"3b85aa58bf7ad386454aa4758e233699","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__57%2F8f%2F46%2F578f464e065b48b8f24082ea9f95b3fa77a9eb7c","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__57%2F8f%2F46%2F578f464e065b48b8f24082ea9f95b3fa77a9eb7c"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"SouthCarolina.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__6a/ef/8c/6aef8c46fc1c7182396271c956b44969cd6a617c","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":168738554,"dateUploaded":"2020-02-11T23:14:20Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"4ff303a1f168e6b1e33f0564abc9c34b","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6a%2Fef%2F8c%2F6aef8c46fc1c7182396271c956b44969cd6a617c","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6a%2Fef%2F8c%2F6aef8c46fc1c7182396271c956b44969cd6a617c"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NewJersey.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__58/74/47/587447903424d4dbfdae64b2d120e08a72afefc2","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":179848013,"dateUploaded":"2020-02-11T23:14:39Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"37026f3a0227b532c5aa57f541b37ba8","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__58%2F74%2F47%2F587447903424d4dbfdae64b2d120e08a72afefc2","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__58%2F74%2F47%2F587447903424d4dbfdae64b2d120e08a72afefc2"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Washington.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__68/ff/97/68ff979672aae1dfa1f37db2c48dcf5d2e1fa604","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":185097683,"dateUploaded":"2020-02-11T23:14:45Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"00c4ec64f5fc788fc0f0b87a987954da","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__68%2Fff%2F97%2F68ff979672aae1dfa1f37db2c48dcf5d2e1fa604","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__68%2Fff%2F97%2F68ff979672aae1dfa1f37db2c48dcf5d2e1fa604"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Kentucky.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__73/2f/88/732f885b711805b247ed446352adae46a670dd44","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":184756090,"dateUploaded":"2020-02-11T23:14:49Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"5641526720910e8e89765cd170a11c7b","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__73%2F2f%2F88%2F732f885b711805b247ed446352adae46a670dd44","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__73%2F2f%2F88%2F732f885b711805b247ed446352adae46a670dd44"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Minnesota.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__d6/a1/eb/d6a1eb23e0ce74b536081b5c2af9d59253f716a6","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":198353354,"dateUploaded":"2020-02-11T23:15:07Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"83e1fdcd3ab4427436e0c3ac5cd6709c","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__d6%2Fa1%2Feb%2Fd6a1eb23e0ce74b536081b5c2af9d59253f716a6","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__d6%2Fa1%2Feb%2Fd6a1eb23e0ce74b536081b5c2af9d59253f716a6"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Wisconsin.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__3f/f3/ae/3ff3ae84ee8742cfc1b075492f5ccb9cc368e4e2","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":214862314,"dateUploaded":"2020-02-11T23:15:27Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"9a3b1b20480832d035ecf4f2306dd463","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3f%2Ff3%2Fae%2F3ff3ae84ee8742cfc1b075492f5ccb9cc368e4e2","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__3f%2Ff3%2Fae%2F3ff3ae84ee8742cfc1b075492f5ccb9cc368e4e2"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Indiana.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__2b/3b/6f/2b3b6fff699e91965114422aaddb442d04effca6","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":219497169,"dateUploaded":"2020-02-11T23:15:38Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"82a268ec401379803d14479e8892b09f","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2b%2F3b%2F6f%2F2b3b6fff699e91965114422aaddb442d04effca6","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2b%2F3b%2F6f%2F2b3b6fff699e91965114422aaddb442d04effca6"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Missouri.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__fc/2d/7a/fc2d7a9499838db319e584519caffbdfa03c4b32","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":228264407,"dateUploaded":"2020-02-11T23:15:48Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"199d1fb4c93cdf773b70640bccd0d772","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__fc%2F2d%2F7a%2Ffc2d7a9499838db319e584519caffbdfa03c4b32","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__fc%2F2d%2F7a%2Ffc2d7a9499838db319e584519caffbdfa03c4b32"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Virginia.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__05/72/a9/0572a9d7762fa2afdd17862630a6663a007113da","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":229139158,"dateUploaded":"2020-02-11T23:15:49Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"f142648e142a49eed4ab108e2dc6bd48","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__05%2F72%2Fa9%2F0572a9d7762fa2afdd17862630a6663a007113da","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__05%2F72%2Fa9%2F0572a9d7762fa2afdd17862630a6663a007113da"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Tennessee.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__76/92/7e/76927e307e50e30211f54c6e0a1dd2f8468e57d3","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":234869838,"dateUploaded":"2020-02-11T23:15:51Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"68771f6f3919da1ff0be9dd067cc74fc","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__76%2F92%2F7e%2F76927e307e50e30211f54c6e0a1dd2f8468e57d3","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__76%2F92%2F7e%2F76927e307e50e30211f54c6e0a1dd2f8468e57d3"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Michigan.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__56/35/34/563534d99257420ff7b1b50125da8464a6086b95","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":264476718,"dateUploaded":"2020-02-11T23:16:21Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"d1115c280a2f7b8f06c54cc6fbe349a7","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__56%2F35%2F34%2F563534d99257420ff7b1b50125da8464a6086b95","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__56%2F35%2F34%2F563534d99257420ff7b1b50125da8464a6086b95"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Illinois.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__35/31/35/3531357e0edff3a59df3490668eacea622a3138d","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":282171965,"dateUploaded":"2020-02-11T23:16:32Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"61bd91642c38282c2b93ddaa888d4cd4","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__35%2F31%2F35%2F3531357e0edff3a59df3490668eacea622a3138d","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__35%2F31%2F35%2F3531357e0edff3a59df3490668eacea622a3138d"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Georgia.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__0d/5f/c5/0d5fc559dcd1ebd921289b4653721c48137db61e","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":304436964,"dateUploaded":"2020-02-11T23:16:51Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"a2a23bc83837d326c163c08060c05c38","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__0d%2F5f%2Fc5%2F0d5fc559dcd1ebd921289b4653721c48137db61e","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__0d%2F5f%2Fc5%2F0d5fc559dcd1ebd921289b4653721c48137db61e"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NewYork.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__37/af/b9/37afb94342cecf3f79b59c3264355c83d72303f5","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":309476306,"dateUploaded":"2020-02-11T23:16:52Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"97a0f0266922c62abefda57c3424b00c","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__37%2Faf%2Fb9%2F37afb94342cecf3f79b59c3264355c83d72303f5","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__37%2Faf%2Fb9%2F37afb94342cecf3f79b59c3264355c83d72303f5"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Pennsylvania.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__6f/31/e9/6f31e9ce92a863ca88bb5a99268aa661178d031c","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":332567119,"dateUploaded":"2020-02-11T23:17:03Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"4ce034e28c760b0e920c0e84f8a0b86a","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6f%2F31%2Fe9%2F6f31e9ce92a863ca88bb5a99268aa661178d031c","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__6f%2F31%2Fe9%2F6f31e9ce92a863ca88bb5a99268aa661178d031c"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"NorthCarolina.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__73/6f/b8/736fb845e1bc81d54978da0e36f829ff7d694eb6","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":350582803,"dateUploaded":"2020-02-11T23:17:13Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"f1ad7fb0d736fab70bacdbce7b707034","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__73%2F6f%2Fb8%2F736fb845e1bc81d54978da0e36f829ff7d694eb6","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__73%2F6f%2Fb8%2F736fb845e1bc81d54978da0e36f829ff7d694eb6"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Ohio.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__ac/eb/0d/aceb0d007d92f5116a9a2006a669fa02f9ed8f03","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":410843154,"dateUploaded":"2020-02-11T23:17:30Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"c6bd46e0c463ccaa22920cfc35289275","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__ac%2Feb%2F0d%2Faceb0d007d92f5116a9a2006a669fa02f9ed8f03","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__ac%2Feb%2F0d%2Faceb0d007d92f5116a9a2006a669fa02f9ed8f03"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Florida.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__2e/09/ad/2e09ad0b702be4ff542396c53d183cb2e2db164d","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":407921466,"dateUploaded":"2020-02-11T23:17:38Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"56ea3ec4142b2234f72816bef640e0e9","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2e%2F09%2Fad%2F2e09ad0b702be4ff542396c53d183cb2e2db164d","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__2e%2F09%2Fad%2F2e09ad0b702be4ff542396c53d183cb2e2db164d"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"California.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__05/30/31/053031214f56bc7b8fcd3d4bcd861cfc0f984c9b","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":552118711,"dateUploaded":"2020-02-11T23:18:11Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"c1f95c387916fee125ff70c2fa9de452","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__05%2F30%2F31%2F053031214f56bc7b8fcd3d4bcd861cfc0f984c9b","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__05%2F30%2F31%2F053031214f56bc7b8fcd3d4bcd861cfc0f984c9b"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Texas.zip","title":"","contentType":"application/zip","contentEncoding":null,"pathOnDisk":"__disk__d5/4c/42/d54c428b72aabc96f28a07b03cc5df5245655dd8","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":646925139,"dateUploaded":"2020-02-11T23:18:28Z","originalMetadata":false,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"58aca03c78089c8c6da62e71d48767ec","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__d5%2F4c%2F42%2Fd54c428b72aabc96f28a07b03cc5df5245655dd8","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__d5%2F4c%2F42%2Fd54c428b72aabc96f28a07b03cc5df5245655dd8"},{"cuid":null,"key":null,"bucket":null,"published":null,"node":null,"name":"Metadata_Building_Dataset_State_Wide_Layers.xml","title":"","contentType":"application/fgdc+xml","contentEncoding":null,"pathOnDisk":"__disk__b7/43/79/b74379256059aabaa6346df8d75da5631018107b","processed":false,"processToken":null,"imageWidth":null,"imageHeight":null,"size":13156,"dateUploaded":"2022-08-28T21:14:37Z","originalMetadata":true,"useForPreview":false,"movedToS3":null,"s3Object":null,"checksum":{"value":"40e3ecd089b1d504a26135b8d0e0cea6","type":"MD5"},"url":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b7%2F43%2F79%2Fb74379256059aabaa6346df8d75da5631018107b","downloadUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b7%2F43%2F79%2Fb74379256059aabaa6346df8d75da5631018107b","metadataHtmlViewUri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657?f=__disk__b7%2F43%2F79%2Fb74379256059aabaa6346df8d75da5631018107b&transform=1"}],"distributionLinks":[{"uri":"https://www.sciencebase.gov/catalog/file/get/5e432067e4b0edb47be84657","title":"Download Attached Files","type":"downloadLink","typeLabel":"Download Link","rel":"alternate","name":"State_wideLayers.zip","files":[{"name":"DistrictofColumbia.zip","title":"","contentType":"application/zip","size":3413856,"checksum":{"value":"ea65377e5967904eec49c38934f4afca","type":"MD5"}},{"name":"RhodeIsland.zip","title":"","contentType":"application/zip","size":20232974,"checksum":{"value":"3d64e3627d7dbc095fd5bb77cc57d83c","type":"MD5"}},{"name":"Delaware.zip","title":"","contentType":"application/zip","size":22992871,"checksum":{"value":"84eae35374a2eb25e670d1d3b4dbf945","type":"MD5"}},{"name":"Vermont.zip","title":"","contentType":"application/zip","size":29878415,"checksum":{"value":"3e33629cb2009579a0ca4175fef37241","type":"MD5"}},{"name":"Wyoming.zip","title":"","contentType":"application/zip","size":31025768,"checksum":{"value":"34222e282e005be4b480e69f5f90168c","type":"MD5"}},{"name":"Utah.zip","title":"","contentType":"application/zip","size":34773757,"checksum":{"value":"a21404c85c374d8cdc9819c2ebc4c680","type":"MD5"}},{"name":"SouthDakota.zip","title":"","contentType":"application/zip","size":44655285,"checksum":{"value":"ca1e48ca289e6574fc209e62a62d9a39","type":"MD5"}},{"name":"NewHampshire.zip","title":"","contentType":"application/zip","size":44827838,"checksum":{"value":"8e17a957a36b2955b4f305e138af82a1","type":"MD5"}},{"name":"NorthDakota.zip","title":"","contentType":"application/zip","size":45632865,"checksum":{"value":"bc6ebe342bd36e2215ed56a66a906655","type":"MD5"}},{"name":"Nevada.zip","title":"","contentType":"application/zip","size":48203368,"checksum":{"value":"c64c6ba1d4623d7002933e73761ee7b8","type":"MD5"}},{"name":"Maine.zip","title":"","contentType":"application/zip","size":61782571,"checksum":{"value":"23e280844ac369cf651e3155a45c82b1","type":"MD5"}},{"name":"Montana.zip","title":"","contentType":"application/zip","size":62631678,"checksum":{"value":"c6913e8370cd65f35cf082dc5dd5ebd2","type":"MD5"}},{"name":"Idaho.zip","title":"","contentType":"application/zip","size":67336491,"checksum":{"value":"0fd34db3149330aed7866c757860b92e","type":"MD5"}},{"name":"NewMexico.zip","title":"","contentType":"application/zip","size":73594544,"checksum":{"value":"12c8432d7dc498ce96506253da5531ee","type":"MD5"}},{"name":"WestVirginia.zip","title":"","contentType":"application/zip","size":78537646,"checksum":{"value":"355343048b274b2369c1f07e7f461925","type":"MD5"}},{"name":"Connecticut.zip","title":"","contentType":"application/zip","size":79880971,"checksum":{"value":"820bb88869391090cbca91739d2c20db","type":"MD5"}},{"name":"Nebraska.zip","title":"","contentType":"application/zip","size":81664701,"checksum":{"value":"dea5f3ccc8cafda74c5a8b91c1d40b2b","type":"MD5"}},{"name":"Arkansas.zip","title":"","contentType":"application/zip","size":106720294,"checksum":{"value":"35de97a2eb606aa5b8466ecd97b25727","type":"MD5"}},{"name":"Alabama.zip","title":"","contentType":"application/zip","size":105868777,"checksum":{"value":"36febb18b754fc36177e50f9ce38562e","type":"MD5"}},{"name":"Kansas.zip","title":"","contentType":"application/zip","size":113496834,"checksum":{"value":"3d2a1a91b504951a2bbea809f7e37463","type":"MD5"}},{"name":"Oregon.zip","title":"","contentType":"application/zip","size":118448308,"checksum":{"value":"a202ba6c4c1d9a2312e36ce9b003fac0","type":"MD5"}},{"name":"Massachusetts.zip","title":"","contentType":"application/zip","size":126716009,"checksum":{"value":"19888804b4f75251212e17a9ea80fb31","type":"MD5"}},{"name":"Oklahoma.zip","title":"","contentType":"application/zip","size":128675964,"checksum":{"value":"fadc3c2d79c418d46274f28e852e5438","type":"MD5"}},{"name":"Colorado.zip","title":"","contentType":"application/zip","size":130950905,"checksum":{"value":"173b12c0cd20a53f1b3630f7941b6344","type":"MD5"}},{"name":"Mississippi.zip","title":"","contentType":"application/zip","size":129653398,"checksum":{"value":"e02476f4818fd1a46c78698b86e1ad83","type":"MD5"}},{"name":"Maryland.zip","title":"","contentType":"application/zip","size":137253837,"checksum":{"value":"d3e9292f95985091bb0c129d4bc8f93b","type":"MD5"}},{"name":"Louisiana.zip","title":"","contentType":"application/zip","size":144820967,"checksum":{"value":"b0bd98014c02cab0208ec8338387918a","type":"MD5"}},{"name":"Iowa.zip","title":"","contentType":"application/zip","size":143801765,"checksum":{"value":"e53625c7c0c9f4ad3bc13d8f4efaf312","type":"MD5"}},{"name":"Arizona.zip","title":"","contentType":"application/zip","size":147197055,"checksum":{"value":"3b85aa58bf7ad386454aa4758e233699","type":"MD5"}},{"name":"SouthCarolina.zip","title":"","contentType":"application/zip","size":168738554,"checksum":{"value":"4ff303a1f168e6b1e33f0564abc9c34b","type":"MD5"}},{"name":"NewJersey.zip","title":"","contentType":"application/zip","size":179848013,"checksum":{"value":"37026f3a0227b532c5aa57f541b37ba8","type":"MD5"}},{"name":"Washington.zip","title":"","contentType":"application/zip","size":185097683,"checksum":{"value":"00c4ec64f5fc788fc0f0b87a987954da","type":"MD5"}},{"name":"Kentucky.zip","title":"","contentType":"application/zip","size":184756090,"checksum":{"value":"5641526720910e8e89765cd170a11c7b","type":"MD5"}},{"name":"Minnesota.zip","title":"","contentType":"application/zip","size":198353354,"checksum":{"value":"83e1fdcd3ab4427436e0c3ac5cd6709c","type":"MD5"}},{"name":"Wisconsin.zip","title":"","contentType":"application/zip","size":214862314,"checksum":{"value":"9a3b1b20480832d035ecf4f2306dd463","type":"MD5"}},{"name":"Indiana.zip","title":"","contentType":"application/zip","size":219497169,"checksum":{"value":"82a268ec401379803d14479e8892b09f","type":"MD5"}},{"name":"Missouri.zip","title":"","contentType":"application/zip","size":228264407,"checksum":{"value":"199d1fb4c93cdf773b70640bccd0d772","type":"MD5"}},{"name":"Virginia.zip","title":"","contentType":"application/zip","size":229139158,"checksum":{"value":"f142648e142a49eed4ab108e2dc6bd48","type":"MD5"}},{"name":"Tennessee.zip","title":"","contentType":"application/zip","size":234869838,"checksum":{"value":"68771f6f3919da1ff0be9dd067cc74fc","type":"MD5"}},{"name":"Michigan.zip","title":"","contentType":"application/zip","size":264476718,"checksum":{"value":"d1115c280a2f7b8f06c54cc6fbe349a7","type":"MD5"}},{"name":"Illinois.zip","title":"","contentType":"application/zip","size":282171965,"checksum":{"value":"61bd91642c38282c2b93ddaa888d4cd4","type":"MD5"}},{"name":"Georgia.zip","title":"","contentType":"application/zip","size":304436964,"checksum":{"value":"a2a23bc83837d326c163c08060c05c38","type":"MD5"}},{"name":"NewYork.zip","title":"","contentType":"application/zip","size":309476306,"checksum":{"value":"97a0f0266922c62abefda57c3424b00c","type":"MD5"}},{"name":"Pennsylvania.zip","title":"","contentType":"application/zip","size":332567119,"checksum":{"value":"4ce034e28c760b0e920c0e84f8a0b86a","type":"MD5"}},{"name":"NorthCarolina.zip","title":"","contentType":"application/zip","size":350582803,"checksum":{"value":"f1ad7fb0d736fab70bacdbce7b707034","type":"MD5"}},{"name":"Ohio.zip","title":"","contentType":"application/zip","size":410843154,"checksum":{"value":"c6bd46e0c463ccaa22920cfc35289275","type":"MD5"}},{"name":"Florida.zip","title":"","contentType":"application/zip","size":407921466,"checksum":{"value":"56ea3ec4142b2234f72816bef640e0e9","type":"MD5"}},{"name":"California.zip","title":"","contentType":"application/zip","size":552118711,"checksum":{"value":"c1f95c387916fee125ff70c2fa9de452","type":"MD5"}},{"name":"Texas.zip","title":"","contentType":"application/zip","size":646925139,"checksum":{"value":"58aca03c78089c8c6da62e71d48767ec","type":"MD5"}},{"name":"Metadata_Building_Dataset_State_Wide_Layers.xml","title":"","contentType":"application/fgdc+xml","size":13156,"checksum":{"value":"40e3ecd089b1d504a26135b8d0e0cea6","type":"MD5"}}]}]}
function() { var counterKey = 'gtmPageViewCounter'; var pageViewCount = sessionStorage.getItem(counterKey); if (pageViewCount === null) { pageViewCount = 1; } else { pageViewCount = parseInt(pageViewCount, 10) + 1; } sessionStorage.setItem(counterKey, pageViewCount); return pageViewCount; }
list_of_dicts = [ {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35} ] person = next((item for item in list_of_dicts if item.get('name') == 'Bob'), "person not found." ) print(f"Found: {person}")
add_action( 'woocommerce_proceed_to_checkout', 'add_custom_lines_above_checkout_button', 5 ); function add_custom_lines_above_checkout_button() { echo '<p class="custom-line-above-checkout">לא כולל דמי משלוח</p>'; echo '<p class="second-custom-line-above-checkout" style="display:none;">דמי משלוח כלולים</p>'; } add_action( 'wp_footer', 'custom_checkout_js' ); function custom_checkout_js() { ?> <script> jQuery(document).ready(function($) { // Check if the radio button is checked initially if ($('#shipping_method_0_flat_rate4').is(':checked')) { $('.custom-line-above-checkout').hide(); // Hide the first element initially $('.second-custom-line-above-checkout').show(); // Show the second element initially } // Add change event listener to the radio button $('input[type="radio"][name="shipping_method"]').change(function() { // Check if the radio button with ID shipping_method_0_flat_rate4 is checked if ($(this).attr('id') === 'shipping_method_0_flat_rate4' && $(this).is(':checked')) { $('.custom-line-above-checkout').hide(); // Hide the first element $('.second-custom-line-above-checkout').show(); // Show the second element } else { $('.custom-line-above-checkout').show(); // Show the first element $('.second-custom-line-above-checkout').hide(); // Hide the second element } }); }); </script> <?php }
<div class="storyline-col2"> <div class="swiper timeSwiper section-wrap timeline-year-container flex-shrink-0 d-flex" style="translate: none; rotate: none; scale: none; touch-action: pan-y;"> <ul class="timeline-primary-ul swiper-wrapper" style="touch-action: pan-y;"> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2016</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2017</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2018</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2019</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2020</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2021</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2022</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2023</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> <li style="touch-action: pan-y;" class="swiper-slide"> <h3 style="touch-action: pan-y;"> <span style="touch-action: pan-y;">2024</span></h3> <ul style="touch-action: pan-y;"> <li class="timeline-year-month" data-case-count="1" data-month="Nov" style="touch-action: pan-y;"> <div class="label revealed" href="#" modal-target="timeline-modal-0" style="touch-action: pan-y;"> <span class="timeline-month" style="touch-action: pan-y;">June </span> <span class="dot" style="touch-action: pan-y;"></span> <div class="excerpt" style="touch-action: pan-y;"> <p style="touch-action: pan-y;">Started as a bootstrapped venture in a small Noida basement office with 20 employees.</p> </div> </div> </li> </ul> </li> </ul> </div> </div> /* timeline-sect */ .timeline-year-container { align-items: center; position: relative; padding-left: 165px; padding-bottom: 60px; overflow-y: hidden; scroll-behavior: smooth; } .timeline-sect .swiper-slide { background-color: transparent !important; } .story-banner { padding: 130px 0px 0px 190px; } .timeline-year-container .timeline-primary-ul>li:first-child { position: relative } .timeline-sect { /* overflow: hidden; */ position: relative; height: 770px; } .story-banner-cont { color: var(--white); } .storyline-wrapper { display: grid; grid-template-columns: 50% 50%; position: relative; } .storyline-wrapper:before { content: ''; position: absolute; left: 0; top: -290px; width: 47%; height: 1040px; background-image: url(images/journey/story-img.png); background-repeat: no-repeat; background-size: cover; background-position: left; border-radius: 16px; z-index: 999; } .timeline-year-container .timeline-primary-ul>li:first-child:after { content: ""; left: -177px; position: absolute; display: block; height: 100%; width: 33%; background-image: url(images/journey/shape7.png); top: 9px; background-position: center; background-size: 100%; background-repeat: no-repeat; } .timeline-year-container .timeline-primary-ul>li:nth-child(3) { position: relative } .timeline-year-container .timeline-primary-ul>li:nth-child(5) { position: relative } .timeline-year-container .timeline-primary-ul>li:nth-child(5):before { content: ""; display: block; position: absolute; width: min(47.2222222222vw, 85vh); height: min(47.2222222222vw, 85vh); background-image: url(images/journey/yearimg3); background-repeat: no-repeat; background-position: center; background-size: contain; left: -67.3%; top: 0; bottom: 0; margin-block: auto; z-index: -1; } .timeline-year-container .timeline-primary-ul>li:nth-child(8) { position: relative; padding-right: 10px; } .timeline-year-container .timeline-primary-ul li ul { position: relative; display: flex; align-items: center; } .timeline-sect li.swiper-slide.swiper-slide-active { margin-right: 0 !important; } .timeline-year-container .timeline-primary-ul li ul:before { content: ""; display: block; position: absolute; left: -25px; top: 56%; width: 608px; height: 100%; background-image: url(images/journey/shape3.png); background-position: top; background-repeat: no-repeat; background-size: 100%; } .timeline-year-container .timeline-primary-ul li ul li { top: 100%; position: relative; margin-inline: 216px; } .timeline-year-container .timeline-primary-ul li ul li:after, .timeline-year-container .timeline-primary-ul li ul li:before { content: ""; display: block; position: absolute; } .timeline-year-container .timeline-primary-ul li ul li:before { width: 1px; height: 100%; left: 0; background: rgba(255, 255, 255, .035); z-index: -1; transform: translate(0, -50%) } .timeline-sect .label.revealed { position: relative; } .timeline-year-container .timeline-primary-ul li ul li .label { transform: translate(-150%, 0); position: absolute; left: -60px; display: flex; flex-direction: column; justify-content: center; align-items: center; opacity: 0; transition: .7s ease-in-out } .timeline-year-container .timeline-primary-ul li ul li .label .timeline-month { font-size: 26px; color: #fff; font-weight: 600; } .timeline-year-container .timeline-primary-ul li ul li .label .dot:after { content: ""; display: block; position: absolute; left: 50%; top: 50%; width: 3px; height: 3px; border-radius: 50%; background: var(--pc); transform: translate(-50%, -50%) } .timeline-year-container .timeline-primary-ul li ul li .label .excerpt { top: min(4.8611111111vw, 8.75vh); width: min(20.1388888889vw, 36.25vh); position: absolute; left: min(2.7777777778vw, 5vh); opacity: 0 } .timeline-year-container .timeline-primary-ul li ul li .label .excerpt p { font-size: 16px; font-weight: 500; text-align: left; color: #fff; width: 100%; position: relative; top: 2px; left: -5px; margin: 0; } .story-banner-cont h2 { font-size: 90px; font-weight: 500; line-height: 104px; margin: 0; } .story-banner-cont h2 span { font-weight: 300; } .story-banner-cont h3 { font-size: 56px; font-weight: 500; margin: 10px 0 20px; } .timeline-year-container .timeline-primary-ul li ul li .label .excerpt p span { display: block; margin-top: min(.6944444444vw, 1.25vh); font-weight: var(--font-m); } .timeline-year-container .timeline-primary-ul li ul li .label:before { content: ""; position: absolute; background-image: url(images/journey/shape9.png); background-repeat: no-repeat; background-size: 43px; width: 150px; height: 210px !important; bottom: -12px !important; left: -11px; } .timeline-sect li.timeline-year-month::marker { font-size: 0 !important; } .timeline-year-container .timeline-primary-ul li ul li .label.revealed { opacity: 1; } .timeline-year-container .timeline-primary-ul li ul li .label.revealed:before { height: min(9.375vw, 16.875vh); } .timeline-year-container .timeline-primary-ul li ul li .label.revealed .excerpt { opacity: 1; } .timeline-year-container .timeline-primary-ul li ul li .label:after { content: ""; position: absolute; display: block; width: min(1.25vw, 2.25vh); height: min(1.25vw, 2.25vh); background: var(--pc); left: 50%; border-radius: 50%; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label { bottom: min(-.6944444444vw, -1.25vh); padding-bottom: 0; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label.revealed { padding-bottom: 220px; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label.revealed .excerpt { transition: opacity .7s ease-in-out .4s; top: 108px; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label:before { left: -8px; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label:after { bottom: min(-.4166666667vw, -.75vh); transform: translate(-50%, -50%); } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label { flex-direction: column-reverse; top: -17px; left: -95px; } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label.revealed { padding-top: 180px; } .timeline-year-container .timeline-primary-ul li:nth-child(odd) ul li .label.revealed span { left: -10px; top: 18px; position: relative; } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label.revealed span { left: 10px; top: 26px; position: relative; } .storyline-col2 { position: relative; } .storyline-col2:before { content: ""; display: block; position: absolute; width: 67%; height: 72%; background-image: url(images/journey/journy-circle.png); background-repeat: no-repeat; background-position: center; background-size: 50%; left: -19%; bottom: 13%; } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label .dot { margin-top: 0; margin-bottom: min(.6944444444vw, 1.25vh); } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label .excerpt { top: 55px; left: 70px; transition: top .7s ease-in-out, opacity .7s ease-in-out .3s; } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label:before { top: 3px; left: -1px; transform: rotate(180deg); width: 54px; background-size: 43px; height: 210px !important; } .timeline-year-container .timeline-primary-ul li:nth-child(even) ul li .label:after { top: min(-.5555555556vw, -1vh); transform: translate(-50%, -50%); } .timeline-year-container h3 { position: relative; text-align: center; } .timeline-year-container h3 span { color: #fff; position: relative; top: 22px; font-size: 50px; font-weight: 800; } .timeline-year-container h3:before { top: 36px; } .timeline-year-container h3:after { bottom: 15px; } .timeline-year-container h3 span:after, .timeline-year-container h3 span:before { content: ""; display: block; position: absolute; top: 50%; transform: translate(0, -50%); width: 5px; height: 5px; border-radius: 50%; background: var(--pc) } .timeline-year-container h3 span:before { left: 0 } .timeline-year-container h3 span:after { right: 0 } .timeline-year-container h3:after, .timeline-year-container h3:before { content: ""; display: block; position: relative; width: min(10.7638888889vw, 19.375vh); height: min(7.4305555556vw, 13.375vh); background-image: url(images/journey/shape2.png); background-repeat: no-repeat; background-position: center; background-size: contain; margin-inline: auto; filter: brightness(0) saturate(100%) invert(100%) sepia(59%) saturate(248%) hue-rotate(258deg) brightness(118%) contrast(100%); } .timeline-year-container h3:after { margin-top: min(1.3888888889vw, 2.5vh); transform: rotate(180deg) } var swiper = new Swiper(".timeSwiper", { slidesPerView: 1.4, speed: 10000, direction: 'horizontal', zoom: true, keyboard: { enabled: true, onlyInViewport: false, }, mousewheel: { invert: true, }, autoplay: { delay: 0, }, loop: true, freeMode: true, });
import auth0 from 'auth0-js' class Auth0JS { constructor(config) { this.config = config this.webAuth = new auth0.WebAuth({ domain: config.auth0.domain, clientID: config.auth0.clientID, redirectUri: config.baseURL, responseType: 'id_token', scope: 'openid profile email', }) } login(language) { if (language) { const uiLocales = language === 'zh' ? 'zh-CN' : language this.webAuth.authorize({ ui_locales: uiLocales, responseType: 'code', redirectUri: `${this.config.apiURL}/login/auth0` }) } else this.webAuth.authorize() } signup(lang) { const uiLocales = lang === 'zh' ? 'zh-CN' : lang if (uiLocales) this.webAuth.authorize({ ui_locales: uiLocales, screen_hint: 'signup', redirectUri: `${this.config.apiURL}/login/auth0` }) else webAuth.authorize({ screen_hint: 'signup', redirectUri: `${this.config.apiURL}/login/auth0` }) } logout() { this.webAuth.logout({ returnTo: this.config.baseURL, // Allowed logout URL listed in dashboard clientID: this.config.auth0.clientID, // Your client ID process.env.AUTH0_CLIENT_ID }) } checkSession() { return new Promise((resolve, reject) => { this.webAuth.checkSession({}, async (err, authResult) => { if (authResult) { resolve(true) } else { resolve(false) } }) }) } } export default function (context, inject) { const runtimeConfig = context.$config const auth0JS = new Auth0JS(runtimeConfig) inject('auth0JS', auth0JS) }
import config from 'config'; import ejwt from '../../../helper/encrypted-jwt'; import logger from '../../../helper/logger'; import * as Response from '../../../helper/responses'; import * as util from '../../../helper/util'; import { confirmRefreshToken } from '../../../helper/refresh'; import * as validate from '../../../helper/validate'; import { create as createLog } from '../../service/user/userlog.service'; import * as loginService from '../../service/user/userlogin.service'; // userType const USER_TYPE = { DEMO: 15040, GUEST: 15030, USER: 15020, SUPPLIER: 15010, ADMIN: 15000 } const USER_TYPE_NAV_MAPPER = { [USER_TYPE.ADMIN]: { path: '/admins' }, [USER_TYPE.SUPPLIER]: { path: '/myyarns?page=1' }, [USER_TYPE.DEMO]: { path: '/pr-supplier' }, [USER_TYPE.USER]: { path: '/search' }, [USER_TYPE.GUEST]: { path: '/pr-supplier' } } /** * login userlogin * * @param {Object} req * @param {Object} res * @returns {Object} */ export const login = async (req, res) => { const error = {}; error.name = 'login'; error.code = 10901; try { const sessionUserId = 'user_id'; logger.debug(`controller.userlogin.login : ${sessionUserId}`); const { body } = req; const target = {}; Object.assign(target, body); target.pwd = null; target.password = null; target.passwordConfirm = null; createLog(req, ['login', 'userlogin', JSON.stringify(target)]); if (!validate.isEmail(body.email)) { logger.error('Validation failed [email]'); return Response.error(res, { code: 10901, message: 'Validation failed' }, 412); } if (!validate.isLocation(body.srcloc)) { logger.error('Validation failed [srcloc]'); return Response.error(res, { code: 10901, message: 'Validation failed' }, 412); } const [err, vResult] = await util.to(loginService.loginUserApex(body, req, res)); if (err) { error.code = err.code; error.message = err.message; logger.error(error); return Response.error(res, error, 500); } return Response.ok(res, vResult); } catch (e) { error.message = e.message; logger.error(error); return Response.error(res, error, 500); } }; /** * login userlogin * * @param {Object} req * @param {Object} res * @returns {Object} */ export const loginAuth0 = async (req, res) => { const error = {}; error.name = 'login'; error.code = 10901; try { logger.debug(`controller.userlogin.loginAuth0 : ${JSON.stringify(req.query)}`); const {code} = req.query if (!code) { return Response.redirect(res, config.get('serverConfig.web')); } const [err, userAuth0] = await util.to(loginService.getUserByCodeAuth0(code, req, res)); if (err) { error.code = err.code; error.message = err.message; logger.error(error); return Response.error(res, error, 500); } userAuth0.srcloc = 'W' const target = {}; Object.assign(target, userAuth0); createLog(req, ['login', 'userlogin', JSON.stringify(target)]); const [err1, vResult1] = await util.to(loginService.loginUserAuth0(userAuth0, req, res)); if (err1) { error.code = err.code; error.message = err.message; logger.error(error); return Response.error(res, error, 500); } if (util.isEmpty(vResult1.companyName) && vResult1.userType === 15010) { return Response.redirect(res, `https://${req.headers.host}/account/create?invited=true&manager=true`); } const lang = vResult1.basicLanguage === 'en' || vResult1.userType === '15000' ? '' : `/${vResult1.basicLanguage}` return Response.redirect(res, `https://${req.headers.host}${lang}${USER_TYPE_NAV_MAPPER[vResult1.userType].path}`); } catch (e) { error.message = e.message; logger.error(error); return Response.error(res, error, 500); } }; /** * refresh userlogin * * @param {Object} req * @param {Object} res * @returns {Object} */ export const refresh = async (req, res) => { const sessionUserId = req.session.user ? req.session.user.userId : 'unknown'; logger.debug(`controller.userlogin.refresh : ${req.hostname}, ${req.clientIp}, ${sessionUserId}`); await confirmRefreshToken(req, res); return 0; }; /** * logout userlogin * * @param {Object} req * @param {Object} res * @returns {Object} */ export const logout = async (req, res) => { const error = {}; error.name = 'logout'; error.code = 10901; try { const { user } = req.session; if (user) { const sessionUserId = user.userId; logger.debug(`controller.userlogin.logout : ${sessionUserId}`); user.deleteMe = req.body.deleteMe; createLog(req, ['logout', 'userlogin', JSON.stringify(user)]); // req.logout(); const deleteMe = (req.body.deleteMe !== undefined && req.body.deleteMe !== null) ? req.body.deleteMe : true; if (deleteMe) { util.deleteCookie(req, res, 'auth.remember-me', ''); await util.to(loginService.logoutUser(user)); } else { await util.to(loginService.logoutUserDeleteMe(user)); } // req.logout(); req.session.destroy((err) => { if (err) { const msg = 'Error destroying session'; return Response.ok(res, { user: { status: 'logout', msg }, }); } return Response.ok(res, { user: { status: 'logout', msg: 'Please Log in again' }, }); }); } else { const cookies = config.get('serverConfig.mode') !== 'test' ? req.signedCookies : req.cookies; let token = null; if (req && cookies) { token = cookies['auth.remember-me']; } if (token) { const decoded = ejwt.verify(config.get('jwt.secretkey'), token, config.get('jwt.encryption')); util.deleteCookie(req, res, 'auth.remember-me', ''); await util.to(loginService.logoutUser(decoded)); } return res.status(401).send('Access denied.'); } // console.log('res ref', res.getHeaders()['set-cookie']); // return Response.ok(res, { // user: { status: 'logout', msg: 'Please Log out again' }, // }); return null; } catch (e) { error.message = e.message; logger.error(error); return Response.error(res, error, 401); } };
import config from 'config'; import fetch from 'node-fetch'; // import jwt from 'jsonwebtoken'; import moment from 'moment'; import bcrypt from 'bcrypt'; import ejwt from '../../../helper/encrypted-jwt'; import logger from '../../../helper/logger'; import db from '../../../server/database'; import * as util from '../../../helper/util'; import { modifyStatus } from '../../model/user/userinfo.model'; import * as UserLogin from '../../model/user/userlogin.model'; import * as userInfoService from '../../service/user/userinfo.service'; import * as codeInfoService from '../../service/code/codeinfo.service'; import * as userGroupService from '../../service/user/usergroup.service'; import * as companyService from '../../service/user/company.service'; import CustomError from '../../../helper/error'; import sendMail from './email.service'; const cacheOptions = { name: 'logininfo', time: 3600, force: false, }; /** * get getRefreshJWT * * @param {String} id * @param {Boolean} rememberme * @returns {String} */ export const getRefreshJWT = (row, expirationTime) => { // cookie : milliseconds, jwt : seconds const defaultTime = parseInt(config.get('jwt.expiration'), 10) * 1000; const expirationTime1 = parseInt((expirationTime || defaultTime) / 1000, 10); // "Bearer "+ const token = ejwt.sign( config.get('jwt.secretkey'), { userId: row.userId, email: row.email, srcloc: row.srcloc, userType: row.userType, rememberMe: row.rememberMe || false, }, config.get('jwt.encryption'), { expiresIn: expirationTime1 }, ); // console.log('token', token); return token; }; /** * set RefreshToken * * @param {object} userInfo * @param {object} req * @param {object} res * @returns {String} */ const setRefreshToken = async (userInfo, req, res) => { // check remember me const rememberMe = userInfo.rememberMe || false; // calculate expire time let expirationTimeRefreshToken = parseInt(config.get('jwt.expiration1'), 10) * 1000; let expiresRefreshToken = new Date(); expiresRefreshToken = new Date(Date.now() + expirationTimeRefreshToken); // set up for expire if (rememberMe) { expirationTimeRefreshToken = parseInt(config.get('jwt.expiration2'), 10) * 1000; expiresRefreshToken = new Date(Date.now() + expirationTimeRefreshToken); } // console.log('expiresRefreshToken', expiresRefreshToken); // get token const refreshToken = getRefreshJWT(userInfo, expirationTimeRefreshToken); const params = []; // update user login info params[0] = util.replaceUndefined(refreshToken); params[1] = util.replaceUndefined(expiresRefreshToken.toGMTString()); params[2] = util.replaceUndefined(userInfo.userId); params[3] = util.replaceUndefined(userInfo.srcloc); await db.execute(UserLogin.refresh(), params, cacheOptions); // console.log('refreshToken', refreshToken); util.addCookie(req, res, 'auth.remember-me', refreshToken, '', expirationTimeRefreshToken); return { refreshToken, expires: expiresRefreshToken }; }; /** * login user * * @param {Object} userInfo * @param {Object} req * @param {Object} res * @returns {Object} */ export const loginUser = async (userInfo, req, res) => { logger.debug(`userlogin.loginUser : ${userInfo.email}`); // createLog(req, ['loginUser', userInfo.srcloc, '', '', userInfo.userId]); const params = []; params[0] = util.replaceUndefined(userInfo.email); params[1] = util.replaceUndefined(userInfo.srcloc); const rowUser = await db.findOne(UserLogin.loginUser(), params, cacheOptions); if (util.isEmpty(rowUser)) { logger.error(`loginUser not found : ${userInfo.email}`); if (userInfo.srcloc === 'A') { throw new CustomError('not-found', 24); } else { throw new CustomError('login-error', 10924); } // throw new CustomError('not-found', userInfo.srcloc === 'A' ? 24 : 10910); } // is locked user ? if (parseInt(rowUser.userStatus, 10) === 17003) { logger.error(`loginUser locked : ${userInfo.email}, ${rowUser.userStatus}`); const rowFail = await db.findOne(UserLogin.getFailed(), [rowUser.userId], cacheOptions); if (!util.isEmpty(rowFail)) { const tdiff = parseInt(rowFail.tdiff, 10); if (tdiff === 0) { // vulerabliity No.9 rollback // if (userInfo.srcloc === 'A') { // throw new CustomError('locked-account', 11); // } else { // throw new CustomError('login-error', 10924); // } throw new CustomError('locked-account', userInfo.srcloc === 'A' ? 11 : 10921); } else { await util.to(db.execute(modifyStatus(), [17001, rowUser.userId], cacheOptions)); rowUser.userStatus = 17001; } } } // compare password const pass = bcrypt.compareSync(userInfo.pwd, rowUser.pwd); // invalid password if (!pass) { // check previous failed history const rowFail = await db.findOne(UserLogin.getFailed(), [rowUser.userId], cacheOptions); if (util.isEmpty(rowFail)) { await db.execute(UserLogin.createFailed(), [rowUser.userId], cacheOptions); } else { const failCount = parseInt(rowFail.failed_count, 10); logger.error(`loginUser invalid password : ${userInfo.email}, ${failCount}`); // too many failed user if (failCount >= 5) { const [, vResult] = await util.to(db.execute(modifyStatus(), [17003, rowUser.userId], cacheOptions)); if (vResult.affectedRows === 1 || vResult.changedRows === 1) { let locale = rowUser.basicLanguage || 'en'; if ('en,ja,zh,it'.indexOf(locale) < 0) { locale = 'en'; } // send email const templateId = 14; const row = {}; row.userId = rowUser.userId; row.receiver_email = rowUser.email; row.receiver_name = rowUser.nickname; row.basicLanguage = locale; row.locale = locale; const [, returnValue] = await util.to(sendMail(req, row, templateId)); if (returnValue.code !== 0) { logger.error(`modify ${rowUser.email} : failed to send email`); vResult.info = 'locked but failed to send email'; } } //set field count = 0 await db.execute(UserLogin.updateFailCount(),[rowUser.userId], cacheOptions); if (userInfo.srcloc === 'A') { throw new CustomError('not-found', 24); } else { throw new CustomError('locked-account', 10921); } // throw new CustomError('invalid-password', userInfo.srcloc === 'A' ? 13 : 10924); } else { await db.execute(UserLogin.updateFailed(), [rowUser.userId], cacheOptions); } } if (userInfo.srcloc === 'A') { throw new CustomError('not-found', 24); } else { throw new CustomError('login-error', 10924); } // throw new CustomError('invalid-password', userInfo.srcloc === 'A' ? 13 : 10924); } // is not active ? if (parseInt(rowUser.userStatus, 10) !== 17001) { logger.error(`loginUser not active : ${userInfo.email}, ${rowUser.userStatus}`); if (userInfo.srcloc === 'A') { throw new CustomError('not-found', 24); } else { throw new CustomError('login-error', 10924); } // throw new CustomError('not-active', userInfo.srcloc === 'A' ? 12 : 10916); } // is not plan ? // if (rowUser.srcloc === 'A' && (rowUser.validPlan === 'N' || parseInt(rowUser.planId, 10) > 30001)) { // After the Expire Date, I will not be able to log in from APEX. if (config.get('serverConfig.mode') !== 'staging') { if (rowUser.srcloc === 'A' && parseInt(rowUser.planId, 10) > 30001) { logger.error(`loginUser not plan : ${userInfo.email}, ${rowUser.planId}, ${rowUser.validPlan}`); if (userInfo.srcloc === 'A') { throw new CustomError('not-found', 24); } else { throw new CustomError('login-error', 10924); } // throw new CustomError('invalid-plan', userInfo.srcloc === 'A' ? 14 : 10927); } } req.session.save(); const isForce = userInfo.force || false; // if (config.get('serverConfig.mode') === 'production') { // compare cookie expire date // user may be not logout or do not access during long time. // if expires date is later than current, user is already login except user is super admin. const sessUser = await db.findOne(UserLogin.selectSession(), [userInfo.userId, userInfo.srcloc, rowUser.userType], cacheOptions); if (!util.isEmpty(sessUser)) { // console.log('moment().unix()', moment().unix(), sessUser.expires); // console.log('moment().unix()', sessUser.session_id, req.sessionID); if (sessUser.session_id !== req.sessionID) { // throw new CustomError('multiple-logins (same session)', 10); // } if (moment().unix() < sessUser.expires) { // user is not super admin and user's token is not empty if ((sessUser.session_id !== req.sessionID)) { // parseInt(rowUser.userType, 10) !== 15000 && logger.info(`loginUser already : ${userInfo.email}`); if (isForce) { await db.execute(UserLogin.deleteSessionByUserId(), [userInfo.userId, userInfo.srcloc, rowUser.userType], cacheOptions); req.session.save(); } else { res.status(500).send({ status: false, name: 'login', code: userInfo.srcloc === 'A' ? 10 : 10410, message: 'multiple-logins', // stack: err.stack, }); return; // throw new CustomError('multiple-logins', userInfo.srcloc === 'A' ? 10 : 10410); } } } } } // } // clear failed history await db.execute(UserLogin.deleteFailed(), [rowUser.userId], cacheOptions); const params2 = []; // update user login info params2[0] = util.replaceUndefined(rowUser.userId); params2[1] = util.replaceUndefined(rowUser.srcloc); await db.execute(UserLogin.login(), params2, cacheOptions); // get latest user login info const returnUser = await db.findOne(UserLogin.loginUser(), [rowUser.userId, rowUser.srcloc], cacheOptions); returnUser.pwd = undefined; if (config.get('serverConfig.mode') !== 'test') { returnUser.accessToken = undefined; returnUser.expires = undefined; returnUser.refreshToken = undefined; } returnUser.rememberMe = userInfo.rememberMe || false; req.session.isAdmin = userInfo.isAdmin || 'N'; req.session.user = returnUser; // set remember-me to cookie const [, refresh] = await util.to(setRefreshToken(returnUser, req, res)); if (config.get('serverConfig.mode') === 'test') { returnUser.refreshToken = refresh.refreshToken; } // update email of user_session req.session.save(); await db.execute(UserLogin.modifySession(), [rowUser.userId, rowUser.srcloc, rowUser.userType, req.sessionID], cacheOptions); if (rowUser.srcloc === 'A') { returnUser.userType = parseInt((parseInt(returnUser.userType, 10) - 15000) / 10, 10); returnUser.userRole = parseInt(returnUser.userRole, 10) - 16000; returnUser.userStatus = parseInt(returnUser.userStatus, 10) - 17000; } // eslint-disable-next-line consistent-return return returnUser; }; /** * login user infor by Auth0 * * @param {Object} userInfo * @param {Object} req * @param {Object} res * @returns {Object} */ export const loginUserApex = async (userInfo, req, res) => { logger.debug(`userlogin.loginUser : ${userInfo.email}`); const body = new URLSearchParams(); body.append("client_id", config.get('auth0Apex.AUTH0_CLIENT_ID')); body.append("client_secret", config.get('auth0Apex.AUTH0_CLIENT_SECRET')); body.append("audience", `${config.get('auth0Apex.AUTH0_DOMAIN')}/api/v2/`); body.append("grant_type", config.get('auth0Apex.GRANT_TYPE')); body.append("realm", config.get('auth0Apex.REALM')); body.append("scope", config.get('auth0Apex.SCOPE')); body.append("username", userInfo.email); body.append("password", userInfo.pwd); let responseAuth0 = false; let userInfoAuth0 = {}; try { const response = await fetch(`${config.get('auth0.AUTH0_DOMAIN')}/oauth/token`, { method: "POST", body, headers: { "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded", }, }); responseAuth0 = response.status === 200; const data = await response.json(); if (!responseAuth0) { throw new CustomError("not-found", 24); } else { // data user in Auth0 const { id_token } = data; userInfoAuth0 = JSON.parse( Buffer.from(id_token.split(".")[1], "base64").toString() ); } } catch (err) { throw new CustomError("not-found", 24); } let rowUser = await db.findOne( UserLogin.loginUserAuth0(), [userInfoAuth0.sub, userInfo.srcloc], cacheOptions ); if (util.isEmpty(rowUser)) { logger.error(`loginUser not found : ${userInfo.email}`); if (userInfo.srcloc === "A") { throw new CustomError("not-found", 24); } else { throw new CustomError("login-error", 10924); } } rowUser = { ...rowUser, email: userInfoAuth0.email, userName: userInfoAuth0.family_name.concat(' ', userInfoAuth0.given_name), basicLanguage: userInfoAuth0.lang.code || 'en', srcloc: userInfo.srcloc, }; // is not active ? if (parseInt(rowUser.userStatus, 10) !== 17001) { logger.error( `loginUser not active : ${userInfo.email}, ${rowUser.userStatus}` ); if (userInfo.srcloc === "A") { throw new CustomError("not-found", 24); } else { throw new CustomError("login-error", 10924); } // throw new CustomError('not-active', userInfo.srcloc === 'A' ? 12 : 10916); } // is not plan ? // if (rowUser.srcloc === 'A' && (rowUser.validPlan === 'N' || parseInt(rowUser.planId, 10) > 30001)) { // After the Expire Date, I will not be able to log in from APEX. if (rowUser.srcloc === "A" && parseInt(rowUser.planId, 10) > 30001) { logger.error( `loginUser not plan : ${userInfo.email}, ${rowUser.planId}, ${rowUser.validPlan}` ); if (userInfo.srcloc === "A") { throw new CustomError("not-found", 24); } else { throw new CustomError("login-error", 10924); } // throw new CustomError('invalid-plan', userInfo.srcloc === 'A' ? 14 : 10927); } req.session.save(); const isForce = userInfo.force || false; const sessUser = await db.findOne( UserLogin.selectSession(), [rowUser.userId, rowUser.srcloc, rowUser.userType], cacheOptions ); if (!util.isEmpty(sessUser)) { if (sessUser.session_id !== req.sessionID) { if (moment().unix() < sessUser.expires) { // user is not super admin and user's token is not empty if (sessUser.session_id !== req.sessionID) { logger.info(`loginUser already : ${userInfo.email}`); if (isForce) { await db.execute( UserLogin.deleteSessionByUserId(), [rowUser.userId, userInfo.srcloc, rowUser.userType], cacheOptions ); req.session.save(); } else { res.status(500).send({ status: false, name: "login", code: userInfo.srcloc === "A" ? 10 : 10410, message: "multiple-logins", // stack: err.stack, }); return; } } } } } const params2 = []; // update user login info params2[0] = util.replaceUndefined(rowUser.userId); params2[1] = util.replaceUndefined(rowUser.srcloc); await db.execute(UserLogin.login(), params2, cacheOptions); if (config.get("serverConfig.mode") !== "test") { rowUser.accessToken = undefined; rowUser.expires = undefined; rowUser.refreshToken = undefined; } rowUser.rememberMe = userInfo.rememberMe || false; req.session.isAdmin = userInfo.isAdmin || "N"; req.session.user = rowUser; // set remember-me to cookie const [, refresh] = await util.to(setRefreshToken(rowUser, req, res)); if (config.get("serverConfig.mode") === "test") { rowUser.refreshToken = refresh.refreshToken; } // update email of user_session req.session.save(); await db.execute( UserLogin.modifySession(), [rowUser.userId, rowUser.srcloc, rowUser.userType, req.sessionID], cacheOptions ); if (rowUser.srcloc === "A") { rowUser.userType = parseInt( (parseInt(rowUser.userType, 10) - 15000) / 10, 10 ); rowUser.userRole = parseInt(rowUser.userRole, 10) - 16000; rowUser.userStatus = parseInt(rowUser.userStatus, 10) - 17000; } // eslint-disable-next-line consistent-return return rowUser; }; export const getUserByCodeAuth0 = async (code, req, res) => { const body = new URLSearchParams(); body.append("client_id", config.get('auth0.AUTH0_CLIENT_ID')); body.append("client_secret", config.get('auth0.AUTH0_CLIENT_SECRET')); body.append("audience", config.get('auth0.AUDIENCE')); body.append("grant_type", config.get('auth0.GRANT_TYPE')); body.append("redirect_uri", `https://${req.headers.host}/api/v1/login/auth0`); body.append("scope", config.get('auth0.SCOPE')); body.append("code", code); let userAuth0 = {}; try { const response = await fetch(`${config.get('auth0.AUTH0_DOMAIN')}/oauth/token`, { method: "POST", body, headers: { "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded", }, }); const responseAuth0 = response.status === 200; const data = await response.json(); if (!responseAuth0) { throw new CustomError("not-found", 24); } else { // data user in Auth0 const { id_token } = data; userAuth0 = JSON.parse( Buffer.from(id_token.split(".")[1], "base64").toString() ); } return userAuth0 } catch (err) { throw new CustomError("not-found", 24); } }; export const loginUserAuth0 = async (userInfo, req, res) => { logger.debug(`userlogin.loginUserAuth0 : ${userInfo.email}`); const rowUser = userInfo; req.session.save(); // check user exist let user = await db.findOne(UserLogin.checkUserExist(), [userInfo.sub], cacheOptions); if (util.isEmpty(user)) { // register Account const guest = {} guest.firstName = userInfo.family_name guest.lastName = userInfo.given_name guest.userStatus = 17001 guest.basicLanguage = userInfo.lang.code if (userInfo.user_type.code === 'Shima') { guest.userType = 15040 guest.userRole = 16040 } else { guest.userType = 15030 guest.userRole = 16030 } guest.auth0Id = userInfo.sub const [err, vResult] = await util.to(userInfoService.create(guest)); if (err) { throw new CustomError('Register Guest is error', 24); } const [, groupId] = await util.to(codeInfoService.getSeqId('COMPANY')); await util.to(userGroupService.create({ groupId, email: null, userType: guest.userType, userRole: guest.userRole, mailId: '', userId: vResult.insertId })); if (userInfo.user_type.code === 'Shima') { const company = {} company.companyName = userInfo.company_en company.companyId = groupId const [err1] = await util.to(companyService.create(company)); if (err1) { error.message = err1.message; logger.error(error); return Response.error(res, error, 500); } await util.to(companyService.createPlan(req, { companyId: groupId, planId: 30001 })); } user = await db.findOne(UserLogin.checkUserExist(), [userInfo.sub], cacheOptions); } const sessUser = await db.findOne(UserLogin.selectSession(), [user.userId, userInfo.srcloc, user.userType], cacheOptions); if (!util.isEmpty(sessUser)) { if (sessUser.session_id !== req.sessionID) { if (moment().unix() < sessUser.expires) { // user is not super admin and user's token is not empty if ((sessUser.session_id !== req.sessionID)) { // parseInt(rowUser.userType, 10) !== 15000 && logger.info(`loginUser already : ${userInfo.email}`); await db.execute(UserLogin.deleteSessionByUserId(), [user.userId, userInfo.srcloc, user.userType], cacheOptions); req.session.save(); } } } } let returnUser = {} // check company const company = await db.findOne(UserLogin.checkCompanyExist(), [user.userId], cacheOptions); if (util.isEmpty(company)) { returnUser = await db.findOne(UserLogin.loginUserAuth0WithoutCompany(), [userInfo.sub, userInfo.srcloc], cacheOptions); } else { returnUser = await db.findOne(UserLogin.loginUserAuth0(), [userInfo.sub, userInfo.srcloc], cacheOptions); } // modify information returnUser.userName = rowUser.family_name.concat(' ', rowUser.given_name) returnUser.basicLanguage = rowUser.lang.code || 'en' returnUser.email = rowUser.email returnUser.srcloc = userInfo.srcloc returnUser.address1 = rowUser.direction returnUser.tel = rowUser.tel if (returnUser.userType === 15030) { returnUser.countryCode = rowUser.country.code } if (config.get('serverConfig.mode') !== 'test') { returnUser.accessToken = undefined; returnUser.expires = undefined; returnUser.refreshToken = undefined; } returnUser.rememberMe = userInfo.rememberMe || false; req.session.isAdmin = userInfo.isAdmin || 'N'; req.session.user = returnUser; // set remember-me to cookie const [, refresh] = await util.to(setRefreshToken(returnUser, req, res)); if (config.get('serverConfig.mode') === 'test') { returnUser.refreshToken = refresh.refreshToken; } // update information of user_session req.session.save(); await db.execute(UserLogin.modifySession(), [returnUser.userId, userInfo.srcloc, returnUser.userType, req.sessionID], cacheOptions); return returnUser; }; /** * logout user * * @param {Object} userInfo * @returns {Object} */ export const logoutUser = async (userInfo) => { logger.debug(`userlogin.logoutUser : ${userInfo.userId}`); // createLog(req, ['logoutUser', userInfo.srcloc, '', '', userInfo.userId]); await db.execute(UserLogin.deleteSessionByUserId(), [userInfo.userId, userInfo.srcloc, userInfo.userType], cacheOptions); const params2 = []; params2[0] = util.replaceUndefined(userInfo.userId); params2[1] = util.replaceUndefined(userInfo.srcloc); const rows = await db.execute(UserLogin.logout(), params2, cacheOptions); return rows; }; /** * logout user * * @param {Object} userInfo * @returns {Object} */ export const logoutUserDeleteMe = async (userInfo) => { logger.debug(`userlogin.logoutUserDeleteMe : ${userInfo.userId}`); // createLog(req, ['logoutUser', userInfo.srcloc, '', '', userInfo.userId]); await db.execute(UserLogin.deleteSessionByUserId(), [userInfo.userId, userInfo.srcloc, userInfo.userType], cacheOptions); const params2 = []; params2[0] = util.replaceUndefined(userInfo.userId); params2[1] = util.replaceUndefined(userInfo.srcloc); const rows = await db.execute(UserLogin.logoutOnly(), params2, cacheOptions); return rows; }; /** * refresh user * * @param {Object} userInfo * @returns {Object} */ export const refresh = async (userInfo, req, res) => { logger.debug(`userlogin.refresh : ${userInfo.userId}`); const params = []; params[0] = util.replaceUndefined(userInfo.userId); params[1] = util.replaceUndefined(userInfo.srcloc); const rowUser = await db.findOne(UserLogin.loginUserById(), params, cacheOptions); if (util.isEmpty(rowUser)) { logger.error(`user not found : ${userInfo.userId}`); throw new CustomError('not-found', 24); } await db.execute(UserLogin.deleteSessionByUserId(), [rowUser.userId, rowUser.srcloc, rowUser.userType], cacheOptions); req.session.save(); // get latest user login info const returnUser = await db.findOne(UserLogin.loginUser(), [rowUser.userId, rowUser.srcloc], cacheOptions); returnUser.pwd = undefined; // returnUser.refreshToken = refreshToken.refreshToken; if (config.get('serverConfig.mode') !== 'test') { returnUser.accessToken = undefined; returnUser.expires = undefined; returnUser.refreshToken = undefined; } // modify information returnUser.userName = userInfo.family_name.concat(' ', rowUser.given_name) returnUser.basicLanguage = userInfo.lang.code || 'en' returnUser.email = userInfo.email returnUser.srcloc = userInfo.srcloc returnUser.rememberMe = userInfo.rememberMe || false; req.session.user = returnUser; await util.to(setRefreshToken(returnUser, req, res)); req.session.save(); await db.execute(UserLogin.modifySession(), [rowUser.userId, rowUser.srcloc, rowUser.userType, req.sessionID], cacheOptions); if (rowUser.srcloc === 'A') { returnUser.userType = parseInt((parseInt(returnUser.userType, 10) - 15000) / 10, 10); returnUser.userRole = parseInt(returnUser.userRole, 10) - 16000; returnUser.userStatus = parseInt(returnUser.userStatus, 10) - 17000; } const params2 = []; // update user login info params2[0] = util.replaceUndefined(rowUser.userId); params2[1] = util.replaceUndefined(rowUser.srcloc); await db.execute(UserLogin.login(), params2, cacheOptions); return returnUser; }; /** * reload user * * @param {Object} sessionId * @returns {Object} */ export const reload = async (sessionId) => { // logger.debug(`userlogin.reload : ${sessionId}`); const returnUser = await db.findOne(UserLogin.selectSessionById(), [sessionId], cacheOptions); if (util.isEmpty(returnUser)) { return false; } return true; }; /** * getSession * * @param {Object} sessionId * @returns {Object} */ export const getSession = async (sessionId) => { // logger.debug(`userlogin.reload : ${sessionId}`); const returnUser = await db.findOne(UserLogin.selectSessionById(), [sessionId], cacheOptions); return returnUser; }; /** * get refreshtoken * * @param {Object} sessionId * @returns {Object} */ export const getRefreshToken = async (pInfo) => { // logger.debug(`userlogin.reload : ${sessionId}`); const returnUser = await db.findOne(UserLogin.loginUser(), [pInfo.userId, pInfo.srcloc], cacheOptions); return returnUser; };
const countries = [...new Set(cities)].map(elem => ( { country: elem.country, emoji: elem.emoji } ));
(unless (package-installed-p 'clojure-mode) (package-install 'clojure-mode))
import { useEffect, useState } from "react"; import { useSupabaseClient } from "@supabase/auth-helpers-react"; import { HeadingLink, MinimalPage, PageHeading, Spinner } from "ui"; import { Database } from "../../../types"; const ShiftTable = () => { const [usersOnShift, setUsersOnShift] = useState< Array<{ user: string; shift_start: string | null }> >([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const supabaseClient = useSupabaseClient<Database>(); useEffect(() => { const fetchUsersOnShift = async () => { setLoading(true); try { // Fetch all records const { data: usersData, error: usersError } = await supabaseClient .from("UserLastWorkedOn") .select("shift_start, user, users_view (email)") .not("shift_start", "is", null); if (usersError) { setError(usersError.message ?? "Failed to fetch user shift data"); console.error(usersError); } const mappedUsers = usersData?.map((user) => { const mappedUser: { user: string; shift_start: string | null } = { shift_start: user.shift_start, user: Array.isArray(user.users_view) ? user.users_view[0].email : user.users_view?.email ?? user.user, }; return mappedUser; }); setUsersOnShift(mappedUsers ?? []); } catch (err) { setError("Failed to fetch user shift data"); console.error(err); } finally { setLoading(false); } }; fetchUsersOnShift(); }, [supabaseClient]); return ( <MinimalPage pageTitle="Shift Table | Email Interface" pageDescription="Spot Ship Email Interface | Shift Table" commandPrompt > <div className="w-full"> <HeadingLink icon="back" text="Home" href="/secure/home" /> </div> <PageHeading text="Spot Ship Shift Table" /> <div className="flex w-full flex-col"> {loading ? ( <Spinner /> ) : error ? ( <p className="text-red-500">Error: {error}</p> ) : usersOnShift.length ? ( <table className="mt-4 min-w-full"> <thead> <tr> <th className="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500"> User Email </th> <th className="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500"> Shift Started </th> </tr> </thead> <tbody className="divide-white-200 divide-x "> {usersOnShift.map((user, index) => ( <tr key={index}> <td className=" text-white-500 px-6 py-4 text-sm"> {user.user} </td> <td className=" text-white-500 px-6 py-4 text-sm"> {user.shift_start} </td> </tr> ))} </tbody> </table> ) : ( <p>No users are currently on shift</p> )} </div> </MinimalPage> ); }; export default ShiftTable;
function sr_playlist_albums(){ ?> <div class="tabs tabsRow"> <ul id="tabs-nav"> <?php $terms = get_terms('playlist-category'); $i = 0; foreach ($terms as $term) : ?> <li <?php if ($i == 0) echo 'class="active"'; ?>><a href="#tab-<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php $i++; endforeach; ?> </ul> <div id="tab-content"> <?php foreach ($terms as $term) : $args = array( 'post_type' => 'sr_playlist', 'tax_query' => array( array( 'taxonomy' => 'playlist-category', 'field' => 'term_id', 'terms' => $term->term_id, ), ), ); $query = new WP_Query($args); ?> <div id="tab-<?php echo $term->slug; ?>" class="tab-content"> <div class="row tabsRow"> <?php while ($query->have_posts()) : $query->the_post(); $coverUrl = esc_url(get_the_post_thumbnail_url(get_the_ID(), 'full')); ?> <div class="col-md-3"> <div class="albumWrapper"> <div class="albumImg"> <img src="<?php echo $coverUrl; ?>" alt="<?php echo esc_url(get_the_title()); ?>"> </div> <div class="albumInfo"> <h4><?php echo get_the_title(); ?></h4> <a href="<?php echo esc_url(get_the_permalink()); ?>" class="albumPlay"> <span>▶<span> </a> </div> <img src="<?php echo get_stylesheet_directory_uri(). '/img/castel.png'; ?>" class="imgAbsAlbum" alt="<?php echo esc_url(get_the_title()); ?>"> </div> </div> <?php endwhile; ?> </div> </div> <?php endforeach; ?> <?php wp_reset_postdata(); ?> </div> </div> <?php } add_shortcode('sr_albums_code','sr_playlist_albums'); function tabs_script(){ ?> <script> jQuery(document).ready(function($) { $('#tabs-nav li:first-child').addClass('active'); $('.tab-content').hide(); $('.tab-content:first').show(); // Click function $('#tabs-nav li').click(function(){ $('#tabs-nav li').removeClass('active'); $(this).addClass('active'); $('.tab-content').hide(); var activeTab = $(this).find('a').attr('href'); $(activeTab).fadeIn(); return false; }); }); </script> <?php } add_action('wp_footer', 'tabs_script');
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="black">#FF000000</color> <color name="white">#FFFFFFFF</color> <color name="linecolor">#DAD8D8</color> <color name="BtnBackground">#FFFFFF</color> <color name="btnBackground2">#FF9800</color> <color name="importantButtonColor">#FFC164</color> <color name="red">#FF0000</color> <color name="historyColor">#757575</color> <color name="saveColor">#438A46</color> <color name="purpleButtonColor">#381B60</color> <color name="blueButtonColor">#2C307E</color> <color name="goldButtonColor">#DFBF1A</color> <color name="customThemeColor">#FFAA00</color> <color name="pinkColor">#EB76EF</color> <color name="maroon">#550C20</color> </resources>
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Base.Theme.CalcAppToturial" parent="Theme.Material3.DayNight.NoActionBar"> <!-- Customize your light theme here. --> <!-- <item name="colorPrimary">@color/my_light_primary</item> --> </style> <style name="customThemeButton" parent="commonButton"> <item name="android:backgroundTint">@color/customThemeColor</item> <item name = "android:textSize">17dp</item> <item name = "android:layout_width">38dp</item> <item name = "android:layout_height">38dp</item> <item name="android:padding">0dp</item> <item name = "iconSize">28dp</item> </style> <style name="Theme.CalcAppToturial" parent="Base.Theme.CalcAppToturial" /> <style name="operatorButton" parent="commonButton"> <item name="android:backgroundTint">@color/goldButtonColor</item> <item name="android:textSize">50dp</item> <item name="android:gravity">center</item> <item name="android:layout_width">170dp</item> <item name="android:layout_height">72dp</item> <item name="android:padding">0dp</item> <!-- Adjust the padding to center the larger text --> </style> <style name="PlusMinusButton" parent="commonButton"> <item name="android:backgroundTint">@color/blueButtonColor</item> <item name = "android:textSize">20dp</item> <item name = "android:layout_width">72dp</item> <item name = "android:layout_height">72dp</item> <item name="android:padding">0dp</item> <item name = "iconSize">28dp</item> </style> <style name="importantButtons" parent="commonButton"> <item name="android:backgroundTint">@color/blueButtonColor</item> <item name = "android:textSize">40dp</item> <item name = "android:layout_width">72dp</item> <item name = "android:layout_height">72dp</item> <item name="android:padding">0dp</item> <item name = "iconSize">28dp</item> </style> <style name="saveButton" parent="commonButton"> <item name="android:backgroundTint">@color/saveColor</item> <item name = "android:textSize">17dp</item> <item name = "android:layout_width">38dp</item> <item name = "android:layout_height">38dp</item> <item name="android:padding">0dp</item> <item name = "iconSize">28dp</item> </style> <style name = "digitButton" parent = "commonButton"> <item name = "android:textColor">@color/black</item> </style> <style name="commonButton" parent="Widget.MaterialComponents.ExtendedFloatingActionButton"> <item name = "android:layout_width">72dp</item> <item name = "android:layout_height">72dp</item> <item name = "cornerRadius">36dp</item> <item name = "backgroundTint">@color/white</item> <item name = "android:textSize">32dp</item> <item name = "android:layout_margin">12dp</item> </style> </resources>
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <!-- Title: Change Weights --> <TextView android:id="@+id/textChangeWeights" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Update Grade Weights:" android:textSize="22sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" android:layout_marginStart="8dp"/> <!-- Formative weight input field --> <EditText android:id="@+id/editTextFormativeWeight" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:hint="Formative Weight (%)" android:imeOptions="actionNext" android:inputType="numberDecimal" android:minWidth="200dp" android:minHeight="48dp" android:padding="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textChangeWeights" /> <!-- Summative weight input field --> <EditText android:id="@+id/editTextSummativeWeight" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:hint="Summative Weight (%)" android:imeOptions="actionDone" android:inputType="numberDecimal" android:minWidth="200dp" android:minHeight="48dp" android:padding="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editTextFormativeWeight" /> <!-- Title: Theme --> <TextView android:id="@+id/textTheme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Themes:" android:textSize="22sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editTextSummativeWeight" android:layout_marginTop="16dp" android:layout_marginStart="8dp"/> <!-- Theme dropdown menu --> <Spinner android:id="@+id/themeSpinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textTheme" tools:listitem="@android:layout/simple_spinner_dropdown_item" /> <!-- Button (Close) --> <ImageButton android:id="@+id/btnClose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/close_window" android:background="@android:color/transparent" android:padding="16dp" android:contentDescription="Close" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- Button (Save) --> <Button android:id="@+id/btnSave" style="@style/saveButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="52dp" android:layout_marginEnd="12dp" android:text="Save" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/themeSpinner" /> </androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="MainActivity"> <ImageButton android:id="@+id/quitButton" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/quit_app_icon_bigger" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:background="@android:color/transparent" android:onClick="onQuitButtonClick" android:contentDescription="@+string/quit_button_description"/> <ImageButton android:id="@+id/settingsButton" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/settings_gear_bigger" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="8dp" android:background="@android:color/transparent" android:contentDescription="@+string/settings_button_description"/> <TextView android:id="@+id/currentmodetext" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_margin="15dp" android:text="Formative Mode (40%)" android:textAlignment="center" android:textColor="@color/black" android:textSize="24dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.555" app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="30dp" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/inputext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:text="" android:textAlignment="center" android:textColor="@color/black" android:textSize="115dp" app:layout_constraintBottom_toTopOf="@+id/calculatedgradetext" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/currentmodetext" app:layout_constraintVertical_bias="0.703" /> <TextView android:id="@+id/calculatedgradetext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="18dp" android:layout_marginBottom="16dp" android:text="Grade: 0.0%" android:textAlignment="center" android:textColor="@color/black" android:textSize="31dp" app:layout_constraintBottom_toTopOf="@+id/historytext" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.482" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/historytext" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="start" android:layout_margin="5dp" android:textSize="18sp" android:visibility="gone" android:text="" android:textColor="@color/historyColor" app:layout_constraintBottom_toTopOf="@id/line" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <View android:id="@+id/line" android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/linecolor" app:layout_constraintBottom_toTopOf="@id/linearLayout" android:layout_marginBottom="8dp"/> <LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_7" android:onClick="onDigitClick" android:text="7" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_8" android:onClick="onDigitClick" android:text="8" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_9" android:onClick="onDigitClick" android:text="9" /> <com.google.android.material.button.MaterialButton style="@style/importantButtons" android:id="@+id/btn_delete" android:onClick="onbackClick" app:icon="@drawable/whitebackspace" app:iconTint="@color/white" android:text="4"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_4" android:onClick="onDigitClick" android:text="4" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_5" android:onClick="onDigitClick" android:text="5" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_6" android:onClick="onDigitClick" android:text="6" /> <com.google.android.material.button.MaterialButton style="@style/importantButtons" android:id="@+id/btn_mode" android:onClick="onMClick" android:text="M" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_1" android:onClick="onDigitClick" android:text="1" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_2" android:onClick="onDigitClick" android:text="2" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_3" android:onClick="onDigitClick" android:text="3" /> <com.google.android.material.button.MaterialButton style="@style/PlusMinusButton" android:id="@+id/btn_plusMinus" android:onClick="onclearAllClick" android:text="AC" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_0" android:onClick="onDigitClick" android:text="0" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_period" android:onClick="onDigitClick" android:text="." /> <com.google.android.material.button.MaterialButton style="@style/operatorButton" android:id="@+id/btn_equal" android:onClick="onequalClick" android:text="=" /> </LinearLayout> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
package com.example.calcapptoturial import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Button import android.widget.EditText import android.widget.ImageButton import android.widget.Spinner import androidx.appcompat.app.AppCompatActivity class SettingsActivity : AppCompatActivity() { private lateinit var editTextFormativeWeight: EditText private lateinit var editTextSummativeWeight: EditText private lateinit var sharedPreferences: SharedPreferences companion object { const val EXTRA_FORMATIVE_WEIGHT = "extra_formative_weight" const val EXTRA_SUMMATIVE_WEIGHT = "extra_summative_weight" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.dialog_settings) // Initialize EditText fields editTextFormativeWeight = findViewById(R.id.editTextFormativeWeight) editTextSummativeWeight = findViewById(R.id.editTextSummativeWeight) sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE) // Retrieve current weights from SharedPreferences val currentFormativeWeight = sharedPreferences.getFloat("formativeWeight", 40.0f) val currentSummativeWeight = sharedPreferences.getFloat("summativeWeight", 60.0f) // Set current weights as hints for EditText fields editTextFormativeWeight.hint = "Current Formative Weight: $currentFormativeWeight" editTextSummativeWeight.hint = "Current Summative Weight: $currentSummativeWeight" // Set click listener for the save button findViewById<Button>(R.id.btnSave).setOnClickListener { saveWeights() finish() // Close the settings activity } val themeOptions = arrayOf( "Keller HS Light", "Timber Creek HS Light", "Fossil Ridge HS Light", "Keller Central HS Light", "Keller HS Dark", "Timber Creek HS Dark", "Fossil Ridge HS Dark", "Keller Central HS Dark", "Default (Light + Orange)" ) val themeSpinner = findViewById<Spinner>(R.id.themeSpinner) val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, themeOptions) themeSpinner.adapter = adapter // Find the close button val closeButton = findViewById<ImageButton>(R.id.btnClose) // Set click listener for the close button closeButton.setOnClickListener { // Close the settings activity finish() } } private fun saveWeights() { // Get the input values from EditText fields val formativeWeightInput = editTextFormativeWeight.text.toString() val summativeWeightInput = editTextSummativeWeight.text.toString() // Convert input values to doubles and save to SharedPreferences sharedPreferences.edit().apply { putFloat("formativeWeight", formativeWeightInput.toFloatOrNull() ?: 40.0f) putFloat("summativeWeight", summativeWeightInput.toFloatOrNull() ?: 60.0f) apply() } } }
package com.example.calcapptoturial import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.View import android.widget.ImageButton import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var inputTextView: TextView private lateinit var calculatedGradeTextView: TextView private lateinit var historyTextView: TextView private lateinit var currentModeTextView: TextView private var totalFormativeGrades: Double = 0.0 private var totalSummativeGrades: Double = 0.0 private var formativeWeight: Double = 40.0 // Default formative weight private var summativeWeight: Double = 60.0 // Default summative weight private var formativeGradeCount: Int = 0 private var summativeGradeCount: Int = 0 private lateinit var sharedPreferences: SharedPreferences companion object { const val REQUEST_CODE_SETTINGS = 1001 // Define the request code } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) inputTextView = findViewById(R.id.inputext) calculatedGradeTextView = findViewById(R.id.calculatedgradetext) historyTextView = findViewById(R.id.historytext) currentModeTextView = findViewById(R.id.currentmodetext) sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE) // Initialize settingsButton val settingsButton = findViewById<ImageButton>(R.id.settingsButton) // Set click listener for settingsButton settingsButton.setOnClickListener { val intent = Intent(this, SettingsActivity::class.java) intent.putExtra(SettingsActivity.EXTRA_FORMATIVE_WEIGHT, formativeWeight) intent.putExtra(SettingsActivity.EXTRA_SUMMATIVE_WEIGHT, summativeWeight) startActivityForResult(intent, REQUEST_CODE_SETTINGS) } // Set max length for input text view inputTextView.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable?) { if (s?.length ?: 0 > 5) { s?.delete(5, s.length) } } }) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_SETTINGS && resultCode == RESULT_OK) { // Update weights from settings formativeWeight = data?.getDoubleExtra(SettingsActivity.EXTRA_FORMATIVE_WEIGHT, formativeWeight) ?: formativeWeight summativeWeight = data?.getDoubleExtra(SettingsActivity.EXTRA_SUMMATIVE_WEIGHT, summativeWeight) ?: summativeWeight // Update mode text view with updated weights updateModeTextView() // Recalculate grade with updated weights updateCalculatedGrade() } } override fun onResume() { super.onResume() // Update mode text view with weights from SharedPreferences restoreWeightsFromSharedPreferences() } private fun restoreWeightsFromSharedPreferences() { formativeWeight = sharedPreferences.getFloat("formativeWeight", 40.0f).toDouble() summativeWeight = sharedPreferences.getFloat("summativeWeight", 60.0f).toDouble() // Update mode text view with restored weights updateModeTextView() // Recalculate grade with restored weights updateCalculatedGrade() } fun onDigitClick(view: View) { if (inputTextView.text.length < 5) { // Allow up to 5 digits if (view is TextView) { val digit: String = view.text.toString() inputTextView.append(digit) } } } fun onequalClick(view: View) { val grade = inputTextView.text.toString().toDoubleOrNull() if (grade != null) { updateHistory(grade) updateCalculatedGrade() inputTextView.text = "" } } fun onbackClick(view: View) { val expression = inputTextView.text.toString() if (expression.isNotEmpty()) { inputTextView.text = expression.substring(0, expression.length - 1) } } fun onMClick(view: View) { // Toggle between Formative and Summative mode if (currentModeTextView.text.contains("Formative")) { currentModeTextView.text = "Summative Mode: (${String.format("%.1f", summativeWeight)}%)" } else { currentModeTextView.text = "Formative Mode: (${String.format("%.1f", formativeWeight)}%)" } // Recalculate grade when mode changes updateCalculatedGrade() } fun onclearAllClick(view: View) { inputTextView.text = "" calculatedGradeTextView.text = "Grade: 0.0%" historyTextView.text = "" historyTextView.visibility = View.GONE // Set visibility to gone totalFormativeGrades = 0.0 totalSummativeGrades = 0.0 formativeGradeCount = 0 summativeGradeCount = 0 } private fun updateCalculatedGrade() { val newAverage = if (formativeGradeCount == 0) { totalSummativeGrades / summativeGradeCount } else if (summativeGradeCount == 0) { totalFormativeGrades / formativeGradeCount } else { (totalSummativeGrades / summativeGradeCount) * (summativeWeight / 100.0) + (totalFormativeGrades / formativeGradeCount) * (formativeWeight / 100.0) } val formattedGrade = if (newAverage.isNaN()) { "0.0%" } else { "${String.format("%.2f", newAverage)}%" } calculatedGradeTextView.text = "Grade: $formattedGrade" } private fun updateHistory(grade: Double) { if (historyTextView.text.isNotEmpty()) { historyTextView.append(" + ") } historyTextView.append(grade.toInt().toString()) historyTextView.visibility = View.VISIBLE // Set visibility to visible // Update flag based on mode if (currentModeTextView.text.contains("Formative")) { totalFormativeGrades += grade formativeGradeCount++ } else { totalSummativeGrades += grade summativeGradeCount++ } } private fun updateModeTextView() { if (currentModeTextView.text.contains("Formative")) { currentModeTextView.text = "Formative Mode: (${String.format("%.1f", formativeWeight)}%)" } else { currentModeTextView.text = "Summative Mode: (${String.format("%.1f", summativeWeight)}%)" } } override fun onStop() { super.onStop() // Save weights to SharedPreferences when the activity is stopped saveWeightsToSharedPreferences() } private fun saveWeightsToSharedPreferences() { val editor = sharedPreferences.edit() editor.putFloat("formativeWeight", formativeWeight.toFloat()) editor.putFloat("summativeWeight", summativeWeight.toFloat()) editor.apply() } fun onQuitButtonClick(view: View?) { finish() // Finish the activity, effectively quitting the app } }
function startBlankBuildings() { return d3.select("g").classed('hidden', true) } window.onload = startBlankBuildings; // Entering Step Zero d3.select("#step-zero").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', true) d3.select("#bubblePolygon").classed('hidden', true) d3.select("g").classed('hidden', false) })
function startBlankBuildings() { return d3.select("#yaleBuildings").classed('hidden', true) } window.onload = startBlankBuildings;
npm i @mui/x-data-grid
// Entering Step Zero d3.select("#step-zero").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', true) d3.select("#bubblePolygon").classed('hidden', true) }) // Entering Step One d3.select("#step-one").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', false) }) // Entering Step Two d3.select("#step-two").on('stepin',function(e) { d3.select("#bubblePolygon").classed('hidden', false) }) // Entering Step Three d3.select("#step-three").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', true) d3.select("#bubblePolygon").classed('hidden', true) })
d3.select("#step-one").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', false) })
npm install --save react-dropzone
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <link rel="stylesheet" href="lib/bootstrap.css" /> <script src="lib/bootstrap.js"></script> <script src="lib/font-fontawesome-ae333ffef2.js"></script> <script src="lib/angular.js"></script> <script src="lib/angular-route.js"></script> <script> var app = angular.module("myApp", ["ngRoute"]); app.config(function ($routeProvider) { $routeProvider .when("/list-phone", { templateUrl: "pages/list.html", controller: "list-control", }) .when("/phone/add", { templateUrl: "pages/create.html", controller: "create-control", }) .when("/detail/phone/:id", { templateUrl: "pages/detail.html", controller: "detail-control", }) .when("/edit/phone/:id", { templateUrl: "pages/edit.html", controller: "edit-control", }); }); </script> <script src="pages/create.js"></script> <script src="pages/detail.js"></script> <script src="pages/edit.js"></script> <script src="pages/list.js"></script> </head> <body ng-app="myApp"> <ddiv class="container-fluid"> <ul class="nav"> <li class="nav-item"> <a class="nav-link" href="#!list-phone">List</a> </li> <li class="nav-item"> <a class="nav-link" href="#!phone/add">Add</a> </li> <li class="nav-item"> <a class="nav-link" href="#!detail/phone/SP001">Detail</a> </li> <li class="nav-item"> <a class="nav-link" href="#!edit/phone/SP001">Edit</a> </li> </ul> <div ng-view class="container-fluid"></div> </ddiv> </body> </html>
// Entering Step Zero d3.select("#step-zero").on('stepin',function(e) { d3.select("#yaleBuildings").classed('hidden', true) d3.select("#bubblePolygon").classed('hidden', true) })
// Entering Step Zero d3.select("#step-zero").on('stepin',function(e) { console.log("We've arrived at STEP ZERO") d3.select("#step-zero").style('background-color', 'aqua') d3.select("#bubblePolygon").classed('hidden', true) }) // Leaving Step Zero d3.select("#step-zero").on('stepout',function(e) { console.log("We've left STEP ZERO") // d3.select("#step-zero").style('background-color', 'aqua') })
class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0){ return " "; } String prefix = strs[0]; for(int i=1;i<strs.length;i++){ while(strs[i].indexOf(prefix)!=0){ prefix=prefix.substring(0,prefix.length()-1); if (prefix.isEmpty()) { return ""; } } } } return prefix; }
As an aspiring startup, you might be eager to turn your P2P Crypto Exchange Solutions into reality. Meanwhile, you may look for an ideal solution that sustains your business endeavors efficiently. To be honest, White label Paxful Clone Script is the solution you are looking for. Maticz’s Paxful Clone Script permits you quicker market entry with an enormous return on investment. To get more information contact us via, Email: sales@maticz.com Whatsapp: +91 93845 87998 Telegram: @maticzofficial Skype: live:.cid.817b888c8d30b212 Website: https://maticz.com/paxful-clone-script
CREATE OR REPLACE TEMPORARY TABLE TBL_NUMBER ( NUM FLOAT ) AS SELECT * FROM VALUES(2),(3),(4); SELECT EXP ( SUM ( LN(NUM) ) ) AS RESULT FROM TBL_NUMBER
dataLayer.push({ "action": "onInitialPageLoad", "event": "consent_status", "type": "explicit", "ucCategory": { "essential": true, "marketing": true, "functional": true, "customCategory-da1466e9-42f7-4845-88ee-14d3080feb09": true }, "Usercentrics Consent Management Platform": true, "Amazon Pay": true, "Cloudflare": true, "Google Fonts": true, "Google Maps": true, "Google Tag Manager": true, "PayPal": true, "Wordpress": true, "Sentry": true, "Amazon Web Services": true, "hCaptcha": true, "Kundenaccount": true, "Ory Hydra": true, "Datadog": true, "Freshdesk": true, "Emarsys": true, "Facebook Pixel": true, "Sovendus": true, "Google Analytics": true, "Trustpilot": true, "TradeDoubler": true, "QualityClick": true, "Pinterest": true, "TikTok": true, "Adtriba": true, "Microsoft Advertising": true, "AWIN": true, "Google Ads Conversion Tracking": true, "Google Ads Remarketing": true, "DoubleClick Floodlight": true, "Freewheel": true, "DoubleClick Ad": true, "tcid": true, "jsg_attribution": true, "jsg_lc": true, "tsid": true, "Impact Radius": true, "TimingCounter": true, "Outbrain": true, "Movable Ink": true, "Criteo OneTag": true, "YouTube Video": true, "Zopim": true, "Optimizely": true, "trbo": true, "RUMvision": true })
class Solution { public boolean isPalindrome(int x) { if (x < 0 || x % 10 == 0 && x != 0) { return false; } String X = Integer.toString(x); return X.equals(new StringBuilder(X).reverse().toString()); } }
jQuery(document).ready(function () { jQuery('.testislider').slick({ infinite: true, slidesToShow: 3, slidesToScroll: 1, centerMode: true, focusOnSelect: true, dots: false, nav: false, arrows: false, responsive: [ { breakpoint: 1200, settings: { slidesToShow: 2, slidesToScroll: 2, } }, { breakpoint: 768, settings: { slidesToShow: 1, slidesToScroll: 1 } } ] }); jQuery('.testislider').on('wheel', function(e) { e.preventDefault(); if (e.originalEvent.deltaY < 0) { jQuery(this).slick('slickNext'); } else { jQuery(this).slick('slickPrev'); } }); });
{ "type": "select", "id": "type_header_custom_font", "label": "Custom Font > Family", "info": "If selected, this selected custom font will be used.", "options": [ { "value": "", "label": "None" }, { "value": "Brice", "label": "Brice" } ] }, { "type": "select", "id": "type_header_custom_font_weight", "label": "Custom Font > Weight", "options": [ { "value": "100", "label": "100" }, { "value": "200", "label": "200" }, { "value": "300", "label": "300" }, { "value": "400", "label": "400" }, { "value": "500", "label": "500" }, { "value": "600", "label": "600" }, { "value": "700", "label": "700" }, { "value": "800", "label": "800" }, { "value": "900", "label": "900" } ] },
h1, h2, h3, h4 { font-family: "Brice", sans-serif; font-weight: 700; /* Use the font-weight that corresponds to your @font-face declaration */ }
import { useState } from "react"; import { useSupabaseClient } from "@supabase/auth-helpers-react"; import { Button } from "ui"; import { Database } from "../../types"; export const UserShiftStateButton = () => { const [isOnline, setIsOnline] = useState(false); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(""); const supabaseClient = useSupabaseClient<Database>(); const toggleShiftStatus = async () => { setIsLoading(true); try { const { data: { session }, } = await supabaseClient.auth.getSession(); if (session) { const { data: userData, error: userError } = await supabaseClient .from("UserLastWorkedOn") .select("shift_start") .eq("user", session.user.id) .maybeSingle(); console.log("data", userData); if (userData === undefined || userData === null) { throw new Error("User not found"); } if (userData.shift_start !== null) { // User is on shift so toggle to off shift const { error: updateError } = await supabaseClient .from("UserLastWorkedOn") .update({ shift_start: null, }) .eq("user", session.user.id); if (updateError) throw updateError; setIsOnline(false); const { error: insertError } = await supabaseClient .from("UserHistory") .insert([ { action: "END SHIFT", user: session.user.id, }, ]); if (insertError) throw insertError; } else { // User is off shift so toggle to on shift const { error: updateError } = await supabaseClient .from("UserLastWorkedOn") .update({ shift_start: new Date().toISOString(), }) .eq("user", session.user.id); if (updateError) throw updateError; setIsOnline(true); const { error: insertError } = await supabaseClient .from("UserHistory") .insert([ { action: "START SHIFT", user: session.user.id, }, ]); if (insertError) throw insertError; } } } catch (err) { setError("Failed to toggle shift status"); console.error(err); } finally { setIsLoading(false); } }; return ( <> <Button action={toggleShiftStatus} // disabled={isLoading} text={isOnline ? "Go Offline" : "Go Online"} /> {error && <p>Error: {error}</p>} </> ); };
<link rel="stylesheet" href="{{ 'custom-fonts.css.liquid' | asset_url }}" type="text/css" media="all">
/* assets/custom-fonts.css.liquid */ @font-face { font-family: 'Brice'; font-style: normal; font-weight: 700; /* 700 is commonly used for Bold weight */ src: url("{{ 'brice-bold-webfont.woff2' | asset_url }}") format('woff2'), url("{{ 'brice-bold-webfont.woff' | asset_url }}") format('woff'); } @font-face { font-family: 'Brice'; font-style: normal; font-weight: 900; /* 900 is commonly used for Black weight */ src: url("{{ 'brice-black-webfont.woff2' | asset_url }}") format('woff2'), url("{{ 'brice-black-webfont.woff' | asset_url }}") format('woff'); }
my-theme/ ┣ assets/ ┃ ┣ brice-black-webfont.woff ┃ ┣ brice-black-webfont.woff2 ┃ ┣ brice-bold-webfont.woff ┃ ┣ brice-bold-webfont.woff2 ┃ ┣ // more files... ┣ config/ ┣ layout/ ┣ locales/ ┣ sections/ ┣ snippets/ ┗ templates/
internal final class COATest { /// <summary> /// Class entry point. The system will call this method when a designated menu /// is selected or when execution starts and this class is set as the startup class. /// </summary> /// <param name = "_args">The specified arguments.</param> public static void main(Args _args) { NW_MainAccountTb NW_MainAccountTb; select NW_MainAccountTb where NW_MainAccountTb.NW_AutomatedID=="COAR-000123"; if(NW_MainAccountTb.RequestType == RequestType::Creation && NW_MainAccountTb.CreateInGLX==NoYes::Yes) { RetailWebRequest webRequest; RetailWebResponse response; RetailCommonWebAPI webApi; NW_COAContractClass Contract; str URL,json; webApi = RetailCommonWebAPI::construct(); URL =NW_AutomatedParameters::find().COAAPIURL;// "https://apxuat.sanabil.com:1002/GLXCOA/Create"; info(URL); str accountType = NW_AccountTypeHelper::AccountTypeMapping(NW_MainAccountTb.Type); info(accountType); if(URL && accountType) { Contract = new NW_COAContractClass(); Contract.entityName(LedgerChartOfAccounts::find(NW_MainAccountTb.LedgerChartOfAccounts).Name); Contract.glxAccount(NW_MainAccountTb.New_MainAccount); Contract.accountType(accountType); Contract.description(NW_MainAccountTb.Name); json = FormJsonSerializer::serializeClass(Contract); str authHeader; info(json); response = webApi.makePostRequest(URL,json,authHeader,"application/json"); if(response.parmHttpStatus()!=200) { str result = response.parmdata() != "" ? response.parmdata() : strFmt("%1",response.parmHttpStatus()) ; Error(result); } } } } }
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser > Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
package com.example.calcapptoturial import android.content.Intent import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Spinner import android.widget.ImageButton import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity class SettingsActivity : AppCompatActivity() { private lateinit var editTextFormativeWeight: EditText private lateinit var editTextSummativeWeight: EditText override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.dialog_settings) // Initialize EditText fields editTextFormativeWeight = findViewById(R.id.editTextFormativeWeight) editTextSummativeWeight = findViewById(R.id.editTextSummativeWeight) // Set current weights as hints for EditText fields val currentFormativeWeight = intent.getDoubleExtra(EXTRA_FORMATIVE_WEIGHT, 40.0) val currentSummativeWeight = intent.getDoubleExtra(EXTRA_SUMMATIVE_WEIGHT, 60.0) editTextFormativeWeight.hint = "Current Formative Weight: $currentFormativeWeight" editTextSummativeWeight.hint = "Current Summative Weight: $currentSummativeWeight" // Set click listener for the save button findViewById<Button>(R.id.btnSave).setOnClickListener { saveWeights() finish() // Close the settings activity } val themeOptions = arrayOf( "Keller HS Light", "Timber Creek HS Light", "Fossil Ridge HS Light", "Keller Central HS Light", "Keller HS Dark", "Timber Creek HS Dark", "Fossil Ridge HS Dark", "Keller Central HS Dark", "Default (Light + Orange)" ) val themeSpinner = findViewById<Spinner>(R.id.themeSpinner) val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, themeOptions) themeSpinner.adapter = adapter // Find the close button val closeButton = findViewById<ImageButton>(R.id.btnClose) // Set click listener for the close button closeButton.setOnClickListener { // Close the settings activity finish() } } private fun saveWeights() { // Get the input values from EditText fields val formativeWeightInput = editTextFormativeWeight.text.toString() val summativeWeightInput = editTextSummativeWeight.text.toString() // Convert input values to doubles val formativeWeight = if (formativeWeightInput.isNotEmpty()) formativeWeightInput.toDouble() else 40.0 val summativeWeight = if (summativeWeightInput.isNotEmpty()) summativeWeightInput.toDouble() else 60.0 // Create an intent to pass the weights back to MainActivity val intent = Intent().apply { putExtra(EXTRA_FORMATIVE_WEIGHT, formativeWeight) putExtra(EXTRA_SUMMATIVE_WEIGHT, summativeWeight) } setResult(RESULT_OK, intent) // Set result OK to indicate successful operation } companion object { const val EXTRA_FORMATIVE_WEIGHT = "extra_formative_weight" const val EXTRA_SUMMATIVE_WEIGHT = "extra_summative_weight" } }
package com.example.calcapptoturial import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.View import android.widget.ImageButton import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var inputTextView: TextView private lateinit var calculatedGradeTextView: TextView private lateinit var historyTextView: TextView private lateinit var currentModeTextView: TextView private var totalFormativeGrades: Double = 0.0 private var totalSummativeGrades: Double = 0.0 private var formativeWeight: Double = 40.0 // Default formative weight private var summativeWeight: Double = 60.0 // Default summative weight private var formativeGradeCount: Int = 0 private var summativeGradeCount: Int = 0 companion object { const val REQUEST_CODE_SETTINGS = 1001 // Define the request code } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) inputTextView = findViewById(R.id.inputext) calculatedGradeTextView = findViewById(R.id.calculatedgradetext) historyTextView = findViewById(R.id.historytext) currentModeTextView = findViewById(R.id.currentmodetext) // Initialize settingsButton val settingsButton = findViewById<ImageButton>(R.id.settingsButton) // Set click listener for settingsButton settingsButton.setOnClickListener { val intent = Intent(this, SettingsActivity::class.java) intent.putExtra(SettingsActivity.EXTRA_FORMATIVE_WEIGHT, formativeWeight) intent.putExtra(SettingsActivity.EXTRA_SUMMATIVE_WEIGHT, summativeWeight) startActivityForResult(intent, REQUEST_CODE_SETTINGS) } // Set max length for input text view inputTextView.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable?) { if (s?.length ?: 0 > 5) { s?.delete(5, s.length) } } }) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_SETTINGS && resultCode == RESULT_OK) { // Update weights from settings formativeWeight = data?.getDoubleExtra(SettingsActivity.EXTRA_FORMATIVE_WEIGHT, formativeWeight) ?: formativeWeight summativeWeight = data?.getDoubleExtra(SettingsActivity.EXTRA_SUMMATIVE_WEIGHT, summativeWeight) ?: summativeWeight // Update mode text view with updated weights updateModeTextView() // Recalculate grade with updated weights updateCalculatedGrade() } } override fun onResume() { super.onResume() // Update mode text view with weights from settings updateModeTextView() // Recalculate grade when returning from settings updateCalculatedGrade() } fun onDigitClick(view: View) { if (inputTextView.text.length < 5) { // Allow up to 5 digits if (view is TextView) { val digit: String = view.text.toString() inputTextView.append(digit) } } } fun onequalClick(view: View) { val grade = inputTextView.text.toString().toDoubleOrNull() if (grade != null) { updateHistory(grade) updateCalculatedGrade() inputTextView.text = "" } } fun onbackClick(view: View) { val expression = inputTextView.text.toString() if (expression.isNotEmpty()) { inputTextView.text = expression.substring(0, expression.length - 1) } } fun onMClick(view: View) { // Toggle between Formative and Summative mode if (currentModeTextView.text.contains("Formative")) { currentModeTextView.text = "Summative Mode: (${String.format("%.1f", summativeWeight)}%)" } else { currentModeTextView.text = "Formative Mode: (${String.format("%.1f", formativeWeight)}%)" } // Recalculate grade when mode changes updateCalculatedGrade() } fun onclearAllClick(view: View) { inputTextView.text = "" calculatedGradeTextView.text = "Grade: 0.0%" historyTextView.text = "" historyTextView.visibility = View.GONE // Set visibility to gone totalFormativeGrades = 0.0 totalSummativeGrades = 0.0 formativeGradeCount = 0 summativeGradeCount = 0 } private fun updateCalculatedGrade() { val newAverage = if (formativeGradeCount == 0) { totalSummativeGrades / summativeGradeCount } else if (summativeGradeCount == 0) { totalFormativeGrades / formativeGradeCount } else { (totalSummativeGrades / summativeGradeCount) * (summativeWeight / 100.0) + (totalFormativeGrades / formativeGradeCount) * (formativeWeight / 100.0) } val formattedGrade = if (newAverage.isNaN()) { "0.0%" } else { "${String.format("%.2f", newAverage)}%" } calculatedGradeTextView.text = "Grade: $formattedGrade" } private fun updateHistory(grade: Double) { if (historyTextView.text.isNotEmpty()) { historyTextView.append(" + ") } historyTextView.append(grade.toInt().toString()) historyTextView.visibility = View.VISIBLE // Set visibility to visible // Update flag based on mode if (currentModeTextView.text.contains("Formative")) { totalFormativeGrades += grade formativeGradeCount++ } else { totalSummativeGrades += grade summativeGradeCount++ } } private fun updateModeTextView() { if (currentModeTextView.text.contains("Formative")) { currentModeTextView.text = "Formative Mode: (${String.format("%.1f", formativeWeight)}%)" } else { currentModeTextView.text = "Summative Mode: (${String.format("%.1f", summativeWeight)}%)" } } fun onQuitButtonClick(view: View?) { finish() // Finish the activity, effectively quitting the app } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <!-- Title: Change Weights --> <TextView android:id="@+id/textChangeWeights" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Update Grade Weights:" android:textSize="22sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="8dp" android:layout_marginStart="8dp"/> <!-- Formative weight input field --> <EditText android:id="@+id/editTextFormativeWeight" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:hint="Formative Weight (%)" android:imeOptions="actionNext" android:inputType="numberDecimal" android:minWidth="200dp" android:minHeight="48dp" android:padding="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textChangeWeights" /> <!-- Summative weight input field --> <EditText android:id="@+id/editTextSummativeWeight" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:hint="Summative Weight (%)" android:imeOptions="actionDone" android:inputType="numberDecimal" android:minWidth="200dp" android:minHeight="48dp" android:padding="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editTextFormativeWeight" /> <!-- Title: Theme --> <TextView android:id="@+id/textTheme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Themes:" android:textSize="22sp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editTextSummativeWeight" android:layout_marginTop="16dp" android:layout_marginStart="8dp"/> <!-- Theme dropdown menu --> <Spinner android:id="@+id/themeSpinner" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textTheme" tools:listitem="@android:layout/simple_spinner_dropdown_item" /> <!-- Button (Close) --> <ImageButton android:id="@+id/btnClose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/close_window" android:background="@android:color/transparent" android:padding="16dp" android:contentDescription="Close" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- Button (Save) --> <Button android:id="@+id/btnSave" style="@style/saveButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="52dp" android:layout_marginEnd="12dp" android:text="Save" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/themeSpinner" /> </androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="MainActivity"> <ImageButton android:id="@+id/quitButton" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/quit_app_icon_bigger" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:background="@android:color/transparent" android:onClick="onQuitButtonClick" android:contentDescription="@+string/quit_button_description"/> <ImageButton android:id="@+id/settingsButton" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/settings_gear_bigger" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp" android:layout_marginTop="8dp" android:background="@android:color/transparent" android:onClick="onSettingsButtonClick" android:contentDescription="@+string/settings_button_description"/> <TextView android:id="@+id/currentmodetext" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_margin="15dp" android:text="Formative Mode (40%)" android:textAlignment="center" android:textColor="@color/black" android:textSize="24dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.555" app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="30dp" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/inputext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dp" android:text="" android:textAlignment="center" android:textColor="@color/black" android:textSize="115dp" app:layout_constraintBottom_toTopOf="@+id/calculatedgradetext" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/currentmodetext" app:layout_constraintVertical_bias="0.703" /> <TextView android:id="@+id/calculatedgradetext" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="18dp" android:layout_marginBottom="16dp" android:text="Grade: 0.0%" android:textAlignment="center" android:textColor="@color/black" android:textSize="31dp" app:layout_constraintBottom_toTopOf="@+id/historytext" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.482" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/historytext" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="start" android:layout_margin="5dp" android:textSize="18sp" android:visibility="gone" android:text="" android:textColor="@color/historyColor" app:layout_constraintBottom_toTopOf="@id/line" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <View android:id="@+id/line" android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/linecolor" app:layout_constraintBottom_toTopOf="@id/linearLayout" android:layout_marginBottom="8dp"/> <LinearLayout android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_7" android:onClick="onDigitClick" android:text="7" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_8" android:onClick="onDigitClick" android:text="8" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_9" android:onClick="onDigitClick" android:text="9" /> <com.google.android.material.button.MaterialButton style="@style/importantButtons" android:id="@+id/btn_delete" android:onClick="onbackClick" app:icon="@drawable/whitebackspace" app:iconTint="@color/white" android:text="4"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_4" android:onClick="onDigitClick" android:text="4" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_5" android:onClick="onDigitClick" android:text="5" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_6" android:onClick="onDigitClick" android:text="6" /> <com.google.android.material.button.MaterialButton style="@style/importantButtons" android:id="@+id/btn_mode" android:onClick="onMClick" android:text="M" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_1" android:onClick="onDigitClick" android:text="1" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_2" android:onClick="onDigitClick" android:text="2" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_3" android:onClick="onDigitClick" android:text="3" /> <com.google.android.material.button.MaterialButton style="@style/PlusMinusButton" android:id="@+id/btn_plusMinus" android:onClick="onclearAllClick" android:text="AC" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_0" android:onClick="onDigitClick" android:text="0" /> <com.google.android.material.button.MaterialButton style="@style/digitButton" android:id="@+id/btn_period" android:onClick="onDigitClick" android:text="." /> <com.google.android.material.button.MaterialButton style="@style/operatorButton" android:id="@+id/btn_equal" android:onClick="onequalClick" android:text="=" /> </LinearLayout> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
npm install --save @stripe/react-stripe-js @stripe/stripe-js
Tue Feb 27 2024 21:07:04 GMT+0000 (Coordinated Universal Time) https://codepen.io/RajRajeshDn/pen/abVXzqZ
@Y@sir #social-share-icons #share-icons #social-share-buttons
Tue Feb 27 2024 19:49:01 GMT+0000 (Coordinated Universal Time) https://www.sciencebase.gov/catalog/item/5e432067e4b0edb47be84657?format
Tue Feb 27 2024 16:12:59 GMT+0000 (Coordinated Universal Time) https://www.reddit.com/r/GoogleTagManager/comments/1b0roz5/trigger_for_sessiontime_or_number_of_pages_visited/
Tue Feb 27 2024 13:56:58 GMT+0000 (Coordinated Universal Time) https://freedium.cfd/https://python.plainenglish.io/dont-use-anymore-for-in-python-225586f1b0c4
Tue Feb 27 2024 13:49:51 GMT+0000 (Coordinated Universal Time) https://gruponacion.lightning.force.com/lightning/setup/ApexPages/page?address
Tue Feb 27 2024 00:51:10 GMT+0000 (Coordinated Universal Time) https://github.com/clojure-emacs/clojure-mode
Mon Feb 26 2024 12:20:18 GMT+0000 (Coordinated Universal Time) https://maticz.com/paxful-clone-script