コード例 #1
0
    def LoadModule(self, module_name=None, module_filename=None):
        assert bool(module_name) ^ bool(
            module_filename), 'Must provide module_name or module_filename.'
        if module_filename:
            resource = self.FindResource(module_filename)
            if not resource:
                raise Exception('Could not find %s in %s' %
                                (module_filename, repr(self.source_paths)))
            module_name = resource.name
            if resource.absolute_path.endswith('__init__.js'):
                old_style_filename = os.path.dirname(
                    resource.absolute_path) + '.js'
                if os.path.exists(old_style_filename):
                    raise module.DepsException(
                        'While loading __init__.js of %s, found %s which should never exist',
                        module_name, old_style_filename)
        else:
            resource = None  # Will be set if we end up needing to load.

        if module_name in self.loaded_modules:
            assert self.loaded_modules[module_name].contents
            return self.loaded_modules[module_name]

        if not resource:  # happens when module_name was given
            resource = self.FindModuleResource(module_name)
            if not resource:
                raise module.DepsException('No resource for module "%s"' %
                                           module_name)

        m = js_module.JSModule(self, module_name, resource)
        m.Parse()
        self.loaded_modules[module_name] = m
        m.Load()
        return m
コード例 #2
0
    def LoadImage(self, abs_path):
        if abs_path in self.loaded_images:
            return self.loaded_images[abs_path]

        if not os.path.exists(abs_path):
            raise module.DepsException("url('%s') did not exist" % abs_path)

        res = self.FindResourceGivenAbsolutePath(abs_path, binary=True)
        if res is None:
            raise module.DepsException("url('%s') was not in search path" %
                                       abs_path)

        image = style_sheet_module.Image(res)
        self.loaded_images[abs_path] = image
        return image
コード例 #3
0
    def LoadModule(self, module_name=None, module_filename=None):
        assert bool(module_name) ^ bool(
            module_filename), 'Must provide module_name or module_filename.'
        if module_filename:
            resource = self.FindResource(module_filename)
            if not resource:
                raise Exception('Could not find %s in %s' %
                                (module_filename, repr(self.source_paths)))
            module_name = resource.name
        else:
            resource = None  # Will be set if we end up needing to load.

        if module_name in self.loaded_modules:
            assert self.loaded_modules[module_name].contents
            return self.loaded_modules[module_name]

        if not resource:  # happens when module_name was given
            resource = self.FindModuleResource(module_name)
            if not resource:
                raise module.DepsException('No resource for module "%s"' %
                                           module_name)

        m = html_module.HTMLModule(self, module_name, resource)
        self.loaded_modules[module_name] = m

        # Fake it, this is probably either polymer.min.js or platform.js which are
        # actually .js files....
        if resource.absolute_path.endswith('.js'):
            return m

        m.Parse()
        m.Load()
        return m
コード例 #4
0
    def LoadModule(self, module_name=None, module_filename=None):
        assert bool(module_name) ^ bool(
            module_filename), 'Must provide module_name or module_filename.'
        if module_filename:
            resource = self.FindResource(module_filename)
            if not resource:
                raise Exception('Could not find %s in %s' %
                                (module_filename, repr(self.source_paths)))
            module_name = resource.name
        else:
            resource = None  # Will be set if we end up needing to load.

        if module_name in self.loaded_modules:
            assert self.loaded_modules[module_name].contents
            return self.loaded_modules[module_name]

        if not resource:  # happens when module_name was given
            resource = self.FindModuleResource(module_name)
            if not resource:
                raise module.DepsException('No resource for module "%s"' %
                                           module_name)

        if resource.absolute_path.endswith('.js'):
            raise Exception(".js modules are deprecated")
        m = html_module.HTMLModule(self, module_name, resource)
        m.Parse()
        self.loaded_modules[module_name] = m
        m.Load()
        return m
