“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
11/15
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
“I Want To Hear Your Story” Keepsake Journal
11/15

“I Want To Hear Your Story” Keepsake Journal

$12.50
$0.00
Save $-12.50
4 sold
Book Edition
Please select a book edition
Quantity
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);
SKU:
Weight: 0kg
Barcode:

“Their memories, in their own words.”

StoryGifter is a guided keepsake book filled with thoughtful questions for your parent to answer about their life, from childhood stories to life lessons and family traditions. 

It’s the perfect gift to help them share their memories, their wisdom, and the moments that made them who they are. Once filled, it becomes a priceless family heirloom, written just for you.

A meaningful way to celebrate your parents’ life and keep their story alive forever.