cronapp-framework-mobile-js
Version:
Javascript library for CronApp's projects
350 lines (306 loc) • 10.4 kB
JavaScript
var cronappModules = [
'ionic',
'ui.router',
'ngResource',
'ngSanitize',
'custom.controllers',
'custom.services',
'report.services',
'datasourcejs',
'pascalprecht.translate',
'tmh.dynamicLocale',
'ui-notification',
'ngFileUpload',
'angularMoment'
];
if (window.customModules) {
cronappModules = cronappModules.concat(window.customModules);
}
var app = (function() {
return angular.module('MyApp', cronappModules)
.constant('LOCALES', {
'locales': {
'pt_br': 'Portugues (Brasil)',
'en_us': 'English'
},
'preferredLocale': 'pt_br'
})
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Remove splash screen
setTimeout(function() {
if (navigator.splashscreen) {
navigator.splashscreen.hide();
}
}, 100);
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if (window.cordova &&
window.cordova.plugins && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard
.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
});
})
.config([
'$httpProvider',
function($httpProvider) {
var interceptor = [
'$q',
'$rootScope',
function($q, $rootScope) {
var service = {
'request': function(config) {
if (!window.isUsingCookie()) {
var _u = JSON.parse(sessionStorage.getItem('_u'));
if (_u && _u.token) config.headers['X-AUTH-TOKEN'] = _u.token;
}
return config;
}
};
return service;
}
];
$httpProvider.interceptors.push(interceptor);
}
])
.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
$ionicConfigProvider.navBar.alignTitle('center');
if(ionic.Platform.isIOS()) {
$ionicConfigProvider.scrolling.jsScrolling(false);
}
})
.config(function($stateProvider, $urlRouterProvider, NotificationProvider) {
NotificationProvider.setOptions({
delay: 5000,
startTop: 20,
startRight: 10,
verticalSpacing: 20,
horizontalSpacing: 20,
positionX: 'right',
positionY: 'top'
});
if (window.customStateProvider) {
window.customStateProvider($stateProvider);
}
else {
// Set up the states
$stateProvider
.state('index', {
url: "",
controller: 'HomeController',
templateUrl: 'views/home.view.html'
})
.state('main', {
url: "/",
controller: 'HomeController',
templateUrl: 'views/home.view.html'
})
.state('home', {
url: "/home",
controller: 'HomeController',
templateUrl: 'views/home.view.html'
})
.state('pages', {
url: "/app/{name:.*}",
cache: false,
controller: 'PageController',
templateUrl: function(urlattr) {
return 'views/' + urlattr.name + '.view.html';
}
})
.state('404', {
controller: 'PageController',
templateUrl: function(urlattr) {
return 'views/error/404.view.html';
}
})
.state('403', {
controller: 'PageController',
templateUrl: function(urlattr) {
return 'views/error/403.view.html';
}
});
}
// For any unmatched url, redirect to /state1
$urlRouterProvider.otherwise("/error/404");
})
.config(function($translateProvider, tmhDynamicLocaleProvider) {
$translateProvider.useMissingTranslationHandlerLog();
$translateProvider.useStaticFilesLoader({
prefix: 'i18n/locale_',
suffix: '.json'
});
$translateProvider.registerAvailableLanguageKeys(
['pt_br', 'en_us'], {
'en*': 'en_us',
'pt*': 'pt_br',
'*': 'pt_br'
}
);
var locale = (window.navigator.userLanguage || window.navigator.language || 'pt_br').replace('-', '_');
$translateProvider.use(locale.toLowerCase());
$translateProvider.useSanitizeValueStrategy('escaped');
tmhDynamicLocaleProvider.localeLocationPattern('node_modules/angular-i18n/angular-locale_{{locale}}.js');
})
.directive('crnValue', ['$parse', function($parse) {
return {
restrict: 'A',
require: '^ngModel',
link: function(scope, element, attr, ngModel) {
var evaluatedValue;
if (attr.value) {
evaluatedValue = attr.value;
} else {
evaluatedValue = $parse(attr.crnValue)(scope);
}
element.attr("data-evaluated", JSON.stringify(evaluatedValue));
element.bind("click", function(event) {
scope.$apply(function() {
ngModel.$setViewValue(evaluatedValue);
}.bind(element));
});
}
};
}])
.decorator("$xhrFactory", [
"$delegate", "$injector",
function($delegate, $injector) {
return function(method, url) {
var xhr = $delegate(method, url);
var $http = $injector.get("$http");
var callConfig = $http.pendingRequests[$http.pendingRequests.length - 1];
if (angular.isFunction(callConfig.onProgress))
xhr.upload.addEventListener("progress",callConfig.onProgress);
return xhr;
};
}
])
// General controller
.controller('PageController', ["$scope", "$stateParams", "Notification", "$location", "$http", "$rootScope", "$ionicModal", "$translate", function($scope, $stateParams, Notification, $location, $http, $rootScope, $ionicModal, $translate) {
app.registerEventsCronapi($scope, $translate, $ionicModal);
$rootScope.http = $http;
$scope.Notification = Notification;
for (var x in app.userEvents)
$scope[x] = app.userEvents[x].bind($scope);
// save state params into scope
$scope.params = $stateParams;
$scope.$http = $http;
// Query string params
var queryStringParams = $location.search();
for (var key in queryStringParams) {
if (queryStringParams.hasOwnProperty(key)) {
$scope.params[key] = queryStringParams[key];
}
}
registerComponentScripts();
try {
var contextAfterPageController = $controller('AfterPageController', { $scope: $scope });
app.copyContext(contextAfterPageController, this, 'AfterPageController');
} catch(e) {};
}])
.run(function($rootScope, $state) {
$rootScope.$on('$stateChangeError', function() {
if (arguments.length >= 6) {
var requestObj = arguments[5];
if (requestObj.status === 404 || requestObj.status === 403) {
$state.go(requestObj.status.toString());
}
} else {
$state.go('404');
}
});
$rootScope.$on('$stateChangeSuccess', function() {
setTimeout(function() {
$($('.icon.ion-plus-round').parent()).off('click');
$($('.icon.ion-plus-round').parent()).on('click',function() {
$('[required]').removeClass('input-validation-error');
$('input:invalid').removeClass('input-validation-error');
});
$($('.icon.ion-checkmark').parent()).off('click');
$($('.icon.ion-checkmark').parent()).on('click',function() {
$('[required].ng-invalid-required, [required].ng-invalid, [required].ng-empty').addClass('input-validation-error');
$('input:invalid').addClass('input-validation-error');
});
$('input').off('keydown')
$('input').on('keydown', function() {
$(this).removeClass('input-validation-error');
});
}, 300);
});
setInterval(() => $('ion-nav-view[name="menuContent"] .button.button-clear.hide').removeClass('hide'), 300);
});
}(window));
app.userEvents = {};
//Configuration
app.config = {};
app.config.datasourceApiVersion = 2;
app.config.defaultRoute = "/app";
app.bindScope = function($scope, obj) {
var newObj = {};
for (var x in obj) {
// var name = parentName+'.'+x;
// console.log(name);
if (typeof obj[x] == 'string' || typeof obj[x] == 'boolean')
newObj[x] = obj[x];
else if (typeof obj[x] == 'function')
newObj[x] = obj[x].bind($scope);
else {
newObj[x] = app.bindScope($scope, obj[x]);
}
}
return newObj;
};
app.registerEventsCronapi = function($scope, $translate,$ionicModal) {
for (var x in app.userEvents)
$scope[x] = app.userEvents[x].bind($scope);
$scope.vars = {};
$scope.$evt = $evt;
try {
if (cronapi) {
$scope['cronapi'] = app.bindScope($scope, cronapi);
$scope['cronapi'].$scope = $scope;
$scope['cronapi'].$scope.$ionicModal = $ionicModal;
$scope.safeApply = safeApply;
if ($translate) {
$scope['cronapi'].$translate = $translate;
}
}
} catch (e) {
console.info('Not loaded cronapi functions');
console.info(e);
}
try {
if (blockly) {
blockly.cronapi = cronapi;
$scope['blockly'] = app.bindScope($scope, blockly);
}
} catch (e) {
console.info('Not loaded blockly functions');
console.info(e);
}
};
window.safeApply = function(fn) {
var phase = this.$root.$$phase;
if (phase == '$apply' || phase == '$digest') {
if (fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
//Components personalization jquery
var registerComponentScripts = function() {
//carousel slider
$('.carousel-indicators li').on('click', function() {
var currentCarousel = '#' + $(this).parent().parent().parent().attr('id');
var index = $(currentCarousel + ' .carousel-indicators li').index(this);
$(currentCarousel + ' #carousel-example-generic').carousel(index);
});
}