コード例 #5
0
    def FindModuleResource(self, requested_module_name):
        """Finds a module javascript file and returns a Resource, or none."""
        # TODO(nduca): Look for name/__init__.js as well as name.js
        js_resource = self._FindResourceGivenNameAndSuffix(
            requested_module_name, '.js', return_resource=True)
        if not js_resource:
            js_resource = self._FindResourceGivenNameAndSuffix(
                requested_module_name + '.__init__',
                '.js',
                return_resource=True)
        else:
            # Verify that no __init__.js exists.
            init_resource = self._FindResourceGivenNameAndSuffix(
                requested_module_name + '.__init__',
                '.js',
                return_resource=True)
            if init_resource:
                raise module.DepsException(
                    'While loading "%s", found a __init__.js form as well',
                    requested_module_name)

        html_resource = self._FindResourceGivenNameAndSuffix(
            requested_module_name, '.html', return_resource=True)
        if js_resource and html_resource:
            if module.Module.html_contents_is_polymer_module(
                    html_resource.contents):
                return html_resource
            return js_resource
        elif js_resource:
            return js_resource
        return html_resource
コード例 #6
0
def _HRefToResource(loader, module_name, module_dir_name, href,
                    tag_for_err_msg):
    if href[0] == '/':
        resource = loader.FindResourceGivenRelativePath(href[1:])
    else:
        abspath = os.path.normpath(os.path.join(module_dir_name, href))
        resource = loader.FindResourceGivenAbsolutePath(abspath)

    if not resource:
        raise module.DepsException('In %s, the %s cannot be loaded because ' \
                        'it is not in the search path' % (module_name, tag_for_err_msg))
    try:
        resource_contents = resource.contents
    except:
        raise module.DepsException('In %s, %s points at a nonexistant file ' %
                                   (module_name, tag_for_err_msg))
    return resource
コード例 #7
0
def GetInlineScriptContentWithPolymerizingApplied(inline_script):
    polymer_element_name = GetPolymerElementNameFromOpenTags(
        inline_script.open_tags)
    if polymer_element_name is None:
        raise module.DepsException(
            'Tagless Polymer() call must be made inside a <polymer-element> tag'
        )

    return UpdatePolymerCallsGivenElementName(inline_script.stripped_contents,
                                              polymer_element_name)
コード例 #8
0
 def Parse(self):
   stripped_text = self.loader.GetStrippedJSForFilename(self.resource.absolute_path,
                                                        early_out_if_no_tvcm=False)
   if self.name != 'tvcm':
     if not IsJSModule(stripped_text, text_is_stripped=True):
       raise module.DepsException('%s is not a JS Module' % self.name)
   ValidateUsesStrictMode(self.name, stripped_text)
   if IsJSTest(stripped_text, text_is_stripped=True):
     ValidateTestSuiteDefinition(self.name, stripped_text)
   self.dependency_metadata = Parse(self.name, stripped_text)
コード例 #9
0
  def LoadStyleSheet(self, name):
    if name in self.loaded_style_sheets:
      return self.loaded_style_sheets[name]

    resource = self._FindResourceGivenNameAndSuffix(name, '.css', return_resource=True)
    if not resource:
      raise module.DepsException('Could not find a file for stylesheet %s' % name)

    style_sheet = style_sheet_module.StyleSheet(self, name, resource)
    style_sheet.load()
    self.loaded_style_sheets[name] = style_sheet
    return style_sheet
コード例 #10
0
    def LoadHTMLTemplate(self, name):
        if name in self.loaded_html_templates:
            return self.loaded_html_templates[name]

        resource = self._FindResourceGivenNameAndSuffix(name,
                                                        '.html',
                                                        return_resource=True)
        if not resource:
            raise module.DepsException(
                'Could not find a file for html template named %s' % name)

        html_template = module.HTMLTemplate(name, resource.absolute_path,
                                            resource.contents)
        self.loaded_html_templates[name] = html_template
        return html_template
コード例 #11
0
def ValidateUsesStrictMode(module_name, stripped_text):
  """Check that the first non-empty line is 'use strict';.

  Args:
    stripped_text: Javascript source code with comments stripped out.

  Raises:
    DepsException: This file doesn't use strict mode.
  """
  lines = stripped_text.split('\n')
  for line in lines:
    line = line.strip()
    if len(line.strip()) == 0:
      continue
    if """'use strict';""" in line.strip():
      break
    raise module.DepsException('%s must use strict mode' % module_name)
