// 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: