예제 #1
0
    def test_render_amd_includes_spec(self):
        from pyramid_amdjs.amd import init_amd_spec, ID_AMD_SPEC, RESOLVER

        self.cfg['amd.enabled'] = True
        self.cfg['amd.spec-dir'] = RESOLVER.resolve(
            'pyramid_amdjs:tests/dir/').abspath()
        self.cfg['amd.spec'] = [('test', 'test.js')]
        init_amd_spec(self.config)

        self.registry[ID_AMD_SPEC] = {
            'test': {'test.js': {'path': '/test/test.js'}},
            'test-init': RESOLVER.resolve(
                'pyramid_amdjs:tests/dir/test2.js').abspath()}

        text = self.request.init_amd('test').strip()
        self.assertIn(
            '<script src="http://example.com/_amdjs/'
            'bundles/test2.js?_v=123"> </script>', text)

        m_static = self.request.static_url = mock.Mock()
        m_static.return_value = 'http://example.com/_amd_test/test.js'

        text = self.request.init_amd('test', 'test').strip()
        self.assertIn(
            '<script src="http://example.com/_amd_test/test.js"> </script>\n'
            '<script src="http://example.com/_amd_test/test.js"></script>',
            text)
예제 #2
0
    def test_tween_spec(self):
        self.registry.settings['amd.enabled'] = True
        self.registry.settings['amd.spec-dir'] = RESOLVER.resolve(
            'pyramid_amdjs:tests/dir/').abspath()
        self.registry.settings['amd.spec'] = [('test', 'test.js')]
        init_amd_spec(self.config)

        self.registry[ID_AMD_SPEC] = {
            'test': {'test.js': {'path': '/test/test.js'}},
            'test-init': RESOLVER.resolve(
                'pyramid_amdjs:tests/dir/test2.js').abspath()}

        self.js = ['mod1', 'mod2']
        self.css = ['css1']
        self.fn = [(('jquery',), 'function($){}')]
        self.spec = 'test'

        res = self._make_one(self.request).text

        self.assertIn(
            '<script src="http://example.com/_amdjs/bundles/test2.js', res)
        self.assertIn(
            '<script type="text/javascript">curl({paths:pyramid_amd_modules},'
            "['mod1','mod2'])</script>", res)
        self.assertIn(
            "curl(['jquery'], function($){})", res)
예제 #3
0
    def test_tween_spec(self):
        self.registry.settings['amd.enabled'] = True
        self.registry.settings['amd.spec-dir'] = RESOLVER.resolve(
            'pyramid_amdjs:tests/dir/').abspath()
        self.registry.settings['amd.spec'] = [('test', 'test.js')]
        init_amd_spec(self.config)

        self.registry[ID_AMD_SPEC] = {
            'test': {
                'test.js': {
                    'path': '/test/test.js'
                }
            },
            'test-init':
            RESOLVER.resolve('pyramid_amdjs:tests/dir/test2.js').abspath()
        }

        self.js = ['mod1', 'mod2']
        self.css = ['css1']
        self.fn = [(('jquery', ), 'function($){}')]
        self.spec = 'test'

        res = self._make_one(self.request).text

        self.assertIn(
            '<script src="http://example.com/_amdjs/bundles/test2.js', res)
        self.assertIn(
            '<script type="text/javascript">curl({paths:pyramid_amd_modules},'
            "['mod1','mod2'])</script>", res)
        self.assertIn("curl(['jquery'], function($){})", res)
예제 #4
0
    def test_empty_spec(self):
        self._create_file("[test.js]\nmodules = lib1")

        cfg = self.registry.settings
        cfg['amd.spec'] = ''

        from pyramid_amdjs.amd import init_amd_spec, ID_AMD_SPEC

        # no amd-spec-dir
        init_amd_spec(self.config)

        storage = self.registry[ID_AMD_SPEC]
        self.assertEqual(storage, {})
예제 #5
0
    def test_simple(self):
        fn = self._create_file("[test.js]\nmodules = lib1")

        cfg = self.registry.settings
        cfg['amd.spec'] = [('', '%s' % fn), ('test', fn)]
        cfg['amd.spec-dir'] = 'pyramid_amdjs:tests/dir/'

        from pyramid_amdjs.amd import init_amd_spec, ID_AMD_SPEC
        init_amd_spec(self.config)

        storage = self.registry[ID_AMD_SPEC]
        self.assertIn('', storage)
        self.assertTrue(storage['']['test.js']['path'].endswith('/test.js'))
        self.assertIn('test', storage)
