aboutsummaryrefslogtreecommitdiffstats
path: root/twaudio.js
blob: 218a36586b657dd8a0a0e1f2ad59aa96babc3238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// INFO //
var INFO = 
<plugin name="twaudio.js" version="0.1"
        summary="twaud.io player controller"
        href="http://github.com/vimpr/vimperator-plugins/blob/master/twaudio.js"
        xmlns="http://vimperator.org/namespaces/liberator">
  <author email="mitsugu.oyama@gmail.com">Mitsugu Oyama</author>
  <license href="http://opensource.org/licenses/mit-license.php">MIT</license>
  <project name="Vimperator" minVersion="2.3"/>
  <p>twaud.io player controller.</p>
  <item>
    <tags>'twaudio'</tags>
    <spec>:twp<oa>lay</oa></spec>
<!--
    実装するか未定jQueryが許さないかも
    <spec>:twv<oa>olume</oa> <oa>level</oa></spec>
-->
    <description>
      <p>twaud.io player controller.</p>
    </description>
  </item>
</plugin>;

commands.addUserCommand(
  ['twp[lay]'],
  'toggle to play button',
  function(){
    let contents=gBrowser.selectedBrowser.contentDocument;
    // twaud.ioのjQueryの使い方によりマウス・イベントをエミュレート
    // するしかないっぽい。
    let evt=contents.createEvent("MouseEvents");
    evt.initMouseEvent(
      'click',
      true, // canBubble
      true, // cancelable
      window, // view
      0, // detail
      0, // screenX
      0, // screenY
      0, // clientX
      0, // clientY
      false, // ctrlKey
      false, // altKey
      false, // shiftKey
      false, // metaKey
      0, // button
      null //relatedTarget
    ); 
    let btnPlay=contents.getElementById('play0');
    if(null==btnPlay.getAttribute('style')){ // for twaud.io's bug
      contents.location.reload();
    }else if('display: block;'==btnPlay.getAttribute('style')){
      btnPlay.dispatchEvent(evt);
    }else{
      let btnPause=contents.getElementById('pause0');
      btnPause.dispatchEvent(evt);
    }
  },
  {
    literal: false
  },
  true
);

