/** * Created by nuintun on 2015/11/20. */ 'use strict'; var fs = require('fs'); var path = require('path'); var util = require('../../util'); var Vue = require('../../vue/vue'); var Terminal = require('../../terminal/termlib'); const EMPTYPROJECT = { name: '', path: '', env: [], command: [], empty: true }; require('../project-configure'); /** * clone project * @param projects * @param index * @returns {*} */ function clone(projects, index){ return util.clone(projects[index] || EMPTYPROJECT); } module.exports = Vue.component('app-main', { template: fs.readFileSync(path.join(__dirname, 'app-main.html')).toString(), props: { activeIndex: { type: Number, twoWay: true, required: true }, projects: { type: Array, twoWay: true, required: true }, unique: { type: Object, required: true } }, data: function (){ var project = clone(this.projects, this.activeIndex); return { showSetting: false, expandCommand: false, project: project, command: project.command.slice(0, 3), moreCommand: project.command.slice(3) }; }, watch: { projects: function (){ this.project = clone(this.projects, this.activeIndex); }, activeIndex: function (){ this.project = clone(this.projects, this.activeIndex); }, project: function (){ this.command = this.project.command.slice(0, 3); this.moreCommand = this.project.command.slice(3); } }, methods: { isRunning: function (){ }, exec: function (name, command){ console.log('run %s: %s', name, command); if (!window.AppRuntime[this.project.name]) { var xterm = new Terminal({ x: 220, y: 70, termDiv: this.$els.terminal }); xterm.open(); xterm.write('aasdsad'); window.AppRuntime[this.project.name] = { name: name, command: command, terminal: '' } } }, setting: function (){ this.showSetting = true; }, remove: function (){ // remove project this.projects.splice(this.activeIndex, 1); // change active this.activeIndex = 0; // save configure this.$dispatch('save-configure'); } }, events: { 'setting-toggle': function (state){ this.showSetting = state; }, edit: function (project){ this.projects.$set(this.activeIndex, project); this.$dispatch('save-configure'); } }, created: function (){ var context = this; document.addEventListener('click', function (event){ var target = event.target; var trigger = context.$els.expandTrigger; context.expandCommand = trigger && trigger.contains(target); }, false); } });