PageSourceSearch

https://www.spinr.ca/_next/static/chunks/3f5lluhhcb2od.js?dpl=dpl_6ieToS6mPz7z7JrE9gGWBfotareU

js spinr.ca collected 2026-09-24 14:35:54 UTC 14,371 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,59253,e=>{"use strict";var s=e.i(43476),t=e.i(71645);let i="M34 268 C 44 232, 30 208, 58 186 S 104 168, 118 132 S 140 74, 166 44",r={full:"0 0 200 300",wide:"4 146 192 84"};e.s(["default",0,function({t:e=0,className:a="",pins:n=!0,route:l=!0,view:d="full",dense:o=!1}){let c=Math.min(1,Math.max(0,e)),h=(0,t.useRef)(null),p=(0,t.useRef)(null);return(0,t.useEffect)(()=>{let e=h.current,s=p.current;if(!e||!s)return;let t=e.getTotalLength(),i=t*c,r=e.getPointAtLength(Math.max(0,i-2)),a=e.getPointAtLength(Math.min(t,i+2)),n=180*Math.atan2(a.y-r.y,a.x-r.x)/Math.PI+90;s.setAttribute("transform",`translate(${a.x.toFixed(2)} ${a.y.toFixed(2)}) rotate(${n.toFixed(1)})`)},[c]),(0,s.jsxs)("svg",{className:`sp-map ${a}`.trim(),viewBox:r[d]||r.full,preserveAspectRatio:"xMidYMid slice","aria-hidden":"true",children:[(0,s.jsx)("rect",{width:"200",height:"300",fill:"#E7DFCF"}),(0,s.jsx)("rect",{x:"6",y:"14",width:"50",height:"42",rx:"9",fill:"#D3E6BE"}),(0,s.jsx)("rect",{x:"128",y:"228",width:"78",height:"64",rx:"10",fill:"#D3E6BE"}),(0,s.jsx)("rect",{x:"150",y:"96",width:"46",height:"34",rx:"8",fill:"#D3E6BE"}),(0,s.jsx)("path",{d:"M-12 236 C 34 214, 58 176, 104 152 S 172 108, 212 96 L212 132 C 176 144, 128 176, 106 198 S 34 268, -12 282 Z",fill:"#B6DDE6"}),(0,s.jsx)("path",{d:"M-12 236 C 34 214, 58 176, 104 152 S 172 108, 212 96",fill:"none",stroke:"#8FC6D3",strokeWidth:"1.5"}),o&&(0,s.jsxs)("g",{children:[(0,s.jsxs)("g",{stroke:"#FAF7EF",strokeWidth:"1.6",fill:"none",opacity:".8",children:[(0,s.jsx)("path",{d:"M0 12 H200"}),(0,s.jsx)("path",{d:"M0 56 H200"}),(0,s.jsx)("path",{d:"M0 100 H200"}),(0,s.jsx)("path",{d:"M0 144 H200"}),(0,s.jsx)("path",{d:"M0 188 H200"}),(0,s.jsx)("path",{d:"M0 232 H200"}),(0,s.jsx)("path",{d:"M0 276 H200"}),(0,s.jsx)("path",{d:"M6 0 V300"}),(0,s.jsx)("path",{d:"M50 0 V300"}),(0,s.jsx)("path",{d:"M94 0 V300"}),(0,s.jsx)("path",{d:"M138 0 V300"}),(0,s.jsx)("path",{d:"M182 0 V300"})]}),(0,s.jsx)("rect",{x:"80",y:"14",width:"30",height:"16",rx:"4",fill:"#E2D7C0"}),(0,s.jsx)("rect",{x:"34",y:"96",width:"28",height:"20",rx:"4",fill:"#E2D7C0"}),(0,s.jsx)("rect",{x:"120",y:"250",width:"34",height:"18",rx:"4",fill:"#E2D7C0"}),(0,s.jsx)("rect",{x:"8",y:"140",width:"14",height:"12",rx:"3",fill:"#D3E6BE"}),(0,s.jsx)("rect",{x:"176",y:"180",width:"20",height:"14",rx:"4",fill:"#D3E6BE"})]}),(0,s.jsxs)("g",{stroke:"#FAF7EF",strokeLinecap:"square",fill:"none",children:[(0,s.jsxs)("g",{strokeWidth:"4.5",children:[(0,s.jsx)("path",{d:"M0 34 H200"}),(0,s.jsx)("path",{d:"M0 78 H200"}),(0,s.jsx)("path",{d:"M0 122 H200"}),(0,s.jsx)("path",{d:"M0 166 H200"}),(0,s.jsx)("path",{d:"M0 210 H200"}),(0,s.jsx)("path",{d:"M0 254 H200"}),(0,s.jsx)("path",{d:"M28 0 V300"}),(0,s.jsx)("path",{d:"M72 0 V300"}),(0,s.jsx)("path",{d:"M116 0 V300"}),(0,s.jsx)("path",{d:"M160 0 V300"})]}),(0,s.jsx)("path",{d:"M-6 292 L206 26",strokeWidth:"9"})]}),(0,s.jsxs)("g",{stroke:"rgba(11,11,11,.42)",strokeWidth:o?.9:1.6,strokeLinecap:"round",children:[(0,s.jsx)("path",{d:"M43.3 238.1 L111.1 153.1"}),(0,s.jsx)("path",{d:"M35.5 231.9 L103.3 146.9"})]}),l&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("path",{ref:h,d:i,fill:"none",stroke:"rgba(11,11,11,.17)",strokeWidth:o?3.6:6,strokeLinecap:"round"}),(0,s.jsx)("path",{d:i,fill:"none",stroke:"#DC3848",strokeWidth:o?3:5,strokeLinecap:"round",pathLength:"1",strokeDasharray:"1",strokeDashoffset:1-c})]}),n&&l&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("g",{transform:o?"translate(34 268) scale(.55) translate(-34 -268)":void 0,children:[(0,s.jsx)("circle",{cx:"34",cy:"268",r:"7",fill:"#fff",stroke:"#0B0B0B",strokeWidth:"2.5"}),(0,s.jsx)("circle",{cx:"34",cy:"268",r:"2.6",fill:"#0B0B0B"})]}),(0,s.jsxs)("g",{transform:o?"translate(166 50) scale(.55) translate(-166 -50)":void 0,children:[(0,s.jsx)("path",{d:"M166 30 c6.6 0 12 5.4 12 12 0 8.6-12 20-12 20s-12-11.4-12-20c0-6.6 5.4-12 12-12z",fill:"#FFC60B",stroke:"#0B0B0B",strokeWidth:"2.5",strokeLinejoin:"round"}),(0,s.jsx)("circle",{cx:"166",cy:"42",r:"4",fill:"#0B0B0B"})]})]}),(0,s.jsx)("g",{ref:p,style:{display:l?void 0:"none"},children:(0,s.jsxs)("g",{transform:o?"scale(.5)":void 0,children:[(0,s.jsx)("rect",{x:"-9",y:"-12.5",width:"18",height:"25",rx:"6",fill:"#fff"}),(0,s.jsx)("rect",{x:"-7.2",y:"-10.7",width:"14.4",height:"21.4",rx:"4.8",fill:"#0B0B0B"}),(0,s.jsx)("rect",{x:"-5",y:"-8.2",width:"10",height:"7",rx:"2.5",fill:"#A8E1DE"}),(0,s.jsx)("rect",{x:"-5",y:"1.4",width:"10",height:"5.4",rx:"2.1",fill:"#57575A"})]})})]})}])},81602,e=>{"use strict";var s=e.i(43476),t=e.i(71645),i=e.i(59253);let r=e=>Math.min(1,Math.max(0,e)),a=[{k:"Ask",t:"Say where you’re going",p:"Type it, tap a saved place, or just ask the AI assistant.",ty:"-136vh"},{k:"Price",t:"The full fare, before you book",p:"Itemised to the dollar. If you don’t like it, you haven’t bought it.",ty:"-92vh"},{k:"Ride",t:"Watch your driver come to you",p:"Live on the map, with the trip shareable to anyone you choose.",ty:"-46vh"}
1,{k:"Arrive",t:"Pay what you saw",p:"The number on the receipt is the number you agreed to. Every time.",ty:"0vh"}],n=[0,.22,.86,1],l="Broadway Ave";function d({i:e,local:t}){if(0===e){let e=l.slice(0,Math.round(r(1.6*t)*l.length));return(0,s.jsxs)("div",{className:"sp-jn-field",children:[(0,s.jsx)("i",{className:"sp-jn-pin","aria-hidden":"true"}),e,e.length<l.length&&(0,s.jsx)("i",{className:"sp-caret","aria-hidden":"true"})]})}if(1===e)return(0,s.jsxs)("div",{className:"sp-jn-receipt",children:[[["Ride fare","$14.20"],["Booking fee","$1.00"],["GST (5%)","$0.76"]].map(([e,i],r)=>(0,s.jsxs)("div",{className:`sp-jn-row${t>.02+.1*r?" in":""}`,children:[(0,s.jsx)("span",{children:e}),(0,s.jsx)("b",{children:i})]},e)),(0,s.jsxs)("div",{className:`sp-jn-row sp-jn-tot${t>.4?" in":""}`,children:[(0,s.jsx)("span",{children:"Total"}),(0,s.jsx)("b",{children:"$15.96"})]})]});if(2===e){let e=Math.max(1,Math.ceil(6-5*t));return(0,s.jsxs)("div",{className:"sp-jn-driver",children:[(0,s.jsx)("span",{className:"sp-jn-avatar","aria-hidden":"true"}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("b",{children:[e," min away"]}),(0,s.jsx)("i",{children:"Grey Corolla · Fully insured"})]})]})}return(0,s.jsxs)("div",{className:`sp-jn-stamp sp-display${t>.1?" in":""}`,children:["$15.96 ",(0,s.jsx)("span",{children:"as quoted"})]})}e.s(["default",0,function(){let e=(0,t.useRef)(null),[l,o]=(0,t.useState)("still"),[c,h]=(0,t.useState)(0),[p,x]=(0,t.useState)(0);if((0,t.useEffect)(()=>{let e=window.matchMedia("(min-width: 980px) and (min-height: 640px)"),s=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>o(e.matches&&!s.matches?"pinned":"still");return t(),e.addEventListener("change",t),s.addEventListener("change",t),()=>{e.removeEventListener("change",t),s.removeEventListener("change",t)}},[]),(0,t.useEffect)(()=>{if("pinned"!==l)return;let s=0,t=()=>{s||(s=requestAnimationFrame(()=>{s=0,(()=>{let s=e.current;if(!s)return;let t=s.getBoundingClientRect(),i=t.height-window.innerHeight;if(i<=0)return;let n=r((-t.top/i-.04)/.88)*a.length,l=Math.min(a.length-1,Math.floor(n));h(l),x(r(n-l))})()}))};return t(),window.addEventListener("scroll",t,{passive:!0}),window.addEventListener("resize",t),()=>{s&&cancelAnimationFrame(s),window.removeEventListener("scroll",t),window.removeEventListener("resize",t)}},[l]),"pinned"!==l)return(0,s.jsx)("section",{className:"sp-sec sp-jn-flat",id:"trip",children:(0,s.jsxs)("div",{className:"sp-wrap",children:[(0,s.jsx)("span",{className:"sp-kick",children:"The trip"}),(0,s.jsx)("h2",{className:"sp-display sp-h2",children:"One ride, start to finish."}),(0,s.jsx)("div",{className:"sp-jn-grid",children:a.map((e,t)=>(0,s.jsxs)("article",{className:"sp-jn-card is-on",children:[(0,s.jsx)("div",{className:"sp-jn-map",children:(0,s.jsx)(i.default,{t:n[t]})}),(0,s.jsx)("span",{className:"sp-jn-n sp-display",children:String(t+1).padStart(2,"0")}),(0,s.jsx)("h3",{className:"sp-display",children:e.t}),(0,s.jsx)("p",{children:e.p}),(0,s.jsx)(d,{i:t,local:1})]},e.k))})]})});let u=n[c]+(n[Math.min(c+1,3)]-n[c])*p,j=a[c];return(0,s.jsx)("section",{className:"sp-jn",id:"trip",ref:e,children:(0,s.jsxs)("div",{className:"sp-jn-stage",children:[(0,s.jsx)("div",{className:"sp-jn-canvas",style:{transform:`translateY(${j.ty})`},children:(0,s.jsx)(i.default,{t:u,dense:!0})}),(0,s.jsx)("span",{className:"sp-jn-grain","aria-hidden":"true"}),(0,s.jsxs)("div",{className:"sp-jn-head",children:[(0,s.jsx)("span",{className:"sp-kick",children:"The trip"}),(0,s.jsx)("h2",{className:"sp-display",children:"One ride, start to finish."}),(0,s.jsx)("div",{className:"sp-jn-dots","aria-hidden":"true",children:a.map((e,t)=>(0,s.jsx)("span",{className:t===c?"on":t<c?"done":"",children:e.k},e.k))})]}),(0,s.jsx)("div",{className:"sp-jn-rail",children:a.map((e,t)=>(0,s.jsxs)("article",{className:`sp-jn-card${t===c?" is-on":""}`,"aria-hidden":t!==c,children:[(0,s.jsx)("span",{className:"sp-jn-n sp-display",children:String(t+1).padStart(2,"0")}),(0,s.jsx)("h3",{className:"sp-display",children:e.t}),(0,s.jsx)("p",{children:e.p}),(0,s.jsx)(d,{i:t,local:t===c?p:+(t<c)})]},e.k))})]})})}])},10640,e=>{"use strict";var s=e.i(43476),t=e.i(71645),i=e.i(33698);let r=e=>"$"+e.toFixed(2);e.s(["default",0,function(){let[e,a]=(0,t.useState)(""),[n,l]=(0,t.useState)(""),[d,o]=(0,t.useState)(null),[c,h]=(0,t.useState)(null),[p,x]=(0,t.useState)([]),[u,j]=(0,t.useState)(null),[f,m]=(0,t.useState)(!1),[g,y]=(0,t.useState)("ios"),[v,k]=(0,t.useState)(null),[w,N]=(0,t.useState)(null),M=(0,t.useRef)(null);(0,t.useEffect)(()=>{let s="pickup"===u?e:"dropoff"===u?n:"";if(!u||s.trim().length<3)return void x([]);let t=setTimeout(async()=>{try{let e=await fetch(`https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(s+" Saskatchewan")}&countrycodes=ca&limit=5`);if(!e.ok)throw Error(`geocode ${e.status}`);x(await e.json())}catch(e){console.error("[estimate] address lookup failed:",e.message),x([])}},500);return()=>clearTimeout(t)},[e,n,u]),(0,t.useEffect)(()=>{let e=e=>{M.current&&!M.current.contains(e.target)&&x([])};return document.addEventListener("pointerdown",e),()=>document.removeEventListener("pointerdown",e)},[]),(0,t.useEffect)(()=>{y((0,i.detectPlatform)())},[]);let b=async()=>
1{if(!d||!c)return void N("Pick both ends from the suggestions.");m(!0),N(null),k(null);try{let e=await fetch(`https://router.project-osrm.org/route/v1/driving/${d.lon},${d.lat};${c.lon},${c.lat}?overview=false`);if(!e.ok)throw Error(`route ${e.status}`);let s=await e.json(),t=s?.routes?.[0]?.distance;if(!t)throw Error("no route");let i=t/1e3,r=/\b(airport|yxe)\b/i.test(n),a=2*!!r,l=Math.max(1.2*i+a,4),o=Math.max(2*i+a,4);k({km:i,low:l,high:o,airport:r,flat:l===o})}catch(e){console.error("[estimate] route failed:",e.message),N("Could not measure that trip. Try two distinct Saskatoon addresses.")}finally{m(!1)}};return(0,s.jsxs)("div",{className:"sp-est",ref:M,children:[(0,s.jsxs)("div",{className:"sp-est-fields",children:[(0,s.jsxs)("label",{className:"sp-est-field",children:[(0,s.jsx)("span",{children:"From"}),(0,s.jsx)("input",{value:e,onChange:e=>{a(e.target.value),o(null),j("pickup")},onFocus:()=>j("pickup"),placeholder:"Pickup address",autoComplete:"off"})]}),(0,s.jsx)("button",{type:"button",className:"sp-est-swap",onClick:()=>{a(n),l(e),o(c),h(d),k(null)},"aria-label":"Swap pickup and destination",children:(0,s.jsx)("span",{"aria-hidden":"true",children:"⇅"})}),(0,s.jsxs)("label",{className:"sp-est-field",children:[(0,s.jsx)("span",{children:"To"}),(0,s.jsx)("input",{value:n,onChange:e=>{l(e.target.value),h(null),j("dropoff")},onFocus:()=>j("dropoff"),placeholder:"Where to?",autoComplete:"off"})]}),p.length>0&&(0,s.jsx)("ul",{className:"sp-est-list",children:p.map(e=>(0,s.jsx)("li",{children:(0,s.jsx)("button",{type:"button",onClick:()=>{"pickup"===u?(a(e.display_name),o(e)):(l(e.display_name),h(e)),x([]),j(null)},children:e.display_name})},e.place_id))})]}),(0,s.jsx)("button",{type:"button",className:"sp-btn sp-est-go",onClick:b,disabled:f,children:f?"Measuring…":"Estimate this trip"}),w&&(0,s.jsx)("p",{className:"sp-est-err",role:"alert",children:w}),v&&(0,s.jsxs)("div",{className:"sp-est-out",children:[(0,s.jsxs)("div",{className:"sp-est-headline",children:[(0,s.jsx)("span",{className:"sp-est-k",children:"Fare estimate"}),(0,s.jsx)("b",{className:"sp-display",children:v.flat?r(v.low):`${r(v.low)} – ${r(v.high)}`})]}),(0,s.jsxs)("dl",{className:"sp-est-rows",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("dt",{children:"Driving distance"}),(0,s.jsxs)("dd",{children:[v.km.toFixed(1)," km"]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("dt",{children:"To your driver"}),(0,s.jsx)("dd",{children:"all of it"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("dt",{children:"Booking fee"}),(0,s.jsx)("dd",{children:r(1)})]}),v.airport&&(0,s.jsxs)("div",{children:[(0,s.jsx)("dt",{children:"Airport surcharge"}),(0,s.jsx)("dd",{children:r(2)})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("dt",{children:"Surge"}),(0,s.jsx)("dd",{children:"never"})]})]}),(0,s.jsxs)("p",{className:"sp-est-fine",children:["A distance estimate, so it does not know about traffic. The ",r(1)," booking fee, tax and any city fee are added at checkout, each named. The app shows the exact number before you confirm — and it is the number you pay."]}),(0,s.jsx)("p",{className:"sp-est-fine sp-est-promo",children:"This estimate is before any discount. Promo codes and other offers are applied in the app, so what you actually pay can be less."}),(0,s.jsxs)("div",{className:"sp-est-cta",children:[(0,s.jsx)("a",{className:"sp-btn",href:i.APP_URLS.rider[g],target:"_blank",rel:"noopener noreferrer",children:"Book this trip in the app"}),(0,s.jsx)("a",{className:"sp-btn-ghost",href:i.APP_URLS.rider["ios"===g?"android":"ios"],target:"_blank",rel:"noopener noreferrer",children:"ios"===g?"Google Play":"App Store"})]})]})]})}])},50855,e=>{"use strict";var s=e.i(43476);e.s(["default",0,function({data:e}){let t;if(!e)return null;try{if("string"==typeof e)t=JSON.parse(e);else{if("object"!=typeof e)return console.error("JsonLdInjector: Invalid data type"),null;t=e}}catch(e){return console.error("JsonLdInjector: Failed to parse JSON-LD data",e),null}return(0,s.jsx)("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify(t)}})}])}]);

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