1"use strict";(globalThis.webpackChunkvrgs_docs_v_3_1=globalThis.webpackChunkvrgs_docs_v_3_1||[]).push([[22671],{79055(e,i,n){n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>d,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"general/viewing-collaboration/field-guide-editor","title":"Virtual Field Guide Editor","description":"Author virtual field guides in VRGS \u2014 build a guide from Days, Stops and pages, write in a WYSIWYG editor, drop in viewpoint links, maps, quizzes, images and video, and read the result in the built-in reader.","source":"@site/docs/general/viewing-collaboration/field-guide-editor.md","sourceDirName":"general/viewing-collaboration","slug":"/general/viewing-collaboration/field-guide-editor","permalink":"/docs/next/general/viewing-collaboration/field-guide-editor","draft":false,"unlisted":false,"editUrl":"https://github.com/vrgeoscience/vrgs_docs_v3/tree/master/docs/general/viewing-collaboration/field-guide-editor.md","tags":[],"version":"current","sidebarPosition":8,"frontMatter":{"id":"field-guide-editor","title":"Virtual Field Guide Editor","sidebar_label":"Field Guide Editor","description":"Author virtual field guides in VRGS \u2014 build a guide from Days, Stops and pages, write in a WYSIWYG editor, drop in viewpoint links, maps, quizzes, images and video, and read the result in the built-in reader.","keywords":["field guide","virtual field guide","VFT","editor","WYSIWYG","TipTap","HTML","day","stop","viewpoint link","geo link","map","quiz","reader"],"sidebar_position":8},"sidebar":"docs","previous":{"title":"Reports","permalink":"/docs/next/general/viewing-collaboration/report-view"},"next":{"title":"Sharing Field Guides","permalink":"/docs/next/general/viewing-collaboration/field-guide-sharing"}}');var s=n(74848),r=n(28453);const d={id:"field-guide-editor",title:"Virtual Field Guide Editor",sidebar_label:"Field Guide Editor",description:"Author virtual field guides in VRGS \u2014 build a guide from Days, Stops and pages, write in a WYSIWYG editor, drop in viewpoint links, maps, quizzes, images and video, and read the result in the built-in reader.",keywords:["field guide","virtual field guide","VFT","editor","WYSIWYG","TipTap","HTML","day","stop","viewpoint link","geo link","map","quiz","reader"],sidebar_position:8},o=void 0,l={},a=[{value:"How a guide is laid out",id:"how-a-guide-is-laid-out",level:2},{value:"Creating a guide",id:"creating-a-guide",level:2},{value:"Guide folder commands",id:"guide-folder-commands",level:3},{value:"The editor window",id:"the-editor-window",level:2},{value:"Building the guide structure",id:"building-the-guide-structure",level:3},{value:"Writing a page",id:"writing-a-page",level:2},{value:"Insert",id:"insert",level:3},{value:"VRGS links \u2014 the point of a virtual guide",id:"vrgs-links--the-point-of-a-virtual-guide",level:3},{value:"The map block",id:"the-map-block",level:3},{value:"Images and video",id:"images-and-video",level:3},{value:"Shared menu bars",id:"shared-menu-bars",level:3},{value:"Saving",id:"saving",level:2},{value:"Reading a guide",id:"reading-a-guide",level:2},{value:"Reports use the same editor",id:"reports-use-the-same-editor",level:2},{value:"Tips and troubleshooting",id:"tips-and-troubleshooting",level:2},{value:"See also",id:"see-also",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.p,{children:["A ",(0,s.jsx)(i.strong,{children:"virtual field guide"})," is a set of linked pages that lives inside your VRGS\nproject and is read ",(0,s.jsx)(i.em,{children:"beside"}),' the 3D scene \u2014 a field trip booklet whose "go and\nlook at this" links actually take the reader there.']}),"\n",(0,s.jsxs)(i.p,{children:["VRGS authors guides in a ",(0,s.jsx)(i.strong,{children:"WYSIWYG editor"}),": you build the guide's structure in a\nsidebar, write the pages the way you would in a word processor, and drop in the\nthings a booklet cannot do \u2014 a link that flies the camera to an outcrop, a map of\nthe trip, a comparison slider between photo and interpretation, a quiz."]}),"\n",(0,s.jsx)(i.admonition,{title:"Requires WebView2",type:"info",children:(0,s.jsxs)(i.p,{children:["The editor and the reader are both built on the Microsoft Edge ",(0,s.jsx)(i.strong,{children:"WebView2"}),"\nruntime. Without it, guide pages can still be opened as plain files but the\neditor will not start."]})}),"\n",(0,s.jsx)(i.h2,{id:"how-a-guide-is-laid-out",children:"How a guide is laid out"}),"\n",(0,s.jsxs)(i.p,{children:["Everything lives under the project's ",(0,s.jsx)(i.strong,{children:"HTML"})," folder, listed in the ",(0,s.jsx)(i.strong,{children:"HTML"}),"\nbranch of the ",(0,s.jsx)(i.strong,{children:"Collections"})," tree. ",(0,s.jsx)(i.strong,{children:"A field guide is a direct subfolder of that\nHTML root"})," \u2014 that is the whole rule. Anything loose at the root is just a page."]}),"\n",(0,s.jsx)(i.p,{children:"A guide folder holds:"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"File / folder"}),(0,s.jsx)(i.th,{children:"What it is"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.co
1de,{children:"map.html"})}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.strong,{children:"Home"})," \u2014 the map hub the guide opens at. Both ",(0,s.jsx)(i.strong,{children:"View Field Guide"})," and the reader's Home button land here."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"index.html"})}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.strong,{children:"Contents"})," \u2014 a live table of contents rendered from the guide's navigation, so it follows the Guide sidebar and never needs editing by hand."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dayN.html"})}),(0,s.jsxs)(i.td,{children:["A ",(0,s.jsx)(i.strong,{children:"Day"})," \u2014 a hub for its own stops."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"dayN-stopM.html"})}),(0,s.jsxs)(i.td,{children:["A ",(0,s.jsx)(i.strong,{children:"Stop"})," \u2014 the page about one place."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"info.html"})}),(0,s.jsx)(i.td,{children:"Safety, logistics, references."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.code,{children:"menus/main-nav.json"})}),(0,s.jsx)(i.td,{children:"The guide's structure: order, labels, nesting."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.code,{children:"images\\"}),", ",(0,s.jsx)(i.code,{children:"videos\\"}),", ",(0,s.jsx)(i.code,{children:"style\\"})]}),(0,s.jsx)(i.td,{children:"The guide's media and stylesheet."})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Each page also declares what it ",(0,s.jsx)(i.em,{children:"is"})," in a ",(0,s.jsx)(i.code,{children:"vrgs-page-type"})," tag. That is what\ngives it its symbol in the Guide sidebar, in the reader's navigation bars and on\nthe map \u2014 nothing is inferred from the file name, so a page keeps its identity\nthrough a rename."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-a-guide",children:"Creating a guide"}),"\n",(0,s.jsxs)(i.p,{children:["From the ",(0,s.jsx)(i.strong,{children:"Collections"})," tree:"]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsxs)(i.li,{children:["Right-click the ",(0,s.jsx)(i.strong,{children:"HTML"})," branch \u2192 ",(0,s.jsx)(i.strong,{children:"New Folder"}),", and name it after the trip."]}),"\n",(0,s.jsxs)(i.li,{children:["Right-click the new folder \u2192 ",(0,s.jsx)(i.strong,{children:"Add Field Guide Template"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["The template is a ",(0,s.jsx)(i.strong,{children:"worked clastic / fluvial example"})," laid out as a navigation\nhub rather than a linear booklet: a map home page, a live contents page, four\nDays with two Stops each, and an info page. It is meant to be edited into your\nown trip, not read as-is \u2014 but it shows every block the editor can produce, in\nplace."]}),"\n",(0,s.jsx)(i.admonition,{type:"note",children:(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Add Field Guide Template"})," on a guide that already has pages asks before\noverwriting them."]})}),"\n",(0,s.jsxs)(i.p,{children:["Alternatively, select loose pages at the HTML root, right-click and choose ",(0,s.jsx)(i.strong,{children:"Group\ninto Field Guide"})," \u2014 they are moved into a new guide folder together."]}),"\n",(0,s.jsx)(i.h3,{id:"guide-folder-commands",children:"Guide folder commands"}),"\n",(0,s.jsxs)(i.p,{children:["Right-click a ",(0,s.jsx)(i.strong,{children:"guide folder"})," in the Collections tree:"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Command"}),(0,s.jsx)(i.th,{children:"Effect"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"View Field Guide"})}),(0,s.jsxs)(i.td,{children:["Opens the guide in the ",(0,s.jsx)(i.strong,{children:"reader"})," (the WEB panel), entering at its map. Also makes it the ",(0,s.jsx)(i.em,{children:"active"})," guide, so Home and ",(0,s.jsx)(i.em,{children:"Navigate to"})," resolve here."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Add Field Guide Template"})}),(0,s.jsx)(i.td,{children:"Writes the worked example into this folder."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"New Page"})}),(0,s.jsx)(i.td,{children:"Adds a page to this guide."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Open in Editor"})}),(0,s.jsx)(i.td,{children:"Opens the guide's contents page for editing."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Rename"})}),(0,s.jsx)(i.td,{children:"Renames the guide folder."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Delete Field Guide"})}),(0,s.jsxs)(i.td,{children:["Moves the guide and all its pages to the project's ",(0,s.jsx)(i.co
1de,{children:"RECYCLING"})," folder, after closing any of its pages open in the editor."]})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Individual pages and asset files under HTML have their own menu: ",(0,s.jsx)(i.strong,{children:"Open in\nEditor"}),", ",(0,s.jsx)(i.strong,{children:"Copy HREF"}),", ",(0,s.jsx)(i.strong,{children:"Open File Location"}),", and ",(0,s.jsx)(i.strong,{children:"Delete File"})," / ",(0,s.jsx)(i.strong,{children:"Delete\nFolder"})," (to the recycle bin)."]}),"\n",(0,s.jsx)(i.h2,{id:"the-editor-window",children:"The editor window"}),"\n",(0,s.jsx)(i.p,{children:"Opening a page gives you three areas:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Guide sidebar"})," (left, top) \u2014 the guide's pages as a nested list, with a\nsymbol per page type. This is where the guide's ",(0,s.jsx)(i.em,{children:"structure"})," is edited."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"This page"})," (left, bottom) \u2014 the current page's headings. Click one to jump\nto it."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"The page itself"})," \u2014 the WYSIWYG canvas, with the toolbar above it."]}),"\n"]}),"\n",(0,s.jsxs)(i.p,{children:["Opening any page of a guide makes that guide ",(0,s.jsx)(i.strong,{children:"active"}),", which scopes the Guide\nlist, the shared menus, the media browser and the reader panel to it."]}),"\n",(0,s.jsx)(i.h3,{id:"building-the-guide-structure",children:"Building the guide structure"}),"\n",(0,s.jsxs)(i.p,{children:["Right-click a row in the ",(0,s.jsx)(i.strong,{children:"Guide"})," sidebar:"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Command"}),(0,s.jsx)(i.th,{children:"Effect"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Open in Editor"})}),(0,s.jsx)(i.td,{children:"Edit that page."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsxs)(i.strong,{children:["Add Stop to ",(0,s.jsx)(i.em,{children:"Day"})]})}),(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.em,{children:"(Days only)"})," Creates a Stop ",(0,s.jsx)(i.strong,{children:"inside"})," that Day \u2014 it appears under it in the sidebar, in the Day's own stop list and in the reader's navigation. It also ",(0,s.jsx)(i.strong,{children:"takes the current 3D view as its viewpoint"}),", which is what puts it on the map."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsxs)(i.strong,{children:["Add Page to ",(0,s.jsx)(i.em,{children:"X"})]})}),(0,s.jsxs)(i.td,{children:["Creates a page of extra detail ",(0,s.jsx)(i.strong,{children:"inside"})," whatever you clicked. Something the reader clicks through to and reads, not a place \u2014 it gets no viewpoint and never appears on the map."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"New Page (top level)"})}),(0,s.jsx)(i.td,{children:"A page alongside the Days rather than inside one."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Add Map Page"})}),(0,s.jsx)(i.td,{children:"Adds a map page to the guide."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Duplicate"})}),(0,s.jsx)(i.td,{children:"Copies the page, keeping its type."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Rename\u2026"})}),(0,s.jsx)(i.td,{children:"Sets the label shown in the guide. Clearing it falls back to the page's own first heading."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsxs)(i.td,{children:[(0,s.jsx)(i.strong,{children:"Move Up"})," / ",(0,s.jsx)(i.strong,{children:"Move Down"})]}),(0,s.jsx)(i.td,{children:"Reorder within the same level."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Restore Previous Version\u2026"})}),(0,s.jsx)(i.td,{children:"Recover an earlier saved version of the page."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Delete\u2026"})}),(0,s.jsx)(i.td,{children:"Remove the page from the guide."})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Rows can also be ",(0,s.jsx)(i.strong,{children:"dragged"}),": drop on the ",(0,s.jsx)(i.strong,{children:"top third"})," of a row to place before\nit, the ",(0,s.jsx)(i.strong,{children:"bottom third"})," to place after it, and the ",(0,s.jsx)(i.strong,{children:"middle"})," to nest inside it.\nA page cannot be dropped into its own subtree."]}),"\n",(0,s.jsx)(i.p,{children:"Where a new page goes is decided by what you right-clicked, so there is nothing to\nchoose and no way to get it wrong. A page added under a Day inherits that Day's\nlayout, so the reader can navigate back to it and across to its siblings."}),"\n",(0,s.jsx)(i.h2,{id:"writing-a-page",children:"Writing a page"}),"\n",(0,s.jsxs)(i.p,{children:["The toolbar carries font and size, text and highlight colour, ",(0,s.jsx)(i.strong,{children:"bold / italic /\nunderline"}),", paragraph and heading levels, quote, alignment, lists, and clear\nformatting. ",(0,s.jsx)(i.strong,{children:"Ctrl+S"})," saves; ",(0,s.jsx)(i.strong,{children:"Ctrl+Z / Ctrl+Y"})," undo and redo; ",(0,s.jsx)(i.strong,{children:"</>"}),"\ntoggles the HTML source."]}),"\n",(0,s.jsx)(i.h3,{id:"insert",children:"Insert"}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Item"}),(0,s.jsx)(i.th,{children:"What it adds"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Table"})}),(0,s.jsx)(i.td,{children:"A table."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Callout"})}),(0,s.jsx)(i.td,{children:"A coloured note box."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Qu
1iz"})}),(0,s.jsx)(i.td,{children:"A multiple-choice question with your own right/wrong responses, marked in the reader."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Link"})}),(0,s.jsx)(i.td,{children:"An ordinary hyperlink."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"VRGS Link"})}),(0,s.jsx)(i.td,{children:"A link that acts on the 3D scene \u2014 see below."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Object Link"})}),(0,s.jsx)(i.td,{children:"A link to an object in the project; clicking it in the reader navigates to that object."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Anchor Target"})}),(0,s.jsx)(i.td,{children:"A named target elsewhere on the page can link to."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Image"})}),(0,s.jsxs)(i.td,{children:["An image from the guide's ",(0,s.jsx)(i.code,{children:"images"})," folder or a URL."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Image with Caption"})}),(0,s.jsx)(i.td,{children:"The same, as a captioned figure."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Comparison Slider"})}),(0,s.jsx)(i.td,{children:"Two images with a slider between them \u2014 the standard photo-versus-interpretation figure."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"YouTube Video"})}),(0,s.jsx)(i.td,{children:"An embedded video."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Local Video"})}),(0,s.jsxs)(i.td,{children:["A video from the guide's ",(0,s.jsx)(i.code,{children:"videos"})," folder."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Menu Bar"})}),(0,s.jsx)(i.td,{children:"One of the guide's shared navigation bars."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Map"})}),(0,s.jsx)(i.td,{children:"A live map block \u2014 see below."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Table of Contents"})}),(0,s.jsx)(i.td,{children:"Built from the page's own headings."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Page Navigation"})}),(0,s.jsx)(i.td,{children:"Previous / next links across the guide."})]})]})]}),"\n",(0,s.jsx)(i.h3,{id:"vrgs-links--the-point-of-a-virtual-guide",children:"VRGS links \u2014 the point of a virtual guide"}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Insert \u2192 VRGS Link"})," offers three kinds:"]}),"\n",(0,s.jsxs)(i.table,{children:[(0,s.jsx)(i.thead,{children:(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.th,{children:"Type"}),(0,s.jsx)(i.th,{children:"What it does"})]})}),(0,s.jsxs)(i.tbody,{children:[(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsxs)(i.strong,{children:["Geo Location (",(0,s.jsx)(i.code,{children:"geo://"}),")"]})}),(0,s.jsxs)(i.td,{children:["Flies the 3D camera to a position. Press ",(0,s.jsx)(i.strong,{children:"\ud83d\udcf7 Get Viewpoint"})," to fill it in from the view you are looking at right now."]})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsxs)(i.strong,{children:["VRGS Command (",(0,s.jsx)(i.code,{children:"vrgs://"}),")"]})}),(0,s.jsx)(i.td,{children:"Runs an application command."})]}),(0,s.jsxs)(i.tr,{children:[(0,s.jsx)(i.td,{children:(0,s.jsx)(i.strong,{children:"Flight Path"})}),(0,s.jsx)(i.td,{children:"Starts one of the project's flight paths in the 3D scene. The dropdown lists the paths in the project."})]})]})]}),"\n",(0,s.jsxs)(i.p,{children:["Give it a ",(0,s.jsx)(i.strong,{children:"display label"}),", and tick ",(0,s.jsx)(i.strong,{children:"Show as a full-width bar"})," to make it a\nbar across the page rather than an inline pill \u2014 which is what you want for the\none viewpoint a Stop is really about."]}),"\n",(0,s.jsx)(i.admonition,{title:"Capture the view, don't type coordinates",type:"tip",children:(0,s.jsxs)(i.p,{children:["Frame the shot in the 3D view, then insert the link and press ",(0,s.jsx)(i.strong,{children:"Get Viewpoint"}
1),".\nThe same capture is what ",(0,s.jsx)(i.strong,{children:"Add Stop"})," uses, which is why a stop added from the\nsidebar already knows where it is."]})}),"\n",(0,s.jsx)(i.h3,{id:"the-map-block",children:"The map block"}),"\n",(0,s.jsx)(i.p,{children:"A map block is a live map of the trip, and it is the same map the reader shows."}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Basemap"})," \u2014 a street map, or an image you supply with geographic bounds."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Spots"})," \u2014 the guide's own Days, Stops and Viewpoints, derived from the pages\nthemselves. A page that has a viewpoint has a place on the map; one that does\nnot, does not appear. There is no separate list to keep in step."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Outcrop model (DOM) outlines"})," \u2014 the project's models, drawn live as dashed\nfootprints. They are not stored in the page: the project is the source, so the\noutlines follow the models. Right-click one to navigate the 3D view to it."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Right-click the map"})," (while editing) to ",(0,s.jsx)(i.strong,{children:"\ud83d\udccd Add Stop here"}),", or to add a\n",(0,s.jsx)(i.strong,{children:"3D Viewpoint"})," at that point."]}),"\n",(0,s.jsxs)(i.li,{children:["A ",(0,s.jsx)(i.strong,{children:"legend"})," switches the layers, and the basemap / overlay choices you leave it\non are remembered while the project is open."]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"images-and-video",children:"Images and video"}),"\n",(0,s.jsxs)(i.p,{children:["Images and videos live in the guide's own ",(0,s.jsx)(i.code,{children:"images"})," and ",(0,s.jsx)(i.code,{children:"videos"})," folders. You can\n",(0,s.jsx)(i.strong,{children:"drag and drop"})," a file straight onto the page \u2014 it is copied into the guide and\nreferenced from there \u2014 or press ",(0,s.jsx)(i.strong,{children:"Browse\u2026"})," in any image or video field to pick\nfrom what the guide already has."]}),"\n",(0,s.jsx)(i.admonition,{title:"Keep media inside the guide",type:"caution",children:(0,s.jsx)(i.p,{children:"A page that points at an image on your own desktop shows nothing for anyone else.\nDropping the file onto the page (rather than pasting a path to it) is what puts a\ncopy inside the guide, where backups and file sharing will carry it."})}),"\n",(0,s.jsx)(i.h3,{id:"shared-menu-bars",children:"Shared menu bars"}),"\n",(0,s.jsxs)(i.p,{children:["A guide's navigation bars are ",(0,s.jsx)(i.strong,{children:"shared"}),": defined once and inserted on as many\npages as you like, so changing the bar changes it everywhere it appears rather\nthan on the page you happened to be editing. Create and edit them from the menu\neditor, and place one with ",(0,s.jsx)(i.strong,{children:"Insert \u2192 Menu Bar"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"saving",children:"Saving"}),"\n",(0,s.jsx)(i.p,{children:"The editor pushes its content to VRGS whenever you pause typing, when the editor\nloses focus, and when you save \u2014 each push stamped with the page it came from.\nSaving is therefore a write of content already in hand: it never has to wait on\nthe editor, which is what stops a save freezing the application."}),"\n",(0,s.jsx)(i.p,{children:"Two consequences worth knowing:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A ",(0,s.jsx)(i.strong,{children:"previous version of each page is kept"}),", which is what ",(0,s.jsx)(i.strong,{children:"Restore Previous\nVersion\u2026"})," in the Guide sidebar reads."]}),"\n",(0,s.jsxs)(i.li,{children:["If a save is refused because the editor holds a ",(0,s.jsx)(i.em,{children:"different"})," page than the one\nbeing saved, VRGS says so and offers to reload from disk. That is the one\nrefusal with a way out; the others are reported with the reason."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"reading-a-guide",children:"Reading a guide"}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"View Field Guide"})," on the guide folder opens it in the ",(0,s.jsx)(i.strong,{children:"WEB panel"})," \u2014 VRGS's\nreader \u2014 at the guide's map. From there:"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Navigation bars and the contents page are rebuilt live from the guide's\nstructure, so they always match what the Guide sidebar shows."}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsxs)(i.strong,{children:[(0,s.jsx)(i.co
1de,{children:"geo://"})," and flight-path links act on the 3D view"]}),", which is the whole point:\nthe reader and the scene are side by side."]}),"\n",(0,s.jsxs)(i.li,{children:["The reader has a ",(0,s.jsx)(i.strong,{children:"search box"})," across the guide's pages."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Navigate to"})," on an object in the project tree switches the reader to the\nactive guide's map with the live location marked, rather than to the web map."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"reports-use-the-same-editor",children:"Reports use the same editor"}),"\n",(0,s.jsxs)(i.p,{children:["The ",(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/report-view",children:"Report editor"})," is this editor in a second mode. A report is\ndeliberately ",(0,s.jsx)(i.em,{children:"not"})," a guide page \u2014 it lives in the project's ",(0,s.jsx)(i.code,{children:"Reports"})," folder, has\nits own stylesheet and print rules, and opening one never re-points the Guide list\nor navigates the reader away from the guide you were reading. A report opened in a\nguide window (or the reverse) still parses and round-trips; it simply does not\noffer the other mode's buttons."]}),"\n",(0,s.jsx)(i.h2,{id:"tips-and-troubleshooting",children:"Tips and troubleshooting"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"The guide folder has no menu commands."})," A field guide has to be a ",(0,s.jsx)(i.em,{children:"direct"}),"\nsubfolder of the HTML root. A folder nested deeper, or one named ",(0,s.jsx)(i.code,{children:"images"}),",\n",(0,s.jsx)(i.code,{children:"videos"}),", ",(0,s.jsx)(i.code,{children:"menus"})," or ",(0,s.jsx)(i.code,{children:"style"}),", gets the ordinary item menu instead."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:'"This field guide has no map.html or index.html yet."'})," The folder is empty \u2014\nuse ",(0,s.jsx)(i.strong,{children:"Add Field Guide Template"})," or ",(0,s.jsx)(i.strong,{children:"New Page"})," first."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"A new page did not appear in the reader's navigation."})," The reader reads the\nguide's structure; save the page, and check it is where you expect it in the\n",(0,s.jsx)(i.strong,{children:"Guide"})," sidebar."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"A page shows a broken image."})," The image was referenced from outside the guide\nfolder. Drag the file onto the page to bring a copy in."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"A stop is missing from the map."})," Only pages with a viewpoint have a place.\nAdd one with ",(0,s.jsx)(i.strong,{children:"Insert \u2192 VRGS Link \u2192 Get Viewpoint"}),", or create the stop with\n",(0,s.jsxs)(i.strong,{children:["Add Stop to ",(0,s.jsx)(i.em,{children:"Day"})]}),", which captures the current view for you."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.strong,{children:"Deleting the wrong thing."})," Pages, asset folders and whole guides all go to\nthe project's ",(0,s.jsx)(i.code,{children:"RECYCLING"})," folder rather than being destroyed."]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"see-also",children:"See also"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/field-guide-sharing",children:"Sharing Field Guides"})," \u2014 writing one guide with several authors, through GitHub."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/report-view",children:"Analysis Reports"})," \u2014 the same editor, in report mode."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/multiuser-vft",children:"Multiuser Virtual Field Trips"})," \u2014 running a live trip through a guide."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/flight-path-user-guide",children:"Flight Paths"})," \u2014 the guided fly-throughs a guide page can start."]}),"\n",(0,s.jsxs)(i.li,{children:[(0,s.jsx)(i.a,{href:"/docs/next/general/viewing-collaboration/virtual-field-trips",children:"Building and Delivering a Virtual Field Trip"})," \u2014 how a guide fits with flight paths, media and a live session."]}),"\n"]})]})}function c(e={}){const{wrapper:i}={...(0,r.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},28453(e,i,n){n.d(i,{R:()=>d,x:()=>o});var t=n(96540);const s={},r=t.createContext(s);function d(e){const i=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),t.createElement(r.Provider,{value:i},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.