| #!/usr/bin/env python |
| # Copyright 2017 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from bs4 import BeautifulSoup |
| from datetime import date |
| import os.path as path |
| import sys |
| |
| _COMPILE_JS = '//third_party/closure_compiler/compile_js.gni' |
| _POLYMERS = ['polymer.html', 'polymer-mini.html', 'polymer-micro.html'] |
| _WEB_ANIMATIONS_BASE = 'web-animations.html' |
| _WEB_ANIMATIONS_EXTERNS = \ |
| '//third_party/closure_compiler/externs/web_animations.js' |
| _COMPILED_RESOURCES_TEMPLATE = ''' |
| # Copyright %d The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # NOTE: Created with %s, please do not edit. |
| |
| import("%s") |
| |
| %s |
| '''.strip() |
| |
| |
| def main(created_by, html_files): |
| targets = '' |
| |
| def _html_to_extracted(html_file): |
| assert html_file.endswith('.html') |
| return html_file[:-len('.html')] + '-extracted' |
| |
| def _target_name(target_file): |
| return _html_to_extracted(path.basename(target_file)) |
| |
| def _has_extracted_js(html_file): |
| return path.isfile(_html_to_extracted(html_file) + '.js') |
| |
| html_files = filter(_has_extracted_js, html_files) |
| |
| for html_file in sorted(html_files, key=_target_name): |
| html_base = path.basename(html_file) |
| if html_base in _POLYMERS: |
| continue |
| |
| parsed = BeautifulSoup(open(html_file), 'html.parser') |
| imports = set( |
| i.get('href') for i in parsed.find_all('link', rel='import')) |
| |
| html_dir = path.dirname(html_file) |
| dependencies = [] |
| externs = '' |
| |
| for html_import in sorted(imports): |
| import_dir, import_base = path.split(html_import.encode('ascii')) |
| if import_base in _POLYMERS: |
| continue |
| |
| if import_base == _WEB_ANIMATIONS_BASE: |
| externs += '\n externs_list = [ "%s" ]' % \ |
| _WEB_ANIMATIONS_EXTERNS |
| continue |
| |
| # Only exclude these after appending web animations externs. |
| if not _has_extracted_js(path.join(html_dir, html_import)): |
| continue |
| |
| target = ':' + _target_name(import_base) |
| |
| dependencies.append(import_dir + target) |
| |
| targets += '\njs_library("%s-extracted") {' % html_base[:-5] |
| if dependencies: |
| targets += '\n deps = [' |
| targets += '\n "%s",' % '",\n "'.join(dependencies) |
| targets += '\n ]' |
| targets += externs |
| targets += '\n}\n' |
| |
| targets = targets.strip() |
| |
| if targets: |
| current_year = date.today().year |
| print _COMPILED_RESOURCES_TEMPLATE % (current_year, created_by, |
| _COMPILE_JS, targets) |
| |
| |
| if __name__ == '__main__': |
| main(path.basename(sys.argv[0]), sys.argv[1:]) |