Deprecated: Twig\Parser::addImportedSymbol(): Implicitly marking parameter $node as nullable is deprecated, the explicit nullable type must be used instead in /var/www/dev/touchstone-frontend/core/vendor/twig/twig/src/Parser.php on line 330

Deprecated: Twig\NodeVisitor\SafeAnalysisNodeVisitor::intersectSafe(): Implicitly marking parameter $a as nullable is deprecated, the explicit nullable type must be used instead in /var/www/dev/touchstone-frontend/core/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php on line 141

Deprecated: Twig\NodeVisitor\SafeAnalysisNodeVisitor::intersectSafe(): Implicitly marking parameter $b as nullable is deprecated, the explicit nullable type must be used instead in /var/www/dev/touchstone-frontend/core/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php on line 141

Deprecated: Twig\Node\Expression\ArrayExpression::addElement(): Implicitly marking parameter $key as nullable is deprecated, the explicit nullable type must be used instead in /var/www/dev/touchstone-frontend/core/vendor/twig/twig/src/Node/Expression/ArrayExpression.php on line 59

Deprecated: Twig\NodeTraverser::traverseForVisitor(): Implicitly marking parameter $node as nullable is deprecated, the explicit nullable type must be used instead in /var/www/dev/touchstone-frontend/core/vendor/twig/twig/src/NodeTraverser.php on line 63
Home | Touchstone Family Association

Touchstone Family Association

Strengthening Family & Building Community

Touchstone Family Association

Join Us at our Annual General Meeting - June 18, 2024

Learn more about Touchstone Family Association

Strengthening Family & Building Community

About Us

Touchstone is a non-profit community based social service agency. We have been providing services to Richmond and nearby areas since 1983. Our services have primarily focused on preserving and enhancing family relationships. Through qualified staff, we offer a wide variety of professional services to the community.

image

Touchstone Upcoming Events

Adam John

Adam John

Touchstone is a non-profit community based social service agency. We have been providing services to Richmond and nearby areas since 1983. Our services have primarily focused on preserving and enhancing family relationships.

Sarah Conor

Sarah Conor

Touchstone is a non-profit community based social service agency. We have been providing services to Richmond and nearby areas since 1983. Our services have primarily focused on preserving and enhancing family relationships.

Gbenga John

Gbenga John

Touchstone is a non-profit community based social service agency. We have been providing services to Richmond and nearby areas since 1983.. Our services have primarily focused on preserving and enhancing family relationships.

Thank you to our funders for their ongoing support for Touchstone Programs and Services

Carousel Title

Carousel Sub Text

Wed 1:00 - 2:15

Outreach in Richmond be used wisely.

Touchstone Family Association (TFA) has a long history of providing student counsellors with a placement that allows for the further development of skills and insight into “self” as a potential therapist.

More info
======= // date format function formatDate(date) { // Array of month names return date.toLocaleDateString("en-GB", { timeZone: "UTC", month: "short", day: "numeric", year: "numeric", }) } // date format class EventList { constructor(containerId, apiUrl) { this.container = document.getElementById(containerId); this.carouselContainer = document.getElementById('our-slider'); this.clonedCarouselContainer = document.getElementById('our-slider').cloneNode(true); this.apiUrl = apiUrl; this.templateCard = document.getElementById('templateCard'); this.templateCarousel = document.getElementById('carouselTemplate'); } fetchEvent() { //initialize local ones $('.our-slider').slick({ slidesToShow: 1, slidesToScroll: 1, autoplay: false, dots: true, arrows: false, responsive: true, autoplaySpeed: 8000, }); fetch(this.apiUrl).then(response => response.json()).then(data => { if (data.status == "success") { const eventSection = document.getElementById('event-section'); eventSection.classList.remove('d-none'); this.renderEvents(data.data); } else { const eventSection = document.getElementById('event-section'); console.error('Error: Request was not successful'); eventSection.classList.add('d-none'); } }).catch(error => console.error('Error fetching events:', error)); } renderEvents(events) { events.sort((a, b) => a.priority - b.priority); for (let i = 0; i < events.length; i++) { var event = events[i]; event.creator = null; event.actor = null; const url = `/events/event-details?eventId=${event.id}` const widget = this.templateCard.cloneNode(true); const carouselWidget = this.templateCarousel.cloneNode(true); widget.removeAttribute('id'); // Remove the id attribute from the cloned card widget.style.display = 'block'; widget.querySelector('.title a').textContent = event.subject; widget.querySelector('.title a').setAttribute('href', url); widget.querySelector('a.btn').setAttribute('href', url); widget.querySelector('a.btn').setAttribute('target', "_blank"); widget.querySelector('.title a').setAttribute('target', "_blank"); widget.querySelector('.blog-img a img').setAttribute('src', event.path); widget.querySelector('p.subtitle.text-white').textContent = event.description; var startDate = new Date(event.start_date); var endDate = new Date(event.end_date); // startDate.toDateString(); if (event.start_date != null && event.end_date != null) { widget.querySelector('div.user p.info.event-date').textContent = `${event.start_date == null ? "N/A" : formatDate(startDate) } - ${event.end_date == null ? "N/A" : formatDate(endDate) }`; } else { widget.querySelector('div.user p.info.event-date').textContent = "N/A"; widget.querySelector('div.event-date-wrapper').classList.remove('d-flex'); widget.querySelector('div.event-date-wrapper').style.display = 'none'; } if (event.start_time != null && event.end_time != null) { widget.querySelector('p.info.event-time').textContent = `${event.start_time } - ${event.end_time }`; } else { widget.querySelector('p.info.event-time').textContent = "N/A"; widget.querySelector('div.event-time-wrapper').classList.remove('d-flex'); widget.querySelector('div.event-time-wrapper').style.display = 'none'; } if (event.carousel_visibility == 1) { carouselWidget.removeAttribute('id'); carouselWidget.style.background = `url('${event.path}')`; carouselWidget.style.backgroundSize = 'cover'; carouselWidget.querySelector('h1.title').textContent = event.subject; carouselWidget.querySelector('h3.wow').textContent = event.description; carouselWidget.querySelector('a.btn-1').setAttribute('href', url); if (event.service_link) { carouselWidget.querySelector('a.btn-2').setAttribute('href', event.service_link); } else { carouselWidget.querySelector('a.btn-2').style.display = 'none'; } //this.carouselContainer.appendChild(carouselWidget); this.clonedCarouselContainer.appendChild(carouselWidget); } if (this.container.childElementCount < 30) { this.container.appendChild(widget); } }; this.carouselContainer.replaceWith(this.clonedCarouselContainer); if (this.container.childElementCount > 3) { $('.blog-section .view-wrapper').css('margin', '0 16px'); $("#eventContainer").slick({ dots: false, infinite: true, speed: 300, slidesToShow: 3, slidesToScroll: 1, arrows: false, autoplay: false, responsive: [ { breakpoint: 1024, settings: { slidesToShow: 3, slidesToScroll: 1, infinite: true, dots: true } }, { breakpoint: 1000, settings: { slidesToShow: 2, slidesToScroll: 1 } }, { breakpoint: 480, settings: { slidesToShow: 1, slidesToScroll: 1 } } ], autoplaySpeed: 8000, }); } $('.our-slider').slick({ slidesToShow: 1, slidesToScroll: 1, autoplay: true, dots: true, arrows: false, responsive: true, autoplaySpeed: 8000, }); } } // Create an instance of EventList and fetch events from the API const eventList = new EventList('eventContainer', api_base_url + '/api/list-approved-event'); eventList.fetchEvent(); >>>>>>> ed14dce61c889710a9ebf11f7cb717b95539f4b8