aboutsummaryrefslogtreecommitdiffstats
path: root/PMWriter.js
blob: 99d3d8d073bbf00f2211617412b762fd27a73a85 (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
82
83
84
85
86
87
88
89
90
/*
 * さわるなきけん!
 * DO NOT USE!
 * */

liberator.plugins.pmwriter = {};
let pluginDirPath = liberator.globalVariables.pmwriter_plugin_dir;
let outputDir = liberator.globalVariables.pmwriter_output_dir;

(function(){
  let U = liberator.plugins.libly.$U;

  let myname = __context__.NAME;

  let otags = liberator.eval('tags', liberator.plugins.pluginManager.list);
  let template = liberator.eval('template', liberator.plugins.pluginManager.list);

  // makeLink を無理矢理修正
  let makeLink = liberator.eval('makeLink', liberator.plugins.pluginManager.list);
  liberator.plugins.pmwriter.makeLink = function (str) makeLink(str, true);
  liberator.log(makeLink)
  liberator.eval('makeLink = liberator.plugins.pmwriter.makeLink ', liberator.plugins.pluginManager.list);

  let linkTo;
  let tags = {
    __proto__: otags,
    name: function () <a href={linkTo}>{otags.name.apply(otags, arguments)}</a>
  };

  let ioService = services.get("io");
  let files = io.readDirectory(pluginDirPath);
  let i = 0;
  let xml = <></>;
  let xml_index = <></>;

  files.forEach(function (file) {
    if (!/\.js$/.test(file.path))
      return;
    let src = io.readFile(file.path);
    if (!/PLUGIN_INFO/.test(src))
      return;
    //if (i++ > 0) return;

    let uri = ioService.newFileURI(file);

    function Context (file) {
      this.NAME = file.leafName.replace(/\..*/, "").replace(/-([a-z])/g, function (m, n1) n1.toUpperCase());
    };
    let context = new Context(file);
    let PLUGIN_INFO;
    let detailFilename = context.NAME + '.html';
    linkTo = detailFilename;

    if (context.NAME == myname)
      return;

    context.watch('PLUGIN_INFO', function (n,N,O) { PLUGIN_INFO = O; throw 'STOP'; return O; });

    try { services.get("subscriptLoader").loadSubScript(uri.spec, context); } catch (e) {}

    let info = PLUGIN_INFO;
    tags.name = function () <a href={linkTo}>{otags.name.apply(otags, arguments)}</a>;

    let plugin = [ ];
    plugin['name'] = context.NAME;
    plugin['info'] = {};
    plugin['orgInfo'] = {};

    for (let tag in tags){
      plugin.orgInfo[tag] = info[tag];
      let value = tags[tag](info);
      if (value && value.toString().length > 0){
        plugin.push([tag, value]);
        plugin.info[tag] = value;
      }
    }

    xml = template.table(plugin.name, plugin);
    io.writeFile(io.getFile(outputDir + detailFilename), xml.toString());

    let data = plugin.filter(function($_) /name|description|author/.test($_[0]));
    xml_index += template.table(plugin.name, data);
  });

  io.writeFile(io.getFile(outputDir + 'index.html'), xml_index.toString());

})();
// vim: sw=2 ts=2 et fdm=marker: