datalet-preview-controllet.html 9.03 KB
<link rel="import" href="../../bower_components/polymer/polymer.html" />

<link rel="import" href="../../bower_components/paper-material/paper-material.html" />

<link rel="import" href="../../bower_components/paper-tabs/paper-tabs.html">
<link rel="import" href="../../bower_components/paper-tabs/paper-tab.html">

<link rel="import" href="../../bower_components/neon-animation/neon-animation.html">
<link rel="import" href="../../bower_components/neon-animation/neon-animatable.html">
<link rel="import" href="../../bower_components/neon-animation/neon-animations.html">

<dom-module id="datalet-preview-controllet">

    <template>

        <style is="custom-style">
            #preview_container {
                height: 100%;
                width: 100%;
            }

            #preview_container * {
                font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif;
                font-size: 16px;
                line-height: 24px;
            }

            #preview_container #neon_container {
                height: calc(100% - 48px);
                width: 100%;
            }

            #preview_container #preview, #preview_container #info {
                position: relative;
                height: calc(100% - 32px);
                width: calc(100% - 32px);
                padding: 16px;
            }

            #preview_container #info_container {
                display: flex;
                flex-direction: row;
            }

            #preview_container #datalet_img{
                min-height: 124px;
                width: 124px;
                position:relative;
            }

            #preview_container img{
                max-width: 124px;
                position: absolute;
                top: 0;
                bottom: 0;
                margin: auto;
            }

            #preview_container #datalet_base_info {
                width: calc(100% - 124px - 16px);
                margin-left: 16px;
            }

            #preview_container #datalet_name{
                font-size: 32px;
                line-height: 48px;
                color: #2196F3;
            }

            #preview_container #datalet_description{
            }

            #preview_container #datalet_inputs{
                margin-top: 16px;
            }

            #preview_container .input_label {
                color: #2196F3;
                font-weight: 700;
            }

            #preview_container ul {
                list-style-type: disc;
            }

            #preview_container li {
                font-weight: 700;
            }

            paper-tabs {
                background: #B6B6B6;
                --paper-tabs-selection-bar-color: #2196F3;
            }

            paper-tab {
                --paper-tab-ink: #2196F3;
            }

            paper-tab.iron-selected {
                font-weight: 700;
            }

            paper-tab:hover {
                color: #2196F3;
            }

        </style>

        <paper-material id="preview_container" elevation="5">

            <paper-tabs selected="{{tabIndex}}">
                <paper-tab><span id="previewTab"></span></paper-tab>
                <paper-tab><span id="infoTab"></span></paper-tab>
            </paper-tabs>

            <neon-animated-pages id="neon_container" selected="{{_getNeonIndex(tabIndex)}}" entry-animation="fade-in-animation" exit-animation="fade-out-animation">

                <neon-animatable>
                    <div id="preview">

                    </div>
                </neon-animatable>

                <neon-animatable>
                    <div id="info">
                        <div id="info_container">
                            <div id="datalet_img">
                                <img src="{{dataletImg}}">
                            </div>
                            <div id="datalet_base_info">
                                <div id="datalet_name">
                                    {{dataletName}}
                                </div>
                                <div id="datalet_description">
                                    {{dataletDescription}}
                                </div>
                            </div>
                        </div>
                        <div id="datalet_inputs">
                            <span id="inputs" class="input_label"></span>
                            <ul>
                                <template is="dom-repeat" items="{{inputs}}">
                                    <li>{{_getInputName(item.name)}}</li>
                                    {{_getInputDescription(item.name)}}
                                </template>
                            </ul>
                            <span id="options" class="input_label"></span>
                            <ul>
                                <template is="dom-repeat" items="{{options}}">
                                    <li>{{_getInputName(item.name)}}</li>
                                    {{_getInputDescription(item.name)}}
                                </template>
                            </ul>
                        </div>
                    </div>
                </neon-animatable>

            </neon-animated-pages>

        </paper-material>

    </template>

    <script>

        Polymer({

            is : 'datalet-preview-controllet',

            properties : {

                deepUrl : {
                    type : String,
                    value : undefined
                },

                tabIndex: {
                    type: Number,
                    value: 0
                }

            },

            ready : function() {
                $(this.$.preview).perfectScrollbar();
                $(this.$.info).perfectScrollbar();
            },

            attached : function() {
                this._translate();
            },

            _translate : function(){
                this.$.previewTab.innerHTML = ln["previewTab_" + ln["localization"]];
                this.$.infoTab.innerHTML = ln["infoTab_" + ln["localization"]];
            },

            loadDatalet : function(dataletParams){
                this._setTabindex(0);

                dataletParams.placeHolder = this.$.preview;

                ComponentService.deep_url = this.deepUrl;
                ComponentService.getComponent(dataletParams);
            },

            eraseDatalet : function(){
                this.$.preview.innerHTML = "";
            },

            loadInfo : function(selectedDatalet){
                this._setTabindex(1);

                this.dataletImg = (selectedDatalet.bridge_link + selectedDatalet.component_link).replace("html", "png");
                this.dataletName = this._getChartName(selectedDatalet.name.replace("-datalet", ""));
                this.dataletDescription = this._getChartName(selectedDatalet.name.replace("-datalet", "Description"));

                var inputs = selectedDatalet.idm.inputs.input;
                var options = [];
                if(selectedDatalet.idm.inputs.layouts)
                    options = selectedDatalet.idm.inputs.layouts.input;

                if(!(inputs instanceof Array))
                    inputs = [inputs];

                if(!(options instanceof Array))
                    options = [options];

                this.inputs = inputs;
                this.options = options;

                this.$.inputs.innerHTML = ln["inputs_" + ln["localization"]];
                if(this.options.length > 0)
                    this.$.options.innerHTML = ln["options_" + ln["localization"]];
                else
                    this.$.options.innerHTML = "";
            },

            eraseInfo : function(){
                this.dataletImg = "";
                this.dataletName = "";
                this.dataletDescription = "";

                this.inputs = [];
                this.options = [];

                this.$.inputs.innerHTML = "";
                this.$.options.innerHTML = "";
            },

            _getChartName: function(key) {
                return ln[key + "_" +ln["localization"]];
            },

//            _getInputRichName : function(item) {
//                var name =  ln[item.name + "_" +ln["localization"]];
//                if(item.type != "TEXT")
//                    name += " [" + item.type + "]";
//                if(item.selection == "?")
//                    name += " [OPT]";
//                return name;
//            },

            _getInputName : function(name) {
                return ln[name + "_" +ln["localization"]];
            },

            _getInputDescription : function(name) {
                return ln[name + "Description_" +ln["localization"]];
            },

            _setTabindex : function(tabIndex) {
                this.debounce('_filter', function () {
                    this.tabIndex = -1;
                    this.tabIndex = tabIndex;
                }, 0);
            },

            _getNeonIndex : function(tabIndex){
                if(tabIndex == -1)
                    return 0;
                return tabIndex;
            }

        });

    </script>

</dom-module>