@@ -63,6 +63,8 @@ export default {
6363 // done loading.
6464 const page = buildPage (evt, vm .calStart , to .fullPath );
6565 vm .evt = evt;
66+ // override the server's shareable with the spa's current page.
67+ evt .shareable = window .location ;
6668 vm .$emit (" pageLoaded" , page);
6769 });
6870 }
@@ -92,6 +94,7 @@ export default {
9294 const { caldaily_id } = this .$route .params ;
9395 return {
9496 // placeholder empty event data
97+ // 'id' will become valid when loading is finished
9598 evt: {
9699 caldaily_id,
97100 },
@@ -111,15 +114,27 @@ export default {
111114 },
112115 loopText () {
113116 return this .evt .loopride && ' Ride is a loop' ;
114- }
115- },
116- methods: {
117- webLink (evt ) {
118- return helpers .getWebLink (evt .weburl );
119117 },
120- contactLink (evt ) {
121- return helpers .getContactLink (evt .contact );
118+ shareableLink () {
119+ return this .evt .shareable ;
120+ },
121+ exportLink () {
122+ // FIX: this matches the calendar but should be a single day.
123+ const { series_id } = this .$route .params ;
124+ return dataPool .getExportURL (series_id);
125+ },
126+ addToGoogleLink () {
127+ const { evt } = this ;
128+ return evt .id && helpers .getAddToGoogleLink (evt);
122129 },
130+ webLink () {
131+ const { evt } = this ;
132+ return evt .id && helpers .getWebLink (evt .weburl );
133+ },
134+ contactLink () {
135+ const { evt } = this ;
136+ return evt .id && helpers .getContactLink (evt .contact );
137+ }
123138 }
124139}
125140 </script >
@@ -143,8 +158,8 @@ export default {
143158 <LocationLink :evt =" evt" ></LocationLink >
144159 </Term >
145160 <Term id =" organizer" label = " Organizer" >
146- <span class =" c-organizer__name c-organizer__name--link" v-if =" contactLink(evt) " >
147- <ExternalLink :href =" contactLink(evt) " >{{evt.organizer}}</ExternalLink >
161+ <span class =" c-organizer__name c-organizer__name--link" v-if =" contactLink" >
162+ <ExternalLink :href =" contactLink" >{{evt.organizer}}</ExternalLink >
148163 </span >
149164 <span v-else class =" c-organizer__name c-organizer__name--text" >
150165 {{ evt.organizer }}
@@ -162,14 +177,19 @@ export default {
162177 <Term id =" locend" label = " End Location" pretext =" Ending at " :text =" evt.locend" />
163178 <Term id =" loop" label = " Loop" :text =" loopText" />
164179 <Term v-if =" evt.weburl" label =" More Info" >
165- <ExternalLink :href =" webLink(evt) " >
180+ <ExternalLink :href =" webLink" >
166181 {{evt.webname || evt.weburl}}
167182 </ExternalLink >
168183 </Term >
169184 </dl >
170185 <p class =" c-description" >
171186 {{evt.details}}
172187 </p >
188+ <ul class =" c-detail-links" v-if =" evt.id" >
189+ <li ><a :href =" shareableLink" class =" c-links__share" rel =" bookmark" >Sharable link</a ></li >
190+ <li ><a :href =" exportLink" class =" c-links__export" >Export to calendar</a ></li >
191+ <li ><a :href =" addToGoogleLink" class =" c-links__google" target =" _blank" >Add to Google Calendar</a ></li >
192+ </ul >
173193 </article >
174194</template >
175195
@@ -205,4 +225,26 @@ export default {
205225 margin-top : 1em ;
206226 padding-top : 1em ;
207227}
228+ .c-detail-links {
229+ display : flex ;
230+ justify-content : center ;
231+ flex-direction : column ;
232+ flex-flow : row wrap ;
233+ list-style-type : none ;
234+ gap : 5px ;
235+ /* on safari empty tags collapse, on chrome they take up space.
236+ this helps keep things consistent */
237+ margin : 1em 0 ;
238+ padding-inline-start : 0px ;
239+
240+ /* copied from main.css eventlink */
241+ li {
242+ border-right : 1px solid var (--page-text );
243+ padding-right : 5px ;
244+ &:last-child {
245+ border-right: none ;
246+ }
247+ }
248+ }
249+
208250 </style >
0 commit comments