docs.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. 'use strict';
  2. angular
  3. .module('mwl.calendar.docs', ['mwl.calendar', 'ui.bootstrap', 'ngTouch', 'ngAnimate', 'oc.lazyLoad', 'hljs'])
  4. .controller('ExamplesCtrl', function($http, $rootScope, $compile, $q, $location, $ocLazyLoad, plunkGenerator) {
  5. var vm = this;
  6. function loadFile(path) {
  7. return $http.get(path, {
  8. transformResponse: function(data) {
  9. return data;
  10. }
  11. });
  12. }
  13. var helpers = {
  14. templates: [
  15. 'modalContent.html',
  16. 'calendarControls.html'
  17. ]
  18. };
  19. loadFile('docs/examples/helpers.js').then(function(result) {
  20. helpers.scripts = result.data;
  21. });
  22. var previousScope;
  23. vm.loadExample = function(demo) {
  24. vm.activeExample = angular.copy(demo);
  25. vm.showDemoTab = true;
  26. $location.search('example', demo.key);
  27. var scriptPath = 'docs/examples/' + demo.key + '/javascript.js';
  28. var markupPath = 'docs/examples/' + demo.key + '/markup.html';
  29. loadFile(scriptPath).then(function(result) {
  30. vm.activeExample.javascript = result.data;
  31. });
  32. $q.all({
  33. markup: loadFile(markupPath),
  34. script: $ocLazyLoad.load(scriptPath)
  35. }).then(function(result) {
  36. vm.activeExample.markup = result.markup.data;
  37. var demoContainer = angular.element(document.getElementById('demoContainer'));
  38. demoContainer.html(vm.activeExample.markup);
  39. var scope = $rootScope.$new();
  40. $compile(demoContainer)(scope);
  41. if (previousScope) {
  42. previousScope.$destroy();
  43. }
  44. previousScope = scope;
  45. });
  46. };
  47. vm.editActiveExample = function() {
  48. plunkGenerator(angular.version.full, '3.3.6', '0.14.3', helpers, vm.activeExample);
  49. };
  50. $http.get('docs/examples/examples.json').then(function(result) {
  51. vm.examples = result.data;
  52. if ($location.search().example) {
  53. var exampleToLoad = vm.examples.filter(function(example) {
  54. return example.key === $location.search().example;
  55. })[0];
  56. vm.loadExample(exampleToLoad);
  57. } else {
  58. vm.loadExample(vm.examples[0]);
  59. }
  60. });
  61. })
  62. .factory('plunkGenerator', function ($document, $templateCache) {
  63. return function (ngVersion, bsVersion, uibVersion, helpers, content) {
  64. var form = angular.element('<form style="display: none;" method="post" action="http://plnkr.co/edit/?p=preview" target="_blank"></form>');
  65. var addField = function (name, value) {
  66. var input = angular.element('<input type="hidden" name="' + name + '">');
  67. input.attr('value', value);
  68. form.append(input);
  69. };
  70. var indexContent = function(content, uibVersion) {
  71. return '<!doctype html>\n' +
  72. '<html ng-app="mwl.calendar.docs">\n' +
  73. ' <head>\n' +
  74. ' <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>\n' +
  75. ' <script src="//cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.4/interact.min.js"></script>\n' +
  76. ' <script src="//ajax.googleapis.com/ajax/libs/angularjs/'+ngVersion+'/angular.js"></script>\n' +
  77. ' <script src="//ajax.googleapis.com/ajax/libs/angularjs/'+ngVersion+'/angular-animate.js"></script>\n' +
  78. ' <script src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/'+uibVersion+'/ui-bootstrap-tpls.min.js"></script>\n' +
  79. ' <script src="//mattlewis.me/angular-bootstrap-calendar/dist/js/angular-bootstrap-calendar-tpls.min.js"></script>\n' +
  80. ' <script src="example.js"></script>\n' +
  81. ' <script src="helpers.js"></script>\n' +
  82. ' <link href="//netdna.bootstrapcdn.com/bootstrap/'+bsVersion+'/css/bootstrap.min.css" rel="stylesheet">\n' +
  83. ' <link href="//mattlewis.me/angular-bootstrap-calendar/dist/css/angular-bootstrap-calendar.min.css" rel="stylesheet">\n' +
  84. ' </head>\n' +
  85. ' <body>\n\n' +
  86. content + '\n' +
  87. ' </body>\n' +
  88. '</html>\n';
  89. };
  90. var scriptContent = function(content) {
  91. return "angular.module('mwl.calendar.docs', ['mwl.calendar', 'ngAnimate', 'ui.bootstrap']);" + "\n" + content;
  92. };
  93. addField('description', 'http://mattlewis92.github.io/angular-bootstrap-calendar/');
  94. addField('files[index.html]', indexContent(content.markup, uibVersion));
  95. addField('files[helpers.js]', helpers.scripts);
  96. helpers.templates.forEach(function(templateName) {
  97. addField('files[' + templateName + ']', $templateCache.get(templateName));
  98. });
  99. addField('files[example.js]', scriptContent(content.javascript));
  100. $document.find('body').append(form);
  101. form[0].submit();
  102. form.remove();
  103. };
  104. });