| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | /* * Released under BSD License * Copyright (c) 2014-2021 hizzgdev@163.com *  * Project Home: *   https://github.com/hizzgdev/jsmind/ */(function ($w) {    'use strict';    var $d = $w.document;    var __name__ = 'jsMind';    var jsMind = $w[__name__];    if (!jsMind) { return; }    if (typeof (jsMind.shell) != 'undefined') { return; }    var options = {        play_delay: 1000    };    jsMind.shell = function (jm) {        this.jm = jm;        this.step = 0;        this.commands = []; //version        this.delay_handle = 0;        this.playing = false;        this.jm_editable = this.jm.get_editable();    };    jsMind.shell.prototype = {        init: function () {            this.playing = false;        },        record: function (action, obj) {            if (!this.playing) {                var command = { action: action, data: obj.data, node: obj.node };                var prev_command = this.commands[this.step - 1];                if (command.action === 'update_node' && prev_command.action === 'add_node' && prev_command.data[2] === 'New Node') {                    prev_command.data[2] = command.data[1];                    this.commands[this.step - 1] = prev_command;                } else {                    this.step = this.commands.push(command);                }            }        },        execute: function (command) {            var func = this.jm[command.action];            var node = command.node;            this.jm.enable_edit();            func.apply(this.jm, command.data);            this.jm.disable_edit();            if (!!node) {                this.jm.select_node(node);            }        },        add_command: function (command) {            this.commands.push(command);            play();        },        replay: function () {            this.step = 0;            this.play();        },        play: function () {            this.jm.disable_edit();            this.playing = true;            this._play_stepbystep();        },        _play_stepbystep: function () {            if (this.delay_handle != 0) {                $w.clearTimeout(this.delay_handle);                this.delay_handle = 0;            }            if (this.step < this.commands.length) {                this.execute(this.commands[this.step]);                this.step++;                var js = this;                this.delay_handle = $w.setTimeout(function () {                    js.play.call(js);                }, options.play_delay);            } else {                this._play_end();            }        },        _play_end: function () {            this.playing = false;            if (this.jm_editable) {                this.jm.enable_edit();            } else {                this.jm.disable_edit();            }        },        jm_event_handle: function (type, data) {            if (type === jsMind.event_type.show) {                this.record('show', data);            }            if (type === jsMind.event_type.edit) {                var action = data.evt;                delete data.evt;                this.record(action, data);            }        }    };    var shell_plugin = new jsMind.plugin('shell', function (jm) {        var js = new jsMind.shell(jm);        jm.shell = js;        js.init();        jm.add_event_listener(function (type, data) {            js.jm_event_handle.call(js, type, data);        });    });    jsMind.register_plugin(shell_plugin);})(window);
 |