Commit 73cc8795b09adf7737fdaefc0691a7699762e12c
1 parent
339d682e
dataset page and wait datalet
Showing
3 changed files
with
129 additions
and
13 deletions
datalets/base-ajax-json-jsonpath-datalet/static/js/AjaxJsonJsonPathBehavior.js
| @@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
| 2 | @license | 2 | @license |
| 3 | The MIT License (MIT) | 3 | The MIT License (MIT) |
| 4 | 4 | ||
| 5 | - Copyright (c) 2015 Dipartimento di Informatica - Università di Salerno - Italy | 5 | + Copyright (c) 2015 Dipartimento di Informatica - Universit� di Salerno - Italy |
| 6 | 6 | ||
| 7 | Permission is hereby granted, free of charge, to any person obtaining a copy | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy |
| 8 | of this software and associated documentation files (the "Software"), to deal | 8 | of this software and associated documentation files (the "Software"), to deal |
| @@ -98,7 +98,7 @@ var AjaxJsonJsonPathBehavior = { | @@ -98,7 +98,7 @@ var AjaxJsonJsonPathBehavior = { | ||
| 98 | * | 98 | * |
| 99 | * @method selectData | 99 | * @method selectData |
| 100 | */ | 100 | */ |
| 101 | - selectData : function(){ | 101 | + selectData : function() { |
| 102 | 102 | ||
| 103 | this.data = []; | 103 | this.data = []; |
| 104 | 104 | ||
| @@ -107,17 +107,27 @@ var AjaxJsonJsonPathBehavior = { | @@ -107,17 +107,27 @@ var AjaxJsonJsonPathBehavior = { | ||
| 107 | 107 | ||
| 108 | this._component.fields = JSON.parse(this._component.fields); | 108 | this._component.fields = JSON.parse(this._component.fields); |
| 109 | 109 | ||
| 110 | - for(var i=0;i < this._component.fields.length; i++){ | 110 | + for (var i = 0; i < this._component.fields.length; i++) { |
| 111 | var query = "$"; | 111 | var query = "$"; |
| 112 | var query_elements = this._component.fields[i].split(','); | 112 | var query_elements = this._component.fields[i].split(','); |
| 113 | - for(var j=0; j < query_elements.length;j++){ | 113 | + for (var j = 0; j < query_elements.length; j++) { |
| 114 | query += "['" + query_elements[j] + "']"; | 114 | query += "['" + query_elements[j] + "']"; |
| 115 | - if(this.isFieldArray(query_elements.slice(0,j+1))){ | 115 | + if (this.isFieldArray(query_elements.slice(0, j + 1))) { |
| 116 | query += "[*]"; | 116 | query += "[*]"; |
| 117 | } | 117 | } |
| 118 | } | 118 | } |
| 119 | - this.data.push({name : query_elements[query_elements.length - 1], data : jsonPath(this.properties.json_results.value, query)}); | 119 | + this.data.push({ |
| 120 | + name: query_elements[query_elements.length - 1], | ||
| 121 | + data: jsonPath(this.properties.json_results.value, query) | ||
| 122 | + }); | ||
| 120 | } | 123 | } |
| 121 | - } | 124 | + this.deleteWaitImage(); |
| 125 | + }, | ||
| 122 | 126 | ||
| 127 | + /** | ||
| 128 | + * Delete a image after loading a datalet | ||
| 129 | + */ | ||
| 130 | + deleteWaitImage : function() { | ||
| 131 | + $("img[src$='spin.svg']").remove(); | ||
| 132 | + } | ||
| 123 | }; | 133 | }; |
| 124 | \ No newline at end of file | 134 | \ No newline at end of file |
datalets/base-datalet/base-datalet.html
| @@ -72,13 +72,27 @@ Example : | @@ -72,13 +72,27 @@ Example : | ||
| 72 | height:32px; | 72 | height:32px; |
| 73 | width: 32px; | 73 | width: 32px; |
| 74 | } | 74 | } |
| 75 | + #image_spin { | ||
| 76 | + height:32px; | ||
| 77 | + width: 32px; | ||
| 78 | + position: relative; | ||
| 79 | + center: center; | ||
| 80 | + width: 100%; | ||
| 81 | + } | ||
| 82 | + | ||
| 75 | </style> | 83 | </style> |
| 76 | 84 | ||
| 85 | + <div id="base_datalet_imgWaitDatalet"> | ||
| 86 | + <img id="image_spin" src="static/images/spin.svg"> | ||
| 87 | + | ||
| 88 | + </div> | ||
| 89 | + | ||
| 77 | <div id="base_datalet_container"> | 90 | <div id="base_datalet_container"> |
| 78 | <b>Source: </b><span id="domain"></span> | 91 | <b>Source: </b><span id="domain"></span> |
| 92 | + <b> </b><span id="domainPage"></span> | ||
| 79 | <div id="base_datalet_rtp"> | 93 | <div id="base_datalet_rtp"> |
| 80 | - <div id="rtp">Powered by Route-to-PA</div> | ||
| 81 | - <div><a href="http://routetopa.eu/"><img id="rtpalogo" src="static/images/rtpalogo.png"></a></div> | 94 | + <div id="rtp">Powered by ROUTE-TO-PA</div> |
| 95 | + <div><a href="http://www.routetopa.eu/"><img id="rtpalogo" src="static/images/rtpalogo.png" ></a></div> | ||
| 82 | </div> | 96 | </div> |
| 83 | </div> | 97 | </div> |
| 84 | 98 | ||
| @@ -92,19 +106,51 @@ Example : | @@ -92,19 +106,51 @@ Example : | ||
| 92 | <script> | 106 | <script> |
| 93 | BaseDatalet = Polymer({ | 107 | BaseDatalet = Polymer({ |
| 94 | is: 'base-datalet', | 108 | is: 'base-datalet', |
| 95 | - | 109 | + objectDatalet: { |
| 110 | + /** | ||
| 111 | + * It contains the json data from async xhr call returned from core-ajax core component | ||
| 112 | + * | ||
| 113 | + * @attribute json_resultDatalet | ||
| 114 | + * @type object | ||
| 115 | + * @default 'null'. | ||
| 116 | + */ | ||
| 117 | + json_resultDatalet: { | ||
| 118 | + type: Object, | ||
| 119 | + value: {} | ||
| 120 | + } | ||
| 121 | + }, | ||
| 96 | /** | 122 | /** |
| 97 | * It is called after the element�s template has been stamped and all elements inside the element�s local | 123 | * It is called after the element�s template has been stamped and all elements inside the element�s local |
| 98 | * DOM have been configured (with values bound from parents, deserialized attributes, or else default values) | 124 | * DOM have been configured (with values bound from parents, deserialized attributes, or else default values) |
| 99 | * and had their ready method called. | 125 | * and had their ready method called. |
| 100 | * | 126 | * |
| 101 | - * Extract the dataset domain from the entire URL and set the text content of the datalet footer. | ||
| 102 | - * | 127 | + * Extract |
| 128 | + * 1) the dataset domain | ||
| 129 | + * 2) the page of a datalet | ||
| 130 | + * from the entire URL and set the text content of the datalet footer. | ||
| 103 | * @method ready | 131 | * @method ready |
| 104 | - * | ||
| 105 | */ | 132 | */ |
| 106 | ready: function(){ | 133 | ready: function(){ |
| 134 | + var urlDatalet; | ||
| 107 | if(this.dataUrl != undefined){ | 135 | if(this.dataUrl != undefined){ |
| 136 | + | ||
| 137 | + urlSource = this.dataUrl.split("/")[0] + "//" + this.dataUrl.split("/")[2]; | ||
| 138 | + | ||
| 139 | + var apiIdResource = "resource_show?id="; | ||
| 140 | + | ||
| 141 | + //Resourceid of a datalet | ||
| 142 | + var query = this.dataUrl.substring(this.dataUrl.indexOf("?"), this.dataUrl.length); | ||
| 143 | + var params = this.decomponeQueryString(query); | ||
| 144 | + resultIdDatalet = params["resource_id"]; | ||
| 145 | + | ||
| 146 | + //cKan organized with or not catalog | ||
| 147 | + queryInitial = this.dataUrl.substring(0, this.dataUrl.indexOf("api")); | ||
| 148 | + queryFinal = this.dataUrl.substring(this.dataUrl.indexOf("api"), this.dataUrl.indexOf("datastore_search")); | ||
| 149 | + | ||
| 150 | + urlDatalet = queryInitial + queryFinal + apiIdResource + resultIdDatalet; | ||
| 151 | + | ||
| 152 | + this.requestDataletData(urlDatalet); | ||
| 153 | + //String source to define for Issy | ||
| 108 | this.$.domain.textContent = this.dataUrl.split("/")[0] + "//" + this.dataUrl.split("/")[2]; | 154 | this.$.domain.textContent = this.dataUrl.split("/")[0] + "//" + this.dataUrl.split("/")[2]; |
| 109 | } | 155 | } |
| 110 | }, | 156 | }, |
| @@ -113,7 +159,66 @@ Example : | @@ -113,7 +159,66 @@ Example : | ||
| 113 | */ | 159 | */ |
| 114 | setDomain: function(url){ | 160 | setDomain: function(url){ |
| 115 | this.$.domain.textContent = url; | 161 | this.$.domain.textContent = url; |
| 162 | + }, | ||
| 163 | + /** | ||
| 164 | + * Get the (key, value) query string parameters | ||
| 165 | + **/ | ||
| 166 | + decomponeQueryString: function (querystring) { | ||
| 167 | + // remove any preceding url and split | ||
| 168 | + querystring = querystring.substring(querystring.indexOf('?')+1).split('&'); | ||
| 169 | + var params = {}, pair, d = decodeURIComponent; | ||
| 170 | + // march and parse | ||
| 171 | + for (var i = querystring.length - 1; i >= 0; i--) { | ||
| 172 | + pair = querystring[i].split('='); | ||
| 173 | + params[d(pair[0])] = d(pair[1]); | ||
| 174 | + } | ||
| 175 | + return params; | ||
| 176 | + }, | ||
| 177 | + /** | ||
| 178 | + * Make an AJAX call to the dataset URL to retrieve package_id | ||
| 179 | + * | ||
| 180 | + * @method urlDatalet | ||
| 181 | + */ | ||
| 182 | + requestDataletData: function(urlDatalet){ | ||
| 183 | + var comp = this; | ||
| 184 | + $.ajax({ | ||
| 185 | + url: urlDatalet, //url con package | ||
| 186 | + dataType: "json", | ||
| 187 | + success: function(e){ | ||
| 188 | + comp.handleDataletResponse(e); | ||
| 189 | + } | ||
| 190 | + }); | ||
| 191 | + }, | ||
| 192 | + /** | ||
| 193 | + * Called when core-ajax component receive the json data from called url. | ||
| 194 | + * | ||
| 195 | + * @method handleResponse | ||
| 196 | + */ | ||
| 197 | + handleDataletResponse: function(e) { | ||
| 198 | + this.objectDatalet.json_resultDatalet.value = e; | ||
| 199 | + | ||
| 200 | + //packageId of a give datalet | ||
| 201 | + packageIdDatalet = this.objectDatalet.json_resultDatalet.value.result.package_id; | ||
| 202 | + resourceId = this.objectDatalet.json_resultDatalet.value.result.id; | ||
| 203 | + | ||
| 204 | + //url complete of download | ||
| 205 | + urlDatasetDownload = this.objectDatalet.json_resultDatalet.value.result.url; | ||
| 206 | + | ||
| 207 | + if(this.dataUrl != undefined){ | ||
| 208 | + //static url | ||
| 209 | + lastStringResourceId = this.dataUrl.split("/")[5]; | ||
| 210 | + resourceId = lastStringResourceId.split('=')[1]; | ||
| 211 | + var urlDatalet = this.dataUrl.split("/")[0]+ "//" + this.dataUrl.split("/")[2] + "/dataset/" + packageIdDatalet +"/resource/" +resourceId; | ||
| 116 | 212 | ||
| 213 | + | ||
| 214 | + urlDatalet = urlDatasetDownload.replace(/\/download\/.*/, ''); | ||
| 215 | + urlSource = this.dataUrl.split("/")[0] + "//" + this.dataUrl.split("/")[2]; | ||
| 216 | + | ||
| 217 | + //this.$.domain.textContent = this.dataUrl.split("/")[0] + "//" + this.dataUrl.split("/")[2]; | ||
| 218 | + | ||
| 219 | + //this.$.domainPage.innerHTML = '<a href=' + urlSource + ' target=' + "_blank>" + " urlSource" + '</a>'; | ||
| 220 | + this.$.domainPage.innerHTML = '<a href=' + urlDatalet + ' target=' + "_blank>" + " Dataset's page" + '</a>'; | ||
| 221 | + } | ||
| 117 | } | 222 | } |
| 118 | }); | 223 | }); |
| 119 | </script> | 224 | </script> |
datalets/base-datalet/static/images/spin.svg
0 → 100644
| 1 | +<?xml version="1.0" encoding="utf-8"?><svg width='198px' height='198px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-spin"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><g transform="translate(50 50)"><g transform="rotate(0) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(45) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.12s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.12s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(90) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.25s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.25s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(135) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.37s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.37s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(180) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.5s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.5s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(225) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.62s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.62s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(270) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.75s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.75s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g><g transform="rotate(315) translate(34 0)"><circle cx="0" cy="0" r="8" fill="#1976d2"><animate attributeName="opacity" from="1" to="0.1" begin="0.87s" dur="1s" repeatCount="indefinite"></animate><animateTransform attributeName="transform" type="scale" from="1.5" to="1" begin="0.87s" dur="1s" repeatCount="indefinite"></animateTransform></circle></g></g></svg> | ||
| 0 | \ No newline at end of file | 2 | \ No newline at end of file |