def main(): AsyncIOMainLoop().install() doc = get_document() if not options.config.no_default_js: doc.add_jsfile( 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js') doc.add_jsfile('static/bootstrap.min.js') if not options.config.no_default_css: doc.add_cssfile('static/bootstrap.min.css') _user_static_dirs = set() for js in options.config.js_files: _user_static_dirs.add(path.dirname(js)) doc.add_jsfile(js) for css in options.config.css_files: _user_static_dirs.add(path.dirname(css)) doc.add_cssfile(css) # choices arg is better, but detecting error is not easy in livemark.vim if options.config.highlight_theme in STYLE_MAP: pygments_style = HtmlFormatter( style=options.config.highlight_theme).get_style_defs() else: pygments_style = HtmlFormatter('default').get_style_defs() doc.head.appendChild(Style(pygments_style)) script = Script(parent=doc.body) script.innerHTML = ''' function moveToElement(id) { var elm = document.getElementById(id) if (elm) { var x = window.scrollX var rect = elm.getBoundingClientRect() window.scrollTo(x, rect.top + window.scrollY) console.log(elm.textContent) } } ''' mount_point = Div(parent=doc.body, class_='container') mount_point.appendChild(H2('LiveMark is running...')) app = get_app(doc) app.add_static_path('static', static_dir) for _d in _user_static_dirs: app.add_static_path(_d, _d) web_server = start_server(app, port=options.config.browser_port) loop = asyncio.get_event_loop() vim_server = Server(port=options.config.vim_port, loop=loop, doc=doc, mount_point=mount_point) browser = webbrowser.get(options.config.browser) browser.open('http://localhost:{}'.format(options.config.browser_port)) try: vim_server.start() loop.run_forever() except KeyboardInterrupt: vim_server.stop() web_server.stop()
def get_elements(self): self.doc.body.style = 'margin: 0; padding: 0;' self.elm = Div() self.elm.style = ''' background-color: blue; width: 100px; height: 100px; display: inline-block; ''' self.elm.addEventListener('click', self.click) self.test_done = False return self.elm
class TestEvent(PyppeteerTestCase): def get_elements(self): self.doc.body.style = 'margin: 0; padding: 0;' self.elm = Div() self.elm.style = ''' background-color: blue; width: 100px; height: 100px; display: inline-block; ''' self.elm.addEventListener('click', self.click) self.test_done = False return self.elm def click(self, e): self.assertFalse(e.altKey) self.assertFalse(e.ctrlKey) self.assertFalse(e.metaKey) self.assertFalse(e.shiftKey) self.assertLessEqual(e.clientX, 100) self.assertLessEqual(e.clientY, 100) self.assertLessEqual(e.offsetX, 100) self.assertLessEqual(e.offsetY, 100) self.assertLessEqual(e.pageX, 100) self.assertLessEqual(e.pageY, 100) self.assertLessEqual(e.x, 100) self.assertLessEqual(e.y, 100) self.test_done = True @sync async def test_click(self): await self.element.click() await self.wait() self.assertIsTrue(self.test_done) @sync async def test_document_click(self): mock = MagicMock(_is_coroutine=False) self.doc.addEventListener('click', mock) await self.wait() await self.element.click() await self.wait() self.assertIsTrue(mock.called) @sync async def test_window_click(self): mock = MagicMock(_is_coroutine=False) self.doc.defaultView.addEventListener('click', mock) await self.wait() await self.element.click() await self.wait() self.assertIsTrue(mock.called)
def sample_page(**kwargs): doc = get_document() win = doc.defaultView app = Div() inp = Input(id='input', parent=app) win1 = H1(id='win1', parent=app) doc1 = H1(id='doc1', parent=app) input_view = H1(id='input_view', parent=app) def add_letter_doc(e): doc1.textContent = doc1.textContent + e.key def add_letter_win(e): win1.textContent = win1.textContent + e.key def input_handler(e): input_view.textContent = e.data doc.addEventListener('keypress', add_letter_doc) win.addEventListener('keypress', add_letter_win) inp.addEventListener('input', input_handler) return app
is_ = 'my-button' # set name at is_ class DefaultButton(MyButton): class_ = 'btn-default' is_ = 'default-button' if __name__ == '__main__': document = get_document() # Register MyElement document.defaultView.customElements.define('my-button', MyButton, {'extends': 'button'}) document.defaultView.customElements.define('default-button', DefaultButton, {'extends': 'button'}) # Load css and js file for bootstrap document.add_cssfile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css') document.add_jsfile('https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js') document.add_jsfile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js') div = Div(parent=document.body) div.innerHTML = ''' <button is="my-button">MyButton</button> <button is="default-button">DefaultButton</button> '''.strip() print(isinstance(div.firstChild, MyButton)) # True print(isinstance(div.lastChild, DefaultButton)) # True start_server() try: asyncio.get_event_loop().run_forever() except KeyboardInterrupt: stop_server()
from wdom.tag import Button, Div class MyButton(Button): # tag = 'button' <- tag name is already defined in Button class class_ = 'btn' is_ = 'my-button' # set name at is_ class DefaultButton(MyButton): class_ = 'btn-default' is_ = 'default-button' if __name__ == '__main__': document = get_document() # Register MyElement document.defaultView.customElements.define('my-button', MyButton, {'extends': 'button'}) document.defaultView.customElements.define('default-button', DefaultButton, {'extends': 'button'}) # Load css and js file for bootstrap document.add_cssfile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css') document.add_jsfile('https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js') document.add_jsfile('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js') div = Div(parent=document.body) div.innerHTML = ''' <button is="my-button">MyButton</button> <button is="default-button">DefaultButton</button> '''.strip() print(isinstance(div.firstChild, MyButton)) # True print(isinstance(div.lastChild, DefaultButton)) # True start()
def main(): AsyncIOMainLoop().install() doc = get_document() if not options.config.no_default_js: doc.add_jsfile( 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js' ) doc.add_jsfile('static/bootstrap.min.js') if not options.config.no_default_css: doc.add_cssfile('static/bootstrap.min.css') _user_static_dirs = set() for js in options.config.js_files: _user_static_dirs.add(path.dirname(js)) doc.add_jsfile(js) for css in options.config.css_files: _user_static_dirs.add(path.dirname(css)) doc.add_cssfile(css) # choices arg is better, but detecting error is not easy in livemark.vim if options.config.highlight_theme in STYLE_MAP: pygments_style = HtmlFormatter( style=options.config.highlight_theme).get_style_defs() else: pygments_style = HtmlFormatter('default').get_style_defs() doc.head.appendChild(Style(pygments_style)) script = Script(parent=doc.body) script.innerHTML = ''' function moveToElement(id) { var elm = document.getElementById(id) if (elm) { var x = window.scrollX var rect = elm.getBoundingClientRect() window.scrollTo(x, rect.top + window.scrollY) console.log(elm.textContent) } } ''' mount_point = Div(parent=doc.body, class_='container') mount_point.appendChild(H2('LiveMark is running...')) app = get_app(doc) app.add_static_path('static', static_dir) for _d in _user_static_dirs: app.add_static_path(_d, _d) web_server = start_server(app, port=options.config.browser_port) loop = asyncio.get_event_loop() vim_server = Server(port=options.config.vim_port, loop=loop, doc=doc, mount_point=mount_point) browser = webbrowser.get(options.config.browser) browser.open('http://localhost:{}'.format(options.config.browser_port)) try: vim_server.start() loop.run_forever() except KeyboardInterrupt: vim_server.stop() web_server.stop()