'),function(e,h,i,j){var k,l=c(i);if(a.isDefined(l("escape"))?k=b(l("escape")):a.isDefined(l("no-escape"))&&(k=b("false")),j.init(h.find("code")),l("onhighlight")&&j.highlightCallback(function(){e.$eval(l("onhighlight"))}),(f||g)&&d(i)){var m;m=k&&!k(e)?g:f,j.highlight(m)}e.$on("$destroy",function(){j.release()})}}}}],h=function(b){return function(){return{require:"?hljs",restrict:"A",link:function(c,d,e,f){f&&e.$observe(b,function(b){a.isDefined(b)&&f.setLanguage(b)})}}}},g=function(a){return function(){return{require:"?hljs",restrict:"A",link:function(b,c,d,e){e&&b.$watch(d[a],function(a,c){(a||a!==c)&&e.setInterpolateScope(a?b:null)})}}}},i=function(a){return function(){return{require:"?hljs",restrict:"A",link:function(b,c,d,e){e&&b.$watch(d[a],function(a){a?e.highlight(a):e.clear()})}}}},j=function(b){return["$http","$templateCache","$q",function(c,d,e){return{require:"?hljs",restrict:"A",compile:function(f,g){var h=g[b];return function(b,f,g,i){var j=0;i&&b.$watch(h,function(b){var f=++j;if(b&&a.isString(b)){var g,h;g=d.get(b),g||(h=e.defer(),c.get(b,{cache:d,transformResponse:function(a){return a}}).success(function(a){f===j&&h.resolve(a)}).error(function(){f===j&&i.clear(),h.resolve()}),g=h.promise),e.when(g).then(function(b){b&&(a.isArray(b)?b=b[1]:a.isObject(b)&&(b=b.data),b=b.replace(/^(\r\n|\r|\n)/m,""),i.highlight(b))})}else i.clear()})}}}}]},function(b){b.directive("hljs",f),a.forEach(["interpolate","hljsInterpolate","compile","hljsCompile"],function(a){b.directive(a,g(a))}),a.forEach(["language","hljsLanguage"],function(a){b.directive(a,h(a))}),a.forEach(["source","hljsSource"],function(a){b.directive(a,i(a))}),a.forEach(["include","hljsInclude"],function(a){b.directive(a,j(a))})}(e),"hljs"});
--------------------------------------------------------------------------------
/www/js/lib/angular-markdown-editor.js:
--------------------------------------------------------------------------------
1 | angular
2 | .module('angular-markdown-editor', [])
3 | .directive('markdownEditor', ['$parse', function(parse) {
4 | return {
5 | restrict: 'A',
6 | require: 'ngModel',
7 | link: function(scope, element, attrs, ngModel) {
8 | var options = scope.$eval(attrs.markdownEditor);
9 |
10 | // Only initialize the $.markdown plugin once.
11 | if (! element.hasClass('processed')) {
12 | element.addClass('processed');
13 |
14 | // Setup the markdown WYSIWYG.
15 | element.markdown({
16 | autofocus: options.autofocus || false,
17 | saveable: options.saveable || false,
18 | iconlibrary: options.iconlibrary || 'glyph',
19 | hideable: options.hideable || false,
20 | width: options.width || 'inherit',
21 | height: options.height || 'inherit',
22 | resize: options.resize || 'none',
23 | language: options.language || 'en',
24 | footer: options.footer || '',
25 | fullscreen: options.fullscreen || { enable: true, icons: {}},
26 | hiddenButtons: options.hiddenButtons || null,
27 | disabledButtons: options.disabledButtons || null,
28 | initialstate: options.initialstate || 'editor',
29 | parser: options.parser || null,
30 | dropZoneOptions: options.dropZoneOptions || null,
31 | enableDropDataUri: options.enableDropDataUri || false,
32 | showButtons: options.showButtons || null,
33 | additionalButtons: options.additionalButtons || (options.addExtraButtons ? addNewButtons() : []),
34 | onChange: function(event) {
35 | // When a change occurs, we need to update scope in case the user clicked one of the plugin buttons
36 | // (which isn't the same as a keydown event that angular would listen for).
37 | ngModel.$setViewValue(event.getContent());
38 | }
39 | });
40 | }
41 | }
42 | };
43 | }]);
44 |
45 | /**
46 | * Add new extra buttons: Strikethrough & Table
47 | * @return mixed additionButtons
48 | */
49 | function addNewButtons() {
50 | return [[{
51 | name: "groupFont",
52 | data: [{
53 | name: "cmdStrikethrough",
54 | toggle: false,
55 | title: "Strikethrough",
56 | icon: {
57 | fa: "fa fa-strikethrough",
58 | glyph: "glyphicon glyphicon-minus"
59 | },
60 | callback: function(e) {
61 | // Give/remove ~~ surround the selection
62 | var chunk, cursor, selected = e.getSelection(),
63 | content = e.getContent();
64 |
65 | if (selected.length === 0) {
66 | // Give extra word
67 | chunk = e.__localize('strikethrough');
68 | } else {
69 | chunk = selected.text;
70 | }
71 |
72 | // transform selection and set the cursor into chunked text
73 | if (content.substr(selected.start - 2, 2) === '~~' &&
74 | content.substr(selected.end, 2) === '~~') {
75 | e.setSelection(selected.start - 2, selected.end + 2);
76 | e.replaceSelection(chunk);
77 | cursor = selected.start - 2;
78 | } else {
79 | e.replaceSelection('~~' + chunk + '~~');
80 | cursor = selected.start + 2;
81 | }
82 |
83 | // Set the cursor
84 | e.setSelection(cursor, cursor + chunk.length);
85 | }
86 | }]
87 | },
88 | {
89 | name: "groupMisc",
90 | data: [{
91 | name: "cmdTable",
92 | toggle: false,
93 | title: "Table",
94 | icon: {
95 | fa: "fa fa-table",
96 | glyph: "glyphicon glyphicon-th"
97 | },
98 | callback: function(e) {
99 | // Replace selection with some drinks
100 | var chunk, cursor,
101 | selected = e.getSelection(), content = e.getContent(),
102 | chunk = "\n| Tables | Are | Cool | \n"
103 | + "| ------------- |:-------------:| -----:| \n"
104 | + "| col 3 is | right-aligned | $1600 | \n"
105 | + "| col 2 is | centered | $12 | \n"
106 | + "| zebra stripes | are neat | $1 |"
107 |
108 | // transform selection and set the cursor into chunked text
109 | e.replaceSelection(chunk)
110 | cursor = selected.start
111 |
112 | // Set the cursor
113 | e.setSelection(cursor,cursor+chunk.length);
114 | }
115 | }]
116 | }]];
117 | }
118 |
--------------------------------------------------------------------------------
/www/js/lib/angular-marked.min.js:
--------------------------------------------------------------------------------
1 | (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.angularMarked=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;opaulo.quintans@gmail.com
6 |6 | {{lane.name}} 7 | 8 | 15 | | 16 |
---|
19 |
20 |
42 |
21 |
23 |
39 |
41 |
24 |
26 |
31 |
30 | {{task.title}}
32 | {{task.title}}
33 | {{task.user.name}}
34 |
35 | spent: {{task.spent || 0}} h
36 | remaining: {{task.remaining || 0}} h
37 |
38 | |
43 |
Name | 26 |Login | 27 |Admin | 28 |Actions | 29 |
---|---|---|---|
{{user.name}} | 34 |{{user.username}} | 35 |![]() |
36 |
37 | ![]() |
43 |
Choose an existing task board or create a new one.
6 |