// PLUGIN_INFO//{{{ var PLUGIN_INFO = {NAME} browser act scenario semi-automatic. hogelog 0.0.4 2.0a2 http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/scenario-actor.js || // hatena sample javascript <|| action: {and: [ {sleep: 5000}, {follow: '//a[@rel="prev"]'}, ]} ||< is syntax-sugar of >|| action: [{and: [ {sleep: [5000]}, {follow: ['//a[@rel="prev"]']}, ]}] ||< and action expressions are quoted by {begin: ...}. == TODO == - enable to load local scenario file. - enable to regexp pattern. - write example. - add function. - fix bug. - a lot. ]]> ; //}}} (function() { const debugMode = true; const VariablesName = 'ScenarioActorVariables'; const VariablesLabelID = 'ScenarioActorVariablesLabelID'; let loadedScenarioList = []; if(liberator.globalVariables.userScenarioList) loadedScenarioList.push(liberator.globalVariables.userScenarioList); function ScenarioActor () { //{{{ let variables = storage.newMap('scenarioactor', true); function ScenarioContext(event) { //{{{ let triggeredEvent = event; let doc = event.target.contentDocument || event.target; let win = doc.defaultView; return { glet: function (name, value) { variables.set(this.eval(name), this.eval(value)); return value; }, gvar: function (name) { return variables.get(name); }, begin: function () { let lastValue; for(let i=0,len=arguments.length;i=0) context.eval({begin: scenario.action}); }); }, true); }, }; }; //}}} let actor = plugins.scenarioActor = ScenarioActor(); let (e = liberator.globalVariables.scenario_actor_enabled) { if (e && e.toString().match(/^(false|0)$/i)) actor.enabled = false; } let allScenarioList = plugins.scenarioActor.allScenarioList = {}; io.getRuntimeDirectories('plugin/scenario').forEach(function(dir) { actor.loadScenario(dir); }); loadedScenarioList.forEach(function(list) { for(event in list) { if(!allScenarioList[event]) allScenarioList[event] = []; allScenarioList[event] = allScenarioList[event].concat(list[event]); } }); for(event in allScenarioList) { actor.addListener(event, allScenarioList[event]); } commands.addUserCommand(['scenarioclear'], 'clear scenario-actor variables', actor.clear, { argCount: '0', }); commands.addUserCommand(['scenariovars'], 'show scenario-actor variables', function(args) { actor.showVariables(window.content.document); }, { argCount: '0', }); commands.addUserCommand(['scenario'], 'turn on/off scenario-actor', function(args) { if (args.length) { switch (args[0].toLowerCase()) { case 'on': actor.enabled = true; break; case 'off': actor.enabled = false; break; default: liberator.echoerr('Invalid argument: ' + args[0]); return; } } else { actor.enabled = !actor.enabled; } liberator.echo('scenario-actor was ' + (actor.enabled ? 'enabled' : 'disabled')); }, { argCount: '*', completer: function (context, args) { context.completions = [['on', 'enable scenario-actor'], ['off', 'disable scenario-actor']]; } }); })(); // vim: set fdm=marker sw=4 ts=4 et: