'use strict'; angular .module('mwl.calendar.docs', ['mwl.calendar', 'ui.bootstrap', 'ngTouch', 'ngAnimate', 'oc.lazyLoad', 'hljs']) .controller('ExamplesCtrl', function($http, $rootScope, $compile, $q, $location, $ocLazyLoad, plunkGenerator) { var vm = this; function loadFile(path) { return $http.get(path, { transformResponse: function(data) { return data; } }); } var helpers = { templates: [ 'modalContent.html', 'calendarControls.html' ] }; loadFile('docs/examples/helpers.js').then(function(result) { helpers.scripts = result.data; }); var previousScope; vm.loadExample = function(demo) { vm.activeExample = angular.copy(demo); vm.showDemoTab = true; $location.search('example', demo.key); var scriptPath = 'docs/examples/' + demo.key + '/javascript.js'; var markupPath = 'docs/examples/' + demo.key + '/markup.html'; loadFile(scriptPath).then(function(result) { vm.activeExample.javascript = result.data; }); $q.all({ markup: loadFile(markupPath), script: $ocLazyLoad.load(scriptPath) }).then(function(result) { vm.activeExample.markup = result.markup.data; var demoContainer = angular.element(document.getElementById('demoContainer')); demoContainer.html(vm.activeExample.markup); var scope = $rootScope.$new(); $compile(demoContainer)(scope); if (previousScope) { previousScope.$destroy(); } previousScope = scope; }); }; vm.editActiveExample = function() { plunkGenerator(angular.version.full, '3.3.6', '0.14.3', helpers, vm.activeExample); }; $http.get('docs/examples/examples.json').then(function(result) { vm.examples = result.data; if ($location.search().example) { var exampleToLoad = vm.examples.filter(function(example) { return example.key === $location.search().example; })[0]; vm.loadExample(exampleToLoad); } else { vm.loadExample(vm.examples[0]); } }); }) .factory('plunkGenerator', function ($document, $templateCache) { return function (ngVersion, bsVersion, uibVersion, helpers, content) { var form = angular.element('
'); var addField = function (name, value) { var input = angular.element(''); input.attr('value', value); form.append(input); }; var indexContent = function(content, uibVersion) { return '\n' + '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n\n' + content + '\n' + ' \n' + '\n'; }; var scriptContent = function(content) { return "angular.module('mwl.calendar.docs', ['mwl.calendar', 'ngAnimate', 'ui.bootstrap']);" + "\n" + content; }; addField('description', 'http://mattlewis92.github.io/angular-bootstrap-calendar/'); addField('files[index.html]', indexContent(content.markup, uibVersion)); addField('files[helpers.js]', helpers.scripts); helpers.templates.forEach(function(templateName) { addField('files[' + templateName + ']', $templateCache.get(templateName)); }); addField('files[example.js]', scriptContent(content.javascript)); $document.find('body').append(form); form[0].submit(); form.remove(); }; });