mirror of
https://github.com/apache/superset.git
synced 2024-09-17 19:19:38 -04:00
Merge pull request #81 from mistercrunch/layout
Slightly better layout for explore page
This commit is contained in:
commit
5f6a7423b8
@ -339,6 +339,7 @@ class FormFactory(object):
|
|||||||
slice_name = HiddenField()
|
slice_name = HiddenField()
|
||||||
previous_viz_type = HiddenField(default=viz.viz_type)
|
previous_viz_type = HiddenField(default=viz.viz_type)
|
||||||
collapsed_fieldsets = HiddenField()
|
collapsed_fieldsets = HiddenField()
|
||||||
|
viz_type = self.field_dict.get('viz_type')
|
||||||
|
|
||||||
filter_cols = datasource.filterable_column_names or ['']
|
filter_cols = datasource.filterable_column_names or ['']
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
@ -361,6 +362,7 @@ class FormFactory(object):
|
|||||||
if s:
|
if s:
|
||||||
setattr(QueryForm, s, px_form_fields[s])
|
setattr(QueryForm, s, px_form_fields[s])
|
||||||
|
|
||||||
|
|
||||||
# datasource type specific form elements
|
# datasource type specific form elements
|
||||||
if datasource.__class__.__name__ == 'SqlaTable':
|
if datasource.__class__.__name__ == 'SqlaTable':
|
||||||
QueryForm.fieldsets += ({
|
QueryForm.fieldsets += ({
|
||||||
|
22
panoramix/migrations/versions/55179c7f25c7_sqla_descr.py
Normal file
22
panoramix/migrations/versions/55179c7f25c7_sqla_descr.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
"""sqla_descr
|
||||||
|
|
||||||
|
Revision ID: 55179c7f25c7
|
||||||
|
Revises: 315b3f4da9b0
|
||||||
|
Create Date: 2015-12-13 08:38:43.704145
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '55179c7f25c7'
|
||||||
|
down_revision = '315b3f4da9b0'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column('tables', sa.Column('description', sa.Text(), nullable=True))
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column('tables', 'description')
|
@ -225,6 +225,7 @@ class SqlaTable(Model, Queryable, AuditMixinNullable):
|
|||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
table_name = Column(String(250), unique=True)
|
table_name = Column(String(250), unique=True)
|
||||||
main_dttm_col = Column(String(250))
|
main_dttm_col = Column(String(250))
|
||||||
|
description = Column(Text)
|
||||||
default_endpoint = Column(Text)
|
default_endpoint = Column(Text)
|
||||||
database_id = Column(Integer, ForeignKey('dbs.id'), nullable=False)
|
database_id = Column(Integer, ForeignKey('dbs.id'), nullable=False)
|
||||||
database = relationship(
|
database = relationship(
|
||||||
@ -241,6 +242,9 @@ class SqlaTable(Model, Queryable, AuditMixinNullable):
|
|||||||
return (
|
return (
|
||||||
"[{self.database}].[{self.table_name}]"
|
"[{self.database}].[{self.table_name}]"
|
||||||
"(id:{self.id})").format(self=self)
|
"(id:{self.id})").format(self=self)
|
||||||
|
@property
|
||||||
|
def full_name(self):
|
||||||
|
return "[{self.database}].[{self.table_name}]".format(self=self)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dttm_cols(self):
|
def dttm_cols(self):
|
||||||
@ -694,6 +698,10 @@ class Datasource(Model, AuditMixinNullable, Queryable):
|
|||||||
"[{self.cluster_name}].[{self.datasource_name}]"
|
"[{self.cluster_name}].[{self.datasource_name}]"
|
||||||
"(id:{self.id})").format(self=self)
|
"(id:{self.id})").format(self=self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def full_name(self):
|
||||||
|
return "[{self.cluster_name}].[{self.datasource_name}]".format(self=self)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.datasource_name
|
return self.datasource_name
|
||||||
|
|
||||||
|
@ -10,6 +10,19 @@ form div {
|
|||||||
.navbar-brand a {
|
.navbar-brand a {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notbtn {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.title-block {
|
||||||
|
background-color: #EEE;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
margin: 0px 10px;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
fieldset.fs-style {
|
fieldset.fs-style {
|
||||||
font-family: Verdana, Arial, sans-serif;
|
font-family: Verdana, Arial, sans-serif;
|
||||||
font-size: small;
|
font-size: small;
|
||||||
@ -18,7 +31,7 @@ fieldset.fs-style {
|
|||||||
background-color: #F4F4F4;
|
background-color: #F4F4F4;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
margin: 10px 0px;
|
margin: 0px 0px 10px 0px;
|
||||||
}
|
}
|
||||||
legend.legend-style {
|
legend.legend-style {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
|
@ -2,26 +2,44 @@
|
|||||||
{% block content_fluid %}
|
{% block content_fluid %}
|
||||||
{% set datasource = viz.datasource %}
|
{% set datasource = viz.datasource %}
|
||||||
{% set form = viz.form %}
|
{% set form = viz.form %}
|
||||||
|
|
||||||
|
{% macro panofield(fieldname)%}
|
||||||
|
<div>
|
||||||
|
{% set field = form.get_field(fieldname)%}
|
||||||
|
<div>
|
||||||
|
{{ viz.get_form_override(fieldname, 'label') or field.label }}
|
||||||
|
{% if field.description %}
|
||||||
|
<i class="fa fa-info-circle" data-toggle="tooltip" data-placement="right"
|
||||||
|
title="{{ viz.get_form_override(fieldname, 'description') or field.description }}"></i>
|
||||||
|
{% endif %}
|
||||||
|
{{ field(class_=form.field_css_classes(field.name)) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
<div class="container-fluid datasource">
|
<div class="container-fluid datasource">
|
||||||
<div class="row">
|
<form id="query" method="GET" style="display: none;">
|
||||||
<div id="form_container" class="col-md-3">
|
<div class="header">
|
||||||
<h4>
|
<a class="btn btn-primary" data-toggle="tooltip" title="Slice!">
|
||||||
{{ datasource.name }}
|
<i class="fa fa-bolt"></i>
|
||||||
|
</a>
|
||||||
|
<span class="btn btn-default notbtn">
|
||||||
|
<strong>{{ datasource.full_name }}</strong>
|
||||||
{% if datasource.description %}
|
{% if datasource.description %}
|
||||||
<i class="fa fa-info-circle" data-toggle="tooltip" data-placement="bottom" title="{{ datasource.description }}"></i>
|
<i class="fa fa-info-circle" data-toggle="tooltip" data-placement="bottom" title="{{ datasource.description }}"></i>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="btn-group pull-right" role="group" >
|
<a class="" href="/{{ datasource.baselink }}/edit/{{ datasource.id }}" data-toggle="tooltip" title="Edit datasource">
|
||||||
<a class="btn btn-default" href="/{{ datasource.baselink }}/edit/{{ datasource.id }}" data-toggle="tooltip" title="Edit datasource">
|
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
<button type="button" class="btn btn-default druidify" data-toggle="tooltip" title="Slice!">
|
</span>
|
||||||
<i class="fa fa-bolt"></i>
|
<span class="">{{ form.get_field("viz_type")(class_="select2") }}</span>
|
||||||
</button>
|
<span class="btn btn-info pull-right"
|
||||||
</div>
|
data-toggle="modal" data-target="#query_modal">query</span>
|
||||||
</h4>
|
<hr/>
|
||||||
|
</font>
|
||||||
|
<div class="row">
|
||||||
|
<div id="form_container" class="col-md-3">
|
||||||
|
|
||||||
<hr>
|
|
||||||
<form id="query" method="GET" style="display: none;">
|
|
||||||
{% for fieldset in form.fieldsets %}
|
{% for fieldset in form.fieldsets %}
|
||||||
<fieldset class="fs-style">
|
<fieldset class="fs-style">
|
||||||
{% if fieldset.label %}
|
{% if fieldset.label %}
|
||||||
@ -38,30 +56,14 @@
|
|||||||
<div class="fieldset_content">
|
<div class="fieldset_content">
|
||||||
{% for fieldname in fieldset.fields %}
|
{% for fieldname in fieldset.fields %}
|
||||||
{% if not fieldname.__iter__ %}
|
{% if not fieldname.__iter__ %}
|
||||||
<div>
|
{{ panofield(fieldname) }}
|
||||||
{% set field = form.get_field(fieldname)%}
|
|
||||||
<div>
|
|
||||||
{{ viz.get_form_override(fieldname, 'label') or field.label }}
|
|
||||||
{% if field.description %}
|
|
||||||
<i class="fa fa-info-circle" data-toggle="tooltip" data-placement="right"
|
|
||||||
title="{{ viz.get_form_override(fieldname, 'description') or field.description }}"></i>
|
|
||||||
{% endif %}
|
|
||||||
{{ field(class_=form.field_css_classes(field.name)) }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
{% for name in fieldname %}
|
{% for name in fieldname %}
|
||||||
<div class="col-xs-{{ (12 / fieldname|length) | int }}">
|
<div class="col-xs-{{ (12 / fieldname|length) | int }}">
|
||||||
{% if name %}
|
{% if name %}
|
||||||
{% set field = form.get_field(name)%}
|
{{ panofield(name) }}
|
||||||
{{ viz.form_overrides.label or field.label }}
|
|
||||||
{% if field.description %}
|
|
||||||
<i class="fa fa-info-circle" data-toggle="tooltip" data-placement="right"
|
|
||||||
title="{{ viz.get_form_override(fieldname, 'description') or field.description }}"></i>
|
|
||||||
{% endif %}
|
|
||||||
{{ field(class_=form.field_css_classes(field.name)) }}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -90,7 +92,6 @@
|
|||||||
<span class="glyphicon glyphicon-minus" aria-hidden="true"></span>
|
<span class="glyphicon glyphicon-minus" aria-hidden="true"></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<hr style="margin: 5px 0px;"/>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="filters"></div>
|
<div id="filters"></div>
|
||||||
<button type="button" id="plus" class="btn btn-sm" aria-label="Add a filter">
|
<button type="button" id="plus" class="btn btn-sm" aria-label="Add a filter">
|
||||||
@ -112,7 +113,6 @@
|
|||||||
<i class="fa fa-plus-circle"></i>
|
<i class="fa fa-plus-circle"></i>
|
||||||
Save as
|
Save as
|
||||||
</button>
|
</button>
|
||||||
<hr style="margin-bottom: 0px;">
|
|
||||||
<img src="{{ url_for("static", filename="img/tux_panoramix.png") }}" width=250>
|
<img src="{{ url_for("static", filename="img/tux_panoramix.png") }}" width=250>
|
||||||
{{ form.slice_id() }}
|
{{ form.slice_id() }}
|
||||||
{{ form.slice_name() }}
|
{{ form.slice_name() }}
|
||||||
@ -122,20 +122,10 @@
|
|||||||
<input type="hidden" name="datasource_id" value="{{ datasource.id }}">
|
<input type="hidden" name="datasource_id" value="{{ datasource.id }}">
|
||||||
<input type="hidden" name="datasource_type" value="{{ datasource.type }}">
|
<input type="hidden" name="datasource_type" value="{{ datasource.type }}">
|
||||||
<input type="hidden" name="previous_viz_type" value="{{ viz.viz_type or "table" }}">
|
<input type="hidden" name="previous_viz_type" value="{{ viz.viz_type or "table" }}">
|
||||||
</form><br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<h4>{{ viz.verbose_name }}
|
|
||||||
{% if False %}
|
|
||||||
<span class="label label-success">
|
|
||||||
{{ "{0:0.4f}".format(results.duration.total_seconds()) }} s
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
<span class="label pull-right label-info btn"
|
|
||||||
data-toggle="modal" data-target="#query_modal">query</span>
|
|
||||||
</h4>
|
|
||||||
<hr/>
|
|
||||||
{% block messages %}
|
{% block messages %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% include 'appbuilder/flash.html' %}
|
{% include 'appbuilder/flash.html' %}
|
||||||
@ -175,6 +165,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
@ -234,6 +225,7 @@
|
|||||||
$('legend').click(function () {
|
$('legend').click(function () {
|
||||||
toggle_fieldset($(this), true);
|
toggle_fieldset($(this), true);
|
||||||
});
|
});
|
||||||
|
$("#viz_type").change(function() {$("#query").submit();});
|
||||||
collapsed_fieldsets = get_collapsed_fieldsets();
|
collapsed_fieldsets = get_collapsed_fieldsets();
|
||||||
for(var i=0; i<collapsed_fieldsets.length;i++){
|
for(var i=0; i<collapsed_fieldsets.length;i++){
|
||||||
toggle_fieldset($('legend:contains("' + collapsed_fieldsets[i] + '")'), false);
|
toggle_fieldset($('legend:contains("' + collapsed_fieldsets[i] + '")'), false);
|
||||||
|
@ -140,8 +140,8 @@ class TableView(PanoramixModelView, DeleteMixin):
|
|||||||
list_columns = ['table_link', 'database', 'changed_by', 'changed_on_']
|
list_columns = ['table_link', 'database', 'changed_by', 'changed_on_']
|
||||||
add_columns = ['table_name', 'database', 'default_endpoint', 'offset']
|
add_columns = ['table_name', 'database', 'default_endpoint', 'offset']
|
||||||
edit_columns = [
|
edit_columns = [
|
||||||
'table_name', 'database', 'main_dttm_col', 'default_endpoint',
|
'table_name', 'database', 'description', 'main_dttm_col',
|
||||||
'offset']
|
'default_endpoint', 'offset']
|
||||||
related_views = [TableColumnInlineView, SqlMetricInlineView]
|
related_views = [TableColumnInlineView, SqlMetricInlineView]
|
||||||
base_order = ('changed_on','desc')
|
base_order = ('changed_on','desc')
|
||||||
description_columns = {
|
description_columns = {
|
||||||
|
@ -28,7 +28,6 @@ class BaseViz(object):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'metrics', 'groupby',
|
'metrics', 'groupby',
|
||||||
@ -225,7 +224,6 @@ class TableViz(BaseViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'metrics', 'groupby',
|
'metrics', 'groupby',
|
||||||
@ -268,7 +266,6 @@ class PivotTableViz(BaseViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'groupby',
|
'groupby',
|
||||||
@ -324,7 +321,7 @@ class MarkupViz(BaseViz):
|
|||||||
fieldsets = (
|
fieldsets = (
|
||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': ('viz_type', 'markup_type', 'code')
|
'fields': ('markup_type', 'code')
|
||||||
},)
|
},)
|
||||||
is_timeseries = False
|
is_timeseries = False
|
||||||
|
|
||||||
@ -350,7 +347,7 @@ class WordCloudViz(BaseViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'groupby', 'metric', 'limit',
|
'groupby', 'metric', 'limit',
|
||||||
('size_from', 'size_to'),
|
('size_from', 'size_to'),
|
||||||
@ -402,7 +399,6 @@ class BubbleViz(NVD3Viz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
('series', 'entity'),
|
('series', 'entity'),
|
||||||
('x', 'y'),
|
('x', 'y'),
|
||||||
@ -477,7 +473,6 @@ class BigNumberViz(BaseViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'metric',
|
'metric',
|
||||||
@ -525,7 +520,6 @@ class NVD3TimeSeriesViz(NVD3Viz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity', ('since', 'until'),
|
'granularity', ('since', 'until'),
|
||||||
'metrics',
|
'metrics',
|
||||||
'groupby', 'limit',
|
'groupby', 'limit',
|
||||||
@ -661,7 +655,6 @@ class NVD3TimeSeriesBarViz(NVD3TimeSeriesViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity', ('since', 'until'),
|
'granularity', ('since', 'until'),
|
||||||
'metrics',
|
'metrics',
|
||||||
'groupby', 'limit',
|
'groupby', 'limit',
|
||||||
@ -678,7 +671,6 @@ class NVD3CompareTimeSeriesViz(NVD3TimeSeriesViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity', ('since', 'until'),
|
'granularity', ('since', 'until'),
|
||||||
'metrics',
|
'metrics',
|
||||||
'groupby', 'limit',
|
'groupby', 'limit',
|
||||||
@ -696,7 +688,6 @@ class NVD3TimeSeriesStackedViz(NVD3TimeSeriesViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
'granularity', ('since', 'until'),
|
'granularity', ('since', 'until'),
|
||||||
'metrics',
|
'metrics',
|
||||||
'groupby', 'limit',
|
'groupby', 'limit',
|
||||||
@ -714,7 +705,6 @@ class DistributionPieViz(NVD3Viz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'metrics', 'groupby',
|
'metrics', 'groupby',
|
||||||
'limit',
|
'limit',
|
||||||
@ -755,7 +745,7 @@ class DistributionBarViz(DistributionPieViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type', 'metrics', 'groupby',
|
'metrics', 'groupby',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'limit',
|
'limit',
|
||||||
('show_legend', None),
|
('show_legend', None),
|
||||||
@ -812,7 +802,7 @@ class SunburstViz(BaseViz):
|
|||||||
{
|
{
|
||||||
'label': None,
|
'label': None,
|
||||||
'fields': (
|
'fields': (
|
||||||
'viz_type',
|
'granularity',
|
||||||
('since', 'until'),
|
('since', 'until'),
|
||||||
'groupby',
|
'groupby',
|
||||||
'metric', 'secondary_metric',
|
'metric', 'secondary_metric',
|
||||||
|
Loading…
Reference in New Issue
Block a user