/*-
* ============LICENSE_START=======================================================
* SDC
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* 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.
* ============LICENSE_END=========================================================
*/
///
module Sdc.Directives {
'use strict';
export interface ITutorialScope extends ng.IScope {
showTutorial:boolean;
isFirstTime:boolean;
templateUrl:string;
totalPages: number;
currentPageIndex: number;
page:number;
tabs:Array;
tutorialData:any;
pageObject:any;
initPage:Function;
next:Function;
previous:Function;
hasNext():boolean;
hasPrevious():boolean;
closeTutorial:Function;
closeAndShowLastPage:Function;
}
export class TutorialDirective implements ng.IDirective {
constructor(
private $templateCache:ng.ITemplateCacheService,
private sdcConfig:Models.IAppConfigurtaion,
private $state:ng.ui.IStateService
) {
}
scope = {
page: '=',
showTutorial: '=',
isFirstTime: '='
};
replace = false;
restrict = 'EA';
template = ():string => {
return this.$templateCache.get('/app/scripts/directives/tutorial/tutorial-directive.html');
};
link = (scope:ITutorialScope, $elem:any) => {
let findPageIndex:Function = (pageId:number):number=> {
for (let i:number=0;i {
scope.pageObject = scope.tutorialData.pages[scope.currentPageIndex];
scope.templateUrl = '/app/scripts/directives/tutorial/' + scope.pageObject.template + '.html';
}
scope.tutorialData = this.sdcConfig.tutorial;
scope.closeTutorial = ()=> {
scope.showTutorial = false;
if(scope.isFirstTime){
scope.isFirstTime=false;
}
}
scope.closeAndShowLastPage = ()=> {
if(scope.isFirstTime){
this.$state.go('dashboard.tutorial-end');
}
scope.closeTutorial();
}
let init:Function = ():void => {
scope.tabs = scope.tutorialData.tabs;
scope.totalPages = scope.tutorialData.pages.length;
scope.initPage(scope.page);
}
scope.initPage = (pageId) => {
scope.currentPageIndex = findPageIndex(pageId);
showCurrentPage();
}
scope.next = ():void => {
if (scope.hasNext()){
scope.currentPageIndex++;
showCurrentPage();
}
}
scope.previous = ():void => {
if (scope.hasPrevious()){
scope.currentPageIndex--;
showCurrentPage();
}
}
scope.hasNext = ():boolean => {
return (scope.currentPageIndex+1) < scope.totalPages;
}
scope.hasPrevious = ():boolean => {
return scope.currentPageIndex>0;
}
angular.element(document).ready(function () {
init();
});
scope.$watch('showTutorial', (showTutorial:any):void => {
scope.initPage(scope.page);
});
};
public static factory = ($templateCache:ng.ITemplateCacheService, sdcConfig:Models.IAppConfigurtaion, $state:ng.ui.IStateService)=> {
return new TutorialDirective($templateCache, sdcConfig, $state);
};
}
TutorialDirective.factory.$inject = ['$templateCache', 'sdcConfig', '$state'];
}