kanaui 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,271 +0,0 @@
1
- /*
2
- * JQuery URL Parser plugin, v2.2.1
3
- * Developed and maintanined by Mark Perkins, mark@allmarkedup.com
4
- * Source repository: https://github.com/allmarkedup/jQuery-URL-Parser
5
- * Licensed under an MIT-style license. See https://github.com/allmarkedup/jQuery-URL-Parser/blob/master/LICENSE for details.
6
- */
7
-
8
- ;(function(factory) {
9
- if (typeof define === 'function' && define.amd) {
10
- // AMD available; use anonymous module
11
- if ( typeof jQuery !== 'undefined' ) {
12
- define(['jquery'], factory);
13
- } else {
14
- define([], factory);
15
- }
16
- } else {
17
- // No AMD available; mutate global vars
18
- if ( typeof jQuery !== 'undefined' ) {
19
- factory(jQuery);
20
- } else {
21
- factory();
22
- }
23
- }
24
- })(function($, undefined) {
25
-
26
- var tag2attr = {
27
- a : 'href',
28
- img : 'src',
29
- form : 'action',
30
- base : 'href',
31
- script : 'src',
32
- iframe : 'src',
33
- link : 'href'
34
- },
35
-
36
- key = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'], // keys available to query
37
-
38
- aliases = { 'anchor' : 'fragment' }, // aliases for backwards compatability
39
-
40
- parser = {
41
- strict : /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, //less intuitive, more accurate to the specs
42
- loose : /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
43
- },
44
-
45
- toString = Object.prototype.toString,
46
-
47
- isint = /^[0-9]+$/;
48
-
49
- function parseUri( url, strictMode ) {
50
- var str = decodeURI( url ),
51
- res = parser[ strictMode || false ? 'strict' : 'loose' ].exec( str ),
52
- uri = { attr : {}, param : {}, seg : {} },
53
- i = 14;
54
-
55
- while ( i-- ) {
56
- uri.attr[ key[i] ] = res[i] || '';
57
- }
58
-
59
- // build query and fragment parameters
60
- uri.param['query'] = parseString(uri.attr['query']);
61
- uri.param['fragment'] = parseString(uri.attr['fragment']);
62
-
63
- // split path and fragement into segments
64
- uri.seg['path'] = uri.attr.path.replace(/^\/+|\/+$/g,'').split('/');
65
- uri.seg['fragment'] = uri.attr.fragment.replace(/^\/+|\/+$/g,'').split('/');
66
-
67
- // compile a 'base' domain attribute
68
- uri.attr['base'] = uri.attr.host ? (uri.attr.protocol ? uri.attr.protocol+'://'+uri.attr.host : uri.attr.host) + (uri.attr.port ? ':'+uri.attr.port : '') : '';
69
-
70
- return uri;
71
- };
72
-
73
- function getAttrName( elm ) {
74
- var tn = elm.tagName;
75
- if ( typeof tn !== 'undefined' ) return tag2attr[tn.toLowerCase()];
76
- return tn;
77
- }
78
-
79
- function promote(parent, key) {
80
- if (parent[key].length == 0) return parent[key] = {};
81
- var t = {};
82
- for (var i in parent[key]) t[i] = parent[key][i];
83
- parent[key] = t;
84
- return t;
85
- }
86
-
87
- function parse(parts, parent, key, val) {
88
- var part = parts.shift();
89
- if (!part) {
90
- if (isArray(parent[key])) {
91
- parent[key].push(val);
92
- } else if ('object' == typeof parent[key]) {
93
- parent[key] = val;
94
- } else if ('undefined' == typeof parent[key]) {
95
- parent[key] = val;
96
- } else {
97
- parent[key] = [parent[key], val];
98
- }
99
- } else {
100
- var obj = parent[key] = parent[key] || [];
101
- if (']' == part) {
102
- if (isArray(obj)) {
103
- if ('' != val) obj.push(val);
104
- } else if ('object' == typeof obj) {
105
- obj[keys(obj).length] = val;
106
- } else {
107
- obj = parent[key] = [parent[key], val];
108
- }
109
- } else if (~part.indexOf(']')) {
110
- part = part.substr(0, part.length - 1);
111
- if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
112
- parse(parts, obj, part, val);
113
- // key
114
- } else {
115
- if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
116
- parse(parts, obj, part, val);
117
- }
118
- }
119
- }
120
-
121
- function merge(parent, key, val) {
122
- if (~key.indexOf(']')) {
123
- var parts = key.split('['),
124
- len = parts.length,
125
- last = len - 1;
126
- parse(parts, parent, 'base', val);
127
- } else {
128
- if (!isint.test(key) && isArray(parent.base)) {
129
- var t = {};
130
- for (var k in parent.base) t[k] = parent.base[k];
131
- parent.base = t;
132
- }
133
- set(parent.base, key, val);
134
- }
135
- return parent;
136
- }
137
-
138
- function parseString(str) {
139
- return reduce(String(str).split(/&|;/), function(ret, pair) {
140
- try {
141
- pair = decodeURIComponent(pair.replace(/\+/g, ' '));
142
- } catch(e) {
143
- // ignore
144
- }
145
- var eql = pair.indexOf('='),
146
- brace = lastBraceInKey(pair),
147
- key = pair.substr(0, brace || eql),
148
- val = pair.substr(brace || eql, pair.length),
149
- val = val.substr(val.indexOf('=') + 1, val.length);
150
-
151
- if ('' == key) key = pair, val = '';
152
-
153
- return merge(ret, key, val);
154
- }, { base: {} }).base;
155
- }
156
-
157
- function set(obj, key, val) {
158
- var v = obj[key];
159
- if (undefined === v) {
160
- obj[key] = val;
161
- } else if (isArray(v)) {
162
- v.push(val);
163
- } else {
164
- obj[key] = [v, val];
165
- }
166
- }
167
-
168
- function lastBraceInKey(str) {
169
- var len = str.length,
170
- brace, c;
171
- for (var i = 0; i < len; ++i) {
172
- c = str[i];
173
- if (']' == c) brace = false;
174
- if ('[' == c) brace = true;
175
- if ('=' == c && !brace) return i;
176
- }
177
- }
178
-
179
- function reduce(obj, accumulator){
180
- var i = 0,
181
- l = obj.length >> 0,
182
- curr = arguments[2];
183
- while (i < l) {
184
- if (i in obj) curr = accumulator.call(undefined, curr, obj[i], i, obj);
185
- ++i;
186
- }
187
- return curr;
188
- }
189
-
190
- function isArray(vArg) {
191
- return Object.prototype.toString.call(vArg) === "[object Array]";
192
- }
193
-
194
- function keys(obj) {
195
- var keys = [];
196
- for ( prop in obj ) {
197
- if ( obj.hasOwnProperty(prop) ) keys.push(prop);
198
- }
199
- return keys;
200
- }
201
-
202
- function purl( url, strictMode ) {
203
- if ( arguments.length === 1 && url === true ) {
204
- strictMode = true;
205
- url = undefined;
206
- }
207
- strictMode = strictMode || false;
208
- url = url || window.location.toString();
209
-
210
- return {
211
-
212
- data : parseUri(url, strictMode),
213
-
214
- // get various attributes from the URI
215
- attr : function( attr ) {
216
- attr = aliases[attr] || attr;
217
- return typeof attr !== 'undefined' ? this.data.attr[attr] : this.data.attr;
218
- },
219
-
220
- // return query string parameters
221
- param : function( param ) {
222
- return typeof param !== 'undefined' ? this.data.param.query[param] : this.data.param.query;
223
- },
224
-
225
- // return fragment parameters
226
- fparam : function( param ) {
227
- return typeof param !== 'undefined' ? this.data.param.fragment[param] : this.data.param.fragment;
228
- },
229
-
230
- // return path segments
231
- segment : function( seg ) {
232
- if ( typeof seg === 'undefined' ) {
233
- return this.data.seg.path;
234
- } else {
235
- seg = seg < 0 ? this.data.seg.path.length + seg : seg - 1; // negative segments count from the end
236
- return this.data.seg.path[seg];
237
- }
238
- },
239
-
240
- // return fragment segments
241
- fsegment : function( seg ) {
242
- if ( typeof seg === 'undefined' ) {
243
- return this.data.seg.fragment;
244
- } else {
245
- seg = seg < 0 ? this.data.seg.fragment.length + seg : seg - 1; // negative segments count from the end
246
- return this.data.seg.fragment[seg];
247
- }
248
- }
249
-
250
- };
251
-
252
- };
253
-
254
- if ( typeof $ !== 'undefined' ) {
255
-
256
- $.fn.url = function( strictMode ) {
257
- var url = '';
258
- if ( this.length ) {
259
- url = $(this).attr( getAttrName(this[0]) ) || '';
260
- }
261
- return purl( url, strictMode );
262
- };
263
-
264
- $.url = purl;
265
-
266
- } else {
267
- window.purl = purl;
268
- }
269
-
270
- });
271
-
@@ -1,190 +0,0 @@
1
- function ReportsGraphs(reports) {
2
- // To build the data tables
3
- this.reportsDataTables = new ReportsDataTables(reports);
4
- }
5
-
6
- ReportsGraphs.prototype.getTitle = function(defaultTitle, position) {
7
- var overridenTitle = $.url().param('title' + position);
8
- if (!overridenTitle) {
9
- return defaultTitle;
10
- } else {
11
- return overridenTitle;
12
- }
13
- }
14
-
15
- ReportsGraphs.prototype.getMappingType = function(inputType, position) {
16
- if (inputType == 'TIMELINE') {
17
- var layersOrLines = $.url().param('__layersOrLines' + position);
18
- if (!layersOrLines || layersOrLines != 'layers') {
19
- return 'lines';
20
- } else {
21
- return 'layers';
22
- }
23
- } else if (inputType == 'COUNTERS') {
24
- return 'pie';
25
- } else {
26
- return 'unknown';
27
- }
28
- }
29
-
30
- ReportsGraphs.prototype.doDrawAll = function(input) {
31
- var inputData = input.data;
32
-
33
- var nbGraphs = inputData.length + 1;
34
- var canvasHeigthWithMargins = input.topMargin + (nbGraphs * input.canvasHeigth) + ((nbGraphs - 1) * input.betweenGraphMargin) + input.bottomMargin;
35
- var canvasHeigthGraph = input.canvasHeigth;
36
-
37
- var translateX = input.leftMargin;
38
-
39
- var graphStructure = new killbillGraph.GraphStructure();
40
-
41
-
42
- graphStructure.setupDomStructure();
43
- var canvas = graphStructure.createCanvas([input.topMargin, input.rightMargin, input.bottomMargin, input.leftMargin],
44
- input.canvasWidth, canvasHeigthWithMargins);
45
-
46
-
47
- var curTranslateY = input.topMargin;
48
- var curTranslateLabelY = curTranslateY + (canvasHeigthGraph / 2);
49
-
50
- for (var i = 0; i < inputData.length; i++) {
51
- var curInput = inputData[i];
52
- var curType = this.getMappingType(curInput.type, i + 1);
53
- var curData = curInput.data;
54
- var curTitle = this.getTitle(curInput.title, i + 1);
55
-
56
- log.debug("Drawing '" + curTitle + "'");
57
- log.trace(curData);
58
-
59
- // Add the xAxis tick first for ordering purpose.
60
- var nextTranslateY = curTranslateY + canvasHeigthGraph;
61
- var xAxisCanvaGroup;
62
- if (curType == 'lines' || curType == 'layers') {
63
- xAxisCanvaGroup = graphStructure.createCanvasGroup(canvas, translateX, nextTranslateY);
64
- }
65
-
66
- var canvasGrp = graphStructure.createCanvasGroup(canvas, translateX, curTranslateY);
67
- var theGraph;
68
- if (curType == 'lines') {
69
- theGraph = new killbillGraph.KBLinesGraph(canvasGrp, curTitle, curData, input.canvasWidth, canvasHeigthGraph, d3.scale.category20b());
70
- } else if (curType == 'layers') {
71
- theGraph = new killbillGraph.KBLayersGraph(canvasGrp, curTitle, curData, input.canvasWidth, canvasHeigthGraph, d3.scale.category20c());
72
- } else if (curType == 'pie') {
73
- theGraph = new killbillGraph.KBPie(canvasGrp, curTitle, curData, input.canvasWidth, canvasHeigthGraph, d3.scale.category20c(), true);
74
- } else if (curType == 'histogram') {
75
- var canvasGrp = graphStructure.createCanvasGroup(canvas, translateX, curTranslateY);
76
- theGraph = new killbillGraph.KBHistogram(canvasGrp, curTitle, curData, input.canvasWidth, canvasHeigthGraph, d3.scale.category20c());
77
- }
78
- theGraph.draw();
79
-
80
- curTranslateLabelY = curTranslateLabelY;
81
- curTranslateY = nextTranslateY;
82
-
83
- if (curType == 'lines' || curType == 'layers') {
84
- theGraph.createXAxis(xAxisCanvaGroup, canvasHeigthGraph);
85
- }
86
-
87
- // Add subtitle
88
- this.addSubtitle(input, curData, i, curTranslateY + 20, curType);
89
-
90
- curTranslateY = curTranslateY + input.betweenGraphMargin;
91
- }
92
- }
93
-
94
- ReportsGraphs.prototype.addSubtitle = function(input, data, i, yOffset, curType) {
95
- if (curType != 'lines' && curType != 'layers') {
96
- return;
97
- }
98
-
99
- var subtitle = $('<div/>').attr('id', 'subtitle-' + i)
100
- .css('position', 'absolute')
101
- .css('top', yOffset + 'px');
102
-
103
- // Reports position starts at 1
104
- var position = i + 1;
105
-
106
- // Add CSV link
107
- var csvURL = this.reportsDataTables.buildCSVURL(position);
108
- var csvLink = $('<a/>').attr('href', csvURL).text('Download data (CSV)');
109
- subtitle.append(csvLink);
110
-
111
- /*
112
- subtitle.append("&nbsp;/&nbsp;");
113
-
114
- // Add DataTables link
115
- var modalBody = $('<div/>').attr('class', 'modal-body');
116
- for (var jdx in data) {
117
- if (!data[jdx].values || data[jdx].values.length == 0) {
118
- continue;
119
- }
120
- this.reportsDataTables.build(data[jdx], i + parseInt(jdx), modalBody);
121
- }
122
-
123
- var modal = $('<div/>').attr('class', 'modal fade')
124
- .attr('id', 'dataTablesModalWrapper-' + i)
125
- .attr('tabindex', '-1')
126
- .attr('role', 'dialog')
127
- .attr('aria-labelledby', 'RawData')
128
- .attr('aria-hidden', 'true')
129
- .append($('<div/>').attr('class', 'modal-dialog')
130
- .append($('<div/>').attr('class', 'modal-content')
131
- .append(modalBody)));
132
- subtitle.append(modal);
133
- $('#dataTablesModalWrapper-' + i).modal();
134
-
135
- var dataTablesLink = $('<a/>').text('View data').css('cursor', 'pointer');
136
- dataTablesLink.click(function() {
137
- $('#dataTablesModalWrapper-' + i).modal('toggle');
138
- });
139
- subtitle.append(dataTablesLink);
140
- */
141
-
142
- subtitle.append("&nbsp;|&nbsp;");
143
-
144
- // Add style link
145
- var layersOrLines = $.url().param('__layersOrLines' + position);
146
- if (!layersOrLines || layersOrLines != 'layers') {
147
- var layersOrLinesLink = $('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURL() + '&__layersOrLines' + position + '=layers').text('Switch to layers');
148
- } else {
149
- var layersOrLinesLink = $('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURL() + '&__layersOrLines' + position + '=lines').text('Switch to lines');
150
- }
151
- subtitle.append(layersOrLinesLink);
152
-
153
- // Add smoothing links
154
- var firstLink = true;
155
- var smooth = $.url().param('smooth' + position);
156
- if (smooth) {
157
- firstLink ? subtitle.append("&nbsp;|&nbsp;") : subtitle.append("&nbsp;/&nbsp;");
158
- firstLink = false;
159
- subtitle.append($('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURLForNewSmooth(position)).text('Raw data'));
160
- }
161
- if (smooth != 'AVERAGE_WEEKLY') {
162
- firstLink ? subtitle.append("&nbsp;|&nbsp;") : subtitle.append("&nbsp;/&nbsp;");
163
- firstLink = false;
164
- subtitle.append($('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURLForNewSmooth(position, 'AVERAGE_WEEKLY')).text('Weekly average'));
165
- }
166
- if (smooth != 'AVERAGE_MONTHLY') {
167
- firstLink ? subtitle.append("&nbsp;|&nbsp;") : subtitle.append("&nbsp;/&nbsp;");
168
- firstLink = false;
169
- subtitle.append($('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURLForNewSmooth(position, 'AVERAGE_MONTHLY')).text('Monthly average'));
170
- }
171
- if (smooth != 'SUM_WEEKLY') {
172
- firstLink ? subtitle.append("&nbsp;|&nbsp;") : subtitle.append("&nbsp;/&nbsp;");
173
- firstLink = false;
174
- subtitle.append($('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURLForNewSmooth(position, 'SUM_WEEKLY')).text('Weekly sum'));
175
- }
176
- if (smooth != 'SUM_MONTHLY') {
177
- firstLink ? subtitle.append("&nbsp;|&nbsp;") : subtitle.append("&nbsp;/&nbsp;");
178
- firstLink = false;
179
- subtitle.append($('<a/>').attr('href', this.reportsDataTables.reports.buildRefreshURLForNewSmooth(position, 'SUM_MONTHLY')).text('Monthly sum'));
180
- }
181
-
182
- $('#charts').append(subtitle);
183
- // Need to append the element first before being able to get the width
184
- subtitle.css('left', (input.leftMargin + input.canvasWidth / 2 - subtitle.width() / 2) + 'px')
185
- }
186
-
187
- ReportsGraphs.prototype.drawAll = function(dataForAllReports) {
188
- var input = new killbillGraph.KBInputGraphs(750, 400, 80, 180, 80, 80, 160, dataForAllReports);
189
- this.doDrawAll(input);
190
- }