diff options
Diffstat (limited to 'module/web/app/scripts/views/input')
| -rw-r--r-- | module/web/app/scripts/views/input/inputLoader.js | 7 | ||||
| -rw-r--r-- | module/web/app/scripts/views/input/inputView.js | 85 | ||||
| -rw-r--r-- | module/web/app/scripts/views/input/textInput.js | 35 | 
3 files changed, 127 insertions, 0 deletions
| diff --git a/module/web/app/scripts/views/input/inputLoader.js b/module/web/app/scripts/views/input/inputLoader.js new file mode 100644 index 000000000..5ccf07695 --- /dev/null +++ b/module/web/app/scripts/views/input/inputLoader.js @@ -0,0 +1,7 @@ +define(['./textInput'], function(textInput) { + +    // selects appropriate input element +    return function(input, value, default_value, description) { +        return textInput; +    }; +});
\ No newline at end of file diff --git a/module/web/app/scripts/views/input/inputView.js b/module/web/app/scripts/views/input/inputView.js new file mode 100644 index 000000000..f2601c3eb --- /dev/null +++ b/module/web/app/scripts/views/input/inputView.js @@ -0,0 +1,85 @@ +define(['jquery', 'backbone', 'underscore'], function($, Backbone, _) { + +    // Renders input elements +    return Backbone.View.extend({ + +        tagName: 'input', + +        input: null, +        value: null, +        default_value: null, +        description: null, + +        // enables tooltips +        tooltip: true, + +        initialize: function(options) { +            this.input = options.input; +            this.value = options.value; +            this.default_value = options.default_value; +            this.description = options.description; +        }, + +        render: function() { +            this.renderInput(); +            // data for tooltips +            if (this.description && this.tooltip) { +                this.$el.data('content', this.description); +                // TODO: render default value in popup? +//                this.$el.data('title', "TODO: title"); +                this.$el.popover({ +                    placement: 'right', +                    trigger: 'hover', +//                    delay: { show: 500, hide: 100 } +                }); +            } + +            return this; +        }, + +        renderInput: function() { +            // Overwrite this +        }, + +        showTooltip: function() { +            if (this.description && this.tooltip) +                this.$el.popover('show'); +        }, + +        hideTooltip: function() { +            if (this.description && this.tooltip) +                this.$el.popover('hide'); +        }, + +        destroy: function() { +            this.undelegateEvents(); +            this.unbind(); +            if (this.onDestroy) { +                this.onDestroy(); +            } +            this.$el.removeData().unbind(); +            this.remove(); +        }, + +        // focus the input element +        focus: function() { +            this.$el.focus(); +        }, + +        // Clear the input +        clear: function() { + +        }, + +        // retrieve value of the input +        getVal: function() { +            return this.value; +        }, + +        // the child class must call this when the value changed +        setVal: function(value) { +            this.value = value; +            this.trigger('change', value); +        } +    }); +});
\ No newline at end of file diff --git a/module/web/app/scripts/views/input/textInput.js b/module/web/app/scripts/views/input/textInput.js new file mode 100644 index 000000000..3a6631a0b --- /dev/null +++ b/module/web/app/scripts/views/input/textInput.js @@ -0,0 +1,35 @@ +define(['jquery', 'backbone', 'underscore', './inputView'], function($, Backbone, _, inputView) { + +    return inputView.extend({ + +        // TODO +        tagName: 'input', +        events: { +            'keyup': 'onChange', +            'focus': 'showTooltip', +            'focusout': 'hideTooltip' +        }, + +        renderInput: function() { +            this.$el.attr('type', 'text'); +            this.$el.attr('name', 'textInput'); + +            if (this.default_value) +                this.$el.attr('placeholder', this.default_value); + +            if (this.value) +                this.$el.val(this.value); + +            return this; +        }, + +        clear: function() { +            this.$el.val(''); +        }, + +        onChange: function(e) { +            this.setVal(this.$el.val()); +        } + +    }); +});
\ No newline at end of file | 
