3 # Generate an NW.js package.json file for a website.
5 # https://github.com/nwjs/nw.js/wiki/Manifest-format
13 def is_html(filename
):
14 return filename
.lower().endswith(".html")
18 return ("data-" + name
19 + """=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?""")
22 def main(appdir
, version
=None):
23 if not os
.path
.isdir(appdir
):
24 raise StandardError("input (%r) is not a directory" % appdir
)
27 for root
, dirnames
, filenames
in os
.walk(appdir
):
28 root
= os
.path
.relpath(root
, appdir
)
29 for filename
in filenames
:
30 flower
= filename
.lower()
31 if flower
== "index.html":
32 indexes
.append(os
.path
.join(root
, filename
))
33 if ("icon" in flower
and flower
.endswith((".ico", ".png"))):
34 icons
.append(os
.path
.join(root
, filename
))
36 indexes
.sort(key
=lambda fn
: (fn
.count("/"), fn
))
37 icons
.sort(key
=lambda fn
: (fn
.count("/"), fn
))
38 name
= os
.path
.basename(appdir
).split(".")[0]
42 "version": version
or "0.0.0",
43 "chromium-args": "--enable-webgl --ignore-gpu-blacklist",
54 package
["window"]["icon"] = icons
[0]
56 with
open(os
.path
.join(appdir
, indexes
[0]), "r") as fobj
:
57 header
= fobj
.read(4096)
59 title
= re
.search("<title>([^<]+)<", header
).groups()[0]
60 except AttributeError:
61 print >>sys
.stderr
, "No <title> found in %r." % fobj
.name
63 package
["window"]["title"] = title
65 version
= re
.search(attr("version"), header
).groups()[0]
66 except AttributeError:
67 print >>sys
.stderr
, "No version found in %r." % fobj
.name
69 package
["version"] = version
71 appid
= re
.search(attr("appid"), header
).groups()[0]
72 except AttributeError:
73 print >>sys
.stderr
, "No appid found in %r." % fobj
.name
75 package
["name"] = appid
77 if "+" not in package
["version"]:
78 package
["version"] += "+"
79 package
["version"] += time
.strftime("%Y%m%d%H%M%S")
81 with
open(os
.path
.join(appdir
, "package.json"), "w") as fobj
:
82 json
.dump(package
, fobj
)
84 if __name__
== "__main__":