'use strict' import 'lodash/lodash' window.addEventListener('load', () => { const maxFormatCount = 20; var FormatBundle = Vue.component('format-bundle', { template: "#format-bundle", props: ["format", "formatOptions", "params"], computed: { options: { get: function(){ return this.formatOptions[this.format]; }, }, selectableFormats: { get: function() { return Object.keys(this.formatOptions); } }, useTextArea: function() { return this.format === "multiline"; } }, methods: { onKeyup: function(ev) { var el = ev.target; if(el.name.match(/\[format/)){ this.$emit('update-preview', null); } } } }); new Vue({ el: "#in_tail_format", props: ["formatOptionsJson", "initialSelected", "targetFile", "paramsJson"], data: { previewProcessing: false, format: "", highlightedLines: null, }, components: { 'format-bundle': FormatBundle }, computed: { useTextArea: function() { return this.format === "multiline"; } }, beforeMount: function() { this.formatOptions = JSON.parse(this.$el.attributes.formatOptionsJson.nodeValue); this.format = this.$el.attributes.initialSelected.nodeValue; // initialize params // NOTE: if `params.setting.foo` is undefined, Vue can't binding with v-model="params.setting.foo" var params = JSON.parse(this.$el.attributes.paramsJson.nodeValue); if(!params.setting) { params.setting = {}; } var formats = _.chain(_.range(1, maxFormatCount + 1)).map(function(i) {return params.setting["format" + String(i)];}).compact().value(); params.setting.formats = formats.join("\n"); _.each(this.formatOptions, function(options){ _.each(options, function(key){ if(!params.setting.hasOwnProperty(key)){ params.setting[key] = ""; } }); }); this.params = params; }, mounted: function(){ this.$watch('params.setting.formats', (formats)=> { _.range(1, maxFormatCount + 1).forEach(()=> {params.setting["format" + String(i)] = "";}); _.compact(formats.split("\n")).forEach((formatLine, index)=> { params.setting["format" + String(index + 1)] = formatLine; }); }), this.$watch('params.setting.regexp', ()=> { this.preview(); }); this.$watch('format', ()=> { this.preview(); }); this.$emit("data-loaded"); }, methods: { onKeyup: function(ev){ var el = ev.target; if(el.name.match(/\[format/)){ this.preview(); } }, updatePreview: function() { this.preview(); }, updateHighlightedLines: function() { if(!this.regexpMatches) { this.highlightedLines = null; return; } var $container = jQuery('