/*
実装するか未定。jQueryが許さないかも。
commands.addUserCommand(
  ['twv[olume]'],
  'set volume of twaud.io player.',
  function(args){
    if(1!=args.length){
      liberator.echoerr('argument error');
      return false;
    }
  },
  {
    literal: false
  },
  true
);
*/
s="p">.nsIIOService); var CSSDataPrefix = 'data:text/css,'; function init() { if (globalVariables.styles) globalVariables.styles.split(/\s*,\s*/).forEach(manager.load); } function getCSSFiles() { var files = []; io.getRuntimeDirectories('colors') .filter(function(colorDir) colorDir) .forEach(function(colorDir) io.readDirectory(colorDir) .forEach(function(file) { if (/\.css$/.test(file.leafName.toLowerCase()) && !file.isDirectory()) { files.push(file); } })); return files; } function getURIFromName(aName){ var ret = null; io.getRuntimeDirectories('colors').some(function(file){ file.append(aName + '.css'); if (file.exists()){ ret = ios.newFileURI(file); return true; } }); return ret; } function getURIFromCSS(aString) ios.newURI('data:text/css,' + aString, null, null); function getStylesheetList(){ var list = []; var stylesheets = getAllStyleSheets(window.content); stylesheets.forEach(function(style){ var media = style.media.mediaText.toLowerCase(); if (media && media.indexOf('screen') == -1 && media.indexOf('all') == -1) return; if (style.title) list.push([style.title, style.disabled === true ? false : true]); }); return list; } var manager = { load: function(css){ if (!css) return false; var uri = null; if (typeof css == 'string'){ uri = getURIFromName(css); } else if (css instanceof Components.interfaces.nsIURI){ uri = css; } if (!uri) return false; if (sss.sheetRegistered(uri, sss.USER_SHEET)) sss.unregisterSheet(uri, sss.USER_SHEET); sss.loadAndRegisterSheet(uri, sss.USER_SHEET); if (options.verbose > 8) log('Resisted colorschema '+css); return true; }, unload: function(css){ if (!css) return false; var uri = null; if (typeof css == 'string'){ uri = getURIFromName(css); } else if (css instanceof Components.interfaces.nsIURI){ uri = css; } if (!uri) return false; if (sss.sheetRegistered(uri, sss.USER_SHEET)) sss.unregisterSheet(uri, sss.USER_SHEET); if (options.verbose > 8) log('Unresisted colorschema '+css); return true; }, list: function(isAltanative){ var str = []; if (isAltanative){ str.push('<span class="hl-Title">Alternative StyleSheet List</span>'); getStylesheetList().forEach(function(elm, i){ var buf = ' ' + (i+1) + ' '; if (elm[1]){ buf += '<span style="color:blue">*</span>'; } else { buf += ' '; } str.push(buf + ' ' + elm[0]); });; if (str.length == 1) str = ['Alternative StyleSheet is none.']; } else { str.push('<span class="hl-Title">User StyleSheet List</span>'); var files = getCSSFiles().map(function(file) file.leafName.replace(/\.css$/i, '')); files.forEach(function(file, i){ var buf = ' ' + (i+1) + ' '; if (sss.sheetRegistered(getURIFromName(file), sss.USER_SHEET)){ buf += '<span style="color:blue">*</span>'; } else { buf += ' '; } str.push(buf +' ' + file); }); } echo(str.join('\n'), true); }, get highlightList(){ return CSSData; } }; commands.addUserCommand(['altcolo[rschema]'], 'set alternativeStyleSheet', function(arg){ if (!arg){ manager.list(true); return; } else if (getStylesheetList().some(function(elm) elm[0] == arg)){ stylesheetSwitchAll(window.content, arg); setStyleDisabled(false); } }, { completer: function(aFilter){ var styles = getStylesheetList().map(function(elm) [elm[0], elm[1] ? '* ' : ' ' + 'alternative style']); if (!aFilter) return [0, styles]; var candidates = styles.filter(function(elm) elm[0].indexOf(aFilter) == 0); return [0, candidates]; } } ); commands.addUserCommand(['colo[rschema]'], 'set user stylesheet', function(arg, special){ if (!arg){ manager.list(false); return; } if (special){ manager.unload(arg) && echo('Unredisted '+arg); } else { manager.load(arg) && echo('Redisted '+arg); } }, { completer: function(filter, special){ var list = getCSSFiles().map(function(file){ var name = file.leafName.replace(/\.css$/i, ''); return [name, sss.sheetRegistered(getURIFromName(name), sss.USER_SHEET) ? '*' : '']; }); if (!filter) return [0, list]; var candidates = []; list.forEach(function(item){ if (item[0].toLowerCase().indexOf(filter) == 0){ candidates.push(item); } }); return [0, candidates]; }, bang: true } ); var CSSData = {}; commands.addUserCommand(['hi[ghlight]'], 'temporary style changer', function(args){ if (args.length == 0){ var str = ['show highlight list']; for (let name in CSSData){ str.push('<span class="hl-Title">' + name + '</span>'); str.push(CSSData[name]); } echo(str.join('\n'), true); } else if (args.length == 1){ var arg = args[0]; if (arg == 'clear'){ for (let name in CSSData){ manager.unload(getURIFromCSS(CSSData[name])); delete CSSData[name]; } } else if (arg in CSSData){ echo('<span class="hl-Title">' + rel.args[0] + '</span>\n' + CSSData[rel.args[0]], true); } } else if (args.length > 1){ var groupName = args.shift(); if (groupName == 'clear'){ args.forEach(function(name){ if (name in CSSData){ manager.unload(getURIFromCSS(CSSData[name])); delete CSSData[name]; } }); } else { if (groupName in CSSData) manager.unload(getURIFromCSS(CSSData[groupName])); CSSData[groupName] = args.join(' '); manager.load(getURIFromCSS(CSSData[groupName])); } } }, { completer: function(context, args){ var list1 = [['clear', 'clear all or specified group']]; var list2 = []; if (!args){ for (let name in CSSData){ list2.push([name, CSSData[name]]); } return [0, list1.concat(list2)]; } if (args.length == 2 && args[0] == 'clear'){ for (let name in CSSData){ if (name.indexOf(args[1]) == 0) list2.push([name, CSSData[name]]); } return [6, list2]; } else if (args.args.length == 1){ for (let name in CSSData){ if (name.indexOf(args[0]) == 0) list2.push([name, CSSData[name]]); } if ('clear'.indexOf(args[0]) == 0) return [0, list1.concat(list2)]; else return [0, list2]; } }, argCount: '*' } ); init(); return manager; })(); })(); // vim: sw=4 ts=4 sts=0 fdm=marker: