OnboardingWizard
AppMulti-step onboarding flow with dots/bar progress, optional skip, and page or modal presentation. Server-rendered with ?step=N querystring.
1 / 3
Welcome
Let's set up your workspace quickly.
We have a few questions for a personalized experience. Three steps in total.
<%- include('modules/app/OnboardingWizard', {
steps: onboardingSteps,
current: 0,
indicator: 'dots',
allowSkip: true
}) %>
2 / 4
Invite Members
Invite your team members.
<%- include('modules/app/OnboardingWizard', {
steps: onboardingSteps,
current: 1,
indicator: 'bar',
allowSkip: false
}) %>
<%
// Server-rendered onboarding wizard. The current step is driven by
// querystring/locals (?step=N) so each next/back/skip submits a form.
var _id = locals.id || ('onb-' + Math.random().toString(36).substr(2,6));
var _steps = locals.steps || [];
var _current = (typeof locals.current === 'number') ? locals.current : 0;
if (_current < 0) _current = 0;
if (_current >= _steps.length) _current = Math.max(0, _steps.length - 1);
var _mode = locals.mode || 'page';
var _open = (locals.open === undefined) ? true : !!locals.open;
var _title = locals.title || 'Welcome';
var _allowSkip = (locals.allowSkip === undefined) ? true : !!locals.allowSkip;
var _nextLabel = locals.nextLabel || 'Next';
var _prevLabel = locals.prevLabel || 'Back';
var _skipLabel = locals.skipLabel || 'Skip';
var _completeLabel = locals.completeLabel || 'Finish';
var _indicator = locals.indicator || 'dots';
var _stepAction = locals.stepAction || '?';
var _completeAction= locals.completeAction|| (locals.stepAction ? locals.stepAction + '&complete=1' : '?complete=1');
var _skipAction = locals.skipAction || (locals.stepAction ? locals.stepAction + '&skip=1' : '?skip=1');
var _className = locals.className ? ' ' + locals.className : '';
var _step = _steps[_current] || { title: '', description: '', content: '' };
var _isFirst = _current === 0;
var _isLast = _current === _steps.length - 1;
var _pct = _steps.length > 0 ? Math.min(100, Math.max(0, ((_current + 1) / _steps.length) * 100)) : 0;
%>
<% if (_mode === 'modal') { %>
<% } %>