diff options
author | Luke Bennett <lukeeeebennettplus@gmail.com> | 2016-07-26 01:44:47 +0100 |
---|---|---|
committer | Luke Bennett <lukeeeebennettplus@gmail.com> | 2016-07-26 01:44:47 +0100 |
commit | 371821667f87dfab1ec3a19224eb6db158307ac7 (patch) | |
tree | 355f399c217b1488bda3179bdf0bf63a242ed1be | |
parent | 9fead2b8271c4f3bb6c04a596253f80b09de9caa (diff) | |
download | gitlab-ce-371821667f87dfab1ec3a19224eb6db158307ac7.tar.gz |
Added template_selector.js.es6
-rw-r--r-- | app/assets/javascripts/blob/template_selector.js.es6 | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/app/assets/javascripts/blob/template_selector.js.es6 b/app/assets/javascripts/blob/template_selector.js.es6 new file mode 100644 index 00000000000..312e6de66b6 --- /dev/null +++ b/app/assets/javascripts/blob/template_selector.js.es6 @@ -0,0 +1,69 @@ +(() => { + class TemplateSelector { + constructor(opts = {}) { + this.dropdown = opts.dropdown; + this.data = opts.data; + this.pattern = opts.pattern; + this.wrapper = opts.wrapper; + this.editor = opts.editor; + this.fileEndpoint = opts.fileEndpoint; + this.$input = opts.$input || $('#file_name'); + + this.buildDropdown(); + this.bindEvents(); + this.onFilenameUpdate(); + } + + buildDropdown() { + this.dropdown.glDropdown({ + data: this.data, + filterable: true, + selectable: true, + search: { + fields: ['name'] + }, + clicked: this.onClick, + text: (item) => { + return item.name; + } + }); + } + + bindEvents() { + this.$input.on('keyup blur', () => { + this.onFilenameUpdate(); + }); + } + + onFilenameUpdate() { + if (!this.input.length) return; + + let filenameMatches = this.pattern.test(this.$input.val().trim()); + + if (!filenameMatches) { + this.wrapper.addClass('hidden'); + return; + } + + this.wrapper.removeClass('hidden'); + } + + onClick(item, el, e) { + e.preventDefault(); + this.requestFile(item); + } + + requestFile(item) { + // To be implemented on the extending class + // e.g. + // Api.gitignoreText(item.name, this.requestFileSuccess.bind(this)); + } + + requestFileSuccess(file) { + this.editor.setValue(file.content, 1); + this.editor.focus(); + } + } + + this.TemplateSelector = TemplateSelector; +}); |