Commit 89558a416e35b2af0a2c60cf45564fcb8ac1f85d
1 parent
1a26bccd
datatype, provider mod
Showing
20 changed files
with
1230 additions
and
707 deletions
alasql-utility/alasql-utility.js
1 | -/** | ||
2 | - * Created by renato on 31/05/16. | ||
3 | - */ | 1 | +function alasql_selectData (data, fields, filters) { |
2 | + if(fields.length == 0) | ||
3 | + return []; | ||
4 | + | ||
5 | + var _fields = _addParenthesis(fields); | ||
6 | + | ||
7 | + var select = _alasql_SELECT(_fields); | ||
8 | + | ||
9 | + var where = ""; | ||
10 | + if(filters && filters.length) { | ||
11 | + var _filters = _copy(filters); | ||
12 | + where = _alasql_WHERE(_filters); | ||
13 | + } | ||
14 | + | ||
15 | + var query = select + " FROM ?" + where; | ||
16 | + | ||
17 | + return alasql(query, [data]); | ||
18 | +} | ||
19 | + | ||
20 | +function alasql_complexSelectData (data, fields, filters, aggregators, orders) { | ||
21 | + if(fields.length == 0) | ||
22 | + return []; | ||
23 | + | ||
24 | + var _fields = _addParenthesis(fields); | ||
25 | + | ||
26 | + var select = _alasql_SELECT(_fields); | ||
27 | + | ||
28 | + var where = ""; | ||
29 | + if(filters && filters.length) { | ||
30 | + var _filters = _copy(filters); | ||
31 | + where = _alasql_WHERE(_filters); | ||
32 | + } | ||
33 | + | ||
34 | + var orderBy = ""; | ||
35 | + if(orders && orders.length) { | ||
36 | + var _orders = _copy(orders); | ||
37 | + orderBy = _alasql_ORDERBY(_orders); | ||
38 | + } | ||
39 | + | ||
40 | + var groupBy = ""; | ||
41 | + if(aggregators && aggregators.length) { | ||
42 | + var _aggregators = _copy(aggregators); | ||
43 | + groupBy = _alasql_GROUPBY(_aggregators); | ||
44 | + select = groupBy[0]; | ||
45 | + groupBy = groupBy[1]; | ||
46 | + } | ||
47 | + | ||
48 | + var query = select + " FROM ?" + where + " " + groupBy + " " + orderBy; | ||
49 | + | ||
50 | + return alasql(query, [data]); | ||
51 | +} | ||
52 | + | ||
53 | +function _alasql_SELECT (fields) { | ||
54 | + | ||
55 | + var select = "SELECT "; | ||
56 | + | ||
57 | + if(fields[0] == "*") | ||
58 | + return select += "*"; | ||
59 | + | ||
60 | + for (var i = 0; i < fields.length; i++) | ||
61 | + select += fields[i] + ", "; | ||
62 | + return select.slice(0, -2); | ||
63 | +} | ||
64 | + | ||
65 | +function _alasql_WHERE (filters) { | ||
66 | + var where = " WHERE "; | ||
67 | + var logicalOperator; | ||
68 | + | ||
69 | + /*DEPRECATED*/if(filters[0].logicalOperator == undefined) { | ||
70 | + logicalOperator = "AND" | ||
71 | + } | ||
72 | + else { | ||
73 | + logicalOperator = filters[0].logicalOperator; | ||
74 | + filters = filters.slice(1); | ||
75 | + } | ||
76 | + | ||
77 | + for (var i=0; i < filters.length; i++) | ||
78 | + filters[i]["field"] = _normalizeField(filters[i]["field"]); | ||
79 | + | ||
80 | + for (var i=0; i < filters.length; i++) { | ||
81 | + if(filters[i]["operation"] == "contains") | ||
82 | + where += filters[i]["field"] + " like '%" + filters[i]["value"] + "%' " + logicalOperator + " "; | ||
83 | + else if(filters[i]["operation"] == "not contains") | ||
84 | + where += filters[i]["field"] + " not like '%" + filters[i]["value"] + "%' " + logicalOperator + " "; | ||
85 | + else if(filters[i]["operation"] == "start") | ||
86 | + where += filters[i]["field"] + " like '" + filters[i]["value"] + "%' " + logicalOperator + " "; | ||
87 | + else if(filters[i]["operation"] == "ends") | ||
88 | + where += filters[i]["field"] + " like '%" + filters[i]["value"] + "' " + logicalOperator + " "; | ||
89 | + else | ||
90 | + where += filters[i]["field"] + " " + filters[i]["operation"] + " " + filters[i]["value"] + " " + logicalOperator + " "; | ||
91 | + } | ||
92 | + | ||
93 | + return where.slice(0, -4); | ||
94 | +} | ||
95 | + | ||
96 | +function _alasql_GROUPBY (aggregators) { | ||
97 | + for (var i=0; i < aggregators.length; i++) | ||
98 | + aggregators[i]["field"] = _normalizeField(aggregators[i]["field"]); | ||
99 | + | ||
100 | + var select = "SELECT "; | ||
101 | + var groupBy = "GROUP BY "; | ||
102 | + | ||
103 | + for (var i = 0; i < aggregators.length; i++) { | ||
104 | + if(aggregators[i]["operation"] == "GROUP BY") { | ||
105 | + select += aggregators[i]["field"] + ", "; | ||
106 | + groupBy += aggregators[i]["field"] + ", "; | ||
107 | + } | ||
108 | + else | ||
109 | + select += aggregators[i]["operation"] + "(" + aggregators[i]["field"] + ") as " + aggregators[i]["field"] + ", "; | ||
110 | + } | ||
111 | + | ||
112 | + return [select.slice(0, -2), groupBy.slice(0, -2)]; | ||
113 | +} | ||
114 | + | ||
115 | +function _alasql_ORDERBY (orders) { | ||
116 | + for (var i=0; i < orders.length; i++) | ||
117 | + orders[i]["field"] = _normalizeField(orders[i]["field"]); | ||
118 | + | ||
119 | + var orderBy = "ORDER BY "; | ||
120 | + | ||
121 | + for (var i = 0; i < orders.length; i++) | ||
122 | + orderBy += orders[i]["field"] + " " + orders[i]["operation"] + ", "; | ||
123 | + | ||
124 | + return orderBy.slice(0, -2); | ||
125 | +} | ||
126 | + | ||
127 | +function _addParenthesis (fields) { | ||
128 | + var result = []; | ||
129 | + | ||
130 | + for (var i=0; i < fields.length; i++) | ||
131 | + result.push(_normalizeField(fields[i])); | ||
132 | + | ||
133 | + return result; | ||
134 | +} | ||
135 | + | ||
136 | +function _normalizeField (field) { | ||
137 | + /*DEPRECATED*/return "[" + field.substring(field.lastIndexOf(",") + 1, field.length) + "]"; | ||
138 | + //return "[" + field + "]"; | ||
139 | +} | ||
140 | + | ||
141 | +function transformData (data, fields, truncate) { | ||
142 | + if(!data || data.length == 0) | ||
143 | + return []; | ||
144 | + | ||
145 | + /*DEPRECATED*/for (var i=0; i < fields.length; i++) | ||
146 | + fields[i] = fields[i].substring(fields[i].lastIndexOf(",") + 1, fields[i].length); | ||
147 | + | ||
148 | + var tData = []; | ||
149 | + | ||
150 | + for (var i in fields){ | ||
151 | + | ||
152 | + var field = fields[i]; | ||
153 | + var values = []; | ||
154 | + | ||
155 | + for (var i in data) { | ||
156 | + var v = data[i][field]; | ||
157 | + if(truncate) | ||
158 | + if(!isNaN(v) && v % 1 != 0) | ||
159 | + v = Math.floor(v * 100) / 100; | ||
160 | + values.push(v); | ||
161 | + } | ||
162 | + | ||
163 | + tData.push({ | ||
164 | + name: field, | ||
165 | + data: values | ||
166 | + }); | ||
167 | + } | ||
168 | + | ||
169 | + return tData; | ||
170 | +}; | ||
171 | + | ||
172 | +function _copy (o) { | ||
173 | + var out, v, key; | ||
174 | + out = Array.isArray(o) ? new Array(o.length) : {}; | ||
175 | + for (key in o) { | ||
176 | + v = o[key]; | ||
177 | + out[key] = (typeof v === "object") ? this._copy(v) : v; | ||
178 | + } | ||
179 | + return out; | ||
180 | +} | ||
4 | \ No newline at end of file | 181 | \ No newline at end of file |
controllets/data-sevc-controllet/co-datalets-creator-controllet.html
0 โ 100755
1 | +<script src="../shared_js/perfect-scrollbar/js/min/perfect-scrollbar.jquery.min.js"></script> | ||
2 | +<link rel="stylesheet" href="../shared_js/perfect-scrollbar/css/perfect-scrollbar.min.css"> | ||
3 | + | ||
4 | +<script src="../../locales/controllet_ln.js"></script> | ||
5 | + | ||
6 | +<link rel="import" href="../../bower_components/polymer/polymer.html"> | ||
7 | + | ||
8 | +<link rel="import" href="../page-slider-controllet/page-slider-controllet.html"> | ||
9 | + | ||
10 | +<link rel="import" href="../select-data-controllet/select-data-controllet.html" /> | ||
11 | +<link rel="import" href="../select-visualization-controllet/select-visualization-controllet.html" /> | ||
12 | + | ||
13 | +<dom-module id="co-datalets-creator-controllet"> | ||
14 | + | ||
15 | + <template> | ||
16 | + | ||
17 | + <page-slider-controllet id="slider"> | ||
18 | + | ||
19 | + <neon-animatable> | ||
20 | + | ||
21 | + <select-data-controllet id="select_data" data-url={{dataUrl}} data={{data}}></select-data-controllet> | ||
22 | + | ||
23 | + </neon-animatable> | ||
24 | + | ||
25 | + <neon-animatable> | ||
26 | + | ||
27 | + <select-visualization-controllet id="select_visualization" deep-url={{deepUrl}} datalets-list-url={{dataletsListUrl}}></select-visualization-controllet> | ||
28 | + | ||
29 | + </neon-animatable> | ||
30 | + | ||
31 | + </page-slider-controllet> | ||
32 | + | ||
33 | + </template> | ||
34 | + | ||
35 | + <script> | ||
36 | + | ||
37 | + Polymer({ | ||
38 | + | ||
39 | + is : 'co-datalets-creator-controllet', | ||
40 | + | ||
41 | + listeners : { | ||
42 | + 'page-slider-controllet_selected' : '_updateSlider', | ||
43 | + 'dataset-selection-controllet_data-url' : '_allowSecondStep', | ||
44 | + 'select-fields-controllet_selected-fields' : '_allowThirdStep', | ||
45 | + 'filters-controllet_filters': '_allowThirdStep' | ||
46 | + }, | ||
47 | + | ||
48 | + properties : { | ||
49 | + | ||
50 | + dataUrl : { | ||
51 | + type : String, | ||
52 | + value : undefined | ||
53 | + }, | ||
54 | + | ||
55 | + data : { | ||
56 | + type : Array, | ||
57 | + value : [] | ||
58 | + }, | ||
59 | + | ||
60 | + deepUrl : { | ||
61 | + type : String, | ||
62 | + value : undefined | ||
63 | + }, | ||
64 | + | ||
65 | + dataletsListUrl : { | ||
66 | + type : String , | ||
67 | + value : undefined | ||
68 | + }, | ||
69 | + | ||
70 | + localization : { | ||
71 | + type : String, | ||
72 | + value : "en" | ||
73 | + } | ||
74 | + | ||
75 | + }, | ||
76 | + | ||
77 | + ready : function(){ | ||
78 | + ln["localization"] = this.localization; | ||
79 | + | ||
80 | + this.$.select_data.init(); | ||
81 | + }, | ||
82 | + | ||
83 | + _updateSlider : function(e){ | ||
84 | + switch (e.detail.selected) { | ||
85 | + case 0: | ||
86 | + this.$.slider.setTitle(ln["slide2Title_" + this.localization], ln["slide2Subtitle_" + this.localization]); | ||
87 | + | ||
88 | + this.$.slider.chevronLeft("invisible"); | ||
89 | + this.$.slider.chevronRight(false); | ||
90 | + | ||
91 | + if(this.$.slider.getPrevSelected() == 2) | ||
92 | + this.$.slider.chevronRight(true); | ||
93 | + break; | ||
94 | + case 1: | ||
95 | + this.$.slider.setTitle(ln["slide3Title_" + this.localization], ln["slide3Subtitle_" + this.localization]); | ||
96 | + | ||
97 | + this.$.slider.chevronLeft(true); | ||
98 | + this.$.slider.chevronRight("invisible"); | ||
99 | + } | ||
100 | + }, | ||
101 | + | ||
102 | + _allowThirdStep : function(){ | ||
103 | + this.$.slider.chevronRight(false); | ||
104 | + var fields = this.$.select_data.getSelectedFields(); | ||
105 | + var filters = this.$.select_data.getFilters(); | ||
106 | + var data = this.$.select_data.getData(); | ||
107 | + if(fields.length > 0) { | ||
108 | + this.$.select_visualization.init(); | ||
109 | + this.$.select_visualization.setFields(fields); | ||
110 | + this.$.select_visualization.setFilters(filters); | ||
111 | + this.$.select_visualization.setData(data); | ||
112 | + this.$.slider.chevronRight(true); | ||
113 | + } | ||
114 | + } | ||
115 | + | ||
116 | + }); | ||
117 | + | ||
118 | + </script> | ||
119 | + | ||
120 | +</dom-module> | ||
0 | \ No newline at end of file | 121 | \ No newline at end of file |
controllets/data-sevc-controllet/data-sevc-controllet.html
@@ -7,13 +7,10 @@ | @@ -7,13 +7,10 @@ | ||
7 | 7 | ||
8 | <link rel="import" href="../page-slider-controllet/page-slider-controllet.html"> | 8 | <link rel="import" href="../page-slider-controllet/page-slider-controllet.html"> |
9 | 9 | ||
10 | -<!--<link rel="import" href="../dataset-selection-controllet/dataset-selection-controllet.html">--> | ||
11 | <link rel="import" href="../select-dataset-controllet/select-dataset-controllet.html"> | 10 | <link rel="import" href="../select-dataset-controllet/select-dataset-controllet.html"> |
12 | <link rel="import" href="../select-data-controllet/select-data-controllet.html" /> | 11 | <link rel="import" href="../select-data-controllet/select-data-controllet.html" /> |
13 | <link rel="import" href="../select-visualization-controllet/select-visualization-controllet.html" /> | 12 | <link rel="import" href="../select-visualization-controllet/select-visualization-controllet.html" /> |
14 | 13 | ||
15 | - | ||
16 | - | ||
17 | <dom-module id="data-sevc-controllet"> | 14 | <dom-module id="data-sevc-controllet"> |
18 | 15 | ||
19 | <template> | 16 | <template> |
@@ -22,22 +19,19 @@ | @@ -22,22 +19,19 @@ | ||
22 | 19 | ||
23 | <neon-animatable> | 20 | <neon-animatable> |
24 | 21 | ||
25 | - <template is="dom-if" if={{!modify}}> | ||
26 | - <!--<dataset-selection-controllet id="select_dataset" data={{data}} datasets={{datasets}} suggested-datasets={{suggestedDatasets}}></dataset-selection-controllet>--> | ||
27 | - <select-dataset-controllet id="select_dataset" data={{data}} datasets={{datasets}} suggested-datasets={{suggestedDatasets}}></select-dataset-controllet> | ||
28 | - </template> | 22 | + <select-dataset-controllet id="select_dataset" datasets={{datasets}} suggested-datasets={{suggestedDatasets}}></select-dataset-controllet> |
29 | 23 | ||
30 | </neon-animatable> | 24 | </neon-animatable> |
31 | 25 | ||
32 | <neon-animatable> | 26 | <neon-animatable> |
33 | 27 | ||
34 | - <select-data-controllet id="select_data" data-url={{dataUrl}} preselected-fields={{selectedFields}} datalet-preset="{{dataletPreset}}"></select-data-controllet> | 28 | + <select-data-controllet id="select_data"></select-data-controllet> |
35 | 29 | ||
36 | </neon-animatable> | 30 | </neon-animatable> |
37 | 31 | ||
38 | <neon-animatable> | 32 | <neon-animatable> |
39 | 33 | ||
40 | - <select-visualization-controllet id="select_visualization" deep-url={{deepUrl}} datalets-list-url={{dataletsListUrl}} data-url={{dataUrl}} preselected-datalet={{selectedDatalet}} datalet-preset={{dataletPreset}}></select-visualization-controllet> | 34 | + <select-visualization-controllet id="select_visualization" deep-url={{deepUrl}} datalets-list-url={{dataletsListUrl}}></select-visualization-controllet> |
41 | 35 | ||
42 | </neon-animatable> | 36 | </neon-animatable> |
43 | 37 | ||
@@ -54,23 +48,14 @@ | @@ -54,23 +48,14 @@ | ||
54 | listeners : { | 48 | listeners : { |
55 | 'page-slider-controllet_selected' : '_updateSlider', | 49 | 'page-slider-controllet_selected' : '_updateSlider', |
56 | 'dataset-selection-controllet_data-url' : '_allowSecondStep', | 50 | 'dataset-selection-controllet_data-url' : '_allowSecondStep', |
57 | - 'tree-view-controllet_selected-fields' : '_allowThirdStep' | 51 | + 'select-fields-controllet_selected-fields' : '_allowThirdStep', |
52 | + 'filters-controllet_filters': '_allowThirdStep' | ||
58 | }, | 53 | }, |
59 | 54 | ||
60 | properties : { | 55 | properties : { |
61 | 56 | ||
62 | - deepUrl : { | ||
63 | - type : String, | ||
64 | - value : undefined | ||
65 | - }, | ||
66 | - | ||
67 | - dataletsListUrl : { | ||
68 | - type : String , | ||
69 | - value : undefined | ||
70 | - }, | ||
71 | - | ||
72 | datasets : { | 57 | datasets : { |
73 | - type : Array, | 58 | + type : Object, |
74 | value : undefined | 59 | value : undefined |
75 | }, | 60 | }, |
76 | 61 | ||
@@ -79,36 +64,16 @@ | @@ -79,36 +64,16 @@ | ||
79 | value : undefined | 64 | value : undefined |
80 | }, | 65 | }, |
81 | 66 | ||
82 | - dataUrl : { | ||
83 | - type : String, | ||
84 | - value : undefined | ||
85 | - }, | ||
86 | - | ||
87 | - jsonData : { | ||
88 | - type : Object, | 67 | + deepUrl : { |
68 | + type : String, | ||
89 | value : undefined | 69 | value : undefined |
90 | }, | 70 | }, |
91 | 71 | ||
92 | - modify : { | ||
93 | - type : Boolean, | ||
94 | - value : false | ||
95 | - }, | ||
96 | - | ||
97 | - selectedDatalet : { | ||
98 | - type : String, | 72 | + dataletsListUrl : { |
73 | + type : String , | ||
99 | value : undefined | 74 | value : undefined |
100 | }, | 75 | }, |
101 | 76 | ||
102 | - selectedFields : { | ||
103 | - type : Array, | ||
104 | - value : [] | ||
105 | - }, | ||
106 | - | ||
107 | - dataletPreset : { | ||
108 | - type : Object, | ||
109 | - value : [] | ||
110 | - }, | ||
111 | - | ||
112 | localization : { | 77 | localization : { |
113 | type : String, | 78 | type : String, |
114 | value : "en" | 79 | value : "en" |
@@ -117,86 +82,79 @@ | @@ -117,86 +82,79 @@ | ||
117 | }, | 82 | }, |
118 | 83 | ||
119 | ready : function(){ | 84 | ready : function(){ |
120 | - if(this.selectedDatalet){ | ||
121 | - this.modify = true; | ||
122 | - this.$.slider.selected = 1; | ||
123 | - this.dataUrl = this.dataletPreset["data-url"]; | ||
124 | - } | ||
125 | ln["localization"] = this.localization; | 85 | ln["localization"] = this.localization; |
126 | }, | 86 | }, |
127 | 87 | ||
128 | _updateSlider : function(e){ | 88 | _updateSlider : function(e){ |
129 | switch (e.detail.selected) { | 89 | switch (e.detail.selected) { |
130 | case 0: | 90 | case 0: |
131 | - slider.setTitle(ln["slide1Title_" + this.localization], ln["slide1Subtitle_" + this.localization]); | ||
132 | - slider.chevronLeft("invisible"); | ||
133 | - slider.chevronRight(false); | ||
134 | - if(slider.getPrevSelected() == 1) | ||
135 | - slider.chevronRight(true); | 91 | + this.$.slider.setTitle(ln["slide1Title_" + this.localization], ln["slide1Subtitle_" + this.localization]); |
92 | + | ||
93 | + this.$.slider.chevronLeft("invisible"); | ||
94 | + this.$.slider.chevronRight(false); | ||
95 | + | ||
96 | + if(this.$.slider.getPrevSelected() == 1) | ||
97 | + this.$.slider.chevronRight(true); | ||
136 | break; | 98 | break; |
137 | case 1: | 99 | case 1: |
138 | - slider.setTitle(ln["slide2Title_" + this.localization], ln["slide2Subtitle_" + this.localization]); | ||
139 | - if(this.modify){ | ||
140 | - slider.chevronLeft("invisible"); | ||
141 | - } | ||
142 | - else{ | ||
143 | - slider.chevronLeft(true); | ||
144 | - } | ||
145 | - slider.chevronRight(false); | ||
146 | - this._allowThirdStep({detail: {fields: select_data.getFlatFields()}}); | ||
147 | - if(this.modify){ | ||
148 | - this.$.select_visualization.setFields(select_data.getFlatFields()); | ||
149 | - this.$.select_visualization.setFilters(select_data.getFilters()); | ||
150 | - } | 100 | + this.$.slider.setTitle(ln["slide2Title_" + this.localization], ln["slide2Subtitle_" + this.localization]); |
101 | + | ||
102 | + this.$.slider.chevronLeft(true); | ||
103 | + this.$.slider.chevronRight(false); | ||
104 | + | ||
105 | + if(this.$.slider.getPrevSelected() == 2) | ||
106 | + this.$.slider.chevronRight(true); | ||
151 | break; | 107 | break; |
152 | case 2: | 108 | case 2: |
153 | - slider.setTitle(ln["slide3Title_" + this.localization], ln["slide3Subtitle_" + this.localization]); | ||
154 | - slider.chevronLeft(true); | ||
155 | - slider.chevronRight("invisible"); | ||
156 | - | ||
157 | - this.$.select_visualization.setFields(select_data.getFlatFields()); | ||
158 | - this.$.select_visualization.setFilters(select_data.getFilters()); | ||
159 | - if(this.modify) { | ||
160 | - this.$.select_visualization.show();//resize | ||
161 | - } | 109 | + this.$.slider.setTitle(ln["slide3Title_" + this.localization], ln["slide3Subtitle_" + this.localization]); |
110 | + | ||
111 | + this.$.slider.chevronLeft(true); | ||
112 | + this.$.slider.chevronRight("invisible"); | ||
162 | } | 113 | } |
163 | }, | 114 | }, |
164 | 115 | ||
165 | _allowSecondStep : function(e){ | 116 | _allowSecondStep : function(e){ |
166 | if(e.detail.url == "") { | 117 | if(e.detail.url == "") { |
167 | - slider.chevronRight(false); | ||
168 | - select_dataset.$.selected_url.invalid = false; | 118 | + this.$.slider.chevronRight(false); |
119 | + this.$.select_dataset.$.selected_url.invalid = false; | ||
169 | return; | 120 | return; |
170 | } | 121 | } |
171 | 122 | ||
172 | - this.dataUrl = e.detail.url; | 123 | + var that = this; |
173 | 124 | ||
174 | $.ajax({ | 125 | $.ajax({ |
175 | url: e.detail.url, | 126 | url: e.detail.url, |
176 | dataType: "json", | 127 | dataType: "json", |
177 | - success: function(data){ | ||
178 | -// this.dataUrl = e.detail.url | ||
179 | -// this.jsonData = JSON.stringify(data); | ||
180 | - slider.chevronRight(true); | ||
181 | - select_dataset.$.selected_url.invalid = false; | 128 | + success: function(){ |
129 | + that.$.select_dataset.$.selected_url.invalid = false; | ||
130 | + var f = Object.create(providerFactory); | ||
131 | + var provider = f.getProvider(e.detail.url); | ||
132 | + var dataUrl = provider.addLimit(e.detail.url); | ||
133 | + that.$.select_data.dataUrl = dataUrl; | ||
134 | + that.$.select_data.init(); | ||
135 | + that.$.select_visualization.dataUrl = dataUrl; | ||
136 | + that.$.select_visualization.init(); | ||
137 | + that.$.slider.chevronRight(true); | ||
182 | }, | 138 | }, |
183 | error: function(){ | 139 | error: function(){ |
184 | -// this.jsonData = undefined; | ||
185 | - slider.chevronRight(false); | ||
186 | - select_dataset.$.selected_url.invalid = true; | 140 | + that.$.slider.chevronRight(false); |
141 | + that.$.select_dataset.$.selected_url.invalid = true; | ||
187 | } | 142 | } |
188 | }); | 143 | }); |
189 | - | ||
190 | - this.$.select_visualization.reset(); | ||
191 | }, | 144 | }, |
192 | 145 | ||
193 | - _allowThirdStep : function(e){ | ||
194 | - if(e.detail.fields.length > 0) | ||
195 | - slider.chevronRight(true); | ||
196 | - else | ||
197 | - slider.chevronRight(false); | ||
198 | - | ||
199 | - //this.$.select_visualization.reset(); | 146 | + _allowThirdStep : function(){ |
147 | + this.$.slider.chevronRight(false); | ||
148 | + var fields = this.$.select_data.getSelectedFields(); | ||
149 | + var filters = this.$.select_data.getFilters(); | ||
150 | + var data = this.$.select_data.getData(); | ||
151 | + if(fields.length > 0) { | ||
152 | + this.$.select_visualization.init(); | ||
153 | + this.$.select_visualization.setFields(fields); | ||
154 | + this.$.select_visualization.setFilters(filters); | ||
155 | + this.$.select_visualization.setData(data); | ||
156 | + this.$.slider.chevronRight(true); | ||
157 | + } | ||
200 | } | 158 | } |
201 | 159 | ||
202 | }); | 160 | }); |
controllets/data-sevc-controllet/demo/index.html
@@ -10,14 +10,20 @@ | @@ -10,14 +10,20 @@ | ||
10 | <link rel="stylesheet" href="../../shared_js/perfect-scrollbar/css/perfect-scrollbar.min.css"> | 10 | <link rel="stylesheet" href="../../shared_js/perfect-scrollbar/css/perfect-scrollbar.min.css"> |
11 | 11 | ||
12 | <link rel="import" href="../data-sevc-controllet.html" /> | 12 | <link rel="import" href="../data-sevc-controllet.html" /> |
13 | + <link rel="import" href="../co-datalets-creator-controllet.html" /> | ||
13 | </head> | 14 | </head> |
14 | 15 | ||
15 | <body> | 16 | <body> |
16 | 17 | ||
17 | - <data-sevc-controllet localization="en" id="dsc" deep-url="http://172.16.15.77/DEEalerProvider/DEEP/" datalets-list-url="http://172.16.15.77/DEEalerProvider/DEEP/datalets-list" | ||
18 | - datasets='{"result":{"providers":{"1":{"title":"CKAN","api_url":"http:\/\/ckan.routetopa.eu","image_hash":"11","id":"1"}},"datasets":[{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 2","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b056c5e6-76af-4526-a35d-7dee664fb6ee\/download\/isislab.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) ROUTE-TO-PA Dissemination","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/818c2edb-0cb7-4288-b340-e4dd1933d817\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) ROUTE-TO-PA Dissemination - dl","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/fd8c4d6f-315d-4aa0-b7bd-4fdde7bf641b\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) dissemination of ROUTE-TO-PA project","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/b0ef6017-8c64-4e11-8046-7e51a8561856\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"test dissemination with link","resource_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","url":"http:\/\/ckan.routetopa.eu\/dataset\/ba5054af-7561-4f99-9504-76ea004a1e85\/resource\/4cc2349d-bf7b-4bbe-a7ca-db5312bb6c94\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Dissemination activity of the first year","resource_name":"Dissemination activity of the first year (2015)","url":"http:\/\/ckan.routetopa.eu\/dataset\/61f07087-210a-4c35-9606-2aafe183633b\/resource\/5f9d8d8b-1c41-45f7-9dbb-61b9a7bcd076\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"City of the Hague Municipality","package_name":"Test 3- Buurten","resource_name":"Test Buurten - 3","url":"http:\/\/ckan.routetopa.eu\/dataset\/1248d447-2901-4beb-91ae-c2f249fd8a99\/resource\/1fdbc765-8945-4271-8dce-9c7eba45a67d\/download\/Test-3-Compare.csv","metas":"{\"organization\":\"City of the Hague Municipality\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"}]}}' | ||
19 | - suggested-datasets='[{"resource_name":"SUGGESTED 1","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"},{"resource_name":"SUGGESTED 2","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"},{"resource_name":"SUGGESTED 3","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"}]' | ||
20 | - ></data-sevc-controllet> | 18 | + <!--<data-sevc-controllet deep-url="http://172.16.15.38/DEEalerProvider/DEEP/"--> |
19 | + <!--datalets-list-url="http://172.16.15.38/DEEalerProvider/DEEP/datalets-list"--> | ||
20 | + <!--datasets='{"result":{"providers":{"1":{"title":"CKAN","api_url":"http:\/\/ckan.routetopa.eu","image_hash":"11","id":"1"}},"datasets":[{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 1","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b3d3d9ff-291e-47ca-a0d2-a15deef81737\/download\/isislab2.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"Dublin","package_name":"isislab DATA","resource_name":"Resource 2","url":"http:\/\/ckan.routetopa.eu\/dataset\/566c2867-ea89-45a2-bd7a-30ae82606007\/resource\/b056c5e6-76af-4526-a35d-7dee664fb6ee\/download\/isislab.csv","metas":"{\"organization\":\"Dublin\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) ROUTE-TO-PA Dissemination","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/818c2edb-0cb7-4288-b340-e4dd1933d817\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) ROUTE-TO-PA Dissemination - dl","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/fd8c4d6f-315d-4aa0-b7bd-4fdde7bf641b\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","resource_name":"First year (2015) dissemination of ROUTE-TO-PA project","url":"http:\/\/ckan.routetopa.eu\/dataset\/d81d451d-8b3d-47f4-b57f-e295e8f51da0\/resource\/b0ef6017-8c64-4e11-8046-7e51a8561856\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link-Upd.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"test dissemination with link","resource_name":"Year 1 Dissemination of the ROUTE-TO-PA project (2015)","url":"http:\/\/ckan.routetopa.eu\/dataset\/ba5054af-7561-4f99-9504-76ea004a1e85\/resource\/4cc2349d-bf7b-4bbe-a7ca-db5312bb6c94\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New---Link.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"ROUTE-TO-PA","package_name":"Dissemination activity of the first year","resource_name":"Dissemination activity of the first year (2015)","url":"http:\/\/ckan.routetopa.eu\/dataset\/61f07087-210a-4c35-9606-2aafe183633b\/resource\/5f9d8d8b-1c41-45f7-9dbb-61b9a7bcd076\/download\/ROUTE-TO-PA-Individual-Dissemination-Activity-Report-Form-Responses-New.csv","metas":"{\"organization\":\"ROUTE-TO-PA\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"},{"w":1,"provider_name":"p:1","organization_name":"City of the Hague Municipality","package_name":"Test 3- Buurten","resource_name":"Test Buurten - 3","url":"http:\/\/ckan.routetopa.eu\/dataset\/1248d447-2901-4beb-91ae-c2f249fd8a99\/resource\/1fdbc765-8945-4271-8dce-9c7eba45a67d\/download\/Test-3-Compare.csv","metas":"{\"organization\":\"City of the Hague Municipality\",\"description\":\"\",\"format\":\"\",\"last_modified\":\"\",\"name\":\"\",\"created\":\"\"}"}]}}'--> | ||
21 | + <!--suggested-datasets='[{"resource_name":"SUGGESTED 1","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"},{"resource_name":"SUGGESTED 2","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"},{"resource_name":"SUGGESTED 3","url":"noUrl.csv","metas":"{\"description\":\"noDescriione\"}"}]'--> | ||
22 | + <!--</data-sevc-controllet>--> | ||
23 | + | ||
24 | + <co-datalets-creator-controllet data='[{"a":"0", "b":"1"},{"a":"2", "b":"3"}]' deep-url="http://172.16.15.38/DEEalerProvider/DEEP/" | ||
25 | + datalets-list-url="http://172.16.15.38/DEEalerProvider/DEEP/datalets-list" | ||
26 | + </co-datalets-creator-controllet> | ||
21 | 27 | ||
22 | </body> | 28 | </body> |
23 | 29 |
controllets/filters-controllet/demo/index.html
@@ -19,11 +19,11 @@ | @@ -19,11 +19,11 @@ | ||
19 | 19 | ||
20 | .container { | 20 | .container { |
21 | height: 400px; | 21 | height: 400px; |
22 | - width: 50%; | 22 | + width: 1200px; |
23 | /*width: 400px;*/ | 23 | /*width: 400px;*/ |
24 | position: relative; | 24 | position: relative; |
25 | top: 100px; | 25 | top: 100px; |
26 | - left:25%; | 26 | + left:300px; |
27 | } | 27 | } |
28 | 28 | ||
29 | </style> | 29 | </style> |
@@ -41,7 +41,8 @@ | @@ -41,7 +41,8 @@ | ||
41 | 41 | ||
42 | filters_controllet.setFields(fields); | 42 | filters_controllet.setFields(fields); |
43 | 43 | ||
44 | - filters_controllet.filters = [{field: "Lat", operation: "<=", value: "16"}, {field: "Long", operation: "!=", value: "32"}, {field: "Sbiricos", operation: "!=", value: "12AAA32+DAO"}]; | 44 | + filters_controllet.filters = [{logicalOperator: "OR"}, {field: "Lat", operation: "<=", value: "16"}, {field: "Long", operation: "!=", value: "32"}, {field: "Sbiricos", operation: "!=", value: "12AAA32+DAO"}]; |
45 | +// filters_controllet.logicalOperator = "or"; | ||
45 | 46 | ||
46 | var filters = filters_controllet.getFilters(); | 47 | var filters = filters_controllet.getFilters(); |
47 | 48 |
controllets/filters-controllet/filters-controllet.html
1 | <link rel="import" href="../../bower_components/polymer/polymer.html" /> | 1 | <link rel="import" href="../../bower_components/polymer/polymer.html" /> |
2 | 2 | ||
3 | +<link rel="import" href="../../bower_components/paper-material/paper-material.html" /> | ||
4 | + | ||
3 | <link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> | 5 | <link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> |
4 | <link rel="import" href="../../bower_components/paper-menu/paper-menu.html"> | 6 | <link rel="import" href="../../bower_components/paper-menu/paper-menu.html"> |
5 | <link rel="import" href="../../bower_components/paper-item/paper-item.html"> | 7 | <link rel="import" href="../../bower_components/paper-item/paper-item.html"> |
@@ -8,150 +10,216 @@ | @@ -8,150 +10,216 @@ | ||
8 | <link rel="import" href="../../bower_components/iron-icons/iron-icons.html"> | 10 | <link rel="import" href="../../bower_components/iron-icons/iron-icons.html"> |
9 | <link rel="import" href="../../bower_components/iron-icon/iron-icon.html"> | 11 | <link rel="import" href="../../bower_components/iron-icon/iron-icon.html"> |
10 | 12 | ||
13 | +<link rel="import" href="../../bower_components/paper-button/paper-button.html"> | ||
14 | + | ||
11 | <dom-module id="filters-controllet"> | 15 | <dom-module id="filters-controllet"> |
12 | 16 | ||
13 | <template> | 17 | <template> |
14 | 18 | ||
15 | <style is="custom-style"> | 19 | <style is="custom-style"> |
16 | 20 | ||
17 | - :host { | ||
18 | - --paper-dropdown-menu-icon: { | ||
19 | - color: #2196F3; | ||
20 | - }; | ||
21 | - } | ||
22 | - | ||
23 | #filters_container { | 21 | #filters_container { |
24 | - height: 100%; | 22 | + height: 48px; |
25 | width: 100%; | 23 | width: 100%; |
24 | + } | ||
26 | 25 | ||
26 | + #filters_container * { | ||
27 | font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif; | 27 | font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif; |
28 | font-size: 16px; | 28 | font-size: 16px; |
29 | + line-height: 24px; | ||
29 | } | 30 | } |
30 | 31 | ||
31 | - #filters_panel { | ||
32 | - display: none; | ||
33 | - position: relative; | ||
34 | - height: calc(100% - 48px); | ||
35 | - } | ||
36 | - | ||
37 | - .filters_header { | 32 | + #filters_container #header { |
38 | height: 32px; | 33 | height: 32px; |
39 | padding-top: 16px; | 34 | padding-top: 16px; |
40 | text-align: center; | 35 | text-align: center; |
41 | font-weight: 700; | 36 | font-weight: 700; |
42 | 37 | ||
38 | + background: #FFFFFF; | ||
43 | color: #00BCD4; | 39 | color: #00BCD4; |
44 | cursor: pointer; | 40 | cursor: pointer; |
45 | } | 41 | } |
46 | 42 | ||
43 | + #filters_container #header.hide{ | ||
44 | + color: #00BCD4; | ||
45 | + background: #FFFFFF; | ||
46 | + } | ||
47 | + | ||
48 | + /*#filters_container #header.hide:hover{*/ | ||
49 | + /*}*/ | ||
50 | + | ||
51 | + #filters_container #header.show{ | ||
52 | + color: #000000; | ||
53 | + background: #B6B6B6; | ||
54 | + } | ||
55 | + | ||
56 | + #filters_container #panel { | ||
57 | + display: none; | ||
58 | + position: relative; | ||
59 | + height: calc(100% - 48px); | ||
60 | + background: #FFFFFF; | ||
61 | + } | ||
62 | + | ||
47 | paper-dropdown-menu { | 63 | paper-dropdown-menu { |
48 | - height: 48px; | ||
49 | - width: 248px;; | 64 | + width: 100%; |
50 | --paper-input-container-focus-color: #2196F3; | 65 | --paper-input-container-focus-color: #2196F3; |
51 | } | 66 | } |
52 | 67 | ||
68 | + :host { | ||
69 | + --paper-dropdown-menu-icon: { | ||
70 | + color: #2196F3; | ||
71 | + }; | ||
72 | + } | ||
73 | + | ||
74 | + paper-item { | ||
75 | + min-width: 128px; | ||
76 | + } | ||
77 | + | ||
53 | paper-item.iron-selected { | 78 | paper-item.iron-selected { |
54 | background-color: #2196F3; | 79 | background-color: #2196F3; |
55 | color: #FFFFFF; | 80 | color: #FFFFFF; |
56 | } | 81 | } |
57 | 82 | ||
83 | + paper-input { | ||
84 | + width: 100%; | ||
85 | + --paper-input-container-focus-color: #2196F3; | ||
86 | + } | ||
87 | + | ||
88 | + paper-button { | ||
89 | + margin: 0px; | ||
90 | + height: 44px; | ||
91 | + color: #FFFFFF; | ||
92 | + background: #2196F3; | ||
93 | + font-weight: 700; | ||
94 | + } | ||
95 | + | ||
96 | + paper-button:hover { | ||
97 | + box-shadow: 0px 8px 12px #888; | ||
98 | + -webkit-box-shadow: 0px 8px 12px #888; | ||
99 | + -moz-box-shadow: 0px 8px 12px #888; | ||
100 | + } | ||
101 | + | ||
58 | paper-icon-button { | 102 | paper-icon-button { |
103 | + padding: 4px; | ||
104 | + } | ||
105 | + | ||
106 | + paper-icon-button.add { | ||
59 | color: #2196F3; | 107 | color: #2196F3; |
60 | --paper-icon-button-ink-color: #2196F3; | 108 | --paper-icon-button-ink-color: #2196F3; |
61 | - margin: 0px; | ||
62 | } | 109 | } |
63 | 110 | ||
64 | paper-icon-button.cancel { | 111 | paper-icon-button.cancel { |
65 | color: #F44336; | 112 | color: #F44336; |
66 | --paper-icon-button-ink-color: #F44336; | 113 | --paper-icon-button-ink-color: #F44336; |
67 | - margin-bottom: -6px; | ||
68 | - margin-left: -8px; | ||
69 | } | 114 | } |
70 | - paper-icon-button.add { | ||
71 | - margin-bottom: -6px; | ||
72 | - margin-left: -8px; | 115 | + |
116 | + #filters_container .row { | ||
117 | + display: flex; | ||
118 | + height: 60px; | ||
119 | + width: 100%; | ||
73 | } | 120 | } |
74 | 121 | ||
75 | - paper-input { | 122 | + #filters_container .ddl_container { |
123 | + display: flex; | ||
124 | + height: 60px; | ||
125 | + width: 25%; | ||
126 | + padding: 0px 8px; | ||
127 | + } | ||
128 | + | ||
129 | + #filters_container .add_container { | ||
130 | + height: 40px; | ||
131 | + width: 40px; | ||
132 | + padding: 10px 0px; | ||
133 | + } | ||
134 | + | ||
135 | + #filters_container .andOr_container { | ||
76 | display: inline-block; | 136 | display: inline-block; |
77 | - height: 48px; | ||
78 | - width: 248px; | ||
79 | - --paper-input-container-focus-color: #2196F3; | 137 | + height: 44px; |
138 | + width: calc(100% - 40px); | ||
139 | + padding: 8px 0px; | ||
140 | + text-align: right; | ||
80 | } | 141 | } |
81 | 142 | ||
82 | - td { | 143 | + #filters_container .row2 { |
144 | + display: flex; | ||
83 | height: 48px; | 145 | height: 48px; |
84 | - padding: 0px; | ||
85 | - padding-bottom: 4px; | ||
86 | - margin: 0px; | ||
87 | - width: 248px; | ||
88 | - border-bottom: 1px solid #2196F3; | ||
89 | - vertical-align: bottom; | 146 | + width: 100%; |
90 | } | 147 | } |
91 | 148 | ||
92 | - th { | ||
93 | - height: 48px; | ||
94 | - padding: 0px; | ||
95 | - margin: 0px; | ||
96 | - vertical-align: bottom; | ||
97 | - text-align: left ; | 149 | + #filters_container .row2 .highlighted { |
150 | + color: #2196F3; | ||
151 | + font-weight: 700; | ||
152 | + } | ||
153 | + | ||
154 | + #filters_container .filter { | ||
155 | + height: 24px; | ||
156 | + width: calc(75% - 16px); | ||
157 | + padding: 12px 8px; | ||
98 | } | 158 | } |
99 | 159 | ||
100 | - .filters_cell_button { | ||
101 | - width: 24px; | ||
102 | - border-bottom: none; | 160 | + #filters_container .remove_container { |
161 | + height: 40px; | ||
162 | + width: 40px; | ||
163 | + padding: 4px 8px; | ||
164 | + | ||
103 | } | 165 | } |
104 | 166 | ||
105 | </style> | 167 | </style> |
106 | 168 | ||
107 | - <div id="filters_container"> | ||
108 | - | ||
109 | - <div id="filters_header" class="filters_header" on-click="_showFiltersPanel"><span id="filters"><span id="addFilters"></span></span></div> | ||
110 | - | ||
111 | - <div id="filters_panel"> | ||
112 | - | ||
113 | - <table cellspacing="12px"> | ||
114 | - <tr> | ||
115 | - <th> | ||
116 | - <paper-dropdown-menu id="filter_field" label="Field"> | ||
117 | - <paper-menu id="filter_field_menu" class="dropdown-content"> | ||
118 | - <template is="dom-repeat" items={{fields}}> | ||
119 | - <paper-item id={{index}}>{{_fieldName(item)}}</paper-item> | ||
120 | - <!--on-tap=""--> | ||
121 | - </template> | ||
122 | - </paper-menu> | ||
123 | - </paper-dropdown-menu> | ||
124 | - </th> | ||
125 | - <th> | ||
126 | - <paper-dropdown-menu id="filter_operation" label="Operation"> | ||
127 | - <paper-menu id="filter_operation_menu" class="dropdown-content"> | ||
128 | - <template is="dom-repeat" items={{operations}}> | ||
129 | - <paper-item id={{index}}>{{_getOperationlName(item)}}</paper-item> | ||
130 | - </template> | ||
131 | - </paper-menu> | ||
132 | - </paper-dropdown-menu> | ||
133 | - </th> | ||
134 | - <th> | ||
135 | - <paper-input id="filter_value" label="Value" class="base_input" maxlength="32" auto-validate pattern="^[.:,;+-_ a-zA-Z0-9]*" error-message="Invalid value!"></paper-input> | ||
136 | - <!--"^[_a-zA-Z0-9]*"--> | ||
137 | - </th> | ||
138 | - <th class="filters_cell_button"> | 169 | + <paper-material id="filters_container" elevation="5"> |
170 | + | ||
171 | + <div id="header" class="hide" on-click="_showFiltersPanel"><span id="filters"><span id="addFilters"></span></span></div> | ||
172 | + | ||
173 | + <div id="panel"> | ||
174 | + | ||
175 | + <div class="row"> | ||
176 | + <div class="ddl_container"> | ||
177 | + <paper-dropdown-menu id="filter_field" label="Field"> | ||
178 | + <paper-menu id="filter_field_menu" class="dropdown-content"> | ||
179 | + <template is="dom-repeat" items={{fields}}> | ||
180 | + <paper-item id={{index}}>{{_fieldName(item)}}</paper-item> | ||
181 | + </template> | ||
182 | + </paper-menu> | ||
183 | + </paper-dropdown-menu> | ||
184 | + </div> | ||
185 | + <div class="ddl_container"> | ||
186 | + <paper-dropdown-menu id="filter_operation" label="Operation"> | ||
187 | + <paper-menu id="filter_operation_menu" class="dropdown-content"> | ||
188 | + <template is="dom-repeat" items={{operations}}> | ||
189 | + <paper-item id={{index}}>{{_getOperationlName(item)}}</paper-item> | ||
190 | + </template> | ||
191 | + </paper-menu> | ||
192 | + </paper-dropdown-menu> | ||
193 | + </div> | ||
194 | + <div class="ddl_container"> | ||
195 | + <paper-input id="filter_value" label="Value" class="base_input" maxlength="32" auto-validate pattern="^[.:,;+-_ a-zA-Z0-9]*" error-message="Invalid value!"></paper-input> | ||
196 | + </div> | ||
197 | + <div class="ddl_container"> | ||
198 | + <div class="add_container"> | ||
139 | <paper-icon-button on-click="_addFilter" icon="add-circle" class="add"></paper-icon-button> | 199 | <paper-icon-button on-click="_addFilter" icon="add-circle" class="add"></paper-icon-button> |
140 | - </th> | ||
141 | - </tr> | ||
142 | - <template is="dom-repeat" items={{filters}}> | ||
143 | - <tr> | ||
144 | - <td>{{item.field}}</td> | ||
145 | - <td>{{item.operation}}</td> | ||
146 | - <td class="filters_cell_value">{{item.value}}</td> | ||
147 | - <td class="filters_cell_button"><paper-icon-button on-click="_deleteFilter" icon="cancel" class="cancel"></paper-icon-button></td> | ||
148 | - </tr> | 200 | + </div> |
201 | + <div class="andOr_container"> | ||
202 | + <paper-button raised on-click="_changeLogicalOperator"><span id="andOr">{{logicalOperator}}</span></paper-button> | ||
203 | + </div> | ||
204 | + </div> | ||
205 | + </div> | ||
206 | + | ||
207 | + <template is="dom-repeat" items={{filters}}> | ||
208 | + <template is="dom-if" if="{{index}}"><!--excludes logicalOperator--> | ||
209 | + <div class="row2"> | ||
210 | + <div class="filter"> | ||
211 | + {{item.field}} <span class="highlighted">{{item.operation}}</span> "{{item.value}}" <span class="highlighted">{{_getLogicalOperator(index)}}</span> | ||
212 | + </div> | ||
213 | + <div class="remove_container"> | ||
214 | + <paper-icon-button on-click="_deleteFilter" icon="cancel" class="cancel"></paper-icon-button> | ||
215 | + </div> | ||
216 | + </div> | ||
149 | </template> | 217 | </template> |
150 | - </table> | 218 | + </template> |
151 | 219 | ||
152 | </div> | 220 | </div> |
153 | 221 | ||
154 | - </div> | 222 | + </paper-material> |
155 | 223 | ||
156 | </template> | 224 | </template> |
157 | 225 | ||
@@ -175,7 +243,7 @@ | @@ -175,7 +243,7 @@ | ||
175 | 243 | ||
176 | filters : { | 244 | filters : { |
177 | type : Array, | 245 | type : Array, |
178 | - value : [] | 246 | + value : [{logicalOperator: "AND"}] |
179 | }, | 247 | }, |
180 | 248 | ||
181 | show : { | 249 | show : { |
@@ -186,21 +254,37 @@ | @@ -186,21 +254,37 @@ | ||
186 | }, | 254 | }, |
187 | 255 | ||
188 | ready : function() { | 256 | ready : function() { |
189 | - $(this.$.filters_panel).perfectScrollbar(); | 257 | + $(this.$.panel).perfectScrollbar(); |
258 | +// this._showFiltersPanel(); | ||
190 | }, | 259 | }, |
191 | 260 | ||
192 | attached : function() { | 261 | attached : function() { |
262 | + this.logicalOperator = this.filters[0].logicalOperator; | ||
263 | + | ||
193 | this._translate(); | 264 | this._translate(); |
194 | }, | 265 | }, |
195 | 266 | ||
196 | setFields : function(fields) { | 267 | setFields : function(fields) { |
197 | - this.fields = this._copy(fields); | 268 | +// this.fields = this._copy(fields); |
269 | + this.fields = fields.slice(); | ||
270 | + this.fields = fields; | ||
271 | + }, | ||
272 | + | ||
273 | + setFilters : function(filters) { | ||
274 | + this.filters = filters.slice(); | ||
275 | + this.logicalOperator = this.filters[0].logicalOperator; | ||
276 | + this._fire(); | ||
198 | }, | 277 | }, |
199 | 278 | ||
200 | getFilters : function() { | 279 | getFilters : function() { |
201 | return this.filters; | 280 | return this.filters; |
202 | }, | 281 | }, |
203 | 282 | ||
283 | + reset : function() { | ||
284 | + this.fields = []; | ||
285 | + this.filters = [{logicalOperator: "AND"}]; | ||
286 | + }, | ||
287 | + | ||
204 | _translate : function() { | 288 | _translate : function() { |
205 | this.$.addFilters.innerHTML = ln["expertAddFilters_" + ln["localization"]]; | 289 | this.$.addFilters.innerHTML = ln["expertAddFilters_" + ln["localization"]]; |
206 | this.$.filter_field.setAttribute("label", ln["filterField_" + ln["localization"]]); | 290 | this.$.filter_field.setAttribute("label", ln["filterField_" + ln["localization"]]); |
@@ -213,20 +297,34 @@ | @@ -213,20 +297,34 @@ | ||
213 | }, | 297 | }, |
214 | 298 | ||
215 | _showFiltersPanel : function() { | 299 | _showFiltersPanel : function() { |
300 | +// ? filter class hiddend & hover: | ||
301 | + | ||
216 | if(!this.show) { | 302 | if(!this.show) { |
217 | - this.$.filters_header.style.color = "#000000"; | ||
218 | - this.$.filters_header.style.background = "#B6B6B6"; | ||
219 | - this.$.filters_panel.style.display = "block"; | 303 | + this.$.filters_container.style.height = "100%"; |
304 | + $(this.$.header).removeClass("hide"); | ||
305 | + $(this.$.header).addClass("show"); | ||
306 | + this.$.panel.style.display = "block"; | ||
307 | + | ||
220 | } | 308 | } |
221 | else { | 309 | else { |
222 | - this.$.filters_header.style.color = "#00BCD4"; | ||
223 | - this.$.filters_header.style.background = "#FFFFFF"; | ||
224 | - this.$.filters_panel.style.display = "none"; | 310 | + this.$.filters_container.style.height = "48px"; |
311 | + $(this.$.header).removeClass("show"); | ||
312 | + $(this.$.header).addClass("hide"); | ||
313 | + this.$.panel.style.display = "none"; | ||
225 | } | 314 | } |
226 | 315 | ||
316 | + this.fire('filters-controllet_show', {show: this.show}); | ||
317 | + | ||
227 | this.show = !this.show; | 318 | this.show = !this.show; |
228 | }, | 319 | }, |
229 | 320 | ||
321 | + _fire : function() { | ||
322 | + if (this.filters.length > 1) | ||
323 | + this.fire('filters-controllet_filters', {filters: this.filters}); | ||
324 | + else | ||
325 | + this.fire('filters-controllet_filters', {filters: []}); | ||
326 | + }, | ||
327 | + | ||
230 | _addFilter : function() { | 328 | _addFilter : function() { |
231 | if (this.$.filter_field.selectedItem && this.$.filter_operation_menu.selectedItem && this.$.filter_value.value != "" && !this.$.filter_value.invalid) { | 329 | if (this.$.filter_field.selectedItem && this.$.filter_operation_menu.selectedItem && this.$.filter_value.value != "" && !this.$.filter_value.invalid) { |
232 | var field = this.$.filter_field.value; | 330 | var field = this.$.filter_field.value; |
@@ -235,26 +333,34 @@ | @@ -235,26 +333,34 @@ | ||
235 | // var operation = this.$.filter_operation.value; | 333 | // var operation = this.$.filter_operation.value; |
236 | var value = this.$.filter_value.value; | 334 | var value = this.$.filter_value.value; |
237 | 335 | ||
238 | - var filters = this.filters; | ||
239 | - filters.push({"field": field, "operation": operation, "value": value}); | ||
240 | - this.filters = this._copy(filters); | 336 | +// var filters = this.filters; |
337 | +// filters.push({"field": field, "operation": operation, "value": value}); | ||
338 | +// this.filters = filters; | ||
339 | + | ||
340 | + this.filters.push({"field": field, "operation": operation, "value": value}); | ||
241 | 341 | ||
242 | this.$.filter_field_menu.select(-1); | 342 | this.$.filter_field_menu.select(-1); |
243 | this.$.filter_operation_menu.select(-1); | 343 | this.$.filter_operation_menu.select(-1); |
244 | this.$.filter_value.value = ""; | 344 | this.$.filter_value.value = ""; |
245 | 345 | ||
246 | - this.fire('filters-controllet_filters', {filters: this.filters}); | 346 | + this._fire(); |
347 | + | ||
348 | + this._renderFilters(); | ||
247 | } | 349 | } |
248 | }, | 350 | }, |
249 | 351 | ||
250 | _deleteFilter : function(e) { | 352 | _deleteFilter : function(e) { |
251 | var index = e.model.index; | 353 | var index = e.model.index; |
252 | 354 | ||
253 | - var filters = this.filters; | ||
254 | - filters.splice(index, 1); | ||
255 | - this.filters = this._copy(filters); | 355 | +// var filters = this.filters; |
356 | +// filters.splice(index, 1); | ||
357 | +// this.filters = this._copy(filters); | ||
358 | + | ||
359 | + this.filters.splice(index, 1); | ||
360 | + | ||
361 | + this._fire(); | ||
256 | 362 | ||
257 | - this.fire('filters-controllet_filters', {filters: this.filters}); | 363 | + this._renderFilters(); |
258 | }, | 364 | }, |
259 | 365 | ||
260 | _getOperationlName: function(operation) { | 366 | _getOperationlName: function(operation) { |
@@ -269,15 +375,54 @@ | @@ -269,15 +375,54 @@ | ||
269 | return operation; | 375 | return operation; |
270 | }, | 376 | }, |
271 | 377 | ||
272 | - _copy : function(o) { | ||
273 | - var out, v, key; | ||
274 | - out = Array.isArray(o) ? [] : {}; | ||
275 | - for (key in o) { | ||
276 | - v = o[key]; | ||
277 | - out[key] = (typeof v === "object") ? this._copy(v) : v; | ||
278 | - } | ||
279 | - return out; | ||
280 | - } | 378 | +// _changeLogicalOperator : function() { |
379 | +// if(this.logicalOperator == "AND") | ||
380 | +// this.logicalOperator = "OR"; | ||
381 | +// else | ||
382 | +// this.logicalOperator = "AND"; | ||
383 | +// | ||
384 | +// this._fire(); | ||
385 | +// | ||
386 | +// this._renderFilters(); | ||
387 | +// }, | ||
388 | + | ||
389 | + _changeLogicalOperator : function() { | ||
390 | + if(this.logicalOperator == "AND") | ||
391 | + this.logicalOperator = "OR"; | ||
392 | + else | ||
393 | + this.logicalOperator = "AND"; | ||
394 | + | ||
395 | + this.filters[0] = {logicalOperator: this.logicalOperator} | ||
396 | + | ||
397 | + this._fire(); | ||
398 | + | ||
399 | + this._renderFilters(); | ||
400 | + }, | ||
401 | + | ||
402 | + _renderFilters : function() { | ||
403 | + var filters = this.filters.slice(); | ||
404 | + this.filters = []; | ||
405 | + this.async(function() { | ||
406 | + this.filters = filters; | ||
407 | + }, 0); | ||
408 | + }, | ||
409 | + | ||
410 | + _getLogicalOperator : function(index) { | ||
411 | + if(index == this.filters.length -1) | ||
412 | + return ""; | ||
413 | + else | ||
414 | + return this.filters[0].logicalOperator; | ||
415 | + }, | ||
416 | + | ||
417 | +// _copy : function(o) { | ||
418 | +// var out, v, key; | ||
419 | +// out = Array.isArray(o) ? [] : {}; | ||
420 | +// for (key in o) { | ||
421 | +// v = o[key]; | ||
422 | +// out[key] = (typeof v === "object") ? this._copy(v) : v; | ||
423 | +// } | ||
424 | +// return out; | ||
425 | +// } | ||
281 | 426 | ||
282 | }); | 427 | }); |
283 | 428 |
controllets/paper-card-controllet/paper-card-controllet.html
@@ -36,12 +36,15 @@ | @@ -36,12 +36,15 @@ | ||
36 | #paper_card_container .legend { | 36 | #paper_card_container .legend { |
37 | position: relative; | 37 | position: relative; |
38 | bottom: 48px; | 38 | bottom: 48px; |
39 | - height: 32px; | ||
40 | - padding: 16px 0px 0px 8px; | 39 | + height: 16px; |
40 | + padding: 16px 8px; | ||
41 | background-color: rgba(0, 0, 0, 0.8); | 41 | background-color: rgba(0, 0, 0, 0.8); |
42 | color: white; | 42 | color: white; |
43 | font-weight: 700; | 43 | font-weight: 700; |
44 | - word-wrap: break-word; | 44 | + /*word-wrap: break-word;*/ |
45 | + overflow: hidden; | ||
46 | + white-space: nowrap; | ||
47 | + text-overflow: ellipsis; | ||
45 | } | 48 | } |
46 | 49 | ||
47 | #paper_card_container .footer { | 50 | #paper_card_container .footer { |
@@ -51,8 +54,10 @@ | @@ -51,8 +54,10 @@ | ||
51 | bottom: 48px; | 54 | bottom: 48px; |
52 | padding: 4px; | 55 | padding: 4px; |
53 | font-size: 12px; | 56 | font-size: 12px; |
54 | - word-wrap: break-word; | 57 | + /*word-wrap: break-word;*/ |
55 | overflow: hidden; | 58 | overflow: hidden; |
59 | + white-space: nowrap; | ||
60 | + text-overflow: ellipsis; | ||
56 | } | 61 | } |
57 | 62 | ||
58 | paper-fab { | 63 | paper-fab { |
@@ -62,7 +67,7 @@ | @@ -62,7 +67,7 @@ | ||
62 | } | 67 | } |
63 | 68 | ||
64 | paper-fab.open { | 69 | paper-fab.open { |
65 | - bottom: -20px; | 70 | + bottom: 40px; |
66 | right: 8px; | 71 | right: 8px; |
67 | } | 72 | } |
68 | 73 | ||
@@ -122,31 +127,23 @@ | @@ -122,31 +127,23 @@ | ||
122 | <content></content> | 127 | <content></content> |
123 | </div> | 128 | </div> |
124 | 129 | ||
125 | - <div class="legend"> | ||
126 | - | 130 | + <div class="legend" title="{{cardTitle}}"> |
127 | {{cardTitle}} | 131 | {{cardTitle}} |
132 | + </div> | ||
128 | 133 | ||
129 | - <template is="dom-if" if="{{checkType(cardType, 'link')}}"> | ||
130 | - | ||
131 | - <paper-fab id="card_open_link" class="open" mini icon="link" on-click="_handleOpenClick"></paper-fab> | ||
132 | - | ||
133 | - </template> | ||
134 | - | ||
135 | - <template is="dom-if" if="{{checkType(cardType, 'text')}}"> | ||
136 | - | ||
137 | - <paper-fab id="card_open_text" class="open" mini icon="text-format" on-click="_handleOpenClick"></paper-fab> | ||
138 | - | ||
139 | - </template> | ||
140 | - | ||
141 | - <template is="dom-if" if="{{checkType(cardType, 'datalet')}}"> | ||
142 | - | ||
143 | - <paper-fab id="card_open_datalet" class="open" mini icon="assessment" on-click="_handleOpenClick"></paper-fab> | 134 | + <template is="dom-if" if="{{checkType(cardType, 'link')}}"> |
135 | + <paper-fab id="card_open_link" class="open" mini icon="link" on-click="_handleOpenClick"></paper-fab> | ||
136 | + </template> | ||
144 | 137 | ||
145 | - </template> | 138 | + <template is="dom-if" if="{{checkType(cardType, 'text')}}"> |
139 | + <paper-fab id="card_open_text" class="open" mini icon="text-format" on-click="_handleOpenClick"></paper-fab> | ||
140 | + </template> | ||
146 | 141 | ||
147 | - </div> | 142 | + <template is="dom-if" if="{{checkType(cardType, 'datalet')}}"> |
143 | + <paper-fab id="card_open_datalet" class="open" mini icon="assessment" on-click="_handleOpenClick"></paper-fab> | ||
144 | + </template> | ||
148 | 145 | ||
149 | - <div class="footer"> | 146 | + <div class="footer" title="{{comment}}"> |
150 | {{comment}} | 147 | {{comment}} |
151 | </div> | 148 | </div> |
152 | 149 |
controllets/providers-utility-controllet/ckan.js
1 | -//function _path() { | ||
2 | -// return "result->records" | ||
3 | -//} | ||
4 | -// | ||
5 | -//function _arrayPath() { | ||
6 | -// return ["result", "records", "*"]; | ||
7 | -//} | ||
8 | - | ||
9 | -function ckan_Provider (url) { | ||
10 | - this.url = url; | ||
11 | - this.path = "result->records"; | 1 | +function ckan_Provider () { //--> dataUrl inutile |
2 | + //this.dataUrl = dataUrl; | ||
3 | + //this.path = "result->records"; | ||
4 | + //this.arrayPath = ["result", "records", "*"]; | ||
12 | } | 5 | } |
13 | 6 | ||
14 | -ckan_Provider.prototype.getData = function() { | ||
15 | - console.log("ckan"); | ||
16 | - return 'ckan'; | ||
17 | -}; | ||
18 | \ No newline at end of file | 7 | \ No newline at end of file |
8 | +ckan_Provider.prototype.selectData = function(data) { | ||
9 | + return data.result.records; | ||
10 | +}; | ||
11 | + | ||
12 | +ckan_Provider.prototype.addLimit = function(url) { | ||
13 | + if(url.indexOf("&limit=") > -1) | ||
14 | + return url; | ||
15 | + return url + "&limit=99999"; | ||
16 | +}; | ||
17 | + | ||
18 | +//ckan_Provider.prototype.getFields = function(data) { | ||
19 | +// var fields = []; | ||
20 | +// for (var key in data.result.records[0]) | ||
21 | +// fields.push(key); | ||
22 | +// return fields; | ||
23 | +//}; | ||
24 | + | ||
25 | +//ckan_Provider.prototype.requestData = function() { | ||
26 | +// var that = this; | ||
27 | +// | ||
28 | +// $.ajax({ | ||
29 | +// url: this.dataUrl, | ||
30 | +// dataType: "json", | ||
31 | +// success: function(data){ | ||
32 | +// that.data = data.result.records; | ||
33 | +// } | ||
34 | +// }); | ||
35 | +//}; | ||
19 | \ No newline at end of file | 36 | \ No newline at end of file |
controllets/providers-utility-controllet/generic.js
1 | -/** | ||
2 | - * Created by renato on 25/05/16. | ||
3 | - */ | 1 | +function generic_Provider () {} |
2 | + | ||
3 | +generic_Provider.prototype.selectData = function(data) { | ||
4 | + return data; | ||
5 | +}; | ||
6 | + | ||
7 | +generic_Provider.prototype.addLimit = function(url) { | ||
8 | + return url; | ||
9 | +}; | ||
4 | \ No newline at end of file | 10 | \ No newline at end of file |
controllets/providers-utility-controllet/openDataSoft.js
1 | -function openDataSoft_Provider (url) { | ||
2 | - this.url = url; | ||
3 | - this.path = "result->records"; | ||
4 | -} | 1 | +function openDataSoft_Provider () {} |
5 | 2 | ||
6 | -openDataSoft_Provider.prototype.getData = function() { | ||
7 | - return 'openDataSoft'; | ||
8 | -}; | ||
9 | \ No newline at end of file | 3 | \ No newline at end of file |
4 | +openDataSoft_Provider.prototype.selectData = function(data) { | ||
5 | + var selectedData = []; | ||
6 | + for(var i=0; i<data.records.length; i++) | ||
7 | + selectedData.push(data.records[i].fields); | ||
8 | + return selectedData; | ||
9 | +}; | ||
10 | + | ||
11 | +openDataSoft_Provider.prototype.addLimit = function(url) { | ||
12 | + if(url.indexOf("&rows=") > -1) | ||
13 | + return url; | ||
14 | + return url + "&rows=10000"; | ||
15 | +}; | ||
16 | + | ||
17 | +//openDataSoft_Provider.prototype.getFields = function(data) { | ||
18 | +// var fields = []; | ||
19 | +// for (var key in data.records[0].fields) | ||
20 | +// fields.push(key); | ||
21 | +// return fields; | ||
22 | +//}; | ||
10 | \ No newline at end of file | 23 | \ No newline at end of file |
controllets/providers-utility-controllet/providers-utility-controllet.html
1 | -<!DOCTYPE html> | ||
2 | -<html lang="en"> | ||
3 | -<head> | ||
4 | - <meta charset="UTF-8"> | ||
5 | - <title></title> | ||
6 | -</head> | ||
7 | -<body> | ||
8 | - | ||
9 | -</body> | ||
10 | -</html> | ||
11 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +<link rel="import" href="../../bower_components/polymer/polymer.html" /> | ||
3 | + | ||
4 | +<script src="ckan.js"></script> | ||
5 | +<script src="openDataSoft.js"></script> | ||
6 | +<script src="generic.js"></script> | ||
7 | + | ||
8 | +<script> | ||
9 | + var providerFactory = { | ||
10 | + getProvider: function(dataUrl) { | ||
11 | + if (dataUrl.indexOf("datastore_search?resource_id") > -1) | ||
12 | + return new ckan_Provider(); | ||
13 | + else if (dataUrl.indexOf("search?dataset") > -1) | ||
14 | + return new openDataSoft_Provider(); | ||
15 | + else | ||
16 | + return generic_Provider(); | ||
17 | + } | ||
18 | + }; | ||
19 | + | ||
20 | + //jsdatachecker | ||
21 | + utility_getFields = function(types) { | ||
22 | + return Object.keys(types).map(function(key) { return key; }); | ||
23 | + }; | ||
24 | + | ||
25 | + utility_getSelectedFields = function(fields, indices) { | ||
26 | + selectedFileds = []; | ||
27 | + for (var i = 0; i < indices.length; i++) | ||
28 | + selectedFileds.push(fields[indices[i]]); | ||
29 | + return selectedFileds; | ||
30 | + }; | ||
31 | + | ||
32 | + // utility_getResourceUrl = function(url) { | ||
33 | + // //CKAN | ||
34 | + // var strDatasetPos = url.indexOf('/dataset/'); | ||
35 | + // var strResourcePos = url.indexOf('/resource/'); | ||
36 | + // if (strDatasetPos >= 0 && strResourcePos > strDatasetPos) { | ||
37 | + // var urlSegment1 = url.substring(0, strDatasetPos); | ||
38 | + // var urlResourceEnd = url.indexOf('/', strResourcePos + 10); | ||
39 | + // var resourceId = url.substring(strResourcePos + 10, urlResourceEnd); | ||
40 | + // return urlSegment1 + "/api/action/datastore_search?resource_id=" + resourceId; | ||
41 | + // } | ||
42 | + // //OPENDATASOFT | ||
43 | + // var strExploreDatasetPos = url.indexOf('/explore/dataset/'); | ||
44 | + // if (strExploreDatasetPos >= 0) { | ||
45 | + // var urlSegment1 = url.substring(0, strExploreDatasetPos); | ||
46 | + // var datasetEnd = url.indexOf(strExploreDatasetPos + 17, '/'); | ||
47 | + // var datasetId = url.substring(strExploreDatasetPos + 17, datasetEnd >= 0 ? datasetEnd : url.length); | ||
48 | + // return urlSegment1 + '/api/records/1.0/search?dataset=' + datasetId; | ||
49 | + // } | ||
50 | + // return ""; | ||
51 | + // }; | ||
52 | +</script> | ||
53 | + | ||
54 | +<dom-module id="providers-utility-controllet"> | ||
55 | + | ||
56 | + <template></template> | ||
57 | + | ||
58 | + <script> | ||
59 | + Polymer({ | ||
60 | + is : 'providers-utility-controllet', | ||
61 | + }); | ||
62 | + </script> | ||
63 | + | ||
64 | +</dom-module> | ||
12 | \ No newline at end of file | 65 | \ No newline at end of file |
controllets/select-data-controllet/demo/index.html
@@ -15,28 +15,21 @@ | @@ -15,28 +15,21 @@ | ||
15 | 15 | ||
16 | <body> | 16 | <body> |
17 | 17 | ||
18 | - <!--<select-data-controllet id="tvmt" root-name="data" opened-path="records,geometry" preselected-fields='["nhits", "records,datasetid", "records,recordid"]' data-url="http://ckan.routetopa.eu/api/action/datastore_search?resource_id=73e02092-85a1-434e-85fe-0c9a43aa9a52&limit=5"></select-data-controllet>--> | ||
19 | - <!--<select-data-controllet id="tvmt" root-name="data" data-url="https://data.issy.com/api/records/1.0/search?dataset=flux-rss-des-offres-demplois-a-issy-les-moulineaux&sort=published&facet=published&refine.published=2015%2F10"></select-data-controllet>--> | ||
20 | - <select-data-controllet id="tvmt" root-name="data" data-url="https://data.issy.com/api/records/1.0/search/?dataset=repartitiondeladetteparpreteursau3112n-feuille1&rows=56&sort=-annee"></select-data-controllet> | ||
21 | - <!--<select-data-controllet id="tvmt" root-name="data" data-url="http://ckan.routetopa.eu/api/action/datastore_search?resource_id=73e02092-85a1-434e-85fe-0c9a43aa9a52&limit=5"></select-data-controllet>--> | 18 | + <select-data-controllet id="sd" data-url="https://data.issy.com/api/records/1.0/search?dataset=repartitiondeladetteparpreteursau3112n-feuille1"></select-data-controllet> |
19 | + <!--<select-data-controllet id="sd" data-url="http://ckan.routetopa.eu/api/action/datastore_search?resource_id=642ceea8-711e-4124-b450-0d23010c44e6"></select-data-controllet>--> | ||
22 | 20 | ||
23 | <script> | 21 | <script> |
24 | ln["localization"] = "en"; | 22 | ln["localization"] = "en"; |
25 | - var tvmt = document.getElementById('tvmt'); | 23 | + var sd = document.getElementById('sd'); |
24 | + sd._init(); | ||
26 | 25 | ||
27 | - tvmt.addEventListener("tree-view-controllet_selected-fields", function (e) { | 26 | +// tvmt.addEventListener("tree-view-controllet_selected-fields", function (e) { |
28 | // console.log(tvmt.getFlatFields()); | 27 | // console.log(tvmt.getFlatFields()); |
29 | // console.log(tvmt.getFields()); | 28 | // console.log(tvmt.getFields()); |
30 | - }); | 29 | +// }); |
31 | 30 | ||
32 | </script> | 31 | </script> |
33 | 32 | ||
34 | </body> | 33 | </body> |
35 | 34 | ||
36 | -</html> | ||
37 | - | ||
38 | -<!--urls:--> | ||
39 | -<!--http://dati.lazio.it/catalog/api/action/datastore_search?resource_id=114baf3d-6d4f-42ff-b4af-481beef59ae1--> | ||
40 | -<!--url: 'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=73e02092-85a1-434e-85fe-0c9a43aa9a52&limit=5',--> | ||
41 | -<!--url: 'https://data.issy.com/api/records/1.0/search?dataset=liste-des-restaurants-a-issy-les-moulineaux&sort=type&facet=type&facet=terrasse',--> | ||
42 | -<!--url: 'https://data.issy.com/api/records/1.0/search?dataset=flux-rss-des-offres-demplois-a-issy-les-moulineaux&sort=published&facet=published&refine.published=2015',--> | ||
43 | \ No newline at end of file | 35 | \ No newline at end of file |
36 | +</html> | ||
44 | \ No newline at end of file | 37 | \ No newline at end of file |
controllets/select-data-controllet/select-data-controllet.html
1 | <link rel="import" href="../../bower_components/polymer/polymer.html" /> | 1 | <link rel="import" href="../../bower_components/polymer/polymer.html" /> |
2 | 2 | ||
3 | -<link rel="import" href="../../bower_components/paper-material/paper-material.html" /> | ||
4 | - | ||
5 | -<link rel="import" href="../tree-view-controllet/tree-view-controllet.html" /> | ||
6 | -<link rel="import" href="../multi-table-controllet/multi-table-controllet.html" /> | 3 | +<link rel="import" href="../select-fields-controllet/select-fields-controllet.html" /> |
4 | +<link rel="import" href="../data-table-controllet/data-table-controllet.html" /> | ||
7 | <link rel="import" href="../filters-controllet/filters-controllet.html" /> | 5 | <link rel="import" href="../filters-controllet/filters-controllet.html" /> |
8 | 6 | ||
7 | +<link rel="import" href="../providers-utility-controllet/providers-utility-controllet.html" /> | ||
8 | + | ||
9 | +<script type="text/javascript" src="../../alasql-utility/alasql.min.js"></script> | ||
10 | +<script type="text/javascript" src="../../alasql-utility/alasql-utility.js"></script> | ||
11 | + | ||
12 | +<script type="text/javascript" src="../../bower_components/JSDataChecker/jsdatachecker.min.js"></script> | ||
13 | + | ||
9 | <dom-module id="select-data-controllet"> | 14 | <dom-module id="select-data-controllet"> |
10 | 15 | ||
11 | <style is="custom-style"> | 16 | <style is="custom-style"> |
12 | - .div_container { | 17 | + |
18 | + #select_data_controllet_container { | ||
13 | display: flex; | 19 | display: flex; |
14 | flex-direction: row; | 20 | flex-direction: row; |
21 | + margin-top: 8px; | ||
15 | } | 22 | } |
16 | - #material_tree_view { | ||
17 | - position: relative; | ||
18 | - width: 25%; | ||
19 | - min-width: 200px; | ||
20 | - height: 100vh; | 23 | + |
24 | + #select_data_controllet_container * { | ||
25 | + font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif; | ||
26 | + font-size: 16px; | ||
27 | + line-height: 24px; | ||
21 | } | 28 | } |
22 | - #material_multi_table_filters { | ||
23 | - position: relative; | ||
24 | - width: 75%; | ||
25 | 29 | ||
26 | - margin-left: 64px; | ||
27 | - margin-top: 8px; | 30 | + #select_data_controllet_container #fields_container { |
31 | + height: 100%; | ||
32 | + width: 20%; | ||
33 | + min-width: 192px; | ||
34 | + } | ||
35 | + | ||
36 | + #select_data_controllet_container #right_container { | ||
37 | + height: 100%; | ||
38 | + width: calc(80% - 24px); | ||
39 | + margin-left: 24px; | ||
28 | } | 40 | } |
29 | 41 | ||
30 | - #div_multi_table { | ||
31 | - height: 70%; | 42 | + #select_data_controllet_container #table_container { |
43 | + height: calc(100% - 72px); | ||
32 | width: 100%; | 44 | width: 100%; |
33 | - position: relative; | ||
34 | } | 45 | } |
35 | - #div_filters { | ||
36 | - height: 30%; | 46 | + |
47 | + #select_data_controllet_container #filters_container { | ||
48 | + height: 48px; | ||
37 | width: 100%; | 49 | width: 100%; |
38 | - position: relative; | 50 | + margin-top: 24px; |
39 | } | 51 | } |
52 | + | ||
40 | </style> | 53 | </style> |
41 | 54 | ||
42 | <template> | 55 | <template> |
43 | 56 | ||
44 | - <div class="div_container"> | ||
45 | - <paper-material id="material_tree_view" elevation="5"> | ||
46 | - <tree-view-controllet id="tree_view" root-name={{rootName}} opened-path={{openedPath}} preselected-fields={{preselectedFields}}></tree-view-controllet> | ||
47 | - </paper-material> | ||
48 | - <paper-material id="material_multi_table_filters" elevation="5"> | ||
49 | - <div id="div_multi_table"> | ||
50 | - <multi-table-controllet id="multi_table" data-url={{dataUrl}}></multi-table-controllet> | 57 | + <providers-utility-controllet></providers-utility-controllet> |
58 | + | ||
59 | + <div id="select_data_controllet_container"> | ||
60 | + <div id="fields_container"> | ||
61 | + <select-fields-controllet id="select_fields"></select-fields-controllet> | ||
62 | + </div> | ||
63 | + <div id="right_container"> | ||
64 | + <div id="table_container"> | ||
65 | + <data-table-controllet id="data_table"></data-table-controllet> | ||
51 | </div> | 66 | </div> |
52 | - <div id="div_filters"> | 67 | + <div id="filters_container"> |
53 | <filters-controllet id="filters"></filters-controllet> | 68 | <filters-controllet id="filters"></filters-controllet> |
54 | </div> | 69 | </div> |
55 | - </paper-material> | 70 | + </div> |
56 | </div> | 71 | </div> |
57 | 72 | ||
73 | + | ||
58 | </template> | 74 | </template> |
59 | 75 | ||
60 | <script> | 76 | <script> |
@@ -64,139 +80,160 @@ | @@ -64,139 +80,160 @@ | ||
64 | 80 | ||
65 | properties : { | 81 | properties : { |
66 | 82 | ||
67 | - rootName : { | 83 | + dataUrl : { |
68 | type : String, | 84 | type : String, |
69 | - value : "root" | ||
70 | - }, | ||
71 | - | ||
72 | - preselectedFields : { | ||
73 | - type : Array, | ||
74 | - value : [] | 85 | + value : undefined |
86 | +// observer : '_init' | ||
75 | }, | 87 | }, |
76 | 88 | ||
77 | - openedPath : { | ||
78 | - type : String, | 89 | + data : { |
90 | + type : Object, | ||
79 | value : undefined | 91 | value : undefined |
80 | }, | 92 | }, |
81 | 93 | ||
82 | - dataUrl : { | ||
83 | - type : String, | ||
84 | - value : undefined, | ||
85 | - observer : '_init' | 94 | + filters : { |
95 | + type : Array, | ||
96 | + value : [] | ||
97 | +// value : [{logicalOperator: "OR"}, {field: "annee", operation: "=", value: "2014"}, {field: "annee", operation: "=", value: "2015"}] | ||
86 | }, | 98 | }, |
87 | 99 | ||
88 | - filters : { | 100 | + selectedFields : { |
89 | type : Array, | 101 | type : Array, |
90 | value : [] | 102 | value : [] |
91 | - }, | 103 | +// value : [0,2,4] |
104 | + } | ||
92 | 105 | ||
93 | }, | 106 | }, |
94 | 107 | ||
95 | listeners: { | 108 | listeners: { |
96 | - 'tree-view-controllet_selected-fields': '_updateSelectedFields', | 109 | + 'filters-controllet_show': '_resizeFilters', |
110 | + 'select-fields-controllet_selected-fields': '_updateFields', | ||
97 | 'filters-controllet_filters': '_updateFilters' | 111 | 'filters-controllet_filters': '_updateFilters' |
98 | }, | 112 | }, |
99 | 113 | ||
100 | ready : function() { | 114 | ready : function() { |
101 | - $(this.$.material_tree_view).perfectScrollbar(); | 115 | + this.showFilter = false; |
102 | }, | 116 | }, |
103 | 117 | ||
104 | attached : function(){ | 118 | attached : function(){ |
105 | this._resize(); | 119 | this._resize(); |
106 | var that = this; | 120 | var that = this; |
107 | window.addEventListener("resize", function() { that._resize(); }); | 121 | window.addEventListener("resize", function() { that._resize(); }); |
108 | - | ||
109 | - if(this.dataletPreset && this.dataletPreset["filters"] != undefined) | ||
110 | - this._preselectFilters(); | ||
111 | }, | 122 | }, |
112 | 123 | ||
113 | - _preselectFilters : function() { | ||
114 | - this.async(function() { | ||
115 | - this.filters = JSON.parse(this.dataletPreset["filters"]); | ||
116 | - this.dataletPreset["filters"] = undefined; | ||
117 | - this.$.filters.filters = this.filters; | ||
118 | - this.$.multi_table.filters = this.filters; | ||
119 | - this._refreshTables(); | ||
120 | - }, 1); | 124 | + getSelectedFields : function() { |
125 | + return utility_getSelectedFields(this.fields, this.selectedFields);; | ||
121 | }, | 126 | }, |
122 | 127 | ||
123 | getFilters : function() { | 128 | getFilters : function() { |
124 | - return this.$.filters.getFilters(); | 129 | + return this.filters; |
125 | }, | 130 | }, |
126 | 131 | ||
127 | - getFields : function() { | ||
128 | - return this.$.tree_view.getFields(); | 132 | + getData : function() { |
133 | + return this.data; | ||
129 | }, | 134 | }, |
130 | 135 | ||
131 | - getFlatFields : function() { | ||
132 | - return this.$.tree_view.getFlatFields(); | 136 | + _resizeFilters : function() { |
137 | + if(!this.showFilter) { | ||
138 | + this.$.table_container.style.height = "calc(50% - 12px)"; | ||
139 | + this.$.filters_container.style.height = "calc(50% - 12px)"; | ||
140 | + } | ||
141 | + else { | ||
142 | + this.$.table_container.style.height = "calc(100% - 72px)"; | ||
143 | + this.$.filters_container.style.height = "48px"; | ||
144 | + } | ||
145 | + | ||
146 | + this.$.data_table._resize(); | ||
147 | + | ||
148 | + this.showFilter = !this.showFilter; | ||
133 | }, | 149 | }, |
134 | 150 | ||
135 | - _init : function() { | ||
136 | - var that = this; | 151 | + _updateFields : function(e) { |
152 | + this.selectedFields = e.detail.selectedFields; | ||
153 | + var fields = utility_getSelectedFields(this.fields, this.selectedFields); | ||
154 | + var data = alasql_selectData(this.data, fields, this.filters); | ||
155 | + this.$.data_table.setData(data); | ||
156 | + }, | ||
137 | 157 | ||
138 | - $.ajax({ | ||
139 | - url: this.dataUrl, | ||
140 | - dataType: "json", | ||
141 | - success: function(data){ | ||
142 | - that.rootName = "data"; | ||
143 | - var data = that._filterJson(data); | ||
144 | - that.$.tree_view.setAttribute("json-data", JSON.stringify(data)); | ||
145 | - that.$.tree_view.selectedFields = []; | ||
146 | - that._updateSelectedFields(); | ||
147 | - that.$.tree_view.ready(); | ||
148 | - that.filters = []; | ||
149 | - that.$.filters.filters = []; | ||
150 | - that.$.multi_table.filters = []; | ||
151 | - } | ||
152 | - }); | ||
153 | - | ||
154 | - this.$.multi_table.ready(); | 158 | + _updateFilters : function(e) { |
159 | + this.filters = e.detail.filters; | ||
160 | + var fields = utility_getSelectedFields(this.fields, this.selectedFields); | ||
161 | + var data = alasql_selectData(this.data, fields, this.filters); | ||
162 | + this.$.data_table.setData(data); | ||
155 | }, | 163 | }, |
156 | 164 | ||
157 | - _filterJson : function(data){ | ||
158 | - //ckan | ||
159 | - if(data.result != undefined && data.result.resource_id != undefined) { | ||
160 | - this.rootName = "result,records" | ||
161 | - return data.result.records; | ||
162 | - } | ||
163 | - //openDataSoft | ||
164 | - else if(data.parameters != undefined && data.parameters.dataset != undefined) { | ||
165 | - this.rootName = "records,fields"; | ||
166 | - return data.records[0].fields; | ||
167 | - } | ||
168 | - else{ | ||
169 | - return data; | 165 | + init : function() { |
166 | + if(this.dataUrl) { | ||
167 | + | ||
168 | + var that = this; | ||
169 | + | ||
170 | + $.ajax({ | ||
171 | + url: this.dataUrl, | ||
172 | + dataType: "json", | ||
173 | + success: function(data){ | ||
174 | + that.reset(); | ||
175 | + | ||
176 | + var f = Object.create(providerFactory); | ||
177 | + var provider = f.getProvider(that.dataUrl); | ||
178 | + data = provider.selectData(data); | ||
179 | + | ||
180 | + var converter = new DataTypeConverter(); | ||
181 | + var result = converter.inferJsonDataType(data, ["*"]); | ||
182 | + result = converter.cast(result); | ||
183 | + that.fields = utility_getFields(result.types); | ||
184 | + data = result.dataset; | ||
185 | + that.data = alasql_selectData(data, that.fields); | ||
186 | + | ||
187 | + that.$.select_fields.setFields(that.fields); | ||
188 | + that.$.filters.setFields(that.fields); | ||
189 | +// that.$.data_table.setData(data); | ||
190 | + | ||
191 | + that._preselect(); | ||
192 | + } | ||
193 | + }); | ||
170 | } | 194 | } |
171 | - }, | ||
172 | 195 | ||
173 | - _updateSelectedFields : function() { | ||
174 | - var fields = this.$.tree_view.getFields(); | ||
175 | - this.$.multi_table.setSelectedFields(fields); | 196 | + else { |
197 | + this.reset(); | ||
176 | 198 | ||
177 | - var flatFields = this.$.tree_view.getFlatFields(); | ||
178 | - this.$.filters.setFields(flatFields); | 199 | + var converter = new DataTypeConverter(); |
200 | + var result = converter.inferJsonDataType(this.data, ["*"]); | ||
201 | + result = converter.cast(result); | ||
202 | + this.fields = utility_getFields(result.types); | ||
203 | + data = result.dataset; | ||
204 | + this.data = alasql_selectData(data, this.fields); | ||
205 | + | ||
206 | + this.$.select_fields.setFields(this.fields); | ||
207 | + this.$.filters.setFields(this.fields); | ||
208 | +// this.$.data_table.setData(data); | ||
209 | + | ||
210 | + this._preselect(); | ||
211 | + } | ||
179 | }, | 212 | }, |
180 | 213 | ||
181 | - _updateFilters : function(e) { | ||
182 | - this.filters = e.detail.filters; | ||
183 | - this.$.multi_table.filters = e.detail.filters; | ||
184 | - this._refreshTables(); | 214 | + reset : function() { |
215 | +// this.dataUrl = undefined; | ||
216 | +// this.data = undefined; | ||
217 | + this.filters = []; | ||
218 | + this.selectedFields = []; | ||
219 | + this.$.select_fields.reset(); | ||
220 | + this.$.data_table.reset(); | ||
221 | + this.$.filters.reset(); | ||
185 | }, | 222 | }, |
186 | 223 | ||
187 | - _refreshTables : function() { | ||
188 | - this.$.multi_table.setSelectedFields([]); | ||
189 | - this.async(function () { | ||
190 | - var fields = this.$.tree_view.getFields(); | ||
191 | - this.$.multi_table.setSelectedFields(fields); | 224 | + _preselect : function() { |
225 | + this.async(function() { | ||
226 | + if(this.filters.length > 1) | ||
227 | + this.$.filters.setFilters(this.filters); | ||
228 | + if(this.selectedFields.length > 0) | ||
229 | + this.$.select_fields.setSelectFields(this.selectedFields); | ||
192 | }, 0); | 230 | }, 0); |
193 | }, | 231 | }, |
194 | 232 | ||
195 | _resize : function(){ | 233 | _resize : function(){ |
196 | var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - 16; | 234 | var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - 16; |
197 | - h = h - 64; //height with page scroller | ||
198 | - $("#material_tree_view").height(h); | ||
199 | - $("#material_multi_table_filters").height(h-8); | 235 | + h = h - 64 - 8; //height with page scroller + margin-top |
236 | + $("#select_data_controllet_container").height(h); | ||
200 | } | 237 | } |
201 | 238 | ||
202 | }); | 239 | }); |
controllets/select-dataset-controllet/ortelio-controllet.html
@@ -506,26 +506,26 @@ | @@ -506,26 +506,26 @@ | ||
506 | 506 | ||
507 | var url = this.$.list.selectedItem.resource_url; | 507 | var url = this.$.list.selectedItem.resource_url; |
508 | 508 | ||
509 | - // Check if CKAN | ||
510 | - var strDatasetPos = url.indexOf('/dataset/'); | ||
511 | - var strResourcePos = (strDatasetPos >= 0) ? url.indexOf('/resource/') : -1; | ||
512 | - if (strDatasetPos >= 0 && strResourcePos > strDatasetPos) { | ||
513 | - var urlSegment1 = url.substring(0, strDatasetPos); | ||
514 | - var urlResourceEnd = url.indexOf('/', strResourcePos + 10); | ||
515 | - var resourceId = url.substring(strResourcePos + 10, urlResourceEnd); | ||
516 | - url = urlSegment1 + "/api/action/datastore_search?resource_id=" + resourceId; | ||
517 | - } | ||
518 | - | ||
519 | - // Check if OPENDATASOFT | ||
520 | - var strExploreDatasetPos = url.indexOf('/explore/dataset/'); | ||
521 | - if (strExploreDatasetPos >= 0) { | ||
522 | - var urlSegment1 = url.substring(0, strExploreDatasetPos); | ||
523 | - var datasetEnd = url.indexOf(strExploreDatasetPos + 17, '/'); | ||
524 | - var datasetId = url.substring(strExploreDatasetPos + 17, datasetEnd >= 0 ? datasetEnd : url.length); | ||
525 | - url = urlSegment1 + '/api/records/1.0/search?dataset=' + datasetId; | ||
526 | - } | ||
527 | - | ||
528 | - url = this._addlimitUrl(url); | 509 | +// // Check if CKAN |
510 | +// var strDatasetPos = url.indexOf('/dataset/'); | ||
511 | +// var strResourcePos = (strDatasetPos >= 0) ? url.indexOf('/resource/') : -1; | ||
512 | +// if (strDatasetPos >= 0 && strResourcePos > strDatasetPos) { | ||
513 | +// var urlSegment1 = url.substring(0, strDatasetPos); | ||
514 | +// var urlResourceEnd = url.indexOf('/', strResourcePos + 10); | ||
515 | +// var resourceId = url.substring(strResourcePos + 10, urlResourceEnd); | ||
516 | +// url = urlSegment1 + "/api/action/datastore_search?resource_id=" + resourceId; | ||
517 | +// } | ||
518 | +// | ||
519 | +// // Check if OPENDATASOFT | ||
520 | +// var strExploreDatasetPos = url.indexOf('/explore/dataset/'); | ||
521 | +// if (strExploreDatasetPos >= 0) { | ||
522 | +// var urlSegment1 = url.substring(0, strExploreDatasetPos); | ||
523 | +// var datasetEnd = url.indexOf(strExploreDatasetPos + 17, '/'); | ||
524 | +// var datasetId = url.substring(strExploreDatasetPos + 17, datasetEnd >= 0 ? datasetEnd : url.length); | ||
525 | +// url = urlSegment1 + '/api/records/1.0/search?dataset=' + datasetId; | ||
526 | +// } | ||
527 | + | ||
528 | +// url = this._addlimitUrl(url); | ||
529 | 529 | ||
530 | this.fire("datasetexplorer-datalet_data-url", { url: url });//change event name | 530 | this.fire("datasetexplorer-datalet_data-url", { url: url });//change event name |
531 | } | 531 | } |
@@ -536,18 +536,18 @@ | @@ -536,18 +536,18 @@ | ||
536 | }, 0); | 536 | }, 0); |
537 | }, | 537 | }, |
538 | 538 | ||
539 | - _addlimitUrl : function(url){ | ||
540 | - //CKAN --> action no limit | ||
541 | - if((url.indexOf("api/action") > -1) && !(url.indexOf("limit") > -1)) | ||
542 | - { | ||
543 | - url += "&limit=99999"; | ||
544 | - } | ||
545 | - //OpenDataSoft --> action no limit | ||
546 | - if((url.indexOf("api/records") > -1) && !(url.indexOf("rows") > -1)){ | ||
547 | - url += "&rows=10000"; | ||
548 | - } | ||
549 | - return url; | ||
550 | - } | 539 | +// _addlimitUrl : function(url){ |
540 | +// //CKAN --> action no limit | ||
541 | +// if((url.indexOf("api/action") > -1) && !(url.indexOf("limit") > -1)) | ||
542 | +// { | ||
543 | +// url += "&limit=99999"; | ||
544 | +// } | ||
545 | +// //OpenDataSoft --> action no limit | ||
546 | +// if((url.indexOf("api/records") > -1) && !(url.indexOf("rows") > -1)){ | ||
547 | +// url += "&rows=10000"; | ||
548 | +// } | ||
549 | +// return url; | ||
550 | +// } | ||
551 | }); | 551 | }); |
552 | }); | 552 | }); |
553 | </script> | 553 | </script> |
controllets/select-dataset-controllet/select-dataset-controllet.html
@@ -33,6 +33,7 @@ | @@ -33,6 +33,7 @@ | ||
33 | 33 | ||
34 | <link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html"> | 34 | <link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html"> |
35 | 35 | ||
36 | +<link rel="import" href="../providers-utility-controllet/providers-utility-controllet.html"> | ||
36 | <link rel="import" href="ortelio-controllet.html"> | 37 | <link rel="import" href="ortelio-controllet.html"> |
37 | <link rel="import" href="../../datalets/datasetexplorer-datalet/datasetexplorer-datalet.html"> | 38 | <link rel="import" href="../../datalets/datasetexplorer-datalet/datasetexplorer-datalet.html"> |
38 | 39 | ||
@@ -740,28 +741,32 @@ | @@ -740,28 +741,32 @@ | ||
740 | html += "<b>" + i + ":</b> " + metas[i] + "<br>"; | 741 | html += "<b>" + i + ":</b> " + metas[i] + "<br>"; |
741 | this.$.info.innerHTML = html; | 742 | this.$.info.innerHTML = html; |
742 | 743 | ||
743 | - var url = this.$.list.selectedItem.url; | ||
744 | - | ||
745 | - // Check if CKAN | ||
746 | - var strDatasetPos = url.indexOf('/dataset/'); | ||
747 | - var strResourcePos = (strDatasetPos >= 0) ? url.indexOf('/resource/') : -1; | ||
748 | - if (strDatasetPos >= 0 && strResourcePos > strDatasetPos) { | ||
749 | - var urlSegment1 = url.substring(0, strDatasetPos); | ||
750 | - var urlResourceEnd = url.indexOf('/', strResourcePos + 10); | ||
751 | - var resourceId = url.substring(strResourcePos + 10, urlResourceEnd); | ||
752 | - url = urlSegment1 + "/api/action/datastore_search?resource_id=" + resourceId; | ||
753 | - } | ||
754 | - | ||
755 | - // Check if OPENDATASOFT | ||
756 | - var strExploreDatasetPos = url.indexOf('/explore/dataset/'); | ||
757 | - if (strExploreDatasetPos >= 0) { | ||
758 | - var urlSegment1 = url.substring(0, strExploreDatasetPos); | ||
759 | - var datasetEnd = url.indexOf(strExploreDatasetPos + 17, '/'); | ||
760 | - var datasetId = url.substring(strExploreDatasetPos + 17, datasetEnd >= 0 ? datasetEnd : url.length); | ||
761 | - url = urlSegment1 + '/api/records/1.0/search?dataset=' + datasetId; | ||
762 | - } | ||
763 | - | ||
764 | - this.dataUrl = this._addlimitUrl(url); | 744 | + this.dataUrl = this.$.list.selectedItem.url; |
745 | +// var url = this.$.list.selectedItem.url; | ||
746 | + | ||
747 | +// url = utility_getResourceUrl(url); | ||
748 | + | ||
749 | +// // Check if CKAN | ||
750 | +// var strDatasetPos = url.indexOf('/dataset/'); | ||
751 | +// var strResourcePos = (strDatasetPos >= 0) ? url.indexOf('/resource/') : -1; | ||
752 | +// if (strDatasetPos >= 0 && strResourcePos > strDatasetPos) { | ||
753 | +// var urlSegment1 = url.substring(0, strDatasetPos); | ||
754 | +// var urlResourceEnd = url.indexOf('/', strResourcePos + 10); | ||
755 | +// var resourceId = url.substring(strResourcePos + 10, urlResourceEnd); | ||
756 | +// url = urlSegment1 + "/api/action/datastore_search?resource_id=" + resourceId; | ||
757 | +// } | ||
758 | +// | ||
759 | +// // Check if OPENDATASOFT | ||
760 | +// var strExploreDatasetPos = url.indexOf('/explore/dataset/'); | ||
761 | +// if (strExploreDatasetPos >= 0) { | ||
762 | +// var urlSegment1 = url.substring(0, strExploreDatasetPos); | ||
763 | +// var datasetEnd = url.indexOf(strExploreDatasetPos + 17, '/'); | ||
764 | +// var datasetId = url.substring(strExploreDatasetPos + 17, datasetEnd >= 0 ? datasetEnd : url.length); | ||
765 | +// url = urlSegment1 + '/api/records/1.0/search?dataset=' + datasetId; | ||
766 | +// } | ||
767 | + | ||
768 | +// this.dataUrl = this._addlimitUrl(url); | ||
769 | +// this.dataUrl = url; | ||
765 | } | 770 | } |
766 | else { | 771 | else { |
767 | this.dataUrl = ""; | 772 | this.dataUrl = ""; |
@@ -771,25 +776,26 @@ | @@ -771,25 +776,26 @@ | ||
771 | }, | 776 | }, |
772 | 777 | ||
773 | _selectDataUrl_treeMap : function(e) { | 778 | _selectDataUrl_treeMap : function(e) { |
774 | - this.dataUrl = this._addlimitUrl(e.detail.url); | 779 | +// this.dataUrl = this._addlimitUrl(e.detail.url); |
780 | + this.dataUrl = e.detail.url; | ||
775 | }, | 781 | }, |
776 | 782 | ||
777 | _fireDataUrl : function(){ | 783 | _fireDataUrl : function(){ |
778 | this.fire('dataset-selection-controllet_data-url', {url: this.dataUrl}); | 784 | this.fire('dataset-selection-controllet_data-url', {url: this.dataUrl}); |
779 | }, | 785 | }, |
780 | 786 | ||
781 | - _addlimitUrl : function(url){ | ||
782 | - //CKAN --> action no limit | ||
783 | - if((url.indexOf("api/action") > -1) && !(url.indexOf("limit") > -1)) | ||
784 | - { | ||
785 | - url += "&limit=99999"; | ||
786 | - } | ||
787 | - //OpenDataSoft --> action no limit | ||
788 | - if((url.indexOf("api/records") > -1) && !(url.indexOf("rows") > -1)){ | ||
789 | - url += "&rows=10000"; | ||
790 | - } | ||
791 | - return url; | ||
792 | - }, | 787 | +// _addlimitUrl : function(url){ |
788 | +// //CKAN --> action no limit | ||
789 | +// if((url.indexOf("api/action") > -1) && !(url.indexOf("limit") > -1)) | ||
790 | +// { | ||
791 | +// url += "&limit=99999"; | ||
792 | +// } | ||
793 | +// //OpenDataSoft --> action no limit | ||
794 | +// if((url.indexOf("api/records") > -1) && !(url.indexOf("rows") > -1)){ | ||
795 | +// url += "&rows=10000"; | ||
796 | +// } | ||
797 | +// return url; | ||
798 | +// }, | ||
793 | 799 | ||
794 | _resize : function(){ | 800 | _resize : function(){ |
795 | var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - 16; | 801 | var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - 16; |
controllets/select-fields-controllet/demo/index.html
1 | <html> | 1 | <html> |
2 | 2 | ||
3 | <head> | 3 | <head> |
4 | + <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> | ||
5 | + | ||
4 | <script src="../../shared_js/jquery-1.11.2.min.js"></script> | 6 | <script src="../../shared_js/jquery-1.11.2.min.js"></script> |
5 | 7 | ||
6 | - <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script> | 8 | + <script src="../../shared_js/perfect-scrollbar/js/min/perfect-scrollbar.jquery.min.js"></script> |
9 | + <link rel="stylesheet" href="../../shared_js/perfect-scrollbar/css/perfect-scrollbar.min.css"> | ||
10 | + | ||
11 | + <script src="../../../locales/controllet_ln.js"></script> | ||
7 | 12 | ||
8 | - <link rel="import" href="../tree-view-controllet.html" /> | 13 | + <link rel="import" href="../select-fields-controllet.html" /> |
9 | </head> | 14 | </head> |
10 | 15 | ||
11 | <body> | 16 | <body> |
@@ -15,65 +20,27 @@ | @@ -15,65 +20,27 @@ | ||
15 | display: flex; | 20 | display: flex; |
16 | flex-direction: row; | 21 | flex-direction: row; |
17 | } | 22 | } |
18 | - #tree_container { | 23 | + #select_fields_container { |
24 | + height: 600px; | ||
19 | width: 300px; | 25 | width: 300px; |
20 | - } | ||
21 | - #fields_container { | ||
22 | margin-left: 100px; | 26 | margin-left: 100px; |
23 | } | 27 | } |
28 | + | ||
24 | </style> | 29 | </style> |
25 | 30 | ||
26 | <div class="container"> | 31 | <div class="container"> |
27 | - | ||
28 | - <div id="tree_container"> | ||
29 | - | ||
30 | - <!--<tree-view-controllet id="tree" root-name="data" opened-path="records,geometry" preselected-fields='["records,datasetid", "records,recordid", "nhits"]'></tree-view-controllet>--> | ||
31 | - <tree-view-controllet id="tree" root-name="create-datalet-controllet"></tree-view-controllet> | ||
32 | - | ||
33 | - </div> | ||
34 | - | ||
35 | - <div id="fields_container"> | ||
36 | - <h3>Selected fields:</h3> | ||
37 | - <p id="fields"> </p> | 32 | + <div id="select_fields_container"> |
33 | + <select-fields-controllet fields='["pippo", "pluto", "paperino", "pippo", "pluto", "paperino"]' preselected-fields="[0,2]"></select-fields-controllet> | ||
38 | </div> | 34 | </div> |
39 | - | ||
40 | </div> | 35 | </div> |
41 | 36 | ||
42 | - | ||
43 | <script> | 37 | <script> |
38 | + ln["localization"] = "en"; | ||
44 | 39 | ||
45 | - var json = {"select-dataset-controllet": "s", "select-data-controllet": {"tree-view-controllet": "", "multi-table-controllet": "", "filters-controllet": ""}, "select-visualization-controllet": {"items-vslider-controllet": ""}}; | ||
46 | - var tree = document.getElementById('tree'); | ||
47 | - tree.setAttribute("json-data", JSON.stringify(json)); | ||
48 | - tree.ready(); | ||
49 | - | ||
50 | -// var tree = document.getElementById('tree'); | ||
51 | - var fields = document.getElementById('fields'); | ||
52 | -// | ||
53 | -// $.ajax({ | ||
54 | -// url: 'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=c3b52992-ba61-4a73-a637-0f2e1ca26aab', | ||
55 | -// dataType: "json", | ||
56 | -// success: function(data){ | ||
57 | -// tree.setAttribute("json-data", JSON.stringify(data)); | ||
58 | -// tree.ready();//chrome | ||
59 | -// } | ||
60 | -// }); | ||
61 | -// | ||
62 | -// tree.addEventListener("tree-view-controllet_selected-fields", function (e) { | ||
63 | -// fields.innerHTML = e.detail.fields; | ||
64 | -//// console.log(tree.getFlatFields()); | ||
65 | -//// console.log(tree.getFields());//firefox console.log does not recognize associative array? | ||
66 | -// }); | 40 | + document.addEventListener("select-fields-controllet_selected-fields", function (e) { |
41 | + console.log(e.detail.selectedFields); | ||
42 | + }); | ||
67 | 43 | ||
68 | </script> | 44 | </script> |
69 | 45 | ||
70 | -</body> | ||
71 | - | ||
72 | -</html> | ||
73 | - | ||
74 | -<!--urls:--> | ||
75 | -<!--https://yperdiavgeia.gr/analytics/counts/source:Decision/query:linux/method:count_organization.json--> | ||
76 | -<!--http://dati.lazio.it/catalog/api/action/datastore_search?resource_id=114baf3d-6d4f-42ff-b4af-481beef59ae1--> | ||
77 | -<!--url: 'http://ckan.routetopa.eu/api/action/datastore_search?resource_id=73e02092-85a1-434e-85fe-0c9a43aa9a52&limit=5',--> | ||
78 | -<!--url: 'https://data.issy.com/api/records/1.0/search?dataset=liste-des-restaurants-a-issy-les-moulineaux&sort=type&facet=type&facet=terrasse',--> | ||
79 | -<!--url: 'https://data.issy.com/api/records/1.0/search?dataset=flux-rss-des-offres-demplois-a-issy-les-moulineaux&sort=published&facet=published&refine.published=2015',--> | ||
80 | \ No newline at end of file | 46 | \ No newline at end of file |
47 | +</body> | ||
81 | \ No newline at end of file | 48 | \ No newline at end of file |
controllets/select-fields-controllet/select-fields-controllet.html
0 โ 100644
1 | +<link rel="import" href="../../bower_components/polymer/polymer.html" /> | ||
2 | + | ||
3 | +<link rel="import" href="../../bower_components/paper-material/paper-material.html" /> | ||
4 | +<link rel="import" href="../../bower_components/paper-menu/paper-menu.html"> | ||
5 | +<link rel="import" href="../../bower_components/paper-item/paper-item.html"> | ||
6 | + | ||
7 | +<dom-module id="select-fields-controllet"> | ||
8 | + | ||
9 | + <style is="custom-style"> | ||
10 | + | ||
11 | + #select_fields_controllet_container { | ||
12 | + height: 100%; | ||
13 | + width: 100%; | ||
14 | + } | ||
15 | + | ||
16 | + #select_fields_controllet_container * { | ||
17 | + font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif; | ||
18 | + font-size: 16px; | ||
19 | + line-height: 24px; | ||
20 | + } | ||
21 | + | ||
22 | + #select_fields_controllet_container #header { | ||
23 | + background: #B6B6B6; | ||
24 | + height: 24px; | ||
25 | + padding: 12px; | ||
26 | + text-align: center; | ||
27 | + font-weight: 700; | ||
28 | + cursor: pointer; | ||
29 | + } | ||
30 | + | ||
31 | + #select_fields_controllet_container #menu_container { | ||
32 | + position: relative; | ||
33 | + height: calc(100% - 48px); | ||
34 | + width: 100%; | ||
35 | + } | ||
36 | + | ||
37 | + paper-menu { | ||
38 | + padding: 0px; | ||
39 | + } | ||
40 | + | ||
41 | + paper-item { | ||
42 | + cursor: pointer; | ||
43 | + color: #000000; | ||
44 | + margin: 4px; | ||
45 | + } | ||
46 | + | ||
47 | + paper-item.iron-selected { | ||
48 | + background: #2196F3; | ||
49 | + color: #FFFFFF; | ||
50 | + } | ||
51 | + | ||
52 | + paper-item:focus:before { | ||
53 | + opacity: 0 !important; | ||
54 | + background: white; | ||
55 | + } | ||
56 | + | ||
57 | + paper-item:focus:after { | ||
58 | + opacity: 0 !important; | ||
59 | + background: white; | ||
60 | + } | ||
61 | + | ||
62 | + paper-item:hover:not(.iron-selected) { | ||
63 | + background-color: rgba(0, 0, 0, 0.12); | ||
64 | + } | ||
65 | + | ||
66 | + </style> | ||
67 | + | ||
68 | + <template> | ||
69 | + | ||
70 | + <paper-material id="select_fields_controllet_container" elevation="5"> | ||
71 | + | ||
72 | + <div id="header" on-click="_invertSelection"><span id="fields"></span></div> | ||
73 | + <div id="menu_container"> | ||
74 | + <paper-menu id="menu" multi> | ||
75 | + <template is="dom-repeat" items="{{fields}}"> | ||
76 | + <paper-item>{{item}}</paper-item> | ||
77 | + </template> | ||
78 | + </paper-menu> | ||
79 | + </div> | ||
80 | + | ||
81 | + </paper-material> | ||
82 | + | ||
83 | + </template> | ||
84 | + | ||
85 | + <script> | ||
86 | + Polymer({ | ||
87 | + | ||
88 | + is : 'select-fields-controllet', | ||
89 | + | ||
90 | + properties : { | ||
91 | + | ||
92 | + fields : { | ||
93 | + type : Array, | ||
94 | + value : [] | ||
95 | + }, | ||
96 | + | ||
97 | +// preselectedFields : { | ||
98 | +// type : Array, | ||
99 | +// value : [] | ||
100 | +// } | ||
101 | + }, | ||
102 | + | ||
103 | + listeners: { | ||
104 | + 'iron-activate': '_fireSelectedFields' | ||
105 | + }, | ||
106 | + | ||
107 | + ready : function() { | ||
108 | + $(this.$.menu_container).perfectScrollbar(); | ||
109 | + }, | ||
110 | + | ||
111 | + attached : function() { | ||
112 | + this._translate(); | ||
113 | + | ||
114 | +// if (this.preselectedFields.length > 0) | ||
115 | +// this._preselectFields(); | ||
116 | + }, | ||
117 | + | ||
118 | + setFields : function(fields) { | ||
119 | + this.fields = fields; | ||
120 | + }, | ||
121 | + | ||
122 | + setSelectFields : function(selectFields) { | ||
123 | + for(var i=0; i<selectFields.length; i++) | ||
124 | + this.$.menu.select(selectFields[i]); | ||
125 | + this._fireSelectedFields(); | ||
126 | + }, | ||
127 | + | ||
128 | + reset: function() { | ||
129 | + this.$.menu.selectedValues = []; | ||
130 | + this.setFields([]); | ||
131 | + }, | ||
132 | + | ||
133 | + _translate : function() { | ||
134 | + this.$.fields.innerHTML = ln["fields_" + ln["localization"]]; | ||
135 | + }, | ||
136 | + | ||
137 | +// _preselectFields : function() { | ||
138 | +// for(var i=0; i<this.preselectedFields.length; i++) | ||
139 | +// this.$.menu.select(this.preselectedFields[i]); | ||
140 | +// this._fireSelectedFields(); | ||
141 | +// }, | ||
142 | + | ||
143 | + _fireSelectedFields : function() { | ||
144 | + this.debounce('_fireSelectedFields', function () { | ||
145 | + this.fire('select-fields-controllet_selected-fields', {selectedFields: this.$.menu.selectedValues}); | ||
146 | + }, 300); | ||
147 | + }, | ||
148 | + | ||
149 | + _invertSelection : function() { | ||
150 | +// for(var i=this.fields.length-1; i>=0; i--) | ||
151 | + for(var i=0; i<this.fields.length; i++) | ||
152 | + this.$.menu.select(i); | ||
153 | + | ||
154 | + $(this.$.menu_container).animate({ scrollTop: 0}, 0); | ||
155 | + | ||
156 | + this._fireSelectedFields(); | ||
157 | + } | ||
158 | + | ||
159 | + }); | ||
160 | + | ||
161 | + </script> | ||
162 | + | ||
163 | +</dom-module> | ||
0 | \ No newline at end of file | 164 | \ No newline at end of file |
controllets/select-visualization-controllet/select-visualization-controllet.html
@@ -190,14 +190,21 @@ | @@ -190,14 +190,21 @@ | ||
190 | params:{ | 190 | params:{ |
191 | type: Object, | 191 | type: Object, |
192 | value: undefined | 192 | value: undefined |
193 | - } | 193 | + }, |
194 | + | ||
195 | + data : { | ||
196 | + type : Object, | ||
197 | + value : undefined | ||
198 | + }, | ||
194 | 199 | ||
195 | }, | 200 | }, |
196 | 201 | ||
197 | listeners: { | 202 | listeners: { |
203 | +// 'select-fields-controllet_selected-fields': '_updateFields', | ||
204 | +// 'filters-controllet_filters': '_updateFilters', | ||
198 | 'items-vslider-controllet_selected-datalet': '_selectDatalet', | 205 | 'items-vslider-controllet_selected-datalet': '_selectDatalet', |
199 | 'select_visualization_inputs_ready': '_loadDatalet', | 206 | 'select_visualization_inputs_ready': '_loadDatalet', |
200 | - 'select_visualization_options_changed': '_tryLoadDatalet', | 207 | + 'select_visualization_options_changed': '_tryLoadDatalet' |
201 | }, | 208 | }, |
202 | 209 | ||
203 | ready : function() { | 210 | ready : function() { |
@@ -221,8 +228,8 @@ | @@ -221,8 +228,8 @@ | ||
221 | }, | 228 | }, |
222 | 229 | ||
223 | setFields : function(fields) { | 230 | setFields : function(fields) { |
224 | - if (this.fields.length > 0 && JSON.stringify(this.fields) != JSON.stringify(fields)) | ||
225 | - this.reset(); | 231 | +// if (this.fields.length > 0 && JSON.stringify(this.fields) != JSON.stringify(fields)) |
232 | +// this.init(); | ||
226 | 233 | ||
227 | this.fields = this._copy(fields); | 234 | this.fields = this._copy(fields); |
228 | 235 | ||
@@ -231,7 +238,11 @@ | @@ -231,7 +238,11 @@ | ||
231 | inputs.setFields(this.fields); | 238 | inputs.setFields(this.fields); |
232 | }, | 239 | }, |
233 | 240 | ||
234 | - reset : function() { | 241 | + setData : function(data) { |
242 | + this.data = this._copy(data); | ||
243 | + }, | ||
244 | + | ||
245 | + init : function() { | ||
235 | this.$.vslider._reset(); | 246 | this.$.vslider._reset(); |
236 | }, | 247 | }, |
237 | 248 | ||
@@ -342,11 +353,15 @@ | @@ -342,11 +353,15 @@ | ||
342 | var params = this.$.options.getParams(); | 353 | var params = this.$.options.getParams(); |
343 | for (var key in params) { this.params[key] = params[key]; } | 354 | for (var key in params) { this.params[key] = params[key]; } |
344 | 355 | ||
356 | + var data = alasql_complexSelectData(this.data, this.selectedFields, this.filters, inputs.getAggregators(), inputs.getOrders()); | ||
357 | + data = transformData(data, this.selectedFields, true); | ||
358 | + this.params["data"] = JSON.stringify(data); | ||
359 | + | ||
345 | var dataletParams ={ | 360 | var dataletParams ={ |
346 | - component : this.selectedDatalet+"-datalet", | ||
347 | - params : this.params, | ||
348 | - fields : this.selectedFields, | ||
349 | - placeHolder : this.$.datalet_selection_datalet_placeholder | 361 | + component: this.selectedDatalet+"-datalet", |
362 | + params: this.params, | ||
363 | + fields: this.selectedFields, | ||
364 | + placeHolder: this.$.datalet_selection_datalet_placeholder, | ||
350 | }; | 365 | }; |
351 | 366 | ||
352 | ComponentService.deep_url = this.deepUrl; | 367 | ComponentService.deep_url = this.deepUrl; |
@@ -359,11 +374,11 @@ | @@ -359,11 +374,11 @@ | ||
359 | delete this.params["export_menu"]; | 374 | delete this.params["export_menu"]; |
360 | 375 | ||
361 | var data = { | 376 | var data = { |
362 | - dataUrl : this.dataUrl, | ||
363 | - params : this.params, | ||
364 | - fields : this.selectedFields, | ||
365 | - datalet : this.selectedDatalet+"-datalet", | ||
366 | - staticData : JSON.stringify(this.$.datalet_selection_datalet_placeholder.children[1].behavior.data) | 377 | + dataUrl: this.dataUrl, |
378 | + params: this.params, | ||
379 | + fields: this.selectedFields, | ||
380 | + datalet: this.selectedDatalet+"-datalet", | ||
381 | + staticData: JSON.stringify(this.$.datalet_selection_datalet_placeholder.children[1].behavior.data) | ||
367 | } | 382 | } |
368 | 383 | ||
369 | this.fire('data-sevc-controllet.dataletCreated', {data : data}); | 384 | this.fire('data-sevc-controllet.dataletCreated', {data : data}); |
datalets/base-ajax-json-alasql-datalet/base-ajax-json-alasql-datalet.html
@@ -29,7 +29,12 @@ | @@ -29,7 +29,12 @@ | ||
29 | --> | 29 | --> |
30 | 30 | ||
31 | <link rel="import" href="../base-datalet/base-datalet.html"> | 31 | <link rel="import" href="../base-datalet/base-datalet.html"> |
32 | -<script type="text/javascript" src="../../bower_components/jsdatachecker/jsdatachecker.min.js"></script> | 32 | +<link rel="import" href="../../controllets/providers-utility-controllet/providers-utility-controllet.html" /> |
33 | + | ||
34 | +<script type="text/javascript" src="../../alasql-utility/alasql.min.js"></script> | ||
35 | +<script type="text/javascript" src="../../alasql-utility/alasql-utility.js"></script> | ||
36 | + | ||
37 | +<script type="text/javascript" src="../../bower_components/JSDataChecker/jsdatachecker.min.js"></script> | ||
33 | 38 | ||
34 | <!-- | 39 | <!-- |
35 | The `base-ajax-json-jsonpath-datalet` extend the base component and define the mechanism to access and select data. | 40 | The `base-ajax-json-jsonpath-datalet` extend the base component and define the mechanism to access and select data. |
@@ -52,6 +57,9 @@ Example : | @@ -52,6 +57,9 @@ Example : | ||
52 | --> | 57 | --> |
53 | 58 | ||
54 | <dom-module id="base-ajax-json-alasql-datalet"> | 59 | <dom-module id="base-ajax-json-alasql-datalet"> |
60 | + | ||
61 | + <providers-utility-controllet></providers-utility-controllet> | ||
62 | + | ||
55 | <template> | 63 | <template> |
56 | <base-datalet data-url="{{dataUrl}}" fields="{{fields}}" data="{{data}}" title="{{title}}" description="{{description}}" export_menu="{{export_menu}}"></base-datalet> | 64 | <base-datalet data-url="{{dataUrl}}" fields="{{fields}}" data="{{data}}" title="{{title}}" description="{{description}}" export_menu="{{export_menu}}"></base-datalet> |
57 | </template> | 65 | </template> |
datalets/base-ajax-json-alasql-datalet/static/js/AjaxJsonAlasqlBehavior.js
@@ -83,8 +83,7 @@ var AjaxJsonAlasqlBehavior = { | @@ -83,8 +83,7 @@ var AjaxJsonAlasqlBehavior = { | ||
83 | * @method selectData | 83 | * @method selectData |
84 | */ | 84 | */ |
85 | selectData : function() { | 85 | selectData : function() { |
86 | - this._component.fields = JSON.parse(this._component.fields); | ||
87 | - var provider = this._getProvider(this._component.fields[0]); | 86 | + var fields = this._component.fields = JSON.parse(this._component.fields); |
88 | 87 | ||
89 | var filters = JSON.parse(this._component.getAttribute("filters")); | 88 | var filters = JSON.parse(this._component.getAttribute("filters")); |
90 | var aggregators = JSON.parse(this._component.getAttribute("aggregators")); | 89 | var aggregators = JSON.parse(this._component.getAttribute("aggregators")); |
@@ -97,181 +96,23 @@ var AjaxJsonAlasqlBehavior = { | @@ -97,181 +96,23 @@ var AjaxJsonAlasqlBehavior = { | ||
97 | orders = orders[0]; | 96 | orders = orders[0]; |
98 | } | 97 | } |
99 | 98 | ||
100 | - var fields = []; | ||
101 | - for (var i=0; i < this._component.fields.length; i++) | ||
102 | - fields.push(this._fieldName(this._component.fields[i], provider)); | 99 | + var f = Object.create(providerFactory); |
100 | + var provider = f.getProvider(this._component.dataUrl); | ||
101 | + var data = provider.selectData(this.properties.json_results.value); | ||
103 | 102 | ||
104 | - //jsdatachecker | ||
105 | - var _converter = new DataTypeConverter(); | ||
106 | - var path2 = this._arrayPath(provider); | ||
107 | - var processingResult = _converter.inferJsonDataType(this.properties.json_results.value, path2); | ||
108 | - var processingResults = _converter.convert(processingResult); | ||
109 | - var jsonData = [processingResults.dataset]; | 103 | + var converter = new DataTypeConverter(); |
104 | + var result = converter.inferJsonDataType(data, ["*"]); | ||
105 | + result = converter.cast(result); | ||
106 | + data = result.dataset; | ||
110 | 107 | ||
111 | - //WHERE | ||
112 | - var where = ""; | ||
113 | - if(filters && filters.length) { | 108 | + //data = alasql_selectData(data, fields, filters); |
109 | + data = alasql_complexSelectData(data, fields, filters, aggregators, orders); | ||
114 | 110 | ||
115 | - for (var i=0; i < filters.length; i++) | ||
116 | - filters[i]["field"] = this._fieldName(filters[i]["field"], provider); | ||
117 | - | ||
118 | - where = "WHERE "; | ||
119 | - for (var i=0; i < filters.length; i++) { | ||
120 | - if(filters[i]["operation"] == "contains") | ||
121 | - where += filters[i]["field"] + " like '%" + filters[i]["value"] + "%' AND "; | ||
122 | - else if(filters[i]["operation"] == "not contains") | ||
123 | - where += filters[i]["field"] + " not like '%" + filters[i]["value"] + "%' AND "; | ||
124 | - else if(filters[i]["operation"] == "start") | ||
125 | - where += filters[i]["field"] + " like '" + filters[i]["value"] + "%' AND "; | ||
126 | - else if(filters[i]["operation"] == "ends") | ||
127 | - where += filters[i]["field"] + " like '%" + filters[i]["value"] + "' AND "; | ||
128 | - else | ||
129 | - where += filters[i]["field"] + " " + filters[i]["operation"] + " " + filters[i]["value"] + " AND "; | ||
130 | - } | ||
131 | - where = where.slice(0, -5); | ||
132 | - } | ||
133 | - | ||
134 | - //ORDER BY | ||
135 | - var orderBy = ""; | ||
136 | - if(orders && orders.length) { | ||
137 | - | ||
138 | - for (var i=0; i < orders.length; i++) | ||
139 | - orders[i]["field"] = this._fieldName(orders[i]["field"], ""); | ||
140 | - | ||
141 | - orderBy = "ORDER BY "; | ||
142 | - for (var i = 0; i < orders.length; i++) | ||
143 | - orderBy += orders[i]["field"] + " " + orders[i]["operation"] + ", "; | ||
144 | - orderBy = orderBy.slice(0, -2); | ||
145 | - } | ||
146 | - | ||
147 | - //SELECT | ||
148 | - var pureSelect = "SELECT "; | ||
149 | - for (var i = 0; i < fields.length; i++) | ||
150 | - pureSelect += fields[i] + " as " + this._fieldName(this._component.fields[i], "") + ", "; | ||
151 | - pureSelect = pureSelect.slice(0, -2); | ||
152 | - | ||
153 | - //GROUP BY | ||
154 | - var groupBy = ""; | ||
155 | - var select = ""; | ||
156 | - if(aggregators && aggregators.length) { | ||
157 | - | ||
158 | - for (var i=0; i < aggregators.length; i++) | ||
159 | - aggregators[i]["field"] = this._fieldName(aggregators[i]["field"], ""); | ||
160 | - | ||
161 | - groupBy = "GROUP BY " + aggregators[0]["field"]; | ||
162 | - select = "SELECT " + aggregators[0]["field"]; | ||
163 | - for (var i = 1; i < aggregators.length; i++) | ||
164 | - select += ", " + aggregators[i]["operation"] + "(" + aggregators[i]["field"] + ") as " + aggregators[i]["field"]; | ||
165 | - | ||
166 | - if(aggregators[1] && aggregators[1]["operation"] == "GROUP BY") { | ||
167 | - groupBy = "GROUP BY " + aggregators[0]["field"] + ", " + aggregators[1]["field"]; | ||
168 | - select = "SELECT " + aggregators[0]["field"] + ", " + aggregators[1]["field"]; | ||
169 | - for (var i = 2; i < aggregators.length; i++) | ||
170 | - select += ", " + aggregators[i]["operation"] + "(" + aggregators[i]["field"] + ") as " + aggregators[i]["field"]; | ||
171 | - } | ||
172 | - } | ||
173 | - | ||
174 | - //QUERY | ||
175 | - var path = this._path(this._component.fields[0], provider); | ||
176 | - var query; | ||
177 | - | ||
178 | - query = "SELECT "+ path +" FROM ?"; | ||
179 | - //console.log(query); | ||
180 | - var res = alasql(query, [jsonData]); | ||
181 | - | ||
182 | - var records = res[0][path]; | ||
183 | - | ||
184 | - query = pureSelect + " FROM ? " + where + " " + orderBy; | ||
185 | - //console.log(query); | ||
186 | - var obj = alasql(query, [records]); | ||
187 | - | ||
188 | - if (groupBy != "") { | ||
189 | - query = select + " FROM ? " + groupBy + " " + orderBy; | ||
190 | - //console.log(query); | ||
191 | - obj = alasql(query, [obj]); | ||
192 | - } | ||
193 | - | ||
194 | - //PUSH DATA | ||
195 | - if(!obj || obj.length == 0) | ||
196 | - this.data = [] | ||
197 | - else | ||
198 | - this._pushData(obj, fields); | 111 | + this.data = transformData(data, fields, true); |
199 | 112 | ||
200 | this._deleteWaitImage(); | 113 | this._deleteWaitImage(); |
201 | }, | 114 | }, |
202 | 115 | ||
203 | - _pushData : function(obj, keys) { | ||
204 | - this.data = []; | ||
205 | - | ||
206 | - if (typeof keys == 'undefined') | ||
207 | - keys = Object.keys(obj[0]); | ||
208 | - | ||
209 | - for (var key in keys){ | ||
210 | - | ||
211 | - var name = keys[key].replace(/(\[|\]|fields->)/g, ""); | ||
212 | - var data = []; | ||
213 | - | ||
214 | - for (var i in obj) { | ||
215 | - var v = obj[i][name]; | ||
216 | - if(!isNaN(v) && v % 1 != 0) | ||
217 | - v = Math.floor(v * 100) / 100; | ||
218 | - data.push(v); | ||
219 | - | ||
220 | - //data.push(obj[i][name]); | ||
221 | - } | ||
222 | - | ||
223 | - this.data.push({ | ||
224 | - name: name, | ||
225 | - data: data | ||
226 | - }); | ||
227 | - } | ||
228 | - }, | ||
229 | - | ||
230 | - _getProvider : function(field) { | ||
231 | - if(field.indexOf("result,records") > -1) | ||
232 | - return "ckan"; | ||
233 | - else if(field.indexOf("records,fields") > -1) | ||
234 | - return "openDataSoft"; | ||
235 | - else | ||
236 | - return "provider"; | ||
237 | - }, | ||
238 | - | ||
239 | - _fieldName : function(field, provider) { | ||
240 | - if(provider.indexOf("ckan") > -1) { | ||
241 | - return "[" + field.substring(field.lastIndexOf(",") + 1, field.length) + "]"; | ||
242 | - } | ||
243 | - else if(provider.indexOf("openDataSoft") > -1) { | ||
244 | - return "fields->[" + field.substring(field.lastIndexOf(",") + 1, field.length)+ "]"; | ||
245 | - } | ||
246 | - else { | ||
247 | - return "[" + field.substring(field.lastIndexOf(",") + 1, field.length) + "]"; | ||
248 | - } | ||
249 | - }, | ||
250 | - | ||
251 | - _path : function(field, provider) { | ||
252 | - if(provider.indexOf("ckan") > -1) { | ||
253 | - return "result->records" | ||
254 | - } | ||
255 | - else if(provider.indexOf("openDataSoft") > -1) { | ||
256 | - return "records"; | ||
257 | - } | ||
258 | - else { | ||
259 | - return field.substring(0, field.lastIndexOf(",")).replace(",", "->"); | ||
260 | - } | ||
261 | - }, | ||
262 | - | ||
263 | - _arrayPath : function(provider) { | ||
264 | - if(provider.indexOf("ckan") > -1) { | ||
265 | - return ["result", "records", "*"]; | ||
266 | - } | ||
267 | - else if(provider.indexOf("openDataSoft") > -1) { | ||
268 | - return ["records", "fields", "*"]; | ||
269 | - } | ||
270 | - else { | ||
271 | - return ["*"]; | ||
272 | - } | ||
273 | - }, | ||
274 | - | ||
275 | /** | 116 | /** |
276 | * Delete a image after loading a datalet | 117 | * Delete a image after loading a datalet |
277 | */ | 118 | */ |