예제 #6
0
    def test_register_static_view_for_specs(self):
        from pyramid_amdjs.amd import init_amd_spec, RESOLVER

        d = RESOLVER.resolve('pyramid_amdjs:tests/dir/').abspath()

        cfg = self.registry.settings
        cfg['amd.spec'] = [('test', 'test2.js')]
        cfg['amd.spec-dir'] = d

        m_asv = self.config.add_static_view = mock.Mock()

        init_amd_spec(self.config)
        self.assertTrue(m_asv.called)

        name, path = m_asv.call_args[0]
        self.assertEqual('_amdjs/bundles/', name)
        self.assertTrue(path.endswith('pyramid_amdjs/tests/dir'))
예제 #7
0
def includeme(cfg):
    from pyramid.settings import asbool, aslist
    from pyramid.interfaces import IStaticURLInfo
    from pyramid.compat import urlparse

    from pyramid_amdjs import amd
    from pyramid_amdjs.pstatic import StaticURLInfo

    # amdjs tween
    cfg.add_tween('pyramid_amdjs.require.amdjs_tween_factory')

    def get_amdjs_data(request):
        return {'js': [], 'css': [], 'spec': '', 'fn': [], 'init': False}
    cfg.add_request_method(get_amdjs_data, 'amdjs_data', True, True)

    # static
    cfg.registry.registerUtility(StaticURLInfo(), IStaticURLInfo)

    # settings
    settings = cfg.get_settings()
    settings['amd.debug'] = asbool(settings.get('amd.debug', 't'))
    settings['amd.enabled'] = asbool(settings.get('amd.enabled', 't'))
    settings['amd.spec-dir'] = settings.get('amd.spec-dir', '').strip()
    settings['amd.tmpl-cache'] = settings.get('amd.tmpl-cache', '').strip()
    settings['amd.tmpl-langs'] = [
        s.strip() for s in aslist(settings.get('amd.tmpl-langs', ''))]
    settings['amd.node'] = settings.get('amd.node', '').strip()

    settings['static.url'] = settings.get('static.url', '').strip()
    settings['static.rewrite'] = asbool(settings.get('static.rewrite', 'f'))
    if not urlparse.urlparse(settings['static.url'])[0]:
        settings['static.rewrite'] = False
    else:
        if not settings['static.url'].endswith('/'):
            settings['static.url'] = '%s/' % settings['static.url']

    # spec settings
    specs = []
    for key, val in sorted(settings.items()):
        if key.startswith('amd.spec.'):
            specs.append((key[9:].strip(), val.strip()))

    settings['amd.spec'] = specs
    cfg.registry[amd.ID_AMD_SPEC] = {}

    # request methods
    cfg.add_request_method(amd.request_amd_init, 'init_amd')
    cfg.add_request_method(amd.request_includes, 'include_js')
    cfg.add_request_method(amd.request_css_includes, 'include_css')

    cfg.add_request_method(require.require_js, 'require')
    cfg.add_request_method(require.require_js, 'require_js')
    cfg.add_request_method(require.require_fn, 'require_fn')
    cfg.add_request_method(require.require_css, 'require_css')
    cfg.add_request_method(require.require_spec, 'require_spec')

    # config directives
    cfg.add_directive('add_amd_js', amd.add_js_module)
    cfg.add_directive('add_amd_css', amd.add_css_module)

    if settings['amd.debug']:
        from pyramid_amdjs import amddebug
        settings['amd.debug.data'] = {
            'paths': [], 'cache': {}, 'mods': {}}

        cfg.registry[amd.ID_AMD_BUILD] = amddebug.build_init
        cfg.registry[amd.ID_AMD_BUILD_MD5] = amddebug.build_md5
        cfg.add_directive('add_amd_dir', amddebug.add_amd_dir)
    else:
        cfg.registry[amd.ID_AMD_BUILD] = amd.build_init
        cfg.registry[amd.ID_AMD_BUILD_MD5] = amd.build_md5
        cfg.add_directive('add_amd_dir', amd.add_amd_dir)

    cfg.registry[amd.ID_AMD_MD5] = {}

    # amd init route
    cfg.add_route('pyramid-amd-init', '/_amd_{specname}.js')

    # static assets
    cfg.add_static_view('_amdjs/static', 'pyramid_amdjs:static/')

    # handlebars bundle
    from .handlebars import register_handlebars_bundle

    cfg.add_directive(
        'add_hb_bundle', register_handlebars_bundle)
    cfg.add_directive(
        'add_handlebars_bundle', register_handlebars_bundle)
    cfg.add_route(
        'pyramid-hb-bundle', '/_handlebars/{name}.js')

    # less bundle
    from .less import register_less_bundle, less_bundle_url

    cfg.add_directive(
        'add_less_bundle', register_less_bundle)
    cfg.add_route(
        'pyramid-less-bundle', '/_amd_less/{name}')

    cfg.add_request_method(less_bundle_url, 'less_bundle_url')

    # scan
    cfg.scan('pyramid_amdjs')
    cfg.include('pyramid_amdjs.static')

    # init amd specs
    amd.init_amd_spec(cfg)