コード例 #12
0
  def LoadRawScript(self, relative_raw_script_path):
    resource = None
    for source_path in self.source_paths:
      possible_absolute_path = os.path.join(source_path, relative_raw_script_path)
      if os.path.exists(possible_absolute_path):
        resource = resource_module.Resource(source_path, possible_absolute_path)
        break
    if not resource:
      raise module.DepsException('Could not find a file for raw script %s in %s' % (
        relative_raw_script_path, self.source_paths))
    assert relative_raw_script_path == resource.unix_style_relative_path, \
        'Expected %s == %s' % (relative_raw_script_path, resource.unix_style_relative_path)

    if resource.absolute_path in self.loaded_raw_scripts:
      return self.loaded_raw_scripts[resource.absolute_path]

    raw_script = module.RawScript(resource)
    self.loaded_raw_scripts[resource.absolute_path] = raw_script
    return raw_script
コード例 #13
0
 def __init__(self, soup):
   if not soup:
     raise module.DepsException('InlineScript created without soup')
   self._soup = soup
   self._stripped_contents = None
   self._open_tags = None
コード例 #14
0
def Parse(module_name, stripped_text):
  """Parses the tvcm.require* lines in the module and returns module.ModuleDependencyMetadata.

  Args:
    stripped_text: Javascript source code with comments stripped out.

  Raises:
    DepsException: The name of a resource was not formatted properly.
  """
  res = module.ModuleDependencyMetadata()
  if module_name != 'tvcm':
    res.dependent_module_names.append('tvcm')
  if not module_name:
    raise Exception("Module.name must be set.")

  rest = stripped_text
  while True:
    # Search for require statements in the rest of the file.
    m_r = re.search("""tvcm\s*\.\s*require\((["'])(.+?)\\1\)""",
                    rest, re.DOTALL)
    m_s = re.search("""tvcm\s*\.\s*requireStylesheet\((["'])(.+?)\\1\)""",
                    rest, re.DOTALL)
    m_t = re.search("""tvcm\s*\.\s*requireTemplate\((["'])(.+?)\\1\)""",
                    rest, re.DOTALL)
    m_irs = re.search("""tvcm\s*\.\s*requireRawScript\((["'])(.+?)\\1\)""",
                    rest, re.DOTALL)
    matches = [m for m in [m_r, m_s, m_t, m_irs] if m]

    # Figure out which was first.
    matches.sort(key=lambda x: x.start())
    if len(matches):
      m = matches[0]
    else:
      break

    if m == m_r:
      dependent_module_name = m.group(2)
      if '/' in dependent_module_name:
        raise module.DepsException('Slashes are not allowed in module names. '
                                   "Use '.' instead: %s" % dependent_module_name)
      if dependent_module_name.endswith('js'):
        raise module.DepsException("module names shouldn't end with .js"
                                   'The module system will append that for you: %s' %
                                   dependent_module_name)
      res.dependent_module_names.append(dependent_module_name)
    elif m == m_s:
      style_sheet_name = m.group(2)
      if '/' in style_sheet_name:
        raise module.DepsException('Slashes are not allowed in style sheet names. '
                                   "Use '.' instead: %s" % style_sheet_name)
      if style_sheet_name.endswith('.css'):
        raise module.DepsException('Style sheets should not end in .css. '
                                  'The module system will append that for you: %s' %
                                  style_sheet_name)
      res.style_sheet_names.append(style_sheet_name)
    elif m == m_t:
      html_template_name = m.group(2)
      if '/' in html_template_name:
        raise module.DepsException('Slashes are not allowed in html template names. '
                                   "Use '.' instead: %s" % html_template_name)
      if html_template_name.endswith('.html'):
        raise module.DepsException(
            'HTML templates resource names should not include extension. '
            'The module system will append that for you.' %
            html_template_name)
      res.html_template_names.append(html_template_name)
    elif m == m_irs:
      name = m.group(2)
      res.dependent_raw_script_relative_paths.append(name)

    rest = rest[m.end():]

  return res