Commit 89558a416e35b2af0a2c60cf45564fcb8ac1f85d

Authored by Renato De Donato
1 parent 1a26bccd

datatype, provider mod

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-&#45;&#45;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-&#45;&#45;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-&#45;&#45;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-&#45;&#45;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}}&nbsp;&nbsp;&nbsp;<span class="highlighted">{{item.operation}}</span>&nbsp;&nbsp;&nbsp;"{{item.value}}"&nbsp;&nbsp;&nbsp;<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">&nbsp;</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 */