[{"data":1,"prerenderedAt":1855},["ShallowReactive",2],{"header:help":3,"footer:default":67,"story:navigation\u002Fsearch:help":250,"story:help\u002Fcategories":288,"story:help\u002Farticles\u002Fjavascript-naming-and-file-structure-reference":314,"no-guide:javascript-naming-and-file-structure-reference":59,"article:\u002Fhelp\u002Farticles\u002Fjavascript-naming-and-file-structure-reference":1618,"story:contact":1639,"help:tree:7f2f44ba-f45c-4fd3-93e8-6c90bffdd952":1828,"_apollo:default":1854},{"name":4,"created_at":5,"published_at":6,"updated_at":7,"id":8,"uuid":9,"content":10,"slug":57,"full_slug":58,"sort_by_date":59,"position":60,"tag_list":61,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":63,"first_published_at":64,"release_id":59,"lang":65,"path":59,"alternates":66,"default_full_slug":59,"translated_slugs":59},"Help Center Header","2024-08-09T18:06:34.939Z","2024-10-21T21:58:39.217Z","2024-10-21T21:58:39.232Z",10082752,"3e9b88f7-c163-4657-a2f2-62532d600fad",{"_uid":11,"link":12,"badge":16,"items":17,"title":13,"buttons":50,"new_tab":24,"submenu":51,"alignment":13,"component":52,"badge_link":53,"top_menu_items":56},"e5645a1a-f991-40e8-8d67-e40ebc082b5a",{"id":13,"url":13,"linktype":14,"fieldtype":15,"cached_url":13},"","story","multilink","Help Center",[18,27,34,39,44],{"_uid":19,"link":20,"title":23,"new_tab":24,"submenu":25,"component":26},"5cbe2861-1f49-4166-97da-a4dddd8105e3",{"id":21,"url":13,"linktype":14,"fieldtype":15,"cached_url":22},"4c0a2d99-ec30-4579-8ef1-6bf5564d4839","help\u002Fcategories\u002F","Articles",false,[],"header___item",{"_uid":28,"link":29,"title":32,"new_tab":33,"component":26},"1c8edeb5-b9e9-4cb8-b1c6-c1f292f7d7cd",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},"https:\u002F\u002Fwiki.foxycart.com\u002F","url","Documentation",true,{"_uid":35,"link":36,"title":38,"new_tab":33,"component":26},"8d7df70e-f087-4da0-b616-6f0e9a5af35c",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},"https:\u002F\u002Fapi.foxycart.com\u002F","API Documentation",{"_uid":40,"link":41,"title":43,"new_tab":33,"component":26},"f76e7944-23d5-4652-87e4-cdae79272762",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},"https:\u002F\u002Fstatus.foxy.io\u002F","System Status",{"_uid":45,"link":46,"title":49,"new_tab":24,"component":26},"0de16771-4c84-466c-a1da-d8568113c71f",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"01e4e370-f9b9-45af-8fa9-f15540699b0d","contact","Contact Us",[],[],"header",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},"4a679eb7-662d-4ea4-a976-5a2acbf0b663","help\u002F",[],"help-header","navigation\u002Fhelp-header",null,20,[],10082747,"71b81c2e-5e09-48a1-a397-a3c72fcd344a","2022-09-21T14:50:25.655Z","default",[],{"name":68,"created_at":69,"published_at":70,"updated_at":71,"id":72,"uuid":73,"content":74,"slug":243,"full_slug":244,"sort_by_date":59,"position":245,"tag_list":246,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":247,"first_published_at":248,"release_id":59,"lang":65,"path":59,"alternates":249,"default_full_slug":59,"translated_slugs":59},"Default Footer","2024-08-09T18:06:59.024Z","2025-09-04T06:24:46.223Z","2025-09-04T06:24:46.241Z",10082753,"e59e67ac-248a-482f-84a1-53d4f318186a",{"_uid":75,"about":76,"logos":77,"socials":82,"sections":108,"component":225,"cta_title":226,"bottom_links":227,"cta_subtitle":241,"cta_button_link":242,"cta_button_text":183},"830983f5-c4c4-43c8-b150-86a5e3fa6dc8","Foxy’s hosted cart & payment page allow you to sell anything, using your existing website or platform.",[78],{"id":79,"alt":13,"name":13,"focus":13,"title":13,"filename":80,"copyright":13,"fieldtype":81},14760,"https:\u002F\u002Fa-us.storyblok.com\u002Ff\u002F1001040\u002Fx\u002F3b030847ec\u002Fb-corp.svg","asset",[83,90,96,102],{"_uid":84,"icon":85,"link":86,"name":88,"component":89},"faf0a618-ea94-42ea-9182-03be18c43216","fa-facebook",{"id":13,"url":87,"linktype":31,"fieldtype":15,"cached_url":87},"https:\u002F\u002Fwww.facebook.com\u002Ffoxycart","Facebook","footer___social",{"_uid":91,"icon":92,"link":93,"name":95,"component":89},"14309c18-7e79-423e-b375-34555bac0811","fa-instagram",{"id":13,"url":94,"linktype":31,"fieldtype":15,"cached_url":94},"https:\u002F\u002Fwww.instagram.com\u002Ffoxy_io","Instagram",{"_uid":97,"icon":98,"link":99,"name":101,"component":89},"8f7fe7cf-0dd3-4596-8334-226ea466716a","fa-linkedin",{"id":13,"url":100,"linktype":31,"fieldtype":15,"cached_url":100},"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Ffoxycart.com","LinkedIn",{"_uid":103,"icon":104,"link":105,"name":107,"component":89},"90a675b4-dd97-40b5-be09-00a87223d4c5","fa-youtube",{"id":13,"url":106,"linktype":31,"fieldtype":15,"cached_url":106},"https:\u002F\u002Fwww.youtube.com\u002Fuser\u002Ffoxycart","Youtube",[109,139,184,206],{"_uid":110,"name":111,"items":112,"component":138},"82849945-282f-488c-b18d-a8d2252f514a","Company",[113,120,126,132],{"_uid":114,"link":115,"title":118,"new_tab":24,"component":119},"1f699ab1-938b-4d9d-9825-aabcbe6f57fe",{"id":116,"url":13,"linktype":14,"fieldtype":15,"cached_url":117},"63634293-a749-4226-9439-9f38ee6dcda0","about-us","About Us","footer___menu_items",{"_uid":121,"link":122,"title":125,"new_tab":24,"component":119},"b26b00f1-a0e7-4be2-8ab3-428b8cc841f8",{"id":123,"url":13,"linktype":14,"fieldtype":15,"cached_url":124},"26cb7c55-faed-4a77-a291-1552d4111b3e","how-foxy-works","How Foxy Works",{"_uid":127,"link":128,"title":131,"new_tab":24,"component":119},"b40c68a0-1ceb-4226-9515-6176534f61fe",{"id":129,"url":13,"linktype":14,"fieldtype":15,"cached_url":130},"dc6657d7-7f4f-4c0d-b781-e971b038ee26","for-good","Foxy For Good",{"_uid":133,"link":134,"title":137,"new_tab":24,"component":119},"3ad0c134-bef9-4fff-b891-e09f16109036",{"id":135,"url":13,"linktype":14,"fieldtype":15,"cached_url":136},"23cae210-baf4-4588-9862-d09f4f52ccd2","brand-assets","Brand Assets","footer___section",{"_uid":140,"name":141,"items":142,"component":138},"a6805fa8-ac60-47f1-b8f0-f27aded0afbe","Product",[143,149,155,161,167,173,179],{"_uid":144,"link":145,"title":148,"new_tab":24,"component":119},"b39c8a4e-2383-486f-b76a-11fbb15d8134",{"id":146,"url":13,"linktype":14,"fieldtype":15,"cached_url":147},"bb04690f-fe98-4ce6-80be-05b950f2364f","features\u002F","Features",{"_uid":150,"link":151,"title":154,"new_tab":24,"component":119},"64f8a41f-c181-433d-bc0a-fc94e71ecbf6",{"id":152,"url":13,"linktype":14,"fieldtype":15,"cached_url":153},"c450c58d-761d-48c0-a9af-0b064611689b","pricing","Pricing",{"_uid":156,"link":157,"title":160,"new_tab":24,"component":119},"6e0b287f-fd8c-4146-9e0e-0ab0b5c9ce3c",{"id":158,"url":13,"linktype":14,"fieldtype":15,"cached_url":159},"fab20ad9-e76a-4947-b709-3a6fdfa88028","blog\u002Fcategories\u002Fproduct-updates","Product Updates",{"_uid":162,"link":163,"title":166,"new_tab":24,"component":119},"47e5a074-a6b5-4f1c-8c2f-89a2ae9f83eb",{"id":164,"url":13,"linktype":14,"fieldtype":15,"cached_url":165},"d2c83612-d611-47f3-a3b4-ca7fe08540b8","changelogs\u002F","Changelogs",{"_uid":168,"link":169,"title":172,"new_tab":24,"component":119},"b5c08774-542f-4ffd-b357-c94d674488b9",{"id":170,"url":13,"linktype":14,"fieldtype":15,"cached_url":171},"08876121-0df3-4ed9-aa11-902b3e41cd02","whats-next","What's Next",{"_uid":174,"link":175,"title":178,"new_tab":24,"component":119},"9c2704ed-6d9f-43e1-9e67-c8d91c083288",{"id":176,"url":13,"linktype":14,"fieldtype":15,"cached_url":177},"056a7857-b18f-4025-8f97-91a38fc19bc8","compare\u002F","Compare",{"_uid":180,"link":181,"title":183,"new_tab":24,"component":119},"5f2db35b-674b-406a-8fa7-d246633af9fe",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"https:\u002F\u002Fadmin.foxy.io\u002Fsign-up","Try Foxy Free",{"_uid":185,"name":186,"items":187,"component":138},"63fa1f29-4252-4640-9922-fe310e69e54a","Security",[188,194,200],{"_uid":189,"link":190,"title":193,"new_tab":24,"component":119},"1158ddb6-9eb0-466f-8eb6-7ca2ae66c8b8",{"id":191,"url":13,"linktype":14,"fieldtype":15,"cached_url":192},"1f58fb2c-8681-4742-b6e8-09999beae9f6","security-contact","Security Contact",{"_uid":195,"link":196,"title":199,"new_tab":24,"component":119},"9a79c54a-6022-4dfd-854b-766f5e4703ba",{"id":197,"url":13,"linktype":14,"fieldtype":15,"cached_url":198},"55cbfcc3-425a-4261-8037-54e919851d2d","pci","PCI Compliance",{"_uid":201,"link":202,"title":205,"new_tab":24,"component":119},"0b85f5b6-9534-4071-b323-b39d053dd4d7",{"id":203,"url":13,"linktype":14,"fieldtype":15,"cached_url":204},"c3ac0fe3-83e2-4879-afbd-d4c83e1590df","help\u002Farticles\u002Four-official-domains-public-code","Domains & Codebases",{"_uid":207,"name":208,"items":209,"component":138},"998ded67-d107-49f4-8154-ca6be51671ec","Support",[210,213,216,219,222],{"_uid":211,"link":212,"title":16,"new_tab":24,"component":119},"594ffd35-3049-4004-bb08-0db568ebd819",{"id":54,"url":13,"linktype":14,"fieldtype":15,"cached_url":55},{"_uid":214,"link":215,"title":32,"new_tab":33,"component":119},"0a1a55ab-a985-4f9d-8b42-26da714d0c1c",{"id":13,"url":30,"linktype":31,"fieldtype":15,"cached_url":30},{"_uid":217,"link":218,"title":38,"new_tab":33,"component":119},"61e0b7c8-aadf-419b-a339-b3ccabc65bf4",{"id":13,"url":37,"linktype":31,"fieldtype":15,"cached_url":37},{"_uid":220,"link":221,"title":43,"new_tab":33,"component":119},"fd67a89e-1c54-4d31-94b5-64be999062d6",{"id":13,"url":42,"linktype":31,"fieldtype":15,"cached_url":42},{"_uid":223,"link":224,"title":49,"new_tab":24,"component":119},"231a6f71-e996-4ad4-b033-d4d5542f34f0",{"id":47,"url":13,"linktype":14,"fieldtype":15,"cached_url":48},"footer","Get started with our *unlimited free trial*.",[228,235],{"_uid":229,"link":230,"text":233,"component":234},"f0b77210-2632-45a2-8436-e57cad84d01a",{"id":231,"url":13,"linktype":14,"fieldtype":15,"cached_url":232},"60ba16a2-c1f4-485f-b978-8d2eeeafbf5a","terms-of-service","Terms of Service","footer___bottom_links",{"_uid":236,"link":237,"text":240,"component":234},"4bd497b0-993f-4b4d-a5b7-8a49c7c8fec9",{"id":238,"url":13,"linktype":14,"fieldtype":15,"cached_url":239},"332302b9-1d18-4016-b9c8-9b33c72d782b","privacy-policy","Privacy Policy","No credit card required.",{"id":13,"url":182,"linktype":31,"fieldtype":15,"cached_url":182},"default-footer","navigation\u002Fdefault-footer",50,[],"11006268-07f9-41e9-96f3-c51fb723399d","2022-09-21T20:39:02.357Z",[],{"name":251,"created_at":252,"published_at":253,"updated_at":254,"id":255,"uuid":256,"content":257,"slug":279,"full_slug":282,"sort_by_date":59,"position":283,"tag_list":284,"is_startpage":24,"parent_id":62,"meta_data":59,"group_id":285,"first_published_at":286,"release_id":59,"lang":65,"path":59,"alternates":287,"default_full_slug":59,"translated_slugs":59},"Search","2024-10-21T22:08:54.973Z","2025-05-26T09:17:25.790Z","2025-05-26T09:17:25.804Z",13592003,"14cbc359-9ac1-4a7a-a8de-ad4ac8ef26d4",{"_uid":258,"name":251,"indices":259,"summary":13,"component":279,"primary_image":280},"5e4a56e8-76f1-4790-b3a7-70f1be97d042",[260,265,269,274],{"key":261,"_uid":262,"icon":13,"name":263,"component":264},"all","c12a3210-7323-4273-8217-5215e52efe84","All","index",{"key":266,"_uid":267,"icon":268,"name":23,"component":264},"help_center_article","5acff080-95e4-44d3-8dcf-1b19720af382","fa-file-alt",{"key":270,"_uid":271,"icon":272,"name":273,"component":264},"help_center_guide","b8fbc206-c083-471e-a1f0-0ebeb90a669d","fa-book","Guides",{"key":275,"_uid":276,"icon":277,"name":278,"component":264},"blog_post","23419e83-2e56-4c4c-8a05-9fd1b3c9a9bd","fa-file-image","Blog Posts","search",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":281},{},"navigation\u002Fsearch",60,[],"11e1fd31-95cd-4fc9-b736-8b8910663e6c","2024-10-21T23:17:05.904Z",[],{"name":23,"created_at":289,"published_at":290,"updated_at":291,"id":292,"uuid":21,"content":293,"slug":307,"full_slug":22,"sort_by_date":59,"position":308,"tag_list":309,"is_startpage":33,"parent_id":310,"meta_data":59,"group_id":311,"first_published_at":312,"release_id":59,"lang":65,"path":59,"alternates":313,"default_full_slug":59,"translated_slugs":59},"2022-09-19T14:42:29.685Z","2024-07-30T18:17:22.506Z","2024-07-30T18:17:22.525Z",2660,{"_uid":294,"icon":13,"name":23,"guides":295,"pinned":24,"summary":296,"category":13,"component":297,"blog_posts":298,"content_hub":24,"icon_custom":299,"case_studies":300,"faq_sections":301,"help_articles":302,"featured_guides":303,"mailbox_category":13,"featured_articles":304,"featured_blog_posts":305,"featured_case_studies":306},"d6dae89a-907a-4bf7-82de-fe2ba875ee6e",[],"Get your questions answered with our browsable knowledge base.","help_center_category",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"filename":13,"copyright":59,"fieldtype":81},[],[],[],[],[],[],[],"categories",530,[],2658,"19ebcdd2-027f-47f5-9a5b-a8992c959578","2022-09-19T16:24:39.219Z",[],{"name":315,"created_at":316,"published_at":317,"updated_at":318,"id":319,"uuid":320,"content":321,"slug":1611,"full_slug":1612,"sort_by_date":59,"position":1613,"tag_list":1614,"is_startpage":24,"parent_id":1615,"meta_data":59,"group_id":1616,"first_published_at":317,"release_id":59,"lang":65,"path":59,"alternates":1617,"default_full_slug":59,"translated_slugs":59},"JavaScript naming and file structure reference","2026-07-20T21:29:10.496Z","2026-07-20T21:42:37.675Z","2026-07-20T21:42:37.696Z",200267163689719,"7f2f44ba-f45c-4fd3-93e8-6c90bffdd952",{"_uid":322,"body":323,"name":315,"image":1606,"pinned":24,"summary":1608,"category":1609,"component":266,"related_articles":1610},"e1487b8f-c405-4b01-beba-c3cbeaae09ee",{"type":324,"content":325},"doc",[326,334,340,596,601,745,750,815,820,825,835,1364,1370,1449,1454,1463,1520,1549,1560,1580],{"type":327,"attrs":328,"content":330},"heading",{"level":329,"textAlign":59},2,[331],{"text":332,"type":333},"JavaScript naming conventions","text",{"type":335,"attrs":336,"content":337},"paragraph",{"textAlign":59},[338],{"text":339,"type":333},"Similar to Google’s conventions, but using snake_case instead of camelCase for variable names.",{"type":341,"content":342},"table",[343,372,402,430,458,485,512,540,568],{"type":344,"content":345},"tableRow",[346,356,364],{"type":347,"attrs":348,"content":350},"tableHeader",{"colspan":349,"rowspan":349,"colwidth":59},1,[351],{"type":335,"attrs":352,"content":353},{"textAlign":59},[354],{"text":355,"type":333},"Type",{"type":347,"attrs":357,"content":358},{"colspan":349,"rowspan":349,"colwidth":59},[359],{"type":335,"attrs":360,"content":361},{"textAlign":59},[362],{"text":363,"type":333},"Convention",{"type":347,"attrs":365,"content":366},{"colspan":349,"rowspan":349,"colwidth":59},[367],{"type":335,"attrs":368,"content":369},{"textAlign":59},[370],{"text":371,"type":333},"Example",{"type":344,"content":373},[374,383,391],{"type":375,"attrs":376,"content":377},"tableCell",{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[378],{"type":335,"attrs":379,"content":380},{"textAlign":59},[381],{"text":382,"type":333},"Function names",{"type":375,"attrs":384,"content":385},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[386],{"type":335,"attrs":387,"content":388},{"textAlign":59},[389],{"text":390,"type":333},"camelCase",{"type":375,"attrs":392,"content":393},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[394],{"type":335,"attrs":395,"content":396},{"textAlign":59},[397],{"text":398,"type":333,"marks":399},"functionNamesLikeThis",[400],{"type":401},"code",{"type":344,"content":403},[404,412,420],{"type":375,"attrs":405,"content":406},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[407],{"type":335,"attrs":408,"content":409},{"textAlign":59},[410],{"text":411,"type":333},"Variable names",{"type":375,"attrs":413,"content":414},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[415],{"type":335,"attrs":416,"content":417},{"textAlign":59},[418],{"text":419,"type":333},"snake_case",{"type":375,"attrs":421,"content":422},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[423],{"type":335,"attrs":424,"content":425},{"textAlign":59},[426],{"text":427,"type":333,"marks":428},"variable_names_like_this",[429],{"type":401},{"type":344,"content":431},[432,440,448],{"type":375,"attrs":433,"content":434},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[435],{"type":335,"attrs":436,"content":437},{"textAlign":59},[438],{"text":439,"type":333},"Class names",{"type":375,"attrs":441,"content":442},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[443],{"type":335,"attrs":444,"content":445},{"textAlign":59},[446],{"text":447,"type":333},"PascalCase",{"type":375,"attrs":449,"content":450},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[451],{"type":335,"attrs":452,"content":453},{"textAlign":59},[454],{"text":455,"type":333,"marks":456},"ClassNamesLikeThis",[457],{"type":401},{"type":344,"content":459},[460,468,475],{"type":375,"attrs":461,"content":462},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[463],{"type":335,"attrs":464,"content":465},{"textAlign":59},[466],{"text":467,"type":333},"Enum names",{"type":375,"attrs":469,"content":470},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[471],{"type":335,"attrs":472,"content":473},{"textAlign":59},[474],{"text":447,"type":333},{"type":375,"attrs":476,"content":477},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[478],{"type":335,"attrs":479,"content":480},{"textAlign":59},[481],{"text":482,"type":333,"marks":483},"EnumNamesLikeThis",[484],{"type":401},{"type":344,"content":486},[487,495,502],{"type":375,"attrs":488,"content":489},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[490],{"type":335,"attrs":491,"content":492},{"textAlign":59},[493],{"text":494,"type":333},"Method names",{"type":375,"attrs":496,"content":497},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[498],{"type":335,"attrs":499,"content":500},{"textAlign":59},[501],{"text":390,"type":333},{"type":375,"attrs":503,"content":504},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[505],{"type":335,"attrs":506,"content":507},{"textAlign":59},[508],{"text":509,"type":333,"marks":510},"methodNamesLikeThis",[511],{"type":401},{"type":344,"content":513},[514,522,530],{"type":375,"attrs":515,"content":516},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[517],{"type":335,"attrs":518,"content":519},{"textAlign":59},[520],{"text":521,"type":333},"Constant values",{"type":375,"attrs":523,"content":524},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[525],{"type":335,"attrs":526,"content":527},{"textAlign":59},[528],{"text":529,"type":333},"UPPER_SNAKE_CASE",{"type":375,"attrs":531,"content":532},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[533],{"type":335,"attrs":534,"content":535},{"textAlign":59},[536],{"text":537,"type":333,"marks":538},"CONSTANT_VALUES_LIKE_THIS",[539],{"type":401},{"type":344,"content":541},[542,550,558],{"type":375,"attrs":543,"content":544},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[545],{"type":335,"attrs":546,"content":547},{"textAlign":59},[548],{"text":549,"type":333},"Namespaced names",{"type":375,"attrs":551,"content":552},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[553],{"type":335,"attrs":554,"content":555},{"textAlign":59},[556],{"text":557,"type":333},"dot notation, camelCase",{"type":375,"attrs":559,"content":560},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[561],{"type":335,"attrs":562,"content":563},{"textAlign":59},[564],{"text":565,"type":333,"marks":566},"foo.namespaceNamesLikeThis.bar",[567],{"type":401},{"type":344,"content":569},[570,578,586],{"type":375,"attrs":571,"content":572},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[573],{"type":335,"attrs":574,"content":575},{"textAlign":59},[576],{"text":577,"type":333},"File names",{"type":375,"attrs":579,"content":580},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[581],{"type":335,"attrs":582,"content":583},{"textAlign":59},[584],{"text":585,"type":333},"lowercase, no separator",{"type":375,"attrs":587,"content":588},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[589],{"type":335,"attrs":590,"content":591},{"textAlign":59},[592],{"text":593,"type":333,"marks":594},"filenameslikethis.js",[595],{"type":401},{"type":327,"attrs":597,"content":598},{"level":329,"textAlign":59},[599],{"text":600,"type":333},"Event naming conventions",{"type":602,"content":603},"bullet_list",[604,624,631,727],{"type":605,"content":606},"list_item",[607],{"type":335,"attrs":608,"content":609},{"textAlign":59},[610,612,616,618,622],{"text":611,"type":333},"Present tense, like standard JavaScript events — ",{"text":613,"type":333,"marks":614},"cart-coupon-add",[615],{"type":401},{"text":617,"type":333},", not ",{"text":619,"type":333,"marks":620},"cart-coupon-added",[621],{"type":401},{"text":623,"type":333},".",{"type":605,"content":625},[626],{"type":335,"attrs":627,"content":628},{"textAlign":59},[629],{"text":630,"type":333},"Hyphens separate the parts of the event name.",{"type":605,"content":632},[633],{"type":335,"attrs":634,"content":635},{"textAlign":59},[636,638,643,645,649,651,655,656,660,662,666,667,671,672,676,677,681,683,687,689,693,695,699,701,705,706,710,711,715,716,720,721,725],{"text":637,"type":333},"Names follow this order: ",{"text":639,"type":333,"marks":640},"section",[641],{"type":642},"bold",{"text":644,"type":333}," (",{"text":646,"type":333,"marks":647},"cart",[648],{"type":401},{"text":650,"type":333},", ",{"text":652,"type":333,"marks":653},"checkout",[654],{"type":401},{"text":650,"type":333},{"text":657,"type":333,"marks":658},"receipt",[659],{"type":401},{"text":661,"type":333},"), ",{"text":663,"type":333,"marks":664},"noun",[665],{"type":642},{"text":644,"type":333},{"text":668,"type":333,"marks":669},"coupon",[670],{"type":401},{"text":650,"type":333},{"text":673,"type":333,"marks":674},"email",[675],{"type":401},{"text":650,"type":333},{"text":678,"type":333,"marks":679},"address",[680],{"type":401},{"text":682,"type":333},", etc.), ",{"text":684,"type":333,"marks":685},"modifier\u002Fattribute",[686],{"type":642},{"text":688,"type":333}," if applicable (e.g. ",{"text":690,"type":333,"marks":691},"cart-item-quantity",[692],{"type":401},{"text":694,"type":333},", where ",{"text":696,"type":333,"marks":697},"quantity",[698],{"type":401},{"text":700,"type":333}," is the attribute of the item), then ",{"text":702,"type":333,"marks":703},"verb",[704],{"type":642},{"text":644,"type":333},{"text":707,"type":333,"marks":708},"add",[709],{"type":401},{"text":650,"type":333},{"text":712,"type":333,"marks":713},"remove",[714],{"type":401},{"text":650,"type":333},{"text":717,"type":333,"marks":718},"update",[719],{"type":401},{"text":650,"type":333},{"text":722,"type":333,"marks":723},"change",[724],{"type":401},{"text":726,"type":333},", etc.).",{"type":605,"content":728},[729],{"type":335,"attrs":730,"content":731},{"textAlign":59},[732,734,738,740,744],{"text":733,"type":333},"The “after” event gets the ",{"text":735,"type":333,"marks":736},".done",[737],{"type":401},{"text":739,"type":333}," suffix: ",{"text":741,"type":333,"marks":742},"client.on(\"cart-item-remove.done\", handler)",[743],{"type":401},{"text":623,"type":333},{"type":327,"attrs":746,"content":747},{"level":329,"textAlign":59},[748],{"text":749,"type":333},"What counts as an event",{"type":602,"content":751},[752,759,801,808],{"type":605,"content":753},[754],{"type":335,"attrs":755,"content":756},{"textAlign":59},[757],{"text":758,"type":333},"Anything in an init method.",{"type":605,"content":760},[761],{"type":335,"attrs":762,"content":763},{"textAlign":59},[764,766,769,770,774,775,779,781,785,786,790,791,795,796,800],{"text":765,"type":333},"Anything on ",{"text":722,"type":333,"marks":767},[768],{"type":401},{"text":650,"type":333},{"text":771,"type":333,"marks":772},"click",[773],{"type":401},{"text":650,"type":333},{"text":776,"type":333,"marks":777},"keyup",[778],{"type":401},{"text":780,"type":333},"\u002F",{"text":782,"type":333,"marks":783},"keydown",[784],{"type":401},{"text":650,"type":333},{"text":787,"type":333,"marks":788},"blur",[789],{"type":401},{"text":650,"type":333},{"text":792,"type":333,"marks":793},"focusin",[794],{"type":401},{"text":780,"type":333},{"text":797,"type":333,"marks":798},"focusout",[799],{"type":401},{"text":623,"type":333},{"type":605,"content":802},[803],{"type":335,"attrs":804,"content":805},{"textAlign":59},[806],{"text":807,"type":333},"Rendering.",{"type":605,"content":809},[810],{"type":335,"attrs":811,"content":812},{"textAlign":59},[813],{"text":814,"type":333},"Interactions with API JSON.",{"type":335,"attrs":816,"content":817},{"textAlign":59},[818],{"text":819,"type":333},"Selectors are not events — they return a string, not a triggerable action.",{"type":327,"attrs":821,"content":822},{"level":329,"textAlign":59},[823],{"text":824,"type":333},"File structure",{"type":335,"attrs":826,"content":827},{"textAlign":59},[828,830,834],{"text":829,"type":333},"Internal source files used to compile Foxy’s external JavaScript. Source files are available at ",{"text":831,"type":333,"marks":832},"admin.foxycart.com\u002Fstatic\u002Fv\u002F2.0.0\u002Fjs\u002Fsrc\u002F",[833],{"type":401},{"text":623,"type":333},{"type":341,"content":836},[837,871,930,997,1032,1075,1109,1143,1176,1210,1249,1283,1317],{"type":344,"content":838},[839,847,855,863],{"type":347,"attrs":840,"content":841},{"colspan":349,"rowspan":349,"colwidth":59},[842],{"type":335,"attrs":843,"content":844},{"textAlign":59},[845],{"text":846,"type":333},"File",{"type":347,"attrs":848,"content":849},{"colspan":349,"rowspan":349,"colwidth":59},[850],{"type":335,"attrs":851,"content":852},{"textAlign":59},[853],{"text":854,"type":333},"Purpose",{"type":347,"attrs":856,"content":857},{"colspan":349,"rowspan":349,"colwidth":59},[858],{"type":335,"attrs":859,"content":860},{"textAlign":59},[861],{"text":862,"type":333},"Internal methods",{"type":347,"attrs":864,"content":865},{"colspan":349,"rowspan":349,"colwidth":59},[866],{"type":335,"attrs":867,"content":868},{"textAlign":59},[869],{"text":870,"type":333},"Events",{"type":344,"content":872},[873,883,897,922],{"type":375,"attrs":874,"content":875},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[876],{"type":335,"attrs":877,"content":878},{"textAlign":59},[879],{"text":880,"type":333,"marks":881},"fc.api.js",[882],{"type":401},{"type":375,"attrs":884,"content":885},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[886],{"type":335,"attrs":887,"content":888},{"textAlign":59},[889,891,895],{"text":890,"type":333},"Methods that make requests to the ",{"text":892,"type":333,"marks":893},"api_json.php",[894],{"type":401},{"text":896,"type":333}," endpoint.",{"type":375,"attrs":898,"content":899},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[900],{"type":335,"attrs":901,"content":902},{"textAlign":59},[903,907,908,912,913,917,918],{"text":904,"type":333,"marks":905},"saveContactInfo",[906],{"type":401},{"text":650,"type":333},{"text":909,"type":333,"marks":910},"saveShippingServiceInfo",[911],{"type":401},{"text":650,"type":333},{"text":914,"type":333,"marks":915},"getShippingOptions",[916],{"type":401},{"text":650,"type":333},{"text":919,"type":333,"marks":920},"getTaxes",[921],{"type":401},{"type":375,"attrs":923,"content":924},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[925],{"type":335,"attrs":926,"content":927},{"textAlign":59},[928],{"text":929,"type":333},"none",{"type":344,"content":931},[932,942,955,963],{"type":375,"attrs":933,"content":934},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[935],{"type":335,"attrs":936,"content":937},{"textAlign":59},[938],{"text":939,"type":333,"marks":940},"fc.cart.js",[941],{"type":401},{"type":375,"attrs":943,"content":944},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[945],{"type":335,"attrs":946,"content":947},{"textAlign":59},[948,949,953],{"text":890,"type":333},{"text":950,"type":333,"marks":951},"\u002Fcart",[952],{"type":401},{"text":954,"type":333}," endpoint and update the cart template via Twig.js; cart DOM initialization.",{"type":375,"attrs":956,"content":957},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[958],{"type":335,"attrs":959,"content":960},{"textAlign":59},[961],{"text":962,"type":333},"—",{"type":375,"attrs":964,"content":965},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[966],{"type":335,"attrs":967,"content":968},{"textAlign":59},[969,973,974,978,979,982,983,987,988,992,993],{"text":970,"type":333,"marks":971},"cart-item-quantity-update",[972],{"type":401},{"text":650,"type":333},{"text":975,"type":333,"marks":976},"cart-item-remove",[977],{"type":401},{"text":650,"type":333},{"text":613,"type":333,"marks":980},[981],{"type":401},{"text":650,"type":333},{"text":984,"type":333,"marks":985},"cart-coupon-remove",[986],{"type":401},{"text":650,"type":333},{"text":989,"type":333,"marks":990},"customer-shipping-options-update",[991],{"type":401},{"text":650,"type":333},{"text":994,"type":333,"marks":995},"customer-address-update",[996],{"type":401},{"type":344,"content":998},[999,1009,1017,1024],{"type":375,"attrs":1000,"content":1001},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1002],{"type":335,"attrs":1003,"content":1004},{"textAlign":59},[1005],{"text":1006,"type":333,"marks":1007},"fc.checkout.js",[1008],{"type":401},{"type":375,"attrs":1010,"content":1011},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1012],{"type":335,"attrs":1013,"content":1014},{"textAlign":59},[1015],{"text":1016,"type":333},"Checkout page initialization and methods.",{"type":375,"attrs":1018,"content":1019},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1020],{"type":335,"attrs":1021,"content":1022},{"textAlign":59},[1023],{"text":962,"type":333},{"type":375,"attrs":1025,"content":1026},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1027],{"type":335,"attrs":1028,"content":1029},{"textAlign":59},[1030],{"text":1031,"type":333},"not yet documented",{"type":344,"content":1033},[1034,1044,1058,1065],{"type":375,"attrs":1035,"content":1036},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1037],{"type":335,"attrs":1038,"content":1039},{"textAlign":59},[1040],{"text":1041,"type":333,"marks":1042},"fc.client.js",[1043],{"type":401},{"type":375,"attrs":1045,"content":1046},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1047],{"type":335,"attrs":1048,"content":1049},{"textAlign":59},[1050,1052,1056],{"text":1051,"type":333},"Maintains and handles the ",{"text":1053,"type":333,"marks":1054},"fcsid",[1055],{"type":401},{"text":1057,"type":333}," session value; prepares links and forms to submit to the cart.",{"type":375,"attrs":1059,"content":1060},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1061],{"type":335,"attrs":1062,"content":1063},{"textAlign":59},[1064],{"text":962,"type":333},{"type":375,"attrs":1066,"content":1067},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1068],{"type":335,"attrs":1069,"content":1070},{"textAlign":59},[1071],{"text":1072,"type":333,"marks":1073},"cart-submit",[1074],{"type":401},{"type":344,"content":1076},[1077,1087,1095,1102],{"type":375,"attrs":1078,"content":1079},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1080],{"type":335,"attrs":1081,"content":1082},{"textAlign":59},[1083],{"text":1084,"type":333,"marks":1085},"fc.event.js",[1086],{"type":401},{"type":375,"attrs":1088,"content":1089},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1090],{"type":335,"attrs":1091,"content":1092},{"textAlign":59},[1093],{"text":1094,"type":333},"Defines the event model.",{"type":375,"attrs":1096,"content":1097},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1098],{"type":335,"attrs":1099,"content":1100},{"textAlign":59},[1101],{"text":962,"type":333},{"type":375,"attrs":1103,"content":1104},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1105],{"type":335,"attrs":1106,"content":1107},{"textAlign":59},[1108],{"text":962,"type":333},{"type":344,"content":1110},[1111,1121,1129,1136],{"type":375,"attrs":1112,"content":1113},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1114],{"type":335,"attrs":1115,"content":1116},{"textAlign":59},[1117],{"text":1118,"type":333,"marks":1119},"fc.locations.js",[1120],{"type":401},{"type":375,"attrs":1122,"content":1123},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1124],{"type":335,"attrs":1125,"content":1126},{"textAlign":59},[1127],{"text":1128,"type":333},"Shipping and billing country\u002Fstate\u002Fprovince\u002Fregion functionality.",{"type":375,"attrs":1130,"content":1131},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1132],{"type":335,"attrs":1133,"content":1134},{"textAlign":59},[1135],{"text":962,"type":333},{"type":375,"attrs":1137,"content":1138},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1139],{"type":335,"attrs":1140,"content":1141},{"textAlign":59},[1142],{"text":929,"type":333},{"type":344,"content":1144},[1145,1155,1163,1168],{"type":375,"attrs":1146,"content":1147},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1148],{"type":335,"attrs":1149,"content":1150},{"textAlign":59},[1151],{"text":1152,"type":333,"marks":1153},"fc.namespace.js",[1154],{"type":401},{"type":375,"attrs":1156,"content":1157},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1158],{"type":335,"attrs":1159,"content":1160},{"textAlign":59},[1161],{"text":1162,"type":333},"Declares `var FC = FC",{"type":375,"attrs":1164,"content":1165},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1166],{"type":335,"attrs":1167},{"textAlign":59},{"type":375,"attrs":1169,"content":1170},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1171],{"type":335,"attrs":1172,"content":1173},{"textAlign":59},[1174],{"text":1175,"type":333},"{};`",{"type":344,"content":1177},[1178,1188,1196,1203],{"type":375,"attrs":1179,"content":1180},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1181],{"type":335,"attrs":1182,"content":1183},{"textAlign":59},[1184],{"text":1185,"type":333,"marks":1186},"fc.postal-code.js",[1187],{"type":401},{"type":375,"attrs":1189,"content":1190},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1191],{"type":335,"attrs":1192,"content":1193},{"textAlign":59},[1194],{"text":1195,"type":333},"Postal code → city + state\u002Fregion lookup.",{"type":375,"attrs":1197,"content":1198},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1199],{"type":335,"attrs":1200,"content":1201},{"textAlign":59},[1202],{"text":962,"type":333},{"type":375,"attrs":1204,"content":1205},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1206],{"type":335,"attrs":1207,"content":1208},{"textAlign":59},[1209],{"text":962,"type":333},{"type":344,"content":1211},[1212,1222,1235,1242],{"type":375,"attrs":1213,"content":1214},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1215],{"type":335,"attrs":1216,"content":1217},{"textAlign":59},[1218],{"text":1219,"type":333,"marks":1220},"fc.session.js",[1221],{"type":401},{"type":375,"attrs":1223,"content":1224},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1225],{"type":335,"attrs":1226,"content":1227},{"textAlign":59},[1228,1230,1233],{"text":1229,"type":333},"Sets the ",{"text":1053,"type":333,"marks":1231},[1232],{"type":401},{"text":1234,"type":333}," cookie.",{"type":375,"attrs":1236,"content":1237},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1238],{"type":335,"attrs":1239,"content":1240},{"textAlign":59},[1241],{"text":962,"type":333},{"type":375,"attrs":1243,"content":1244},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1245],{"type":335,"attrs":1246,"content":1247},{"textAlign":59},[1248],{"text":962,"type":333},{"type":344,"content":1250},[1251,1261,1269,1276],{"type":375,"attrs":1252,"content":1253},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1254],{"type":335,"attrs":1255,"content":1256},{"textAlign":59},[1257],{"text":1258,"type":333,"marks":1259},"fc.sidecart.js",[1260],{"type":401},{"type":375,"attrs":1262,"content":1263},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1264],{"type":335,"attrs":1265,"content":1266},{"textAlign":59},[1267],{"text":1268,"type":333},"Everything related to the Sidecart approach.",{"type":375,"attrs":1270,"content":1271},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1272],{"type":335,"attrs":1273,"content":1274},{"textAlign":59},[1275],{"text":962,"type":333},{"type":375,"attrs":1277,"content":1278},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1279],{"type":335,"attrs":1280,"content":1281},{"textAlign":59},[1282],{"text":962,"type":333},{"type":344,"content":1284},[1285,1295,1303,1310],{"type":375,"attrs":1286,"content":1287},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1288],{"type":335,"attrs":1289,"content":1290},{"textAlign":59},[1291],{"text":1292,"type":333,"marks":1293},"fc.template.js",[1294],{"type":401},{"type":375,"attrs":1296,"content":1297},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1298],{"type":335,"attrs":1299,"content":1300},{"textAlign":59},[1301],{"text":1302,"type":333},"Twig.js-related methods, including custom Twig.js methods that mirror custom server-side methods.",{"type":375,"attrs":1304,"content":1305},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1306],{"type":335,"attrs":1307,"content":1308},{"textAlign":59},[1309],{"text":962,"type":333},{"type":375,"attrs":1311,"content":1312},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1313],{"type":335,"attrs":1314,"content":1315},{"textAlign":59},[1316],{"text":962,"type":333},{"type":344,"content":1318},[1319,1329,1337,1357],{"type":375,"attrs":1320,"content":1321},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1322],{"type":335,"attrs":1323,"content":1324},{"textAlign":59},[1325],{"text":1326,"type":333,"marks":1327},"fc.util.js",[1328],{"type":401},{"type":375,"attrs":1330,"content":1331},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1332],{"type":335,"attrs":1333,"content":1334},{"textAlign":59},[1335],{"text":1336,"type":333},"Helper functions.",{"type":375,"attrs":1338,"content":1339},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1340],{"type":335,"attrs":1341,"content":1342},{"textAlign":59},[1343,1347,1348,1352,1353],{"text":1344,"type":333,"marks":1345},"money_format",[1346],{"type":401},{"text":650,"type":333},{"text":1349,"type":333,"marks":1350},"str_pad",[1351],{"type":401},{"text":650,"type":333},{"text":1354,"type":333,"marks":1355},"unserialize",[1356],{"type":401},{"type":375,"attrs":1358,"content":1359},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1360],{"type":335,"attrs":1361,"content":1362},{"textAlign":59},[1363],{"text":962,"type":333},{"type":327,"attrs":1365,"content":1367},{"level":1366,"textAlign":59},3,[1368],{"text":1369,"type":333},"External scripts",{"type":341,"content":1371},[1372,1389,1409,1429],{"type":344,"content":1373},[1374,1382],{"type":347,"attrs":1375,"content":1376},{"colspan":349,"rowspan":349,"colwidth":59},[1377],{"type":335,"attrs":1378,"content":1379},{"textAlign":59},[1380],{"text":1381,"type":333},"Script",{"type":347,"attrs":1383,"content":1384},{"colspan":349,"rowspan":349,"colwidth":59},[1385],{"type":335,"attrs":1386,"content":1387},{"textAlign":59},[1388],{"text":854,"type":333},{"type":344,"content":1390},[1391,1401],{"type":375,"attrs":1392,"content":1393},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1394],{"type":335,"attrs":1395,"content":1396},{"textAlign":59},[1397],{"text":1398,"type":333,"marks":1399},"foxycart.js",[1400],{"type":401},{"type":375,"attrs":1402,"content":1403},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1404],{"type":335,"attrs":1405,"content":1406},{"textAlign":59},[1407],{"text":1408,"type":333},"Namespace, session management, events, and utilities.",{"type":344,"content":1410},[1411,1421],{"type":375,"attrs":1412,"content":1413},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1414],{"type":335,"attrs":1415,"content":1416},{"textAlign":59},[1417],{"text":1418,"type":333,"marks":1419},"foxycart.jsonp.js",[1420],{"type":401},{"type":375,"attrs":1422,"content":1423},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1424],{"type":335,"attrs":1425,"content":1426},{"textAlign":59},[1427],{"text":1428,"type":333},"Base for custom integrations and the default Sidecart approach.",{"type":344,"content":1430},[1431,1441],{"type":375,"attrs":1432,"content":1433},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1434],{"type":335,"attrs":1435,"content":1436},{"textAlign":59},[1437],{"text":1438,"type":333,"marks":1439},"foxycart.jsonp.sidecart.js",[1440],{"type":401},{"type":375,"attrs":1442,"content":1443},{"colspan":349,"rowspan":349,"colwidth":59,"backgroundColor":59},[1444],{"type":335,"attrs":1445,"content":1446},{"textAlign":59},[1447],{"text":1448,"type":333},"The cart in a Sidecart approach.",{"type":327,"attrs":1450,"content":1451},{"level":329,"textAlign":59},[1452],{"text":1453,"type":333},"Pageload events and order of execution",{"type":335,"attrs":1455,"content":1456},{"textAlign":59},[1457,1461],{"text":1458,"type":333,"marks":1459},"FC.client.init()",[1460],{"type":401},{"text":1462,"type":333}," is called on pageload for any CDN-loaded, store-specific JavaScript, triggering the following sequence:",{"type":1464,"attrs":1465,"content":1466},"ordered_list",{"order":349},[1467,1476,1485,1502,1511],{"type":605,"content":1468},[1469],{"type":335,"attrs":1470,"content":1471},{"textAlign":59},[1472],{"text":1473,"type":333,"marks":1474},"FC.client.applySession()",[1475],{"type":401},{"type":605,"content":1477},[1478],{"type":335,"attrs":1479,"content":1480},{"textAlign":59},[1481],{"text":1482,"type":333,"marks":1483},"FC.client.preventDefaultActions()",[1484],{"type":401},{"type":605,"content":1486},[1487],{"type":335,"attrs":1488,"content":1489},{"textAlign":59},[1490,1492,1496,1498],{"text":1491,"type":333},"If ",{"text":1493,"type":333,"marks":1494},"context == cart",[1495],{"type":401},{"text":1497,"type":333},", then ",{"text":1499,"type":333,"marks":1500},"FC.client.updateCart()",[1501],{"type":401},{"type":605,"content":1503},[1504],{"type":335,"attrs":1505,"content":1506},{"textAlign":59},[1507],{"text":1508,"type":333,"marks":1509},"FC.client.event('ready').trigger()",[1510],{"type":401},{"type":605,"content":1512},[1513],{"type":335,"attrs":1514,"content":1515},{"textAlign":59},[1516],{"text":1517,"type":333,"marks":1518},"FC.client.updateMiniCart()",[1519],{"type":401},{"type":335,"attrs":1521,"content":1522},{"textAlign":59},[1523,1526,1528,1532,1534,1537,1539,1543,1545,1548],{"text":1499,"type":333,"marks":1524},[1525],{"type":401},{"text":1527,"type":333}," makes an ",{"text":1529,"type":333,"marks":1530},"FC.client.request",[1531],{"type":401},{"text":1533,"type":333}," to get the cart JSON. On completion, ",{"text":1529,"type":333,"marks":1535},[1536],{"type":401},{"text":1538,"type":333}," triggers ",{"text":1540,"type":333,"marks":1541},"FC.client.updateJSON()",[1542],{"type":401},{"text":1544,"type":333},", which in turn calls ",{"text":1517,"type":333,"marks":1546},[1547],{"type":401},{"text":623,"type":333},{"type":335,"attrs":1550,"content":1551},{"textAlign":59},[1552,1554,1558],{"text":1553,"type":333},"The ",{"text":1555,"type":333,"marks":1556},"ready",[1557],{"type":401},{"text":1559,"type":333}," event then triggers:",{"type":602,"content":1561},[1562,1571],{"type":605,"content":1563},[1564],{"type":335,"attrs":1565,"content":1566},{"textAlign":59},[1567],{"text":1568,"type":333,"marks":1569},"FC.cart.updateConfig()",[1570],{"type":401},{"type":605,"content":1572},[1573],{"type":335,"attrs":1574,"content":1575},{"textAlign":59},[1576],{"text":1577,"type":333,"marks":1578},"FC.cart.updatePaymentInfoRequired()",[1579],{"type":401},{"type":335,"attrs":1581,"content":1582},{"textAlign":59},[1583,1586,1588,1592,1594,1598,1600,1604],{"text":1568,"type":333,"marks":1584},[1585],{"type":401},{"text":1587,"type":333}," checks and sets ",{"text":1589,"type":333,"marks":1590},"localStorage",[1591],{"type":401},{"text":1593,"type":333},", which triggers ",{"text":1595,"type":333,"marks":1596},"FC.client.requestConfig()",[1597],{"type":401},{"text":1599,"type":333}," — a call to ",{"text":1601,"type":333,"marks":1602},"FC.client._request",[1603],{"type":401},{"text":1605,"type":333}," that sets the config JSON with the updated data.",{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1607},{},"Naming conventions for Foxy JavaScript variables and events, the internal file structure, and the pageload order of execution.","3ec5e2da-c8cb-4271-ab65-8ee88cf158fb",[],"javascript-naming-and-file-structure-reference","help\u002Farticles\u002Fjavascript-naming-and-file-structure-reference",-4050,[],2659,"3b15bdbd-8d74-49dc-8695-aca00c3af00f",[],{"html":1619,"sections":1620,"segments":1635},"\u003Csection id=\"javascript-naming-conventions\" data-title=\"JavaScript naming conventions\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"javascript-naming-conventions\">JavaScript naming conventions\u003C\u002Fh2>\u003Cp>Similar to Google’s conventions, but using snake_case instead of camelCase for variable names.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Type\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Convention\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Example\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>Function names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">functionNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Variable names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>snake_case\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">variable_names_like_this\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Class names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>PascalCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">ClassNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Enum names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>PascalCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">EnumNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Method names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">methodNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Constant values\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>UPPER_SNAKE_CASE\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">CONSTANT_VALUES_LIKE_THIS\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Namespaced names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>dot notation, camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foo.namespaceNamesLikeThis.bar\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>File names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>lowercase, no separator\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">filenameslikethis.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"event-naming-conventions\" data-title=\"Event naming conventions\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"event-naming-conventions\">Event naming conventions\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>Present tense, like standard JavaScript events — \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>, not \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-added\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Hyphens separate the parts of the event name.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Names follow this order: \u003Cstrong>section\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">cart\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">checkout\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">receipt\u003C\u002Fcode>), \u003Cstrong>noun\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">coupon\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">email\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode>, etc.), \u003Cstrong>modifier\u002Fattribute\u003C\u002Fstrong> if applicable (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity\u003C\u002Fcode>, where \u003Ccode class=\"badge bg-soft-danger text-danger\">quantity\u003C\u002Fcode> is the attribute of the item), then \u003Cstrong>verb\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">add\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">change\u003C\u002Fcode>, etc.).\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The “after” event gets the \u003Ccode class=\"badge bg-soft-danger text-danger\">.done\u003C\u002Fcode> suffix: \u003Ccode class=\"badge bg-soft-danger text-danger\">client.on(&quot;cart-item-remove.done&quot;, handler)\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fsection>\u003Csection id=\"what-counts-as-an-event\" data-title=\"What counts as an event\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"what-counts-as-an-event\">What counts as an event\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>Anything in an init method.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Anything on \u003Ccode class=\"badge bg-soft-danger text-danger\">change\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">click\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">keyup\u003C\u002Fcode>\u002F\u003Ccode class=\"badge bg-soft-danger text-danger\">keydown\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">blur\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">focusin\u003C\u002Fcode>\u002F\u003Ccode class=\"badge bg-soft-danger text-danger\">focusout\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Rendering.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Interactions with API JSON.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Selectors are not events — they return a string, not a triggerable action.\u003C\u002Fp>\u003C\u002Fsection>\u003Csection id=\"file-structure\" data-title=\"File structure\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"file-structure\">File structure\u003C\u002Fh2>\u003Cp>Internal source files used to compile Foxy’s external JavaScript. Source files are available at \u003Ccode class=\"badge bg-soft-danger text-danger\">admin.foxycart.com\u002Fstatic\u002Fv\u002F2.0.0\u002Fjs\u002Fsrc\u002F\u003C\u002Fcode>.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>File\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Purpose\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Internal methods\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Events\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.api.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Methods that make requests to the \u003Ccode class=\"badge bg-soft-danger text-danger\">api_json.php\u003C\u002Fcode> endpoint.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">saveContactInfo\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">saveShippingServiceInfo\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">getShippingOptions\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">getTaxes\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>none\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.cart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Methods that make requests to the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint and update the cart template via Twig.js; cart DOM initialization.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity-update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">customer-shipping-options-update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.checkout.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Checkout page initialization and methods.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>not yet documented\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.client.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Maintains and handles the \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> session value; prepares links and forms to submit to the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.event.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Defines the event model.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.locations.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Shipping and billing country\u002Fstate\u002Fprovince\u002Fregion functionality.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>none\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.namespace.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Declares `var FC = FC\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>{};`\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.postal-code.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Postal code → city + state\u002Fregion lookup.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.session.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Sets the \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> cookie.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.sidecart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Everything related to the Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.template.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Twig.js-related methods, including custom Twig.js methods that mirror custom server-side methods.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.util.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Helper functions.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">money_format\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">str_pad\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">unserialize\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"external-scripts\" data-title=\"External scripts\" data-title-node=\"H3\">\u003Ch3 data-anchor-id=\"external-scripts\">External scripts\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead class=\"thead-light\">\u003Ctr>\u003Cth>\u003Cp>Script\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Purpose\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Namespace, session management, events, and utilities.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.jsonp.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Base for custom integrations and the default Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.jsonp.sidecart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>The cart in a Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\u003Csection id=\"pageload-events-and-order-of-execution\" data-title=\"Pageload events and order of execution\" data-title-node=\"H2\">\u003Chr class=\"my-8\" style=\"margin-left: -48px; margin-right: -40vw\">\u003Ch2 data-anchor-id=\"pageload-events-and-order-of-execution\">Pageload events and order of execution\u003C\u002Fh2>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.init()\u003C\u002Fcode> is called on pageload for any CDN-loaded, store-specific JavaScript, triggering the following sequence:\u003C\u002Fp>\u003Col class=\"step step-icon-sm step-dashed step-border-last-0 mt-3\">\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">1\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.applySession()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">2\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.preventDefaultActions()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">3\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>If \u003Ccode class=\"badge bg-soft-danger text-danger\">context == cart\u003C\u002Fcode>, then \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateCart()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">4\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.event(&#039;ready&#039;).trigger()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli class=\"step-item\">\u003Cdiv class=\"step-content-wrapper\">\u003Cspan class=\"step-icon step-icon-soft-primary\">5\u003C\u002Fspan>\u003Cdiv class=\"w-100 overflow-hidden\">\u003Cdiv class=\"step-content mt-2\">\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateMiniCart()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateCart()\u003C\u002Fcode> makes an \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.request\u003C\u002Fcode> to get the cart JSON. On completion, \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.request\u003C\u002Fcode> triggers \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateJSON()\u003C\u002Fcode>, which in turn calls \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateMiniCart()\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">ready\u003C\u002Fcode> event then triggers:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updateConfig()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updatePaymentInfoRequired()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updateConfig()\u003C\u002Fcode> checks and sets \u003Ccode class=\"badge bg-soft-danger text-danger\">localStorage\u003C\u002Fcode>, which triggers \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.requestConfig()\u003C\u002Fcode> — a call to \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client._request\u003C\u002Fcode> that sets the config JSON with the updated data.\u003C\u002Fp>\u003C\u002Fsection>",[1621,1624,1626,1628,1630,1633],{"id":1622,"title":332,"level":1623},"javascript-naming-conventions","H2",{"id":1625,"title":600,"level":1623},"event-naming-conventions",{"id":1627,"title":749,"level":1623},"what-counts-as-an-event",{"id":1629,"title":824,"level":1623},"file-structure",{"id":1631,"title":1369,"level":1632},"external-scripts","H3",{"id":1634,"title":1453,"level":1623},"pageload-events-and-order-of-execution",[1636],{"type":1637,"content":1638},"html","\u003Ch2>JavaScript naming conventions\u003C\u002Fh2>\u003Cp>Similar to Google’s conventions, but using snake_case instead of camelCase for variable names.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Type\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Convention\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Example\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>Function names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">functionNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Variable names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>snake_case\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">variable_names_like_this\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Class names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>PascalCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">ClassNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Enum names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>PascalCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">EnumNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Method names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">methodNamesLikeThis\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Constant values\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>UPPER_SNAKE_CASE\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">CONSTANT_VALUES_LIKE_THIS\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>Namespaced names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>dot notation, camelCase\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foo.namespaceNamesLikeThis.bar\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>File names\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>lowercase, no separator\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">filenameslikethis.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch2>Event naming conventions\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>Present tense, like standard JavaScript events — \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>, not \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-added\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Hyphens separate the parts of the event name.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Names follow this order: \u003Cstrong>section\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">cart\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">checkout\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">receipt\u003C\u002Fcode>), \u003Cstrong>noun\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">coupon\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">email\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">address\u003C\u002Fcode>, etc.), \u003Cstrong>modifier\u002Fattribute\u003C\u002Fstrong> if applicable (e.g. \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity\u003C\u002Fcode>, where \u003Ccode class=\"badge bg-soft-danger text-danger\">quantity\u003C\u002Fcode> is the attribute of the item), then \u003Cstrong>verb\u003C\u002Fstrong> (\u003Ccode class=\"badge bg-soft-danger text-danger\">add\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">change\u003C\u002Fcode>, etc.).\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>The “after” event gets the \u003Ccode class=\"badge bg-soft-danger text-danger\">.done\u003C\u002Fcode> suffix: \u003Ccode class=\"badge bg-soft-danger text-danger\">client.on(&quot;cart-item-remove.done&quot;, handler)\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>What counts as an event\u003C\u002Fh2>\u003Cul>\u003Cli>\u003Cp>Anything in an init method.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Anything on \u003Ccode class=\"badge bg-soft-danger text-danger\">change\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">click\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">keyup\u003C\u002Fcode>\u002F\u003Ccode class=\"badge bg-soft-danger text-danger\">keydown\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">blur\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">focusin\u003C\u002Fcode>\u002F\u003Ccode class=\"badge bg-soft-danger text-danger\">focusout\u003C\u002Fcode>.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Rendering.\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Interactions with API JSON.\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>Selectors are not events — they return a string, not a triggerable action.\u003C\u002Fp>\u003Ch2>File structure\u003C\u002Fh2>\u003Cp>Internal source files used to compile Foxy’s external JavaScript. Source files are available at \u003Ccode class=\"badge bg-soft-danger text-danger\">admin.foxycart.com\u002Fstatic\u002Fv\u002F2.0.0\u002Fjs\u002Fsrc\u002F\u003C\u002Fcode>.\u003C\u002Fp>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>File\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Purpose\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Internal methods\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Events\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.api.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Methods that make requests to the \u003Ccode class=\"badge bg-soft-danger text-danger\">api_json.php\u003C\u002Fcode> endpoint.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">saveContactInfo\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">saveShippingServiceInfo\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">getShippingOptions\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">getTaxes\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>none\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.cart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Methods that make requests to the \u003Ccode class=\"badge bg-soft-danger text-danger\">\u002Fcart\u003C\u002Fcode> endpoint and update the cart template via Twig.js; cart DOM initialization.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-quantity-update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-item-remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-add\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">cart-coupon-remove\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">customer-shipping-options-update\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">customer-address-update\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.checkout.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Checkout page initialization and methods.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>not yet documented\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.client.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Maintains and handles the \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> session value; prepares links and forms to submit to the cart.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">cart-submit\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.event.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Defines the event model.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.locations.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Shipping and billing country\u002Fstate\u002Fprovince\u002Fregion functionality.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>none\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.namespace.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Declares `var FC = FC\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>{};`\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.postal-code.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Postal code → city + state\u002Fregion lookup.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.session.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Sets the \u003Ccode class=\"badge bg-soft-danger text-danger\">fcsid\u003C\u002Fcode> cookie.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.sidecart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Everything related to the Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.template.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Twig.js-related methods, including custom Twig.js methods that mirror custom server-side methods.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">fc.util.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Helper functions.\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">money_format\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">str_pad\u003C\u002Fcode>, \u003Ccode class=\"badge bg-soft-danger text-danger\">unserialize\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>—\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch3>External scripts\u003C\u002Fh3>\u003Cdiv class=\"table-responsive w-100\">\u003Ctable class=\"table table-lg table-bordered my-5\">\u003Cthead>\u003Ctr>\u003Cth>\u003Cp>Script\u003C\u002Fp>\u003C\u002Fth>\u003Cth>\u003Cp>Purpose\u003C\u002Fp>\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Namespace, session management, events, and utilities.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.jsonp.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>Base for custom integrations and the default Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">foxycart.jsonp.sidecart.js\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Ftd>\u003Ctd>\u003Cp>The cart in a Sidecart approach.\u003C\u002Fp>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003Ch2>Pageload events and order of execution\u003C\u002Fh2>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.init()\u003C\u002Fcode> is called on pageload for any CDN-loaded, store-specific JavaScript, triggering the following sequence:\u003C\u002Fp>\u003Col order=\"1\">\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.applySession()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.preventDefaultActions()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>If \u003Ccode class=\"badge bg-soft-danger text-danger\">context == cart\u003C\u002Fcode>, then \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateCart()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.event(&#039;ready&#039;).trigger()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateMiniCart()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Fol>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateCart()\u003C\u002Fcode> makes an \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.request\u003C\u002Fcode> to get the cart JSON. On completion, \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.request\u003C\u002Fcode> triggers \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateJSON()\u003C\u002Fcode>, which in turn calls \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.updateMiniCart()\u003C\u002Fcode>.\u003C\u002Fp>\u003Cp>The \u003Ccode class=\"badge bg-soft-danger text-danger\">ready\u003C\u002Fcode> event then triggers:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updateConfig()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updatePaymentInfoRequired()\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003Ccode class=\"badge bg-soft-danger text-danger\">FC.cart.updateConfig()\u003C\u002Fcode> checks and sets \u003Ccode class=\"badge bg-soft-danger text-danger\">localStorage\u003C\u002Fcode>, which triggers \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client.requestConfig()\u003C\u002Fcode> — a call to \u003Ccode class=\"badge bg-soft-danger text-danger\">FC.client._request\u003C\u002Fcode> that sets the config JSON with the updated data.\u003C\u002Fp>",{"name":1640,"created_at":1641,"published_at":1642,"updated_at":1643,"id":1644,"uuid":47,"content":1645,"slug":48,"full_slug":48,"sort_by_date":59,"position":1823,"tag_list":1824,"is_startpage":24,"parent_id":59,"meta_data":59,"group_id":1825,"first_published_at":1826,"release_id":59,"lang":65,"path":59,"alternates":1827,"default_full_slug":59,"translated_slugs":59},"Contact","2022-09-23T19:56:58.957Z","2025-05-08T18:24:40.382Z","2025-05-08T18:24:40.392Z",3138,{"seo":1646,"_uid":1649,"title":1650,"action":1651,"fields":1652,"method":1799,"columns":1800,"subtitle":1814,"component":48,"button_text":1820,"submit_title":1821,"submit_subtitle":1822},{"_uid":1647,"title":1640,"plugin":1648,"description":13},"24ff7574-3bcc-48d2-85b5-e529dfea1cc4","meta-fields","8f54f1da-9d8f-49b2-89e7-840e886491cb","We're here to help.","https:\u002F\u002Fusebasin.com\u002Ff\u002F029f48d65402",[1653,1658,1661,1770,1773,1778,1793],{"_uid":1654,"name":1655,"type":333,"label":1656,"options":13,"required":33,"component":1657,"placeholder":13},"9a70b226-2036-4f90-a052-b3efa61c5896","name","Name","form___field",{"_uid":1659,"name":673,"type":673,"label":1660,"options":13,"required":33,"component":1657,"placeholder":13},"86ba35be-ff43-4a28-8633-14052a8f6622","Email Address",{"_uid":1662,"name":1663,"type":1664,"label":1665,"options":1666,"required":33,"component":1657,"conditions":1667,"placeholder":13},"3f827475-492c-4f97-aa1e-2386ac263b6c","topic","select","Topic","Presales, Support, Billing, Partnerships, Order Enquiry, Other",[1668,1724,1734,1741,1749,1757,1763],{"_uid":1669,"equals":1670,"fields":1671,"component":1723},"e21d97dd-e68e-4fa6-ba97-bc40f3041dde","Order Enquiry",[1672],{"_uid":1673,"body":1674,"type":1721,"title":13,"component":1722},"b64992bc-6d53-48b8-b7a0-d81e5a062e50",{"type":324,"content":1675},[1676],{"type":335,"content":1677},[1678,1680,1688,1690,1692,1693,1697,1699,1704,1712,1714,1719],{"text":1679,"type":333},"We are ",{"text":1681,"type":333,"marks":1682},"Foxy.io",[1683],{"type":1684,"attrs":1685},"link",{"href":1686,"uuid":59,"anchor":59,"custom":1687,"target":59,"linktype":31},"http:\u002F\u002FFoxy.io",{},{"text":1689,"type":333},", an ecommerce platform powering ecommerce for other merchants. We do not sell products, and are unable to assist with questions about order statuses or refunds for any merchants using our platform. Please contact the merchant you ordered from for assistance. If you’d like to report a store using Foxy for fraudulent practices, please select ‘other’ in the subject.",{"type":1691},"hard_break",{"type":1691},{"text":1694,"type":333,"marks":1695},"NOTE:",[1696],{"type":642},{"text":1698,"type":333}," We are ",{"text":1700,"type":333,"marks":1701},"not ",[1702],{"type":1703},"italic",{"text":1705,"type":333,"marks":1706},"Foxy.in",[1707,1711],{"type":1684,"attrs":1708},{"href":1709,"uuid":59,"anchor":59,"custom":1710,"target":59,"linktype":31},"http:\u002F\u002FFoxy.in",{},{"type":1703},{"text":1713,"type":333},". We are not in any way affiliated with ",{"text":1705,"type":333,"marks":1715},[1716],{"type":1684,"attrs":1717},{"href":1709,"uuid":59,"anchor":59,"custom":1718,"target":59,"linktype":31},{},{"text":1720,"type":333},", and cannot help in any way with your order from that website.","danger","global___alert","form___condition",{"_uid":1725,"equals":1726,"fields":1727,"component":1723},"8765c3e1-25cf-44aa-b8ea-fc6094acf9c3","Presales",[1728],{"_uid":1729,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1732,"placeholder":13,"default_value":1733},"cf464f8e-d643-4f6e-af29-d3abffaf7380","department_email_address","hidden",[],"hello@foxy.io",{"_uid":1735,"equals":208,"fields":1736,"component":1723},"4007b6d8-77e5-421d-bd1e-6f336dd853fb",[1737],{"_uid":1738,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1739,"placeholder":13,"default_value":1740},"7b4c6aa5-a68c-45e0-9ce1-0a36af10c0c2",[],"help@foxy.io",{"_uid":1742,"equals":1743,"fields":1744,"component":1723},"1dbb8f11-613d-43cd-9e09-1b94f6e19219","Billing",[1745],{"_uid":1746,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1747,"placeholder":13,"default_value":1748},"a0ac0d1b-bc4f-4a6c-a682-581d450b0b73",[],"help+billing@foxy.io",{"_uid":1750,"equals":1751,"fields":1752,"component":1723},"a0a53a50-7172-4a29-ba58-181e38874e12","Partnerships",[1753],{"_uid":1754,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1755,"placeholder":13,"default_value":1756},"7aa011d9-f374-4aed-b5a5-929b54aaf152",[],"partners@foxy.io",{"_uid":1758,"equals":1670,"fields":1759,"component":1723},"a4cd431f-25d5-41c7-bfdc-02c908c8fb47",[1760],{"_uid":1761,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1762,"placeholder":13,"default_value":1733},"f5d52168-d6ae-451b-94ee-2ced1cbd28ad",[],{"_uid":1764,"equals":1765,"fields":1766,"component":1723},"25aba1ed-eb41-4bbc-aa89-f7a7167ea86e","Other",[1767],{"_uid":1768,"name":1730,"type":1731,"label":13,"options":13,"required":24,"component":1657,"conditions":1769,"placeholder":13,"default_value":1733},"f40dfaef-c203-4b71-bf4e-e1b43cef192b",[],{"_uid":1771,"component":1772},"e9c53a05-f40a-4510-aaf8-bc072a235a0c","form___subject",{"_uid":1774,"name":1775,"type":1776,"label":1777,"options":13,"required":33,"component":1657,"placeholder":13},"a4c4d385-fff4-4978-99fb-b68cfea623d6","message","textarea","Message",{"_uid":1779,"name":1780,"type":1664,"label":1781,"options":1782,"required":33,"component":1657,"conditions":1783,"placeholder":13},"8a3c9f85-f438-427d-9c7a-d7b295a14b5b","existing_user","Are you an existing user?","No, Yes",[1784],{"_uid":1785,"equals":1786,"fields":1787,"component":1723},"115933d6-262a-4b59-8fa8-579c5ad73de1","Yes",[1788],{"_uid":1789,"name":1790,"type":333,"label":1791,"options":13,"required":33,"component":1657,"conditions":1792,"placeholder":13},"44b6ff23-98f0-4e95-b7f5-c23e06415c2d","subdomain","Store Subdomain",[],{"_uid":1794,"name":1795,"type":1664,"label":1796,"options":1797,"required":33,"component":1657,"conditions":1798,"placeholder":13},"922a5cef-3af2-4113-8855-36c7910e3ee3","user_type","What type of user are you?","Developer, Designer, Merchant",[],"POST",[1801],{"_uid":1802,"text":1803,"title":1812,"component":1813},"7323b90d-a93a-4bf1-baa9-20d0b7ead61b",{"type":324,"content":1804},[1805],{"type":335,"content":1806},[1807,1809,1810],{"text":1808,"type":333},"855.369.9227",{"type":1691},{"text":1811,"type":333},"9:30am-6pm Central M-F","Pre-sales, Sales, & Partnerships","contact___footer_column",{"type":324,"content":1815},[1816],{"type":335,"content":1817},[1818],{"text":1819,"type":333},"Get in touch to get help from our friendly support team.","Submit","Success!","Your email has been received. We'll get back to you as soon as we can, but it might take a business day. If you don't hear back from us in a timely manner, please check your spam folder to ensure our reply didn't go there.",-80,[],"2fd9fb7d-a48a-4184-acfd-30022d8d6f08","2022-09-23T20:10:45.360Z",[],[288,1829],{"name":1830,"created_at":1831,"published_at":1832,"updated_at":1833,"id":1834,"uuid":1609,"content":1835,"slug":1848,"full_slug":1849,"sort_by_date":59,"position":1850,"tag_list":1851,"is_startpage":24,"parent_id":310,"meta_data":59,"group_id":1852,"first_published_at":1832,"release_id":59,"lang":65,"path":59,"alternates":1853,"default_full_slug":59,"translated_slugs":59},"JavaScript","2026-07-20T21:14:05.160Z","2026-07-20T21:14:28.313Z","2026-07-20T21:14:28.324Z",200263455421156,{"_uid":1836,"icon":13,"name":1830,"type":1837,"pinned":24,"summary":1838,"category":13,"component":297,"blog_posts":1839,"icon_custom":1840,"case_studies":1842,"faq_sections":1843,"featured_guides":1844,"mailbox_category":13,"featured_articles":1845,"featured_blog_posts":1846,"featured_case_studies":1847},"6ac2aa76-e023-4332-bc33-df367c493314","simple","How Foxy's JavaScript works, including events, configuration, sessions, and template rendering, for custom integrations beyond the default cart and checkout.",[],{"id":59,"alt":59,"name":13,"focus":59,"title":59,"source":59,"filename":13,"copyright":59,"fieldtype":81,"meta_data":1841},{},[],[],[],[],[],[],"javascript","help\u002Fcategories\u002Fjavascript",-820,[],"37830f97-9285-4e32-8105-7b383c2b8ec9",[],{},1784584248846]