You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

202 lines
8.7 KiB

6 months ago
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var FLOWABLE_EDITOR_TOUR = {
/*
* General 'getting started' tutorial for the Editor.
*/
gettingStarted: function($scope, $translate, $q, useLocalStorage) {
var userName;
if ($scope.account.firstName) {
userName = $scope.account.firstName;
} else {
userName = $scope.account.fullname;
}
$q.all([
$translate('TOUR.WELCOME-TITLE', {userName: userName}), $translate('TOUR.WELCOME-CONTENT'),
$translate('TOUR.PALETTE-TITLE'), $translate('TOUR.PALETTE-CONTENT'),
$translate('TOUR.CANVAS-TITLE'), $translate('TOUR.CANVAS-CONTENT'),
$translate('TOUR.DRAGDROP-TITLE'), $translate('TOUR.DRAGDROP-CONTENT'),
$translate('TOUR.PROPERTIES-TITLE'), $translate('TOUR.PROPERTIES-CONTENT'),
$translate('TOUR.TOOLBAR-TITLE'), $translate('TOUR.TOOLBAR-CONTENT'),
$translate('TOUR.END-TITLE'), $translate('TOUR.END-CONTENT')
]).then(function(translations) {
// We're using a hack here due to https://github.com/sorich87/bootstrap-tour/issues/85:
// when clicking next in the tour, it always sets the 'display' css property to 'none'
// The hack is simple: before the next step is shown, we reset the 'display' property to 'block'
var tourStepDomElements = ['body', '#paletteHelpWrapper', '#canvasHelpWrapper', '#propertiesHelpWrapper', '#editor-header'];
var tour = new Tour({
name: 'activitiEditorTour',
storage: (useLocalStorage ? window.localStorage : false),
container: 'body',
backdrop: true,
keyboard: true,
steps: [
{
orphan: true,
title: translations[0],
content: translations[1],
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false, 300),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[0])
},
{
element: tourStepDomElements[1],
title: translations[2],
content: translations[3],
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false, 400, 'images/tour/open-group.gif'),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[1])
},
{
element: tourStepDomElements[2],
title: translations[4],
content: translations[5],
placement: 'left',
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[2])
},
{
orphan: true,
title: translations[6],
content: translations[7],
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false, 720, 'images/tour/tour-dnd.gif'),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[0])
},
{
element: tourStepDomElements[3],
title: translations[8],
content: translations[9],
placement: 'top',
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false, 400),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[3])
},
{
element: tourStepDomElements[4],
title: translations[10],
content: translations[11],
placement: 'bottom',
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, true, false, 400),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[4])
},
{
orphan: true,
title: translations[12],
content: translations[13],
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, false, true, 400),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[0])
}
],
onEnd: FLOWABLE_EDITOR_TOUR._buildOnEndFunction(tourStepDomElements)
});
tour.init();
tour.start();
})
},
/*
* Tutorial showing how to use the bendpoint functionality for sequenceflow
*/
sequenceFlowBendpoint: function($scope, $translate, $q, useLocalStorage) {
$q.all([
$translate('FEATURE-TOUR.BENDPOINT.TITLE'), $translate('FEATURE-TOUR.BENDPOINT.DESCRIPTION')
]).then(function(translations) {
// We're using a hack here due to https://github.com/sorich87/bootstrap-tour/issues/85:
// when clicking next in the tour, it always sets the 'display' css property to 'none'
// The hack is simple: before the next step is shown, we reset the 'display' property to 'block'
var tourStepDomElements = ['body'];
var tour = new Tour({
name: 'bendpointTour',
storage: (useLocalStorage ? window.localStorage : false),
container: 'body',
backdrop: true,
keyboard: true,
steps: [
{
orphan: true,
title: translations[0],
content: translations[1],
template: FLOWABLE_EDITOR_TOUR._buildStepTemplate(false, false, true, 500, 'images/tour/sequenceflow-bendpoint.gif'),
onNext: FLOWABLE_EDITOR_TOUR._buildOnNextFunction(tourStepDomElements[0])
}
],
onEnd: FLOWABLE_EDITOR_TOUR._buildOnEndFunction(tourStepDomElements)
});
tour.init();
tour.start();
})
},
_buildStepTemplate : function (addPrevButton, addNextButton, addEndTourButton, optionalForcedWidth, image) {
var width = 200;
if (optionalForcedWidth) {
width = optionalForcedWidth;
}
var template =
'<div class=\'popover tour\' style=\'max-width:' + width + 'px\'>' +
'<div class=\'arrow\'></div>' +
'<h3 class=\'popover-title\'></h3>' +
'<div class=\'popover-content\'></div>' +
'<div class=\'popover-navigation\'>';
if (image) {
template = template + '<div><img src=\'' + image + '\' style=\'border 1px solid black;margin:5px 0 5px 0;\'></img></div>';
}
if (addPrevButton) {
template = template + '<button class=\'btn btn-sm btn-default \' data-role=\'prev\'>« Prev</button>';
}
if (addNextButton) {
template = template + '<button class=\'btn btn-sm btn-default\' data-role=\'next\' style=\'float:right\'">Next »</button>';
}
if (addEndTourButton) {
template = template + '<button class=\'btn btn-warning btn-sm\' data-role=\'end\' style=\'float:right\'">Got it!</button>';
}
template = template + '</div>' + '</nav>' + '</div>';
return template;
},
_buildOnNextFunction: function(selector) {
return function () {
jQuery(selector).each(function (i, obj) {
obj.style.display = 'block';
})
};
},
_buildOnEndFunction: function(selectors) {
return function () {
for (var elementsToResetIndex = 0; elementsToResetIndex < selectors.length; elementsToResetIndex++) {
jQuery(selectors[elementsToResetIndex]).each(function (i, obj) {
obj.style.display = 'block';
});
}
}
}
};