if (typeof applicationOptions == 'undefined') { var applicationOptions = { baseUrlApi: 'http://api.absolut-gps.local/' }; } var ApplicationController = Backbone.Model.extend({ options: { //activate Controller controller: { message: { enable: true, }, card: { enable: true, }, cookie: { enable: true, }, map: { enable: true, }, experience: { enable: true, }, profile: { enable: true, }, search: { enable: true, }, routing: { enable: true, }, geocaching: { enable: true, }, local: { enable: true, }, event: { enable: true, } }, router: { main: { startExperienceMode: 'marker', } }, // Url baseUrl: '', baseUrlApi: '', language: 'de', translation: {}, }, router : {}, routerCount : 1, controller : {}, controllerLoadEvents: {}, initialize : function(options) { var that = this; $.extend(true, that.options, options); // load Translations $.getJSON('/js/lang/translate.js', function(data) { that.options.translation.keys = data.translate; }); }, initController: function() { var that = this; $.each(that.options.controller, function(name, controllerOptions) { var className = name.charAt(0).toUpperCase() + name.substr(1) + 'Controller'; eval('var type = typeof ' + className); if (type === 'function') { var ev = "var controller = new " + className + "(controllerOptions)"; eval(ev); that.addController(name, controller); if (that.controllerLoadEvents[name] !== undefined) { $.each(that.controllerLoadEvents[name], function(i, cb) { cb(); }); } } }); }, addRouter : function(name, router) { var that = this; that.router[name] = router; if (_.size(that.router) == that.options.routerCount) { Backbone.history.start({ pushState : true }); } }, addController : function(name, controller) { this.controller[name] = controller; }, addControllerLoadEvent: function(name, cb) { var that = this; if (that.controller[name] !== undefined) { cb(); } else { if (that.controllerLoadEvents[name] == undefined) { that.controllerLoadEvents[name] = []; } that.controllerLoadEvents[name].push(cb); } }, goToRoute: function(route, params) { $.each(application.router, function(routerName, router) { $.each(router.routes, function(url, routeName) { if (routeName == route) { $.each(params, function(key, value) { url = url.replace(':' + key, value); }); url = url.replace('(/*rest)', ''); window.location = '/' + url; } }); }); }, openModalTemplate: function(name, params, callback) { var url = '/editor/template/modal/name/:name'; if (params == null) { params = {}; } $.ajax({ url: url.replace(':name', name), dataType: 'html', data: params, success: function(html) { if ($('#modal').length == 1) { $('#modal').html($(html).html()); } else { $('body').append(html); $('#modal').modal(); } if (callback !== null && callback !== undefined) { callback(); } $('#modal').on('hidden', function () { $('#modal').remove(); }); } }); }, translate: function(data) { var that = this; var matches = data.match(/\[\[.*?\]\]/g); for (match in matches) { var txt = matches[match]; txt = txt.substr(2, txt.length - 4); var val = ''; if (that.options.translation.keys[that.options.language][txt] == undefined) { val = txt; } else { val = that.options.translation.keys[that.options.language][txt]; } var reg = new RegExp("\\[\\[" + txt + "\\]\\]"); data = data.replace(reg, val); } return data; } }); var application = new ApplicationController(applicationOptions);; $(document).ready(function() { application.initController(); });