Commit a972231d2006fc4cffcf2fd12e99e1b06b70fb64
1 parent
6ce78a46
Exists in
master
and in
7 other branches
$1
Showing
14 changed files
with
1766 additions
and
47 deletions
Show diff stats
ferramentas/saiku/cartograma.php
| ... | ... | @@ -22,10 +22,14 @@ $opcoes = (array) json_decode($_POST["opcoes"],true); |
| 22 | 22 | $metadados = (array) json_decode($_POST["metadados"],true); |
| 23 | 23 | $nmetadados = count($metadados); |
| 24 | 24 | //pega o id da regiao (busca pelo posfixo geocod) |
| 25 | -$codigo_tipo_regiao = $metadados[0]["identificador"]; | |
| 26 | -$codigo_tipo_regiao = explode("].[",$codigo_tipo_regiao); | |
| 27 | -$codigo_tipo_regiao = str_replace(array("codigo_tipo_regiao_","[","_geocod"),"",$codigo_tipo_regiao[0]); | |
| 28 | - | |
| 25 | +$codigo_tipo_regiao = $metadados[0]["colName"]; | |
| 26 | +$codigo_tipo_regiao = explode("#",$codigo_tipo_regiao); | |
| 27 | +$codigo_tipo_regiao = $codigo_tipo_regiao[1]; | |
| 28 | +/* | |
| 29 | +echo "<pre>"; | |
| 30 | +var_dump($metadados); | |
| 31 | +echo $codigo_tipo_regiao;exit; | |
| 32 | +*/ | |
| 29 | 33 | if(empty($codigo_tipo_regiao)){ |
| 30 | 34 | echo "Nao foi possivel determinar o codigo da regiao ou localidade no sistema Metaestat"; |
| 31 | 35 | exit; |
| ... | ... | @@ -47,7 +51,7 @@ $srid = $meta["srid"]; |
| 47 | 51 | $colunastabela = $m->colunasTabela($meta["codigo_estat_conexao"],$meta["esquemadb"],$meta["tabela"],"geometry","!="); |
| 48 | 52 | $tipoLayer = "POLYGON"; |
| 49 | 53 | //define a coluna geo correta |
| 50 | -if($opcoes["tipo"] == "raiosProporcionais" || $opcoes["tipo"] == "circulosProporcionais"){ | |
| 54 | +if($opcoes["tipo"] == "mapaPizzas" || $opcoes["tipo"] == "mapaBarras" || $opcoes["tipo"] == "raiosProporcionais" || $opcoes["tipo"] == "circulosProporcionais"){ | |
| 51 | 55 | if($meta["colunacentroide"] != ""){ |
| 52 | 56 | $colunageo = $meta["colunacentroide"]; |
| 53 | 57 | $sqlColunaGeo = $meta["colunacentroide"]; |
| ... | ... | @@ -56,6 +60,9 @@ if($opcoes["tipo"] == "raiosProporcionais" || $opcoes["tipo"] == "circulosPropor |
| 56 | 60 | $sqlColunaGeo = "st_centroid(".$meta["colunageo"].")"; |
| 57 | 61 | } |
| 58 | 62 | $tipoLayer = "POINT"; |
| 63 | + if($opcoes["tipo"] == "mapaBarras" || $opcoes["tipo"] == "mapaPizzas"){ | |
| 64 | + $tipoLayer = "CHART"; | |
| 65 | + } | |
| 59 | 66 | } |
| 60 | 67 | //var_dump($metadados);exit; |
| 61 | 68 | //constroi um sql que retorna os dados na forma de uma tabela inline |
| ... | ... | @@ -115,19 +122,32 @@ $l[] = ' SAIKU "'.$opcoes["tipo"].'"'; |
| 115 | 122 | $l[] = ' TIP "'.$meta["colunanomeregiao"].','.implode(',',$nomesColunas).'"'; |
| 116 | 123 | $l[] = ' METAESTAT_CODIGO_TIPO_REGIAO "'.$codigo_tipo_regiao.'"'; |
| 117 | 124 | $l[] = ' END '; |
| 118 | -$l = implode("",$l); | |
| 125 | + | |
| 126 | +$l = implode(PHP_EOL,$l); | |
| 127 | + | |
| 119 | 128 | if($opcoes["tipo"] == "raiosProporcionais"){ |
| 120 | - $l .= implode(" ",raiosProporcionais(1,$nomesColunas[1])); | |
| 129 | + $l .= implode(PHP_EOL,raiosProporcionais(1,$nomesColunas[1])); | |
| 121 | 130 | } |
| 122 | 131 | if($opcoes["tipo"] == "circulosProporcionais"){ |
| 123 | 132 | $l .= ' OPACITY 50'; |
| 124 | - $l .= implode(" ",circulosProporcionais(1,$nomesColunas[1])); | |
| 133 | + $l .= implode(PHP_EOL,circulosProporcionais(1,$nomesColunas[1])); | |
| 125 | 134 | } |
| 126 | 135 | if($opcoes["tipo"] == "coresChapadas"){ |
| 127 | 136 | $l .= ' OPACITY 50'; |
| 128 | - $l .= implode(" ",coresChapadas(1,$nomesColunas[1])); | |
| 137 | + $l .= implode(PHP_EOL,coresChapadas(1,$nomesColunas[1])); | |
| 138 | +} | |
| 139 | +if($opcoes["tipo"] == "mapaBarras"){ | |
| 140 | + $l .= PHP_EOL.' PROCESSING "CHART_SIZE='.$opcoes["size"].' '.$opcoes["size"].'"'; | |
| 141 | + $l .= PHP_EOL.' PROCESSING "CHART_TYPE=bar"'; | |
| 142 | + $l .= implode(PHP_EOL,mapaBarras($nomesColunas)); | |
| 129 | 143 | } |
| 130 | -$l .= 'END'; | |
| 144 | +if($opcoes["tipo"] == "mapaPizzas"){ | |
| 145 | + $l .= PHP_EOL.' PROCESSING "CHART_SIZE='.$opcoes["size"].' '.$opcoes["size"].'"'; | |
| 146 | + $l .= PHP_EOL.' PROCESSING "CHART_TYPE=pie"'; | |
| 147 | + $l .= implode(PHP_EOL,mapaBarras($nomesColunas)); | |
| 148 | +} | |
| 149 | +$l .= PHP_EOL.'END'; | |
| 150 | + | |
| 131 | 151 | //echo $l;exit; |
| 132 | 152 | $layer->updateFromString($l); |
| 133 | 153 | |
| ... | ... | @@ -146,6 +166,28 @@ if($opcoes["tipo"] == "coresChapadas"){ |
| 146 | 166 | |
| 147 | 167 | header("Location:".$opcoes["locaplic"]."/mashups/openlayers.php?temas=".$map_file."&DESLIGACACHE=sim&botoes=legenda,pan,zoombox,zoomtot,zoomin,zoomout,distancia,area,identifica&controles=navigation,layerswitcher,scaleline,mouseposition,overviewmap,keyboarddefaults&tiles=false&mapext=".$opcoes["mapext"]); |
| 148 | 168 | |
| 169 | +function mapaBarras($colunas){ | |
| 170 | + global $opcoes; | |
| 171 | + //$opcoes["coreshex"] = array_reverse($opcoes["coreshex"]); | |
| 172 | + //$valores = retornaDadosColuna($coluna); | |
| 173 | + //$cortes = quartis($valores,$nomeColuna); | |
| 174 | + //var_dump($opcoes["coreshex"]);exit; | |
| 175 | + $nclasses = count($colunas); | |
| 176 | + $classes = array(); | |
| 177 | + for($i=1;$i<$nclasses;$i++){ | |
| 178 | + $classes[] = PHP_EOL.'CLASS'; | |
| 179 | + $classes[] = ' NAME "'.$colunas[$i].'"'; | |
| 180 | + $classes[] = ' STYLE'; | |
| 181 | + $cor = $opcoes["outlinecolor"]; | |
| 182 | + $classes[] = ' OUTLINECOLOR '.$cor["red"].' '.$cor["green"].' '.$cor["blue"]; | |
| 183 | + $classes[] = ' SIZE ['.$colunas[$i].']'; | |
| 184 | + $classes[] = ' COLOR '.$opcoes["cores"][$i-1]; | |
| 185 | + $classes[] = ' END'; | |
| 186 | + $classes[] = 'END '; | |
| 187 | + } | |
| 188 | + return $classes; | |
| 189 | +} | |
| 190 | + | |
| 149 | 191 | function coresChapadas($coluna,$nomeColuna){ |
| 150 | 192 | global $opcoes; |
| 151 | 193 | $valores = retornaDadosColuna($coluna); |
| ... | ... | @@ -251,4 +293,21 @@ function retornaDadosColuna($coluna){ |
| 251 | 293 | } |
| 252 | 294 | return $valores; |
| 253 | 295 | } |
| 296 | +function cHexToDec ($hexStr, $returnAsString = true, $seperator = ' ') { | |
| 297 | + $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string | |
| 298 | + $rgbArray = array(); | |
| 299 | + if (strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster | |
| 300 | + $colorVal = hexdec($hexStr); | |
| 301 | + $rgbArray['red'] = 0xFF & ($colorVal >> 0x10); | |
| 302 | + $rgbArray['green'] = 0xFF & ($colorVal >> 0x8); | |
| 303 | + $rgbArray['blue'] = 0xFF & $colorVal; | |
| 304 | + } elseif (strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations | |
| 305 | + $rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2)); | |
| 306 | + $rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2)); | |
| 307 | + $rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2)); | |
| 308 | + } else { | |
| 309 | + return false; //Invalid hex color code | |
| 310 | + } | |
| 311 | + return $returnAsString ? implode($seperator, $rgbArray) : $rgbArray; // returns the rgb string or the associative array | |
| 312 | +} | |
| 254 | 313 | ?> | ... | ... |
ferramentas/saiku/esquemaxml.php
| ... | ... | @@ -87,8 +87,8 @@ for ($i=0;$i < $c;++$i){ |
| 87 | 87 | } |
| 88 | 88 | } |
| 89 | 89 | if($codigo_tipo_regiao == ""){ |
| 90 | - echo "Nenhum tema com limites ou localidades foi encontrado"; | |
| 91 | - exit; | |
| 90 | + //echo "Nenhum tema com limites ou localidades foi encontrado"; | |
| 91 | + //exit; | |
| 92 | 92 | } |
| 93 | 93 | $regiao = ""; |
| 94 | 94 | $item = ""; |
| ... | ... | @@ -158,7 +158,7 @@ foreach($regioes as $regiao){ |
| 158 | 158 | nameColumn='j$i{$r["colunanomeregiao"]}' uniqueMembers='false'/> |
| 159 | 159 | "; |
| 160 | 160 | $niveis2[] = " |
| 161 | - <Level name='".converte($r["nome_tipo_regiao"])." - GeoCod' | |
| 161 | + <Level name='".converte($r["nome_tipo_regiao"])." - GeoCod #{$caminho[$i]}' | |
| 162 | 162 | column='j$i{$r['identificador']}' |
| 163 | 163 | nameColumn='j$i{$r["identificador"]}' uniqueMembers='false'/> |
| 164 | 164 | "; |
| ... | ... | @@ -169,7 +169,7 @@ foreach($regioes as $regiao){ |
| 169 | 169 | nameColumn='nome' uniqueMembers='true' /> |
| 170 | 170 | "; |
| 171 | 171 | $niveis2[] = " |
| 172 | - <Level name='".converte($regiao["nome_tipo_regiao"])." - GeoCod' | |
| 172 | + <Level name='".converte($regiao["nome_tipo_regiao"])." - GeoCod #{$regiao["codigo_tipo_regiao"]}' | |
| 173 | 173 | column='codigo' |
| 174 | 174 | nameColumn='codigo' uniqueMembers='true' /> |
| 175 | 175 | "; |
| ... | ... | @@ -327,6 +327,9 @@ header("Location:".$saikuUrl."/?nomeConexao=".$nomeConexao."&locaplic=".$_GET["l |
| 327 | 327 | |
| 328 | 328 | function converte($texto){ |
| 329 | 329 | $texto = str_replace("&","&",htmlentities($texto)); |
| 330 | + //$texto = htmlentities($texto); | |
| 331 | + //$texto = mb_convert_encoding($texto, 'UTF-8', mb_detect_encoding($texto)); | |
| 332 | + //$texto = utf8_encode($texto); | |
| 330 | 333 | return $texto; |
| 331 | 334 | } |
| 332 | 335 | ?> | ... | ... |
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/index.html
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 | |
| 23 | 23 | <!-- jQuery CSS --> |
| 24 | 24 | <link rel="stylesheet" href="css/jquery/jquery-ui.css" type="text/css" media="all" /> |
| 25 | +<link rel="stylesheet" href="js/jquery/jquery.colourPicker.css" type="text/css" media="all" /> | |
| 25 | 26 | |
| 26 | 27 | <link rel="stylesheet" href="js/fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" /> |
| 27 | 28 | <link rel="stylesheet" href="js/jquery/jquery.contextMenu.css" type="text/css" media="screen" /> |
| ... | ... | @@ -56,6 +57,7 @@ |
| 56 | 57 | |
| 57 | 58 | |
| 58 | 59 | <script type="text/javascript" src="js/fancybox/jquery.fancybox-1.3.4.pack.js"></script> |
| 60 | + <script type="text/javascript" src="js/jquery/jquery.colourPicker.js"></script> | |
| 59 | 61 | |
| 60 | 62 | |
| 61 | 63 | <!-- Backbone.js and deps --> |
| ... | ... | @@ -108,10 +110,6 @@ |
| 108 | 110 | |
| 109 | 111 | <!-- Saiku plugins --> |
| 110 | 112 | |
| 111 | - | |
| 112 | - <!-- | |
| 113 | - <script type="text/javascript" src="js/saiku/plugins/Chart/plugin.js" defer></script> | |
| 114 | - --> | |
| 115 | 113 | <script type="text/javascript" src="js/saiku/plugins/Statistics/plugin.js" defer></script> |
| 116 | 114 | <script type="text/javascript" src="js/saiku/plugins/I18n/plugin.js" defer></script> |
| 117 | 115 | <script type="text/javascript" src="js/saiku/plugins/BIServer/plugin.js" defer></script> |
| ... | ... | @@ -125,28 +123,18 @@ |
| 125 | 123 | <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/jquery.tipsy.js"></script> |
| 126 | 124 | <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/tipsy.js"></script> |
| 127 | 125 | <link type="text/css" href="js/saiku/plugins/CCC_Chart/tipsy.css" rel="stylesheet" /> |
| 128 | - <!-- FUTURE FILES FOR CHART EDITOR | |
| 129 | - <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/cccProperties.js"></script> | |
| 130 | - <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/cccCharts.js"></script> | |
| 131 | - <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/ChartEditor.js"></script> | |
| 132 | - --> | |
| 133 | 126 | <script type="text/javascript" src="js/saiku/plugins/CCC_Chart/plugin.js"></script> |
| 134 | 127 | |
| 135 | 128 | <script type="text/javascript" src="js/ace/ace.js" charset="utf-8"></script> |
| 136 | 129 | |
| 137 | - <!--start js SaikuChartPlus--> | |
| 138 | - <script type="text/javascript" src="js/saiku/plugins/SaikuChartPlus/plugin.js" defer></script> | |
| 139 | - <!--<script type="text/javascript" src="https://www.google.com/jsapi"></script> | |
| 140 | -<script type="text/javascript"> | |
| 141 | - google.load('visualization', '1.0', {'packages':['geochart','geomap']}); | |
| 142 | -</script> | |
| 143 | ---> | |
| 144 | - <!--end js SaikuChartPlus--> | |
| 130 | + <!--start js i3GeoMap--> | |
| 131 | + <script type="text/javascript" src="js/saiku/plugins/i3GeoMap/plugin.js" ></script> | |
| 132 | + <!--end js i3GeoMap--> | |
| 145 | 133 | |
| 146 | 134 | <!-- i3GEO obtem o parametro passado pela url e que contem o codigo da conexao que deve ser utilizada --> |
| 147 | 135 | <script> |
| 148 | -nomeConexao = window.location.search.replace("?",""); | |
| 149 | -</script> | |
| 136 | + nomeConexao = parametroUrl("nomeConexao"); | |
| 137 | + </script> | |
| 150 | 138 | <!-- Templates --> |
| 151 | 139 | <script type="text/x-jquery-tmpl" id="template-toolbar"> |
| 152 | 140 | <ul> | ... | ... |
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/CCC_Chart/plugin.js
0 → 100755
| ... | ... | @@ -0,0 +1,705 @@ |
| 1 | +/* | |
| 2 | + * Copyright 2012 OSBI Ltd | |
| 3 | + * | |
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
| 5 | + * you may not use this file except in compliance with the License. | |
| 6 | + * You may obtain a copy of the License at | |
| 7 | + * | |
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
| 9 | + * | |
| 10 | + * Unless required by applicable law or agreed to in writing, software | |
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 13 | + * See the License for the specific language governing permissions and | |
| 14 | + * limitations under the License. | |
| 15 | + */ | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * Renders a chart for each workspace | |
| 19 | + */ | |
| 20 | +var Chart = Backbone.View.extend({ | |
| 21 | + | |
| 22 | + events: { | |
| 23 | + 'click .keep' : 'keepVisible' | |
| 24 | + }, | |
| 25 | + | |
| 26 | + cccOptions: { | |
| 27 | + type: "BarChart", | |
| 28 | + stacked: true | |
| 29 | + }, | |
| 30 | + | |
| 31 | + data: null, | |
| 32 | + hasProcessed: null, | |
| 33 | + | |
| 34 | + getChartProperties: function(chartName) { | |
| 35 | + var self = this; | |
| 36 | + var ret = []; | |
| 37 | + _.each(ChartProperties, function(property) { | |
| 38 | + if (property.ChartObject == chartName) { | |
| 39 | + ret.push(property); | |
| 40 | + } | |
| 41 | + | |
| 42 | + }); | |
| 43 | + return ret; | |
| 44 | + | |
| 45 | + }, | |
| 46 | + | |
| 47 | + initialize: function(args) { | |
| 48 | + | |
| 49 | + this.workspace = args.workspace; | |
| 50 | + | |
| 51 | + // Create a unique ID for use as the CSS selector | |
| 52 | + this.id = _.uniqueId("chart_"); | |
| 53 | + $(this.el).attr({ id: this.id }); | |
| 54 | + //$('<div id="nav_' + this.id + '">' + "<input type='submit' class='keep' value='keep only selected' />" + '</div>').appendTo($(this.el)); | |
| 55 | + $('<div class="canvas_wrapper" style="display:none;"><div id="canvas_' + this.id + '"></div></div>').appendTo($(this.el)); | |
| 56 | + | |
| 57 | + this.cccOptions.canvas = 'canvas_' + this.id; | |
| 58 | + this.cccOptions = this.getQuickOptions(this.cccOptions); | |
| 59 | + | |
| 60 | + this.data = null; | |
| 61 | + | |
| 62 | + // Bind table rendering to query result event | |
| 63 | + _.bindAll(this, "receive_data", "process_data", "show", "getData", "render_view", "render_chart", "render_chart_delayed", "getQuickOptions","exportChart","block_ui"); | |
| 64 | + var self = this; | |
| 65 | + this.workspace.bind('query:run', function() { | |
| 66 | + if (! $(self.workspace.querytoolbar.el).find('.render_chart').hasClass('on')) { | |
| 67 | + return false; | |
| 68 | + } | |
| 69 | + self.data = {}; | |
| 70 | + self.data.resultset = []; | |
| 71 | + self.data.metadata = []; | |
| 72 | + $(self.el).find('.canvas_wrapper').hide(); | |
| 73 | + return false; | |
| 74 | + }); | |
| 75 | + | |
| 76 | + this.workspace.bind('query:fetch', this.block_ui); | |
| 77 | + | |
| 78 | + this.workspace.bind('query:result', this.receive_data); | |
| 79 | + | |
| 80 | + var pseudoForm = "<div id='nav" + this.id + "' style='display:none' class='nav'><form id='svgChartPseudoForm' target='_blank' method='POST'>" + | |
| 81 | + "<input type='hidden' name='type' class='type'/>" + | |
| 82 | + "<input type='hidden' name='svg' class='svg'/>" + | |
| 83 | + "</form></div>"; | |
| 84 | + if (isIE) { | |
| 85 | + pseudoForm = "<div></div>"; | |
| 86 | + } | |
| 87 | + this.nav =$(pseudoForm); | |
| 88 | + | |
| 89 | + $(this.el).append(this.nav); | |
| 90 | + | |
| 91 | + /* | |
| 92 | + // Create navigation | |
| 93 | + var exportoptions = "<div><a class='hide' href='#charteditor' id='acharteditor' /><!--<a class='editor' href='#chart_editor'>Advanced Properties</a>-->Export to: " + | |
| 94 | + "<a class='export' href='#png' class='i18n'>PNG</a>, " + | |
| 95 | + "<a class='export' href='#pdf' class='i18n'>PDF</a>, " + | |
| 96 | + //"<a class='export' href='#tiff' class='i18n'>TIFF</a>, " + | |
| 97 | + "<a class='export' href='#svg' class='i18n'>SVG</a>, " + | |
| 98 | + "<a class='export' href='#jpg' class='i18n'>JPG</a>" + | |
| 99 | + "<form id='svgChartPseudoForm' target='_blank' method='POST'>" + | |
| 100 | + "<input type='hidden' name='type' class='type'/>" + | |
| 101 | + "<input type='hidden' name='svg' class='svg'/>" + | |
| 102 | + "</form>"; | |
| 103 | + | |
| 104 | + var chartnav = exportoptions + "</div>"; | |
| 105 | + if (typeof isIE !== "undefined") { | |
| 106 | + chartnav = "<div></div>"; | |
| 107 | + } | |
| 108 | + // Create navigation | |
| 109 | + this.nav = $(chartnav).css({ | |
| 110 | + 'padding-bottom': '10px' | |
| 111 | + }); | |
| 112 | + this.nav.find('a.type').css({ | |
| 113 | + color: '#666', | |
| 114 | + 'margin-right': '5px', | |
| 115 | + 'text-decoration': 'none', | |
| 116 | + 'border': '1px solid #ccc', | |
| 117 | + padding: '5px' | |
| 118 | + }); | |
| 119 | + | |
| 120 | + this.nav.find('a.export').click(this.exportChart); | |
| 121 | + | |
| 122 | + | |
| 123 | + this.nav.find('a').css({ | |
| 124 | + color: '#666', | |
| 125 | + 'margin-right': '5px', | |
| 126 | + 'text-decoration': 'none', | |
| 127 | + 'border': '1px solid #ccc', | |
| 128 | + padding: '5px' | |
| 129 | + }); | |
| 130 | + */ | |
| 131 | + /* XXX - enable again later | |
| 132 | + $(this.nav).append('<div style="display:none;"> <div id="charteditor" class="chart_editor"></div></div>'); | |
| 133 | + | |
| 134 | + this.editor = new ChartEditor({ workspace : this.workspace, | |
| 135 | + ChartProperties : ChartProperties, | |
| 136 | + ChartTypes: ChartTypes, | |
| 137 | + data : this.getData, | |
| 138 | + getChartProperties : this.getChartProperties}); | |
| 139 | + | |
| 140 | + $(this.nav).find('.chart_editor').append($(this.editor.el)); | |
| 141 | + */ | |
| 142 | + | |
| 143 | + }, | |
| 144 | + | |
| 145 | + | |
| 146 | + block_ui: function() { | |
| 147 | + if (! $(this.workspace.querytoolbar.el).find('.render_chart').hasClass('on')) { | |
| 148 | + return; | |
| 149 | + } | |
| 150 | + //Saiku.ui.block("Updating chart data...."); | |
| 151 | + }, | |
| 152 | + | |
| 153 | + exportChart: function(type) { | |
| 154 | + var svgContent = new XMLSerializer().serializeToString($('svg')[0]); | |
| 155 | + var rep = '<svg xmlns="http://www.w3.org/2000/svg" '; | |
| 156 | + if (svgContent.substr(0,rep.length) != rep) { | |
| 157 | + svgContent = svgContent.replace('<svg ', rep); | |
| 158 | + } | |
| 159 | + | |
| 160 | + var form = $('#svgChartPseudoForm'); | |
| 161 | + form.find('.type').val(type); | |
| 162 | + form.find('.svg').val(svgContent); | |
| 163 | + form.attr('action', Settings.REST_URL + this.workspace.query.url() + escape("/../../export/saiku/chart")); | |
| 164 | + form.submit(); | |
| 165 | + return false; | |
| 166 | + }, | |
| 167 | + | |
| 168 | + render_view: function() { | |
| 169 | + // Append chart to workspace | |
| 170 | + $(this.workspace.el).find('.workspace_results') | |
| 171 | + .prepend($(this.el).hide()); | |
| 172 | + }, | |
| 173 | + | |
| 174 | + getData: function() { | |
| 175 | + return this.data; | |
| 176 | + }, | |
| 177 | + | |
| 178 | + show: function(event, ui) { | |
| 179 | + /* | |
| 180 | + if ('MODE' in Settings && Settings.MODE == 'table') { | |
| 181 | + $(this.nav).hide(); | |
| 182 | + } else { | |
| 183 | + $(this.nav).show(); | |
| 184 | + } | |
| 185 | + | |
| 186 | + $('a#acharteditor').fancybox( | |
| 187 | + { | |
| 188 | + 'autoDimensions' : false, | |
| 189 | + 'autoScale' : false, | |
| 190 | + 'height' : ($("body").height() - 140), | |
| 191 | + 'width' : ($("body").width() - 100), | |
| 192 | + 'transitionIn' : 'none', | |
| 193 | + 'transitionOut' : 'none', | |
| 194 | + 'type' : 'inline' | |
| 195 | + } | |
| 196 | + ); | |
| 197 | + */ | |
| 198 | + if (this.cccOptions.width <= 0) { | |
| 199 | + this.cccOptions.width = $(this.workspace.el).find('.workspace_results').width() - 40; | |
| 200 | + } | |
| 201 | + if (this.cccOptions.height <= 0) { | |
| 202 | + this.cccOptions.height = $(this.workspace.el).find('.workspace_results').height() - 40; | |
| 203 | + } | |
| 204 | + | |
| 205 | + $(this.el).show(); | |
| 206 | + | |
| 207 | + var hasRun = this.workspace.query.result.hasRun(); | |
| 208 | + if (hasRun) { | |
| 209 | + this.process_data({ data: this.workspace.query.result.lastresult() }); | |
| 210 | + } | |
| 211 | + | |
| 212 | + }, | |
| 213 | + | |
| 214 | + chart_editor: function() { | |
| 215 | + $('a#acharteditor').click(); | |
| 216 | + return true; | |
| 217 | + }, | |
| 218 | + | |
| 219 | + export_button: function(event) { | |
| 220 | + var self = this; | |
| 221 | + $target = $(event.target).hasClass('button') ? $(event.target) : $(event.target).parent(); | |
| 222 | + | |
| 223 | + var self = this; | |
| 224 | + $body = $(document); | |
| 225 | + //$body.off('.contextMenu .contextMenuAutoHide'); | |
| 226 | + //$('.context-menu-list').remove(); | |
| 227 | + $.contextMenu('destroy', '.export_button'); | |
| 228 | + $.contextMenu({ | |
| 229 | + selector: '.export_button', | |
| 230 | + trigger: 'left', | |
| 231 | + ignoreRightClick: true, | |
| 232 | + callback: function(key, options) { | |
| 233 | + self.workspace.chart.exportChart(key); | |
| 234 | + }, | |
| 235 | + items: { | |
| 236 | + "png": {name: "PNG"}, | |
| 237 | + "jpg": {name: "JPEG"}, | |
| 238 | + "pdf": {name: "PDF"}, | |
| 239 | + "svg": {name: "SVG"} | |
| 240 | + } | |
| 241 | + }); | |
| 242 | + $target.contextMenu(); | |
| 243 | + }, | |
| 244 | + | |
| 245 | + button: function(event) { | |
| 246 | + $target = $(event.target).hasClass('button') ? $(event.target) : $(event.target).parent(); | |
| 247 | + if ($target.hasClass('chartoption')) { | |
| 248 | + $target.parent().siblings().find('.chartoption.on').removeClass('on'); | |
| 249 | + $target.addClass('on'); | |
| 250 | + if ($(this.workspace.querytoolbar.el).find('.render_chart').hasClass('on')) { | |
| 251 | + $(this.el).find('.canvas_wrapper').hide(); | |
| 252 | + } | |
| 253 | + | |
| 254 | + | |
| 255 | + } | |
| 256 | + return false; | |
| 257 | + }, | |
| 258 | + | |
| 259 | + stackedBar: function() { | |
| 260 | + this.workspace.query.setProperty('saiku.ui.render.type', 'stackedBar'); | |
| 261 | + var options = { | |
| 262 | + stacked: true, | |
| 263 | + type: "BarChart" | |
| 264 | + }; | |
| 265 | + this.cccOptions = this.getQuickOptions(options); | |
| 266 | + this.render_chart(); | |
| 267 | + }, | |
| 268 | + | |
| 269 | + bar: function() { | |
| 270 | + this.workspace.query.setProperty('saiku.ui.render.type', 'bar'); | |
| 271 | + var options = { | |
| 272 | + type: "BarChart" | |
| 273 | + }; | |
| 274 | + this.cccOptions = this.getQuickOptions(options); | |
| 275 | + this.render_chart(); | |
| 276 | + /* | |
| 277 | + this.cccOptions.multiChartIndexes = [1]; | |
| 278 | + this.cccOptions.dataMeasuresInColumns = true; | |
| 279 | + this.cccOptions.orientation = 'vertical'; | |
| 280 | + this.cccOptions.smallTitlePosition = 'left'; | |
| 281 | + //this.cccOptions.multiChartColumnsMax = 5; | |
| 282 | + this.cccOptions.smallWidth = 300; | |
| 283 | + this.cccOptions.smallHeight = 100; | |
| 284 | + */ | |
| 285 | + }, | |
| 286 | + | |
| 287 | + multiplebar: function() { | |
| 288 | + this.workspace.query.setProperty('saiku.ui.render.type', 'multiplebar'); | |
| 289 | + var options = { | |
| 290 | + type: "BarChart", | |
| 291 | + multiChartIndexes: [1], | |
| 292 | + dataMeasuresInColumns: true, | |
| 293 | + orientation: "vertical", | |
| 294 | + smallTitlePosition: "top", | |
| 295 | + multiChartMax: 30, | |
| 296 | + multiChartColumnsMax: Math.floor( this.cccOptions.width / 200), | |
| 297 | + smallWidth: 200, | |
| 298 | + smallHeight: 150 | |
| 299 | + | |
| 300 | + }; | |
| 301 | + this.cccOptions = this.getQuickOptions(options); | |
| 302 | + this.render_chart(); | |
| 303 | + }, | |
| 304 | + | |
| 305 | + line: function() { | |
| 306 | + this.workspace.query.setProperty('saiku.ui.render.type', 'line'); | |
| 307 | + var options = { | |
| 308 | + type: "LineChart" | |
| 309 | + }; | |
| 310 | + | |
| 311 | + this.cccOptions = this.getQuickOptions(options); | |
| 312 | + this.render_chart(); | |
| 313 | + }, | |
| 314 | + | |
| 315 | + pie: function() { | |
| 316 | + this.workspace.query.setProperty('saiku.ui.render.type', 'pie'); | |
| 317 | + var options = { | |
| 318 | + type: "PieChart", | |
| 319 | + multiChartIndexes: [0] // ideally this would be chosen by the user (count, which) | |
| 320 | + }; | |
| 321 | + this.cccOptions = this.getQuickOptions(options); | |
| 322 | + this.render_chart(); | |
| 323 | + }, | |
| 324 | + | |
| 325 | + heatgrid: function() { | |
| 326 | + this.workspace.query.setProperty('saiku.ui.render.type', 'heatgrid'); | |
| 327 | + var options = { | |
| 328 | + type: "HeatGridChart" | |
| 329 | + }; | |
| 330 | + this.cccOptions = this.getQuickOptions(options); | |
| 331 | + this.render_chart(); | |
| 332 | + }, | |
| 333 | + | |
| 334 | + stackedBar100: function() { | |
| 335 | + this.workspace.query.setProperty('saiku.ui.render.type', 'stackedBar100'); | |
| 336 | + var options = { | |
| 337 | + type: "NormalizedBarChart" | |
| 338 | + }; | |
| 339 | + this.cccOptions = this.getQuickOptions(options); | |
| 340 | + this.render_chart(); | |
| 341 | + }, | |
| 342 | + | |
| 343 | + area: function() { | |
| 344 | + this.workspace.query.setProperty('saiku.ui.render.type', 'area'); | |
| 345 | + var options = { | |
| 346 | + type: "StackedAreaChart" | |
| 347 | + }; | |
| 348 | + this.cccOptions = this.getQuickOptions(options); | |
| 349 | + this.render_chart(); | |
| 350 | + }, | |
| 351 | + dot: function() { | |
| 352 | + this.workspace.query.setProperty('saiku.ui.render.type', 'dot'); | |
| 353 | + var options = { | |
| 354 | + type: "DotChart" | |
| 355 | + }; | |
| 356 | + this.cccOptions = this.getQuickOptions(options); | |
| 357 | + this.render_chart(); | |
| 358 | + }, | |
| 359 | + waterfall: function() { | |
| 360 | + this.workspace.query.setProperty('saiku.ui.render.type', 'waterfall'); | |
| 361 | + var options = { | |
| 362 | + type: "WaterfallChart" | |
| 363 | + }; | |
| 364 | + this.cccOptions = this.getQuickOptions(options); | |
| 365 | + this.render_chart(); | |
| 366 | + }, | |
| 367 | + | |
| 368 | + keepVisible: function(event) { | |
| 369 | + | |
| 370 | + | |
| 371 | + var chart = this.chart.root; | |
| 372 | + var data = chart.data; | |
| 373 | + | |
| 374 | + data | |
| 375 | + .datums(null, {selected: false}) | |
| 376 | + .each(function(datum) { | |
| 377 | + datum.setVisible(false); | |
| 378 | + }); | |
| 379 | + | |
| 380 | + data.clearSelected(); | |
| 381 | + | |
| 382 | + chart.render(true, true, false); | |
| 383 | + | |
| 384 | + | |
| 385 | + }, | |
| 386 | + | |
| 387 | + // Default static style-sheet | |
| 388 | + cccOptionsDefault: { | |
| 389 | + Base: { | |
| 390 | + animate: false, | |
| 391 | + selectable: true, | |
| 392 | + valuesVisible: false, | |
| 393 | + legend: true, | |
| 394 | + legendPosition: "top", | |
| 395 | + legendAlign: "right", | |
| 396 | + legendSizeMax: "30%", | |
| 397 | + axisSizeMax: "40%", | |
| 398 | + plotFrameVisible : false, | |
| 399 | + orthoAxisMinorTicks : false, | |
| 400 | + colors: ["#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ] | |
| 401 | +/* | |
| 402 | +"#B12623", | |
| 403 | +"#ff8585", | |
| 404 | +"#009bff", | |
| 405 | +"#1f77b4", | |
| 406 | +"#ff5900", | |
| 407 | +"#ffbb9e", | |
| 408 | +"#750000", | |
| 409 | +"#cecece", | |
| 410 | +"#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ] | |
| 411 | + */ | |
| 412 | + }, | |
| 413 | + | |
| 414 | + HeatGridChart: { | |
| 415 | + orientation: "horizontal", | |
| 416 | + useShapes: true, | |
| 417 | + shape: "circle", | |
| 418 | + nullShape: "cross", | |
| 419 | + colorNormByCategory: false, | |
| 420 | + sizeRole: "value", | |
| 421 | + legend: false, | |
| 422 | + hoverable: true, | |
| 423 | + axisComposite: true, | |
| 424 | + colors: ["red", "yellow", "lightgreen", "darkgreen"], | |
| 425 | + xAxisSize: 130, | |
| 426 | + yAxisSize: 130 | |
| 427 | + }, | |
| 428 | + | |
| 429 | + WaterfallChart: { | |
| 430 | + orientation: "horizontal" | |
| 431 | + }, | |
| 432 | + | |
| 433 | + PieChart: { | |
| 434 | + multiChartColumnsMax: 3, | |
| 435 | + multiChartMax: 30, | |
| 436 | + smallTitleFont: "bold 14px sans-serif", | |
| 437 | + valuesVisible: true, | |
| 438 | + valuesMask: "{value.percent}", | |
| 439 | + explodedSliceRadius: "10%", | |
| 440 | + extensionPoints: { | |
| 441 | + slice_innerRadiusEx: '40%', | |
| 442 | + slice_offsetRadius: function(scene) { | |
| 443 | + return scene.isSelected() ? '10%' : 0; | |
| 444 | + } | |
| 445 | + }, | |
| 446 | + clickable: true | |
| 447 | + //valuesLabelStyle: 'inside' | |
| 448 | + }, | |
| 449 | + | |
| 450 | + LineChart: { | |
| 451 | + extensionPoints: { | |
| 452 | + area_interpolate: "monotone", // cardinal | |
| 453 | + line_interpolate: "monotone" | |
| 454 | + } | |
| 455 | + }, | |
| 456 | + | |
| 457 | + StackedAreaChart: { | |
| 458 | + extensionPoints: { | |
| 459 | + area_interpolate: "monotone", | |
| 460 | + line_interpolate: "monotone" | |
| 461 | + } | |
| 462 | + } | |
| 463 | + }, | |
| 464 | + | |
| 465 | + getQuickOptions: function(baseOptions) { | |
| 466 | + var chartType = (baseOptions && baseOptions.type) || "BarChart"; | |
| 467 | + var workspaceResults = $(this.workspace.el).find(".workspace_results"); | |
| 468 | + var options = _.extend({ | |
| 469 | + type: chartType, | |
| 470 | + canvas: 'canvas_' + this.id, | |
| 471 | + width: workspaceResults.width() - 40, | |
| 472 | + height: workspaceResults.height() - 40 | |
| 473 | + }, | |
| 474 | + this.cccOptionsDefault.Base, | |
| 475 | + this.cccOptionsDefault[chartType], // may be undefined | |
| 476 | + baseOptions); | |
| 477 | + | |
| 478 | + if(this.data != null && this.data.resultset.length > 5) { | |
| 479 | + if(options.type === "HeatGridChart") { | |
| 480 | + options.xAxisSize = 150; | |
| 481 | + } else if(options.orientation !== "horizontal") { | |
| 482 | + options.extensionPoints = _.extend(Object.create(options.extensionPoints || {}), | |
| 483 | + { | |
| 484 | + xAxisLabel_textAngle: -Math.PI/2, | |
| 485 | + xAxisLabel_textAlign: "right", | |
| 486 | + xAxisLabel_textBaseline: "middle" | |
| 487 | + }); | |
| 488 | + } | |
| 489 | + } | |
| 490 | + | |
| 491 | + return options; | |
| 492 | + }, | |
| 493 | + | |
| 494 | + render_chart: function() { | |
| 495 | + _.delay(this.render_chart_delayed, 0, this); | |
| 496 | + return false; | |
| 497 | + }, | |
| 498 | + | |
| 499 | + render_chart_delayed: function() { | |
| 500 | + if (!$(this.workspace.querytoolbar.el).find('.render_chart').hasClass('on') || !this.hasProcessed) { | |
| 501 | + return; | |
| 502 | + } | |
| 503 | + $(this.workspace.toolbar.el).find('.i3GeoMap').removeClass('on'); | |
| 504 | +/* DEBUGGING | |
| 505 | +this.med = new Date().getTime(); | |
| 506 | +$(this.el).prepend(" | chart render (" + (this.med - this.call_time) + ")" ); | |
| 507 | +this.call_time = undefined; | |
| 508 | +*/ | |
| 509 | + var workspaceResults = $(this.workspace.el).find(".workspace_results"); | |
| 510 | + var isSmall = (this.data != null && this.data.height < 80 && this.data.width < 80); | |
| 511 | + var isMedium = (this.data != null && this.data.height < 300 && this.data.width < 300); | |
| 512 | + var isBig = (!isSmall && !isMedium); | |
| 513 | + var animate = false; | |
| 514 | + var hoverable = isSmall; | |
| 515 | + | |
| 516 | + var runtimeChartDefinition = _.clone(this.cccOptions); | |
| 517 | + if (isBig) { | |
| 518 | + if (runtimeChartDefinition.hasOwnProperty('extensionPoints') && runtimeChartDefinition.extensionPoints.hasOwnProperty('line_interpolate')) | |
| 519 | + delete runtimeChartDefinition.extensionPoints.line_interpolate; | |
| 520 | + if (runtimeChartDefinition.hasOwnProperty('extensionPoints') && runtimeChartDefinition.extensionPoints.hasOwnProperty('area_interpolate')) | |
| 521 | + delete runtimeChartDefinition.extensionPoints.area_interpolate; | |
| 522 | + } | |
| 523 | + runtimeChartDefinition = _.extend(runtimeChartDefinition, { | |
| 524 | + width: workspaceResults.width() - 40, | |
| 525 | + height: workspaceResults.height() - 40, | |
| 526 | + hoverable: hoverable, | |
| 527 | + animate: animate | |
| 528 | + }); | |
| 529 | + | |
| 530 | + /* XXX - enable later | |
| 531 | + var start = new Date().getTime(); | |
| 532 | + this.editor.chartDefinition = _.clone(this.cccOptions); | |
| 533 | + this.editor.set_chart("pvc." + this.cccOptions.type); | |
| 534 | + this.editor.render_chart_properties("pvc." + this.cccOptions.type, this.editor.chartDefinition); | |
| 535 | + */ | |
| 536 | + | |
| 537 | + this.chart = new pvc[runtimeChartDefinition.type](runtimeChartDefinition); | |
| 538 | +/* DEBUGGING | |
| 539 | +this.med3 = new Date().getTime(); | |
| 540 | +$(this.el).prepend(" pvc (" + (this.med3 - this.med) + ")" ); | |
| 541 | +*/ | |
| 542 | + | |
| 543 | + this.chart.setData(this.data, { | |
| 544 | + crosstabMode: true, | |
| 545 | + seriesInRows: false | |
| 546 | + }); | |
| 547 | + | |
| 548 | + try { | |
| 549 | + if (animate) { | |
| 550 | + $(this.el).find('.canvas_wrapper').show(); | |
| 551 | + } | |
| 552 | + this.chart.render(); | |
| 553 | +/* DEBUGGING | |
| 554 | + var med2 = new Date().getTime(); | |
| 555 | + $(this.el).prepend(" done (" + (med2 - this.med) + ")" ); | |
| 556 | +*/ | |
| 557 | + } catch (e) { | |
| 558 | + $(this.el).text("Could not render chart"); | |
| 559 | + } | |
| 560 | + this.workspace.processing.hide(); | |
| 561 | + this.workspace.adjust(); | |
| 562 | + if (animate) { | |
| 563 | + return false; | |
| 564 | + } | |
| 565 | + // $('#nav_' + this.id).show(); | |
| 566 | + if (isIE || isBig) { | |
| 567 | + $(this.el).find('.canvas_wrapper').show(); | |
| 568 | + } else { | |
| 569 | + $(this.el).find('.canvas_wrapper').fadeIn(400); | |
| 570 | + } | |
| 571 | + return false; | |
| 572 | + }, | |
| 573 | + | |
| 574 | + receive_data: function(args) { | |
| 575 | + if (! $(this.workspace.querytoolbar.el).find('.render_chart').hasClass('on')) { | |
| 576 | + return; | |
| 577 | + } | |
| 578 | + return _.delay(this.process_data, 0, args); | |
| 579 | + | |
| 580 | + }, | |
| 581 | + | |
| 582 | + process_data: function(args) { | |
| 583 | + this.data = {}; | |
| 584 | + this.data.resultset = []; | |
| 585 | + this.data.metadata = []; | |
| 586 | + this.data.height = 0; | |
| 587 | + this.data.width = 0; | |
| 588 | + | |
| 589 | + if (typeof args == "undefined" || typeof args.data == "undefined" || | |
| 590 | + ($(this.workspace.el).is(':visible') && !$(this.el).is(':visible'))) { | |
| 591 | + return; | |
| 592 | + } | |
| 593 | + | |
| 594 | + if (args.data != null && args.data.error != null) { | |
| 595 | + return this.workspace.error(args); | |
| 596 | + } | |
| 597 | + // Check to see if there is data | |
| 598 | + if (args.data == null || (args.data.cellset && args.data.cellset.length === 0)) { | |
| 599 | + return this.workspace.no_results(args); | |
| 600 | + } | |
| 601 | + | |
| 602 | + var cellset = args.data.cellset; | |
| 603 | + if (cellset && cellset.length > 0) { | |
| 604 | +/* DEBUGGING | |
| 605 | +var start = new Date().getTime(); | |
| 606 | +this.call_time = start; | |
| 607 | +$(this.el).prepend(" | chart process"); | |
| 608 | +*/ | |
| 609 | + var lowest_level = 0; | |
| 610 | + var data_start = 0; | |
| 611 | + for (var row = 0; data_start == 0 && row < cellset.length; row++) { | |
| 612 | + this.data.metadata = []; | |
| 613 | + for (var field = 0; field < cellset[row].length; field++) { | |
| 614 | + var firstHeader = []; | |
| 615 | + | |
| 616 | + while (cellset[row][field].type == "COLUMN_HEADER" && cellset[row][field].value == "null") { | |
| 617 | + row++; | |
| 618 | + } | |
| 619 | + if (cellset[row][field].type == "ROW_HEADER_HEADER") { | |
| 620 | + | |
| 621 | + while(cellset[row][field].type == "ROW_HEADER_HEADER") { | |
| 622 | + firstHeader.push(cellset[row][field].value); | |
| 623 | + field++; | |
| 624 | + } | |
| 625 | + | |
| 626 | + this.data.metadata.push({ | |
| 627 | + colIndex: 0, | |
| 628 | + colType: "String", | |
| 629 | + colName: firstHeader.join('/') | |
| 630 | + }); | |
| 631 | + lowest_level = field - 1; | |
| 632 | + } | |
| 633 | + if (cellset[row][field].type == "COLUMN_HEADER" && cellset[row][field].value != "null") { | |
| 634 | + var lowest_col_header = 0; | |
| 635 | + var colheader = []; | |
| 636 | + while(lowest_col_header <= row) { | |
| 637 | + colheader.push(cellset[lowest_col_header][field].value); | |
| 638 | + lowest_col_header++; | |
| 639 | + } | |
| 640 | + this.data.metadata.push({ | |
| 641 | + colIndex: field - lowest_level + 1, | |
| 642 | + colType: "Numeric", | |
| 643 | + colName: colheader.join('/') | |
| 644 | + }); | |
| 645 | + | |
| 646 | + data_start = row+1; | |
| 647 | + } | |
| 648 | + } | |
| 649 | + } | |
| 650 | + var labelsSet = {}; | |
| 651 | + for (var row = data_start; row < cellset.length; row++) { | |
| 652 | + if (cellset[row][0].value !== "") { | |
| 653 | + var record = []; | |
| 654 | + this.data.width = cellset[row].length - lowest_level + 1; | |
| 655 | + var label = ""; | |
| 656 | + for (var labelCol = lowest_level; labelCol >= 0; labelCol--) { | |
| 657 | + var lastKnownUpperLevelRow = row; | |
| 658 | + while(cellset[lastKnownUpperLevelRow] && cellset[lastKnownUpperLevelRow][labelCol].value === 'null') { | |
| 659 | + --lastKnownUpperLevelRow; | |
| 660 | + } | |
| 661 | + if(cellset[lastKnownUpperLevelRow]) { | |
| 662 | + if (label == "") { | |
| 663 | + label = cellset[lastKnownUpperLevelRow][labelCol].value; | |
| 664 | + } else { | |
| 665 | + label = cellset[lastKnownUpperLevelRow][labelCol].value + " / " + label; | |
| 666 | + } | |
| 667 | + } | |
| 668 | + } | |
| 669 | + if(label in labelsSet) { | |
| 670 | + labelsSet[label] = labelsSet[label]+1; | |
| 671 | + label = label + ' [' + (labelsSet[label] + 1) + ']'; | |
| 672 | + } else { | |
| 673 | + labelsSet[label] = 0; | |
| 674 | + } | |
| 675 | + record.push(label); | |
| 676 | + | |
| 677 | + for (var col = lowest_level + 1; col < cellset[row].length; col++) { | |
| 678 | + var cell = cellset[row][col]; | |
| 679 | + var value = cell.value || 0; | |
| 680 | + // check if the resultset contains the raw value, if not try to parse the given value | |
| 681 | + var raw = cell.properties.raw; | |
| 682 | + if (raw && raw !== "null") { | |
| 683 | + value = parseFloat(raw); | |
| 684 | + } else if (typeof(cell.value) !== "number" && parseFloat(cell.value.replace(/[^a-zA-Z 0-9.]+/g,''))) { | |
| 685 | + value = parseFloat(cell.value.replace(/[^a-zA-Z 0-9.]+/g,'')); | |
| 686 | + } | |
| 687 | + record.push(value); | |
| 688 | + } | |
| 689 | + this.data.resultset.push(record); | |
| 690 | + } | |
| 691 | + } | |
| 692 | + //makeSureUniqueLabels(this.data.resultset); | |
| 693 | + this.hasProcessed = true; | |
| 694 | + this.data.height = this.data.resultset.length; | |
| 695 | + this.cccOptions = this.getQuickOptions(this.cccOptions); | |
| 696 | + this.render_chart(); | |
| 697 | + } else { | |
| 698 | + $(this.el).find('.canvas_wrapper').text("No results").show(); | |
| 699 | + this.workspace.processing.hide(); | |
| 700 | + this.workspace.adjust(); | |
| 701 | + } | |
| 702 | + } | |
| 703 | +}); | |
| 704 | + | |
| 705 | + | ... | ... |
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/i3GeoMap/README.md
0 → 100755
| ... | ... | @@ -0,0 +1,12 @@ |
| 1 | +Saiku Chart Plus | |
| 2 | + | |
| 3 | +Welcome to Saiku Chart Plus Project. | |
| 4 | + | |
| 5 | +What is Saiku Chart Plus? | |
| 6 | + | |
| 7 | +It is an open source project that helps Pentaho BI users to create other types of charts and maps based on Saiku Project, Highcharts and Google Maps. | |
| 8 | + | |
| 9 | +To learn more visit our page http://it4biz.github.com/SaikuChartPlus/ | |
| 10 | + | |
| 11 | +Direct link to download Saiku Chart Plus: | |
| 12 | +http://sourceforge.net/projects/saikuchartplus/files/SaikuChartPlus2.4/saikuchartsplus-plugin-2.4-RC1.zip/download | ... | ... |
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/i3GeoMap/chart.png
0 → 100755
3.31 KB
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/i3GeoMap/map.png
0 → 100755
1.13 KB
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/i3GeoMap/mapa.png
0 → 100644
1.23 KB
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/plugins/i3GeoMap/plugin.js
0 → 100644
| ... | ... | @@ -0,0 +1,713 @@ |
| 1 | +/* | |
| 2 | + * Esse plugin e parte do software livre i3Geo | |
| 3 | + * | |
| 4 | + * Baseado em ChartPlus IT4biz IT Solutions Ltda | |
| 5 | + * | |
| 6 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
| 7 | + * you may not use this file except in compliance with the License. | |
| 8 | + * You may obtain a copy of the License at | |
| 9 | + * | |
| 10 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
| 11 | + * | |
| 12 | + * Unless required by applicable law or agreed to in writing, software | |
| 13 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
| 14 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 15 | + * See the License for the specific language governing permissions and | |
| 16 | + * limitations under the License. | |
| 17 | + * changed by edmar.moretti@gmail.com | |
| 18 | + */ | |
| 19 | + | |
| 20 | +var i3GeoMap = Backbone.View.extend({ | |
| 21 | + opcoes: {cores:"",size:0,tipo:"",indicecoluna:"",cores:"",coluna:"",locaplic:"",outlinecolor:""}, | |
| 22 | + coreshex: ["#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", "#2ca02c", "#98df8a", "#d62728", "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" ], | |
| 23 | + initialize: function(args) { | |
| 24 | + this.workspace = args.workspace; | |
| 25 | + | |
| 26 | + // Create a unique ID for use as the CSS selector | |
| 27 | + this.id = _.uniqueId("i3GeoMap_"); | |
| 28 | + $(this.el).attr({ id: this.id }); | |
| 29 | + | |
| 30 | + // Bind map rendering to query result event | |
| 31 | + _.bindAll(this, "render", "receive_data", "process_data", "show", | |
| 32 | + "setOptions"); | |
| 33 | + | |
| 34 | + this.workspace.bind('query:result', this.receive_data); | |
| 35 | + | |
| 36 | + // Add chart button | |
| 37 | + this.add_button(); | |
| 38 | + this.workspace.toolbar.i3GeoMap = this.show; | |
| 39 | + | |
| 40 | + // Listen to adjust event and rerender chart | |
| 41 | + //this.workspace.bind('workspace:adjust', this.render); | |
| 42 | + // Create navigation | |
| 43 | + this.nav = $("" + | |
| 44 | + "<div style='overflow: hidden;padding: 10px 5px;' >"+ | |
| 45 | + "<div class='fields_list' style='height:34px;'>"+ | |
| 46 | + "<div class='fields_list_header limit'><span class='i18n_translated'>Mapa</span></div>"+ | |
| 47 | + "<div class='fields_list_body filter' style='margin:4px 5px 5px 5px'>"+ | |
| 48 | + //"<ul class='connectable ui-sortable' style=''>"+ | |
| 49 | + "<input type=button name=mapaBarras value='Barras' />"+ | |
| 50 | + "<input type=button name=mapaPizzas value='Pizzas' />"+ | |
| 51 | + " <input type=button name=raiosProporcionais value='Raios proporcionais' />"+ | |
| 52 | + " <input type=button name=circulosProporcionais value='Círculos proporcionais' />"+ | |
| 53 | + " <input type=button name=coresChapadas value='Cores' />"+ | |
| 54 | + " <input type=button name=atualizarMapa value='Atualiza' />"+ | |
| 55 | + " <input type=button name=fecharMapa value='Fechar' />"+ | |
| 56 | + //"</ul>"+ | |
| 57 | + "</div>"+ | |
| 58 | + "</div>"+ | |
| 59 | + "</div>"+ | |
| 60 | + "<div id='message'></div>"+ | |
| 61 | + "<form id='formi3GeoMap' method='post' target='iframei3GeoMap' action='"+parametroUrl("locaplic")+"/ferramentas/saiku/cartograma.php' >"+ | |
| 62 | + "<input type=hidden name=opcoes id=formi3GeoMapOpcoes value='' />"+ | |
| 63 | + "<input type=hidden name=g_sid id=formi3GeoMapg_sid value='"+parametroUrl("g_sid")+"' />"+ | |
| 64 | + "<input type=hidden name=dados id=formi3GeoMapdados value='' />"+ | |
| 65 | + "<input type=hidden name=metadados id=formi3GeoMapmetadados value='' />"+ | |
| 66 | + "</form>" + | |
| 67 | + "<iframe id='iframei3GeoMap' name='iframei3GeoMap' style='width:100%;height:200px;display:block' />" | |
| 68 | + ); | |
| 69 | + this.nav.find('input').click(this.setOptions); | |
| 70 | + | |
| 71 | + // Append chart to workspace | |
| 72 | + $(this.workspace.el).find('.workspace_results') | |
| 73 | + .prepend($(this.el).hide()) | |
| 74 | + .prepend(this.nav.hide()); | |
| 75 | + }, | |
| 76 | + add_button: function() { | |
| 77 | + var $chart_button = | |
| 78 | + $('<a href="#i3GeoMap" class="i3GeoMap button disabled_toolbar i18n" title="Mapa com i3Geo"></a>') | |
| 79 | + .css({ 'background-image': "url('js/saiku/plugins/i3GeoMap/mapa.png')", | |
| 80 | + 'background-repeat':'no-repeat', | |
| 81 | + 'background-position':'20% 50%' | |
| 82 | + }); | |
| 83 | + | |
| 84 | + var $chart_li = $('<li class="seperator"></li>').append($chart_button); | |
| 85 | + $(this.workspace.toolbar.el).find("ul").append($chart_li); | |
| 86 | + }, | |
| 87 | + fecha: function(){ | |
| 88 | + $(this.workspace.toolbar.el).find('.i3GeoMap').removeClass('on'); | |
| 89 | + $(this.el).hide(); | |
| 90 | + $(this.nav).hide(); | |
| 91 | + this.workspace.processing.hide(); | |
| 92 | + this.workspace.adjust(); | |
| 93 | + $(this.workspace.el).find('.workspace_results table').show(); | |
| 94 | + this.workspace.table.render({ data: this.workspace.query.result.lastresult() }); | |
| 95 | + }, | |
| 96 | + atualizarMapa: function(){ | |
| 97 | + document.getElementById('formi3GeoMap').submit(); | |
| 98 | + }, | |
| 99 | + show: function(event, ui) { | |
| 100 | + //$(this.workspace.el).find('.workspace_results table').toggle(); | |
| 101 | + $(this.el).toggle(); | |
| 102 | + $(this.nav).toggle(); | |
| 103 | + $(event.target).toggleClass('on'); | |
| 104 | + $("#message").html(""); | |
| 105 | + this.nav.find('input').show(); | |
| 106 | + if ($(event.target).hasClass('on')) { | |
| 107 | + this.process_data({ data: this.workspace.query.result.lastresult() }); | |
| 108 | + //this.render(); | |
| 109 | + } | |
| 110 | + }, | |
| 111 | + | |
| 112 | + setOptions: function(event) { | |
| 113 | + var type = $(event.target).attr('name'); | |
| 114 | + this.opcoes.coluna = ""; | |
| 115 | + this.opcoes.indicecoluna = ""; | |
| 116 | + this.opcoes.cores = ""; | |
| 117 | + this.opcoes.outlinecolor = ""; | |
| 118 | + this[type](this); | |
| 119 | + return false; | |
| 120 | + }, | |
| 121 | + fecharMapa: function(){ | |
| 122 | + var i = document.getElementById("iframei3GeoMap"); | |
| 123 | + if(i){ | |
| 124 | + i.src = ""; | |
| 125 | + i.style.display = "none"; | |
| 126 | + i.style.height = "0px"; | |
| 127 | + } | |
| 128 | + }, | |
| 129 | + mapaPizzas: function(s){ | |
| 130 | + this.opcoes.size = 50; | |
| 131 | + this.opcoes.cores = coresHex2Rgb(this.coreshex); | |
| 132 | + $.fancybox("Cor do contorno: "+this.cores("corContorno")+ | |
| 133 | + "Tamanho das pizzas (em pixels):<br><input type=text value='"+this.opcoes.size+"' size=6 id='mapaPizzasSize' />" + | |
| 134 | + "<br><input type=button value='OK' id='mapaPizzasOk' />" + | |
| 135 | + " <input type=button value='Cancela' id='mapaPizzasCancela' />" | |
| 136 | + , | |
| 137 | + { | |
| 138 | + 'autoDimensions' : false, | |
| 139 | + 'autoScale' : false, | |
| 140 | + 'height' : 250, | |
| 141 | + 'width' : 350, | |
| 142 | + 'transitionIn' : 'none', | |
| 143 | + 'transitionOut' : 'none', | |
| 144 | + 'showCloseButton' : false, | |
| 145 | + 'modal' : false | |
| 146 | + } | |
| 147 | + ); | |
| 148 | + document.getElementById("mapaPizzasOk").onclick = function(){ | |
| 149 | + s.opcoes.tipo = "mapaPizzas"; | |
| 150 | + s.opcoes.size = document.getElementById("mapaPizzasSize").value; | |
| 151 | + s.opcoes.indicecoluna = []; | |
| 152 | + var cori = $('input[name="corContorno"]').val(); | |
| 153 | + s.opcoes.outlinecolor = hex2rgb(cori); | |
| 154 | + s.render(); | |
| 155 | + $.fancybox.close(); | |
| 156 | + }; | |
| 157 | + document.getElementById("mapaPizzasCancela").onclick = function(){ | |
| 158 | + $.fancybox.close(); | |
| 159 | + s.fecharMapa(); | |
| 160 | + }; | |
| 161 | + jQuery('select[name="corContorno"]').colourPicker({ | |
| 162 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 163 | + title: false | |
| 164 | + }); | |
| 165 | + }, | |
| 166 | + | |
| 167 | + mapaBarras: function(s){ | |
| 168 | + this.opcoes.size = 50; | |
| 169 | + this.opcoes.cores = coresHex2Rgb(this.coreshex); | |
| 170 | + $.fancybox("Cor do contorno: "+this.cores("corContorno")+ | |
| 171 | + "Tamanho das barras (em pixels):<br><input type=text value='"+this.opcoes.size+"' size=6 id='mapaBarrasSize' />" + | |
| 172 | + "<br><input type=button value='OK' id='mapaBarrasOk' />" + | |
| 173 | + " <input type=button value='Cancela' id='mapaBarrasCancela' />" | |
| 174 | + , | |
| 175 | + { | |
| 176 | + 'autoDimensions' : false, | |
| 177 | + 'autoScale' : false, | |
| 178 | + 'height' : 250, | |
| 179 | + 'width' : 350, | |
| 180 | + 'transitionIn' : 'none', | |
| 181 | + 'transitionOut' : 'none', | |
| 182 | + 'showCloseButton' : false, | |
| 183 | + 'modal' : false | |
| 184 | + } | |
| 185 | + ); | |
| 186 | + document.getElementById("mapaBarrasOk").onclick = function(){ | |
| 187 | + s.opcoes.tipo = "mapaBarras"; | |
| 188 | + s.opcoes.size = document.getElementById("mapaBarrasSize").value; | |
| 189 | + s.opcoes.indicecoluna = []; | |
| 190 | + var cori = $('input[name="corContorno"]').val(); | |
| 191 | + s.opcoes.outlinecolor = hex2rgb(cori); | |
| 192 | + s.render(); | |
| 193 | + $.fancybox.close(); | |
| 194 | + }; | |
| 195 | + document.getElementById("mapaBarrasCancela").onclick = function(){ | |
| 196 | + $.fancybox.close(); | |
| 197 | + s.fecharMapa(); | |
| 198 | + }; | |
| 199 | + jQuery('select[name="corContorno"]').colourPicker({ | |
| 200 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 201 | + title: false | |
| 202 | + }); | |
| 203 | + }, | |
| 204 | + coresChapadas: function(s){ | |
| 205 | + this.opcoes.size = 0; | |
| 206 | + $.fancybox("Cor inicial: "+this.cores("corInicial")+ | |
| 207 | + "Cor final: "+this.cores("corFinal")+ | |
| 208 | + "Coluna com os valores:<br>"+ | |
| 209 | + "<select id='coresChapadasColuna' style='border:1px solid #BBBBBB;'>"+this.opcoesColunas()+"</select>" + | |
| 210 | + "<br><input type=button value='OK' id='coresChapadasOk' />" + | |
| 211 | + " <input type=button value='Cancela' id='coresChapadasCancela' />" | |
| 212 | + , | |
| 213 | + { | |
| 214 | + 'autoDimensions' : false, | |
| 215 | + 'autoScale' : false, | |
| 216 | + 'height' : 250, | |
| 217 | + 'width' : 350, | |
| 218 | + 'transitionIn' : 'none', | |
| 219 | + 'transitionOut' : 'none', | |
| 220 | + 'showCloseButton' : false, | |
| 221 | + 'modal' : false | |
| 222 | + } | |
| 223 | + ); | |
| 224 | + document.getElementById("coresChapadasOk").onclick = function(){ | |
| 225 | + s.opcoes.tipo = "coresChapadas"; | |
| 226 | + s.opcoes.size = 0; | |
| 227 | + s.opcoes.indicecoluna = [parseInt(document.getElementById("coresChapadasColuna").value,10)]; | |
| 228 | + var cori = $('input[name="corInicial"]').val(); | |
| 229 | + var corf = $('input[name="corFinal"]').val(); | |
| 230 | + s.opcoes.cores = [hex2rgb(cori),hex2rgb(corf)]; | |
| 231 | + s.render(); | |
| 232 | + $.fancybox.close(); | |
| 233 | + }; | |
| 234 | + document.getElementById("coresChapadasCancela").onclick = function(){ | |
| 235 | + $.fancybox.close(); | |
| 236 | + s.fecharMapa(); | |
| 237 | + }; | |
| 238 | + jQuery('select[name="corInicial"]').colourPicker({ | |
| 239 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 240 | + title: false | |
| 241 | + }); | |
| 242 | + $('input[name="corInicial"]')[0].value = "ffffc7"; | |
| 243 | + | |
| 244 | + jQuery('select[name="corFinal"]').colourPicker({ | |
| 245 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 246 | + title: false | |
| 247 | + }); | |
| 248 | + $('input[name="corFinal"]')[0].value = "643403"; | |
| 249 | + }, | |
| 250 | + raiosProporcionais: function(s){ | |
| 251 | + this.opcoes.size = 10; | |
| 252 | + $.fancybox("Escolha uma cor: "+this.cores()+ | |
| 253 | + "Tamanho inicial do círculo (em pixels):<br><input type=text value='"+this.opcoes.size+"' size=6 id='raiosProporcionaisSize' />" + | |
| 254 | + "<br>Coluna com os valores:<br>"+ | |
| 255 | + "<select id='raiosProporcionaisColuna' style='border:1px solid #BBBBBB;'>"+this.opcoesColunas()+"</select>" + | |
| 256 | + "<br><input type=button value='OK' id='raiosProporcionaisOk' />" + | |
| 257 | + " <input type=button value='Cancela' id='raiosProporcionaisCancela' />" | |
| 258 | + , | |
| 259 | + { | |
| 260 | + 'autoDimensions' : false, | |
| 261 | + 'autoScale' : false, | |
| 262 | + 'height' : 250, | |
| 263 | + 'width' : 350, | |
| 264 | + 'transitionIn' : 'none', | |
| 265 | + 'transitionOut' : 'none', | |
| 266 | + 'showCloseButton' : false, | |
| 267 | + 'modal' : false | |
| 268 | + } | |
| 269 | + ); | |
| 270 | + document.getElementById("raiosProporcionaisOk").onclick = function(){ | |
| 271 | + s.opcoes.tipo = "raiosProporcionais"; | |
| 272 | + s.opcoes.size = document.getElementById("raiosProporcionaisSize").value; | |
| 273 | + s.opcoes.indicecoluna = [parseInt(document.getElementById("raiosProporcionaisColuna").value,10)]; | |
| 274 | + var cor = $('input[name="colour"]').val(); | |
| 275 | + s.opcoes.cores = [hex2rgb(cor)]; | |
| 276 | + s.render(); | |
| 277 | + $.fancybox.close(); | |
| 278 | + }; | |
| 279 | + document.getElementById("raiosProporcionaisCancela").onclick = function(){ | |
| 280 | + $.fancybox.close(); | |
| 281 | + s.fecharMapa(); | |
| 282 | + }; | |
| 283 | + jQuery('select[name="colour"]').colourPicker({ | |
| 284 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 285 | + title: false | |
| 286 | + }); | |
| 287 | + }, | |
| 288 | + circulosProporcionais: function(s){ | |
| 289 | + this.opcoes.size = 10; | |
| 290 | + $.fancybox("Escolha uma cor: "+this.cores()+ | |
| 291 | + "Tamanho inicial do círculo (em pixels):<br><input type=text value='"+this.opcoes.size+"' size=6 id='circulosProporcionaisSize' />" + | |
| 292 | + "<br>Coluna com os valores:<br>"+ | |
| 293 | + "<select id='circulosProporcionaisColuna' style='border:1px solid #BBBBBB;'>"+this.opcoesColunas()+"</select>" + | |
| 294 | + "<br><input type=button value='OK' id='circulosProporcionaisOk' />" + | |
| 295 | + " <input type=button value='Cancela' id='circulosProporcionaisCancela' />" | |
| 296 | + , | |
| 297 | + { | |
| 298 | + 'autoDimensions' : false, | |
| 299 | + 'autoScale' : false, | |
| 300 | + 'height' : 250, | |
| 301 | + 'width' : 350, | |
| 302 | + 'transitionIn' : 'none', | |
| 303 | + 'transitionOut' : 'none', | |
| 304 | + 'showCloseButton' : false, | |
| 305 | + 'modal' : false | |
| 306 | + } | |
| 307 | + ); | |
| 308 | + document.getElementById("circulosProporcionaisOk").onclick = function(){ | |
| 309 | + s.opcoes.tipo = "circulosProporcionais"; | |
| 310 | + s.opcoes.size = document.getElementById("circulosProporcionaisSize").value; | |
| 311 | + s.opcoes.indicecoluna = [parseInt(document.getElementById("circulosProporcionaisColuna").value,10)]; | |
| 312 | + var cor = $('input[name="colour"]').val(); | |
| 313 | + s.opcoes.cores = [hex2rgb(cor)]; | |
| 314 | + s.render(); | |
| 315 | + $.fancybox.close(); | |
| 316 | + }; | |
| 317 | + document.getElementById("circulosProporcionaisCancela").onclick = function(){ | |
| 318 | + $.fancybox.close(); | |
| 319 | + s.fecharMapa(); | |
| 320 | + }; | |
| 321 | + jQuery('select[name="colour"]').colourPicker({ | |
| 322 | + ico: 'js/jquery/jquery.colourPicker.gif', | |
| 323 | + title: false | |
| 324 | + }); | |
| 325 | + }, | |
| 326 | + | |
| 327 | + opcoesColunas: function(){ | |
| 328 | + var m = this.data.metadata, | |
| 329 | + n = m.length, | |
| 330 | + i = 0, | |
| 331 | + ins = []; | |
| 332 | + for(i=1;i<n;i++){ | |
| 333 | + ins.push("<option value='"+m[i].colIndex+"' >"+m[i].colName+"</option>"); | |
| 334 | + } | |
| 335 | + return ins.join(""); | |
| 336 | + }, | |
| 337 | + cores: function(nome){ | |
| 338 | + if(!nome){ | |
| 339 | + nome = "colour"; | |
| 340 | + } | |
| 341 | + var cor = "<div id='jquery-colour-picker-example' >" + | |
| 342 | + "<p><select name='"+nome+"'>"+ | |
| 343 | + "<option value='ffffff' selected='selected'>#ffffff</option>"+ | |
| 344 | + "<option value='ffccc9'>#ffccc9</option>"+ | |
| 345 | + "<option value='ffce93'>#ffce93</option>"+ | |
| 346 | + "<option value='fffc9e'>#fffc9e</option>"+ | |
| 347 | + "<option value='ffffc7'>#ffffc7</option>"+ | |
| 348 | + "<option value='9aff99'>#9aff99</option>"+ | |
| 349 | + "<option value='96fffb'>#96fffb</option>"+ | |
| 350 | + "<option value='cdffff'>#cdffff</option>"+ | |
| 351 | + "<option value='cbcefb'>#cbcefb</option>"+ | |
| 352 | + "<option value='cfcfcf'>#cfcfcf</option>"+ | |
| 353 | + "<option value='fd6864'>#fd6864</option>"+ | |
| 354 | + "<option value='fe996b'>#fe996b</option>"+ | |
| 355 | + "<option value='fffe65'>#fffe65</option>"+ | |
| 356 | + "<option value='fcff2f'>#fcff2f</option>"+ | |
| 357 | + "<option value='67fd9a'>#67fd9a</option>"+ | |
| 358 | + "<option value='38fff8'>#38fff8</option>"+ | |
| 359 | + "<option value='68fdff'>#68fdff</option>"+ | |
| 360 | + "<option value='9698ed'>#9698ed</option>"+ | |
| 361 | + "<option value='c0c0c0'>#c0c0c0</option>"+ | |
| 362 | + "<option value='fe0000'>#fe0000</option>"+ | |
| 363 | + "<option value='f8a102'>#f8a102</option>"+ | |
| 364 | + "<option value='ffcc67'>#ffcc67</option>"+ | |
| 365 | + "<option value='f8ff00'>#f8ff00</option>"+ | |
| 366 | + "<option value='34ff34'>#34ff34</option>"+ | |
| 367 | + "<option value='68cbd0'>#68cbd0</option>"+ | |
| 368 | + "<option value='34cdf9'>#34cdf9</option>"+ | |
| 369 | + "<option value='6665cd'>#6665cd</option>"+ | |
| 370 | + "<option value='9b9b9b'>#9b9b9b</option>"+ | |
| 371 | + "<option value='cb0000'>#cb0000</option>"+ | |
| 372 | + "<option value='f56b00'>#f56b00</option>"+ | |
| 373 | + "<option value='ffcb2f'>#ffcb2f</option>"+ | |
| 374 | + "<option value='ffc702'>#ffc702</option>"+ | |
| 375 | + "<option value='32cb00'>#32cb00</option>"+ | |
| 376 | + "<option value='00d2cb'>#00d2cb</option>"+ | |
| 377 | + "<option value='3166ff'>#3166ff</option>"+ | |
| 378 | + "<option value='6434fc'>#6434fc</option>"+ | |
| 379 | + "<option value='656565'>#656565</option>"+ | |
| 380 | + "<option value='9a0000'>#9a0000</option>"+ | |
| 381 | + "<option value='ce6301'>#ce6301</option>"+ | |
| 382 | + "<option value='cd9934'>#cd9934</option>"+ | |
| 383 | + "<option value='999903'>#999903</option>"+ | |
| 384 | + "<option value='009901'>#009901</option>"+ | |
| 385 | + "<option value='329a9d'>#329a9d</option>"+ | |
| 386 | + "<option value='3531ff'>#3531ff</option>"+ | |
| 387 | + "<option value='6200c9'>#6200c9</option>"+ | |
| 388 | + "<option value='343434'>#343434</option>"+ | |
| 389 | + "<option value='680100'>#680100</option>"+ | |
| 390 | + "<option value='963400'>#963400</option>"+ | |
| 391 | + "<option value='986536'>#986536</option>"+ | |
| 392 | + "<option value='646809'>#646809</option>"+ | |
| 393 | + "<option value='036400'>#036400</option>"+ | |
| 394 | + "<option value='34696d'>#34696d</option>"+ | |
| 395 | + "<option value='00009b'>#00009b</option>"+ | |
| 396 | + "<option value='303498'>#303498</option>"+ | |
| 397 | + "<option value='000000'>#000000</option>"+ | |
| 398 | + "<option value='330001'>#330001</option>"+ | |
| 399 | + "<option value='643403'>#643403</option>"+ | |
| 400 | + "<option value='663234'>#663234</option>"+ | |
| 401 | + "<option value='343300'>#343300</option>"+ | |
| 402 | + "<option value='013300'>#013300</option>"+ | |
| 403 | + "<option value='003532'>#003532</option>"+ | |
| 404 | + "<option value='010066'>#010066</option>"+ | |
| 405 | + "<option value='340096'>#340096</option></select></p></div>"; | |
| 406 | + return cor; | |
| 407 | + }, | |
| 408 | + render: function() { | |
| 409 | + if (! $(this.workspace.toolbar.el).find('.i3GeoMap').hasClass('on')) { | |
| 410 | + this.fecha(); | |
| 411 | + this.fecharMapa(); | |
| 412 | + return; | |
| 413 | + } | |
| 414 | + var series=[]; | |
| 415 | + //nome das colunas | |
| 416 | + var column=[]; | |
| 417 | + var columnGeoCod = ""; | |
| 418 | + var indiceColumnGeoCod = ""; | |
| 419 | + var metadata = []; | |
| 420 | + var indicecoluna = ""; | |
| 421 | + for(var i=0; i < this.data.metadata.length; i++){ | |
| 422 | + if(this.opcoes.indicecoluna == this.data.metadata[i].colIndex){ | |
| 423 | + indicecoluna = i; | |
| 424 | + } | |
| 425 | + column[i] = this.data.metadata[i].colName; | |
| 426 | + //se o usuario escolheu uma coluna, as demais sao marcadas com o nome vazio | |
| 427 | + if(this.opcoes.indicecoluna != ""){ | |
| 428 | + //if(this.opcoes.indicecoluna.indexOf(this.data.metadata[i].colIndex) != -1) | |
| 429 | + if(this.opcoes.indicecoluna.indexOf(this.data.metadata[i].colIndex) != -1 || column[i].search("GeoCod") > 0){ | |
| 430 | + metadata.push(this.data.metadata[i]); | |
| 431 | + } | |
| 432 | + } | |
| 433 | + else{ | |
| 434 | + metadata.push(this.data.metadata[i]); | |
| 435 | + } | |
| 436 | + //pega a coluna GeoCod | |
| 437 | + if(column[i].search("GeoCod") > 0){ | |
| 438 | + //verifica se tem mais de um GeoCod | |
| 439 | + if(columnGeoCod != ""){ | |
| 440 | + alert("Existem mais de uma coluna GeoCod!"); | |
| 441 | + this.fecha(); | |
| 442 | + $.fancybox.close(); | |
| 443 | + return; | |
| 444 | + } | |
| 445 | + columnGeoCod = column[i]; | |
| 446 | + indiceColumnGeoCod = i; | |
| 447 | + } | |
| 448 | + } | |
| 449 | + if(columnGeoCod === ""){ | |
| 450 | + alert("Coluna GeoCod nao existe!"); | |
| 451 | + this.fecha(); | |
| 452 | + $.fancybox.close(); | |
| 453 | + //this.nav.find('input').hide(); | |
| 454 | + return; | |
| 455 | + } | |
| 456 | + series[0]=column; | |
| 457 | + var dados = []; | |
| 458 | + if(indicecoluna != ""){ | |
| 459 | + if (this.data.resultset.length > 0 ) { | |
| 460 | + $.each(this.data.resultset, function(key, value) { | |
| 461 | + dados.push([value[indiceColumnGeoCod],value[indicecoluna]]); | |
| 462 | + }); | |
| 463 | + } | |
| 464 | + } | |
| 465 | + else{ | |
| 466 | + if (this.data.resultset.length > 0 ) { | |
| 467 | + $.each(this.data.resultset, function(key, value) { | |
| 468 | + var aux=value[0]+''; | |
| 469 | + aux = aux.split(" \/ "); | |
| 470 | + aux = aux[indiceColumnGeoCod]; | |
| 471 | + value[0]=aux; | |
| 472 | + dados.push(value); | |
| 473 | + }); | |
| 474 | + } | |
| 475 | + } | |
| 476 | + //preenche os dados do formulario | |
| 477 | + this.opcoes.locaplic = parametroUrl("locaplic"); | |
| 478 | + this.opcoes.mapext = parametroUrl("mapext"); | |
| 479 | + document.getElementById("formi3GeoMapOpcoes").value = JSON.stringify(this.opcoes); | |
| 480 | + document.getElementById("formi3GeoMapdados").value = JSON.stringify(dados); | |
| 481 | + document.getElementById("formi3GeoMapmetadados").value = JSON.stringify(metadata); | |
| 482 | + document.getElementById("iframei3GeoMap").style.height = parseInt($(this.workspace.el).find('.workspace_results')[0].style.height) - 50 +"px"; | |
| 483 | + document.getElementById("formi3GeoMap").submit(); | |
| 484 | + document.getElementById("iframei3GeoMap").style.display = "block"; | |
| 485 | + }, | |
| 486 | + receive_data: function(args) { | |
| 487 | + if ($(this.workspace.toolbar.el).find('.i3GeoMap').hasClass('on')) { | |
| 488 | + this.fecha(); | |
| 489 | + this.fecharMapa(); | |
| 490 | + return false; | |
| 491 | + } | |
| 492 | + return _.delay(this.process_data, 0, args); | |
| 493 | + }, | |
| 494 | + process_data: function(args) { | |
| 495 | + this.data = {}; | |
| 496 | + this.data.resultset = []; | |
| 497 | + this.data.metadata = []; | |
| 498 | + this.data.height = 0; | |
| 499 | + this.data.width = 0; | |
| 500 | + if (! $(this.workspace.toolbar.el).find('.i3GeoMap').hasClass('on')) { | |
| 501 | + this.fecha(); | |
| 502 | + this.fecharMapa(); | |
| 503 | + return; | |
| 504 | + } | |
| 505 | + var cellset = args.data.cellset; | |
| 506 | + var nome = ""; | |
| 507 | + var colunaGeocod = ""; | |
| 508 | + var colunaGeocodIndice = ""; | |
| 509 | + if (cellset && cellset.length > 0) { | |
| 510 | + var lowest_level = 0; | |
| 511 | + var data_start = 0; | |
| 512 | + for (var row = 0; data_start == 0 && row < cellset.length; row++) { | |
| 513 | + this.data.metadata = []; | |
| 514 | + for (var field = 0; field < cellset[row].length; field++) { | |
| 515 | + var firstHeader = []; | |
| 516 | + | |
| 517 | + while (cellset[row][field].type == "COLUMN_HEADER" && cellset[row][field].value == "null") { | |
| 518 | + row++; | |
| 519 | + } | |
| 520 | + nome = ""; | |
| 521 | + //colunaGeocod = ""; | |
| 522 | + //colunaGeocodIndice = ""; | |
| 523 | + if (cellset[row][field].type == "ROW_HEADER_HEADER") { | |
| 524 | + while(cellset[row][field].type == "ROW_HEADER_HEADER") { | |
| 525 | + nome = cellset[row][field].value; | |
| 526 | + firstHeader.push(nome); | |
| 527 | + if(nome.search("GeoCod") > 0){ | |
| 528 | + colunaGeocod = nome; | |
| 529 | + colunaGeocodIndice = field; | |
| 530 | + } | |
| 531 | + field++; | |
| 532 | + } | |
| 533 | + tipo = "linha"; | |
| 534 | + identificador = cellset[row][field-1].properties.level; | |
| 535 | + if(firstHeader.join('/').search("GeoCod") > 0){ | |
| 536 | + this.data.metadata.push({ | |
| 537 | + colIndex: 0, | |
| 538 | + colType: "String", | |
| 539 | + colName: colunaGeocod, | |
| 540 | + tipo: tipo, | |
| 541 | + identificador: identificador | |
| 542 | + }); | |
| 543 | + lowest_level = field - 1; | |
| 544 | + } | |
| 545 | + | |
| 546 | + } | |
| 547 | + if (cellset[row][field].type == "COLUMN_HEADER" && cellset[row][field].value != "null") { | |
| 548 | + var lowest_col_header = 0; | |
| 549 | + var colheader = []; | |
| 550 | + while(lowest_col_header <= row) { | |
| 551 | + colheader.push(cellset[lowest_col_header][field].value); | |
| 552 | + lowest_col_header++; | |
| 553 | + } | |
| 554 | + | |
| 555 | + tipo = "coluna"; | |
| 556 | + identificador = cellset[row][lowest_col_header].properties.uniquename; | |
| 557 | + | |
| 558 | + this.data.metadata.push({ | |
| 559 | + colIndex: field - lowest_level + 1, | |
| 560 | + colType: "Numeric", | |
| 561 | + colName: colheader.join('/'), | |
| 562 | + tipo: tipo, | |
| 563 | + identificador: identificador | |
| 564 | + }); | |
| 565 | + data_start = row+1; | |
| 566 | + } | |
| 567 | + } | |
| 568 | + } | |
| 569 | + | |
| 570 | + for (var row = data_start; row < cellset.length; row++) { | |
| 571 | + if (cellset[row][0].value !== "") { | |
| 572 | + var record = []; | |
| 573 | + this.data.width = cellset[row].length - lowest_level + 1; | |
| 574 | + var label = ""; | |
| 575 | + if(cellset[row][colunaGeocodIndice]){ | |
| 576 | + label = cellset[row][colunaGeocodIndice].value; | |
| 577 | + } | |
| 578 | + /* | |
| 579 | + if(label in labelsSet) { | |
| 580 | + labelsSet[label] = labelsSet[label]+1; | |
| 581 | + label = label + ' [' + (labelsSet[label] + 1) + ']'; | |
| 582 | + } else { | |
| 583 | + labelsSet[label] = 0; | |
| 584 | + } | |
| 585 | + */ | |
| 586 | + record.push(label); | |
| 587 | + | |
| 588 | + for (var col = lowest_level + 1; col < cellset[row].length; col++) { | |
| 589 | + var cell = cellset[row][col]; | |
| 590 | + var value = cell.value || 0; | |
| 591 | + // check if the resultset contains the raw value, if not try to parse the given value | |
| 592 | + var raw = cell.properties.raw; | |
| 593 | + if (raw && raw !== "null") { | |
| 594 | + value = parseFloat(raw); | |
| 595 | + } else if (typeof(cell.value) !== "number" && parseFloat(cell.value.replace(/[^a-zA-Z 0-9.]+/g,''))) { | |
| 596 | + value = parseFloat(cell.value.replace(/[^a-zA-Z 0-9.]+/g,'')); | |
| 597 | + } | |
| 598 | + record.push(value); | |
| 599 | + } | |
| 600 | + this.data.resultset.push(record); | |
| 601 | + } | |
| 602 | + } | |
| 603 | + //makeSureUniqueLabels(this.data.resultset); | |
| 604 | + this.hasProcessed = true; | |
| 605 | + this.data.height = this.data.resultset.length; | |
| 606 | + //this.cccOptions = this.getQuickOptions(this.cccOptions); | |
| 607 | + //this.render(); | |
| 608 | + } else { | |
| 609 | + $(this.el).find('.canvas_wrapper').text("No results").show(); | |
| 610 | + this.workspace.processing.hide(); | |
| 611 | + this.workspace.adjust(); | |
| 612 | + } | |
| 613 | + } | |
| 614 | +}); | |
| 615 | +function hex2rgb(hex,tipo) { | |
| 616 | + if(!tipo){ | |
| 617 | + tipo = "array"; | |
| 618 | + } | |
| 619 | + if (hex[0]=="#") hex=hex.substr(1); | |
| 620 | + if (hex.length==3) { | |
| 621 | + var temp=hex; hex=''; | |
| 622 | + temp = /^([a-f0-9])([a-f0-9])([a-f0-9])$/i.exec(temp).slice(1); | |
| 623 | + for (var i=0;i<3;i++) hex+=temp[i]+temp[i]; | |
| 624 | + } | |
| 625 | + var triplets = /^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i.exec(hex).slice(1); | |
| 626 | + if(tipo == "array"){ | |
| 627 | + return { | |
| 628 | + red: parseInt(triplets[0],16), | |
| 629 | + green: parseInt(triplets[1],16), | |
| 630 | + blue: parseInt(triplets[2],16) | |
| 631 | + }; | |
| 632 | + } | |
| 633 | + else{ | |
| 634 | + return parseInt(triplets[0],16)+ " " + parseInt(triplets[1],16) + " " + parseInt(triplets[2],16); | |
| 635 | + } | |
| 636 | +} | |
| 637 | +function coresHex2Rgb(lista){ | |
| 638 | + var n = lista.length, | |
| 639 | + i =0, | |
| 640 | + f = []; | |
| 641 | + for(i=0;i<n;i++){ | |
| 642 | + f.push(hex2rgb(lista[i]," ")); | |
| 643 | + } | |
| 644 | + return f; | |
| 645 | +} | |
| 646 | +function loadCSS(file){ | |
| 647 | + var headID = document.getElementsByTagName("head")[0]; | |
| 648 | + var cssNode = document.createElement('link'); | |
| 649 | + cssNode.type = 'text/css'; | |
| 650 | + cssNode.rel = 'stylesheet'; | |
| 651 | + cssNode.href = file; | |
| 652 | + cssNode.media = 'screen'; | |
| 653 | + headID.appendChild(cssNode); | |
| 654 | +} | |
| 655 | + | |
| 656 | +function loadJS(file){ | |
| 657 | + var headID = document.getElementsByTagName("head")[0]; | |
| 658 | + var newScript = document.createElement('script'); | |
| 659 | + newScript.type = 'text/javascript'; | |
| 660 | + newScript.src = file; | |
| 661 | + headID.appendChild(newScript); | |
| 662 | +} | |
| 663 | + | |
| 664 | +function messageUser(msg){ | |
| 665 | + $("#message").html(msg).show('slow'); | |
| 666 | + setTimeout(function(){ jQuery("#message").hide('slow'); }, 2000); | |
| 667 | +} | |
| 668 | + | |
| 669 | +function parametroUrl(parametro){ | |
| 670 | + var params = window.location.search.replace("?","").split("&"), | |
| 671 | + n = params.length, | |
| 672 | + valor = "", | |
| 673 | + i,param; | |
| 674 | + for(i=0;i<n;i++){ | |
| 675 | + param = params[i].split("="); | |
| 676 | + if(param[0] == parametro){ | |
| 677 | + valor = param[1]; | |
| 678 | + } | |
| 679 | + } | |
| 680 | + return valor; | |
| 681 | +} | |
| 682 | +/** | |
| 683 | + * Start Plugin | |
| 684 | + */ | |
| 685 | +Saiku.events.bind('session:new', function(session) { | |
| 686 | + function new_workspace(args) { | |
| 687 | + // Add stats element | |
| 688 | + if (typeof args.workspace.i3GeoMap == "undefined") { | |
| 689 | + args.workspace.i3GeoMap = new i3GeoMap({ workspace: args.workspace }); | |
| 690 | + } | |
| 691 | + } | |
| 692 | + | |
| 693 | + function clear_workspace(args) { | |
| 694 | + if (typeof args.workspace.i3GeoMap != "undefined") { | |
| 695 | + $(args.workspace.i3GeoMap.nav).hide(); | |
| 696 | + $(args.workspace.i3GeoMap.el).parents().find('.workspace_results table').show(); | |
| 697 | + $(args.workspace.i3GeoMap.el).hide(); | |
| 698 | + } | |
| 699 | + } | |
| 700 | + | |
| 701 | + | |
| 702 | + // Attach stats to existing tabs | |
| 703 | + for(var i = 0; i < Saiku.tabs._tabs.length; i++) { | |
| 704 | + var tab = Saiku.tabs._tabs[i]; | |
| 705 | + new_workspace({ | |
| 706 | + workspace: tab.content | |
| 707 | + }); | |
| 708 | + }; | |
| 709 | + | |
| 710 | + // Attach stats to future tabs | |
| 711 | + Saiku.session.bind("workspace:new", new_workspace); | |
| 712 | + Saiku.session.bind("workspace:clear", clear_workspace); | |
| 713 | +}); | ... | ... |
ferramentas/saiku/saiku-server/tomcat/webapps/ROOT/js/saiku/views/QueryToolbar.js
0 → 100755
| ... | ... | @@ -0,0 +1,228 @@ |
| 1 | +/* | |
| 2 | + * Copyright 2012 OSBI Ltd | |
| 3 | + * | |
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
| 5 | + * you may not use this file except in compliance with the License. | |
| 6 | + * You may obtain a copy of the License at | |
| 7 | + * | |
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
| 9 | + * | |
| 10 | + * Unless required by applicable law or agreed to in writing, software | |
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 13 | + * See the License for the specific language governing permissions and | |
| 14 | + * limitations under the License. | |
| 15 | + */ | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * The query toolbar, and associated actions | |
| 19 | + */ | |
| 20 | +var QueryToolbar = Backbone.View.extend({ | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + events: { | |
| 25 | + 'click .options a.button': 'call', | |
| 26 | + 'click .renderer a.button' : 'switch_render_button' | |
| 27 | + }, | |
| 28 | + | |
| 29 | + chart: {}, | |
| 30 | + | |
| 31 | + render_mode: "table", | |
| 32 | + spark_mode: null, | |
| 33 | + | |
| 34 | + | |
| 35 | + initialize: function(args) { | |
| 36 | + // Keep track of parent workspace | |
| 37 | + this.workspace = args.workspace; | |
| 38 | + | |
| 39 | + // Maintain `this` in callbacks | |
| 40 | + _.bindAll(this, "call","activate_buttons", "spark_bar", "spark_line", "render_row_viz", "run_row_viz", "switch_render_button"); | |
| 41 | + | |
| 42 | + this.render_mode = "table"; | |
| 43 | + this.spark_mode = null; | |
| 44 | + | |
| 45 | + // Activate buttons when a new query is created or run | |
| 46 | + this.workspace.bind('query:new', this.activate_buttons); | |
| 47 | + this.workspace.bind('query:result', this.activate_buttons); | |
| 48 | + this.workspace.bind('table:rendered', this.run_row_viz); | |
| 49 | + | |
| 50 | + }, | |
| 51 | + | |
| 52 | + activate_buttons: function(args) { | |
| 53 | + if (typeof args != "undefined" && args != null ) { | |
| 54 | + $(this.el).find('a').removeClass('disabled_toolbar'); | |
| 55 | + if (!args.data) { | |
| 56 | + $(this.el).find('a.export_button, a.stats').addClass('disabled_toolbar'); | |
| 57 | + } | |
| 58 | + if (isIE) { | |
| 59 | + $(this.el).find('a.export_button').addClass('disabled_toolbar'); | |
| 60 | + } | |
| 61 | + } | |
| 62 | + | |
| 63 | + }, | |
| 64 | + | |
| 65 | + template: function() { | |
| 66 | + var template = $("#template-query-toolbar").html() || ""; | |
| 67 | + return _.template(template)(); | |
| 68 | + }, | |
| 69 | + | |
| 70 | + render: function() { | |
| 71 | + $(this.el).html(this.template()); | |
| 72 | + | |
| 73 | + $(this.el).find('render_table').addClass('on'); | |
| 74 | + $(this.el).find('ul.table').show(); | |
| 75 | + | |
| 76 | + return this; | |
| 77 | + }, | |
| 78 | + | |
| 79 | + switch_render_button: function(event) { | |
| 80 | + $target = $(event.target); | |
| 81 | + event.preventDefault(); | |
| 82 | + if ($(event.target).hasClass('disabled_toolbar')) { | |
| 83 | + return false; | |
| 84 | + } | |
| 85 | + //i3geomap | |
| 86 | + $(this.workspace.toolbar.el).find('.i3GeoMap').removeClass('on'); | |
| 87 | + $target.parent().siblings().find('.on').removeClass('on'); | |
| 88 | + if ($target.hasClass('render_chart')) { | |
| 89 | + this.switch_render('chart'); | |
| 90 | + this.workspace.query.setProperty('saiku.ui.render.mode', 'chart'); | |
| 91 | + var c = $(this.el).find('ul.chart li a.on:first').size() > 0 ? | |
| 92 | + $(this.el).find('ul.chart li a.on:first').attr('href').replace('#', '') | |
| 93 | + : null; | |
| 94 | + if (c != null) { | |
| 95 | + this.workspace.query.setProperty('saiku.ui.render.type', c); | |
| 96 | + } | |
| 97 | + } else { | |
| 98 | + this.switch_render('table'); | |
| 99 | + this.workspace.query.setProperty('saiku.ui.render.mode', 'table'); | |
| 100 | + this.workspace.query.setProperty('saiku.ui.render.type', this.spark_mode); | |
| 101 | + | |
| 102 | + } | |
| 103 | + | |
| 104 | + | |
| 105 | + }, | |
| 106 | + switch_render: function(render_type) { | |
| 107 | + render_type = (typeof render_type != "undefined" ? render_type.toLowerCase() : "table"); | |
| 108 | + $(this.el).find('ul.renderer a.on').removeClass('on'); | |
| 109 | + $(this.el).find('ul.renderer a.render_' + render_type).addClass('on'); | |
| 110 | + if ("chart" == render_type) { | |
| 111 | + $(this.el).find('ul.chart').show(); | |
| 112 | + $(this.el).find('ul.table').hide(); | |
| 113 | + this.render_mode = "chart"; | |
| 114 | + $(this.workspace.el).find('.workspace_results').children().hide(); | |
| 115 | + $(this.workspace.chart.el).children().hide(); | |
| 116 | + this.workspace.chart.show(); | |
| 117 | + } else { | |
| 118 | + $(this.el).find('ul.chart').hide(); | |
| 119 | + $(this.el).find('ul.table').show(); | |
| 120 | + $(this.el).find('ul.table .stats').removeClass('on'); | |
| 121 | + $(this.workspace.el).find('.workspace_results').children().hide(); | |
| 122 | + $(this.workspace.el).find('.workspace_results table').show(); | |
| 123 | + $(this.workspace.chart.el).hide().children().hide(); | |
| 124 | + this.render_mode = "table"; | |
| 125 | + var hasRun = this.workspace.query.result.hasRun(); | |
| 126 | + if (hasRun) { | |
| 127 | + this.workspace.table.render({ data: this.workspace.query.result.lastresult() }); | |
| 128 | + } | |
| 129 | + | |
| 130 | + } | |
| 131 | + return false; | |
| 132 | + }, | |
| 133 | + | |
| 134 | + call: function(event) { | |
| 135 | + event.preventDefault(); | |
| 136 | + $target = $(event.target).hasClass('button') ? $(event.target) : $(event.target).parent(); | |
| 137 | + if (! $target.hasClass('disabled_toolbar')) { | |
| 138 | + // Determine callback | |
| 139 | + var callback = $target.attr('href').replace('#', ''); | |
| 140 | + | |
| 141 | + // Attempt to call callback | |
| 142 | + if (this.render_mode == "table" && this[callback]) { | |
| 143 | + this[callback](event); | |
| 144 | + } else if (this.render_mode == "chart" && this.workspace.chart[callback]) { | |
| 145 | + this.workspace.chart.button(event); | |
| 146 | + this.workspace.chart[callback](event); | |
| 147 | + } | |
| 148 | + } | |
| 149 | + return false; | |
| 150 | + }, | |
| 151 | + | |
| 152 | + spark_bar: function() { | |
| 153 | + $(this.el).find('ul.table .spark_bar').toggleClass('on'); | |
| 154 | + $(this.el).find('ul.table .spark_line').removeClass('on'); | |
| 155 | + | |
| 156 | + $(this.workspace.table.el).find('td.spark').remove(); | |
| 157 | + if ($(this.el).find('ul.table .spark_bar').hasClass('on')) { | |
| 158 | + this.spark_mode = "spark_bar"; | |
| 159 | + this.workspace.query.setProperty('saiku.ui.render.type', 'spark_bar'); | |
| 160 | + _.delay(this.render_row_viz, 10, "spark_bar"); | |
| 161 | + } else { | |
| 162 | + this.spark_mode = null; | |
| 163 | + } | |
| 164 | + }, | |
| 165 | + | |
| 166 | + spark_line: function() { | |
| 167 | + $(this.el).find('ul.table .spark_line').toggleClass('on'); | |
| 168 | + $(this.el).find('ul.table .spark_bar').removeClass('on'); | |
| 169 | + | |
| 170 | + $(this.workspace.table.el).find('td.spark').remove(); | |
| 171 | + if ($(this.el).find('ul.table .spark_line').hasClass('on')) { | |
| 172 | + this.spark_mode = "spark_line"; | |
| 173 | + this.workspace.query.setProperty('saiku.ui.render.type', 'spark_line'); | |
| 174 | + _.delay(this.render_row_viz, 10, "spark_line"); | |
| 175 | + } else { | |
| 176 | + this.spark_mode = null; | |
| 177 | + } | |
| 178 | + }, | |
| 179 | + | |
| 180 | + run_row_viz: function(args) { | |
| 181 | + if (this.render_mode == "table" && this.spark_mode != null) { | |
| 182 | + this.render_row_viz(this.spark_mode); | |
| 183 | + } | |
| 184 | + | |
| 185 | + }, | |
| 186 | + | |
| 187 | + render_row_viz: function(type) { | |
| 188 | + $(this.workspace.table.el).find('tr').each(function(index, element) { | |
| 189 | + var rowData = []; | |
| 190 | + $(element).find('td.data div').each(function(i,data) { | |
| 191 | + var val = $(data).attr('alt'); | |
| 192 | + val = (typeof val != "undefined" && val != "" && val != null && val != "undefined") ? parseFloat(val) : 0; | |
| 193 | + rowData.push(val); | |
| 194 | + }); | |
| 195 | + | |
| 196 | + $("<td class='data spark'> <div id='chart" + index + "'></div></td>").appendTo($(element)); | |
| 197 | + | |
| 198 | + var width = rowData.length * 9; | |
| 199 | + | |
| 200 | + if (rowData.length > 0) { | |
| 201 | + var vis = new pv.Panel() | |
| 202 | + .canvas('chart' + index) | |
| 203 | + .height(12) | |
| 204 | + .width(width) | |
| 205 | + .margin(0); | |
| 206 | + | |
| 207 | + if (type == "spark_bar") { | |
| 208 | + vis.add(pv.Bar) | |
| 209 | + .data(rowData) | |
| 210 | + .left(pv.Scale.linear(0, rowData.length).range(0, width).by(pv.index)) | |
| 211 | + .height(pv.Scale.linear(0,_.max(rowData)).range(0, 12)) | |
| 212 | + .width(6) | |
| 213 | + .bottom(0); | |
| 214 | + } else if (type == "spark_line") { | |
| 215 | + width = width / 2; | |
| 216 | + vis.width(width); | |
| 217 | + vis.add(pv.Line) | |
| 218 | + .data(rowData) | |
| 219 | + .left(pv.Scale.linear(0, rowData.length - 1).range(0, width).by(pv.index)) | |
| 220 | + .bottom(pv.Scale.linear(rowData).range(0, 12)) | |
| 221 | + .strokeStyle("#000") | |
| 222 | + .lineWidth(1); | |
| 223 | + } | |
| 224 | + vis.render(); | |
| 225 | + } | |
| 226 | + }); | |
| 227 | + } | |
| 228 | +}); | ... | ... |
mashups/openlayers.js
| 1 | -$i = function(id) | |
| 2 | -{return document.getElementById(id);}; | |
| 3 | 1 | //seta as variáveis navn e navm |
| 4 | 2 | navn = false; |
| 5 | 3 | navm = false; |
| 4 | +$i = function(id) | |
| 5 | +{return document.getElementById(id);}; | |
| 6 | 6 | app = navigator.appName.substring(0,1); |
| 7 | 7 | if (app==='N'){navn=true;}else{navm=true;} |
| 8 | 8 | |
| ... | ... | @@ -47,7 +47,7 @@ i3GEO.editorOL = { |
| 47 | 47 | "Base cartográfica", |
| 48 | 48 | "http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/baseraster.map&", |
| 49 | 49 | {layers:'baseraster',SRS:'EPSG:4618',FORMAT:'image/png'}, |
| 50 | - {singleTile:true} | |
| 50 | + {singleTile:false} | |
| 51 | 51 | ), |
| 52 | 52 | ol_wms: new OpenLayers.Layer.WMS.Untiled( |
| 53 | 53 | "OpenLayers WMS", |
| ... | ... | @@ -180,7 +180,7 @@ i3GEO.editorOL = { |
| 180 | 180 | try{ |
| 181 | 181 | eval("i3GEO.editorOL."+fundo[i]+".transitionEffect = 'resize';"); |
| 182 | 182 | eval("i3GEO.editorOL."+fundo[i]+".setVisibility(false);"); |
| 183 | - eval("i3GEO.editorOL."+fundo[i]+".singleTile = single;"); | |
| 183 | + eval("i3GEO.editorOL."+fundo[i]+".singleTile = false;"); | |
| 184 | 184 | eval("alayers.push(i3GEO.editorOL."+fundo[i]+");"); |
| 185 | 185 | } |
| 186 | 186 | catch(e){ |
| ... | ... | @@ -559,9 +559,11 @@ i3GEO.editorOL = { |
| 559 | 559 | ins = "",i; |
| 560 | 560 | for(i=0;i<nlayers;i++){ |
| 561 | 561 | try{ |
| 562 | - var url = layers[i].getFullRequestString({"request":"getlegendgraphic"}); | |
| 563 | - url = url.replace("LAYERS","LAYER"); | |
| 564 | - ins += "<img src='"+url+"' /><br>"; | |
| 562 | + if(layers[i].isBaseLayer === false){ | |
| 563 | + var url = layers[i].getFullRequestString({"request":"getlegendgraphic"}); | |
| 564 | + url = url.replace("LAYERS","LAYER"); | |
| 565 | + ins += layers[i].name+"<br><img src='"+url+"' /><br>"; | |
| 566 | + } | |
| 565 | 567 | } |
| 566 | 568 | catch(e){} |
| 567 | 569 | } | ... | ... |
mashups/openlayers.php
| ... | ... | @@ -222,7 +222,12 @@ if($temas != ""){ |
| 222 | 222 | if($l->status == MS_DEFAULT){ |
| 223 | 223 | $visivel = "true"; |
| 224 | 224 | } |
| 225 | - $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&DESLIGACACHE='.$DESLIGACACHE.'&",{layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{singleTile:true,visibility:'.$visivel.',isBaseLayer:'.$ebase.'})'; | |
| 225 | + if($tituloLayer != ""){ | |
| 226 | + $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&DESLIGACACHE='.$DESLIGACACHE.'&",{layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{singleTile:true,visibility:'.$visivel.',isBaseLayer:'.$ebase.'})'; | |
| 227 | + } | |
| 228 | + else{ | |
| 229 | + $objOpenLayers[] = 'new OpenLayers.Layer.WMS( "'.$tituloLayer.'", "../ogc.php?tema='.$tema.'&DESLIGACACHE='.$DESLIGACACHE.'&",{layers:"'.$nomeLayer.'",transparent: "true", format: "image/png"},{displayInLayerSwitcher:false,singleTile:true,visibility:'.$visivel.',isBaseLayer:'.$ebase.'})'; | |
| 230 | + } | |
| 226 | 231 | } |
| 227 | 232 | } |
| 228 | 233 | //var_dump($objOpenLayers);exit; | ... | ... |
mashups/openlayers_compacto.js
| ... | ... | @@ -3062,7 +3062,7 @@ ol_mma: new OpenLayers.Layer.WMS( |
| 3062 | 3062 | "Base cartográfica", |
| 3063 | 3063 | "http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/baseraster.map&", |
| 3064 | 3064 | {layers:'baseraster',SRS:'EPSG:4618',FORMAT:'image/png'}, |
| 3065 | -{singleTile:true} | |
| 3065 | +{singleTile:false} | |
| 3066 | 3066 | ), |
| 3067 | 3067 | ol_wms: new OpenLayers.Layer.WMS.Untiled( |
| 3068 | 3068 | "OpenLayers WMS", |
| ... | ... | @@ -3195,7 +3195,7 @@ if(fundo[i] != ""){ |
| 3195 | 3195 | try{ |
| 3196 | 3196 | eval("i3GEO.editorOL."+fundo[i]+".transitionEffect = 'resize';"); |
| 3197 | 3197 | eval("i3GEO.editorOL."+fundo[i]+".setVisibility(false);"); |
| 3198 | -eval("i3GEO.editorOL."+fundo[i]+".singleTile = single;"); | |
| 3198 | +eval("i3GEO.editorOL."+fundo[i]+".singleTile = false;"); | |
| 3199 | 3199 | eval("alayers.push(i3GEO.editorOL."+fundo[i]+");"); |
| 3200 | 3200 | } |
| 3201 | 3201 | catch(e){ |
| ... | ... | @@ -3571,9 +3571,11 @@ nlayers = layers.length, |
| 3571 | 3571 | ins = "",i; |
| 3572 | 3572 | for(i=0;i<nlayers;i++){ |
| 3573 | 3573 | try{ |
| 3574 | +if(layers[i].isBaseLayer === false){ | |
| 3574 | 3575 | var url = layers[i].getFullRequestString({"request":"getlegendgraphic"}); |
| 3575 | 3576 | url = url.replace("LAYERS","LAYER"); |
| 3576 | -ins += "<img src='"+url+"' /><br>"; | |
| 3577 | +ins += layers[i].name+"<br><img src='"+url+"' /><br>"; | |
| 3578 | +} | |
| 3577 | 3579 | } |
| 3578 | 3580 | catch(e){} |
| 3579 | 3581 | } | ... | ... |
mashups/openlayers_compacto.js.php
| ... | ... | @@ -3062,7 +3062,7 @@ ol_mma: new OpenLayers.Layer.WMS( |
| 3062 | 3062 | "Base cartográfica", |
| 3063 | 3063 | "http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/baseraster.map&", |
| 3064 | 3064 | {layers:'baseraster',SRS:'EPSG:4618',FORMAT:'image/png'}, |
| 3065 | -{singleTile:true} | |
| 3065 | +{singleTile:false} | |
| 3066 | 3066 | ), |
| 3067 | 3067 | ol_wms: new OpenLayers.Layer.WMS.Untiled( |
| 3068 | 3068 | "OpenLayers WMS", |
| ... | ... | @@ -3195,7 +3195,7 @@ if(fundo[i] != ""){ |
| 3195 | 3195 | try{ |
| 3196 | 3196 | eval("i3GEO.editorOL."+fundo[i]+".transitionEffect = 'resize';"); |
| 3197 | 3197 | eval("i3GEO.editorOL."+fundo[i]+".setVisibility(false);"); |
| 3198 | -eval("i3GEO.editorOL."+fundo[i]+".singleTile = single;"); | |
| 3198 | +eval("i3GEO.editorOL."+fundo[i]+".singleTile = false;"); | |
| 3199 | 3199 | eval("alayers.push(i3GEO.editorOL."+fundo[i]+");"); |
| 3200 | 3200 | } |
| 3201 | 3201 | catch(e){ |
| ... | ... | @@ -3571,9 +3571,11 @@ nlayers = layers.length, |
| 3571 | 3571 | ins = "",i; |
| 3572 | 3572 | for(i=0;i<nlayers;i++){ |
| 3573 | 3573 | try{ |
| 3574 | +if(layers[i].isBaseLayer === false){ | |
| 3574 | 3575 | var url = layers[i].getFullRequestString({"request":"getlegendgraphic"}); |
| 3575 | 3576 | url = url.replace("LAYERS","LAYER"); |
| 3576 | -ins += "<img src='"+url+"' /><br>"; | |
| 3577 | +ins += layers[i].name+"<br><img src='"+url+"' /><br>"; | |
| 3578 | +} | |
| 3577 | 3579 | } |
| 3578 | 3580 | catch(e){} |
| 3579 | 3581 | } | ... | ... |