def get_template_params(self, text): site_active = mw.get_view_site() site = mw.get_setting('site').get(site_active) is_wikia = site.get('is_wikia', False) if is_wikia: infobox = mw.WikiaInfoboxParser() infobox.feed(text) params_list = infobox.get_params_list() if params_list: return ''.join(['|%s\n' % p for p in params_list]) params_list = [] # ex: {{{title|{{PAGENAME}}}}} pattern = r'(\{{3}.*?\}{3,})' parameters = re.findall(pattern, text) for param in parameters: if param.startswith('{{{'): param = param[3:] if param.endswith('}}}'): param = param[:-3] # cut non-param }} from "if" tags, etc.. # ex: {{#if: ... {{{data2|}}}}} close_brackets_diff = param.count('}') - param.count('{') if close_brackets_diff > 0: param = param[:-close_brackets_diff] # default value or not.. param = param.replace('|', '=') if '|' in param else '%s=' % param if param not in params_list: params_list.append(param) return ''.join(['|%s\n' % p for p in params_list])
def run(self): # self.site_active = mw.get_setting('mediawiki_site_active') self.site_active = mw.get_view_site() sites = mw.get_setting('mediawiki_site') # self.site_keys = map(self.is_checked, list(sites.keys())) self.site_keys = [self.is_checked(x) for x in sorted(sites.keys(), key=str.lower)] sublime.set_timeout(lambda: self.window.show_quick_panel(self.site_keys, self.on_done), 1)
def get_template_params(self, text): site_active = utils.get_view_site() site = utils.props.get_setting('site').get(site_active) is_wikia = site.get('is_wikia', False) if is_wikia: infobox = utils.WikiaInfoboxParser() infobox.feed(text) params_list = infobox.get_params_list() if params_list: return ''.join(['|%s\n' % p for p in params_list]) params_list = [] # ex: {{{title|{{PAGENAME}}}}} pattern = r'(\{{3}.*?\}{3,})' parameters = re.findall(pattern, text) for param in parameters: if param.startswith('{{{'): param = param[3:] if param.endswith('}}}'): param = param[:-3] # cut non-param }} from "if" tags, etc.. # ex: {{#if: ... {{{data2|}}}}} close_brackets_diff = param.count('}') - param.count('{') if close_brackets_diff > 0: param = param[:-close_brackets_diff] # default value or not.. param = param.replace('|', '=') if '|' in param else '%s=' % param if param not in params_list: params_list.append(param) return ''.join(['|%s\n' % p for p in params_list])
def process(self, index): if index == 0: site_active_new = None site_active = utils.get_view_site() sites = utils.props.get_setting('site') host = sites[site_active]['host'] domain_first = '.'.join(host.split('.')[-2:]) # NOTE: only links like lang_prefix.site.com supported.. (like en.wikipedia.org) host_new = '%s.%s' % (self.lang_prefix, domain_first) # if host_new exists in settings we can open page for site in sites: if sites[site]['host'] == host_new: site_active_new = site break if site_active_new: # open page with force site_active_new sublime.active_window().run_command( utils.cmd('page'), { 'action': utils.cmd('show_page'), 'action_params': { 'title': self.page_name, 'site_active': site_active_new } }) else: utils.status_message('Settings not found for host %s.' % (host_new)) elif index == 1: self.view.run_command(utils.cmd('replace_text'), {'text': self.page_name})
def run(self, storage_name='pagelist'): site_name_active = mw.get_view_site() pagelist = mw.get_setting(storage_name, {}) self.my_pages = pagelist.get(site_name_active, []) if self.my_pages: self.my_pages.reverse() sublime.set_timeout(lambda: self.window.show_quick_panel(self.my_pages, self.on_done), 1) else: mw.status_message('List of pages for wiki "%s" is empty.' % (site_name_active))
def run(self, storage_name='pagelist'): site_name_active = utils.get_view_site() pagelist = utils.props.get_setting(storage_name, {}) self.my_pages = pagelist.get(site_name_active, []) if self.my_pages: self.my_pages.reverse() sublime.set_timeout(lambda: self.window.show_quick_panel(self.my_pages, self.on_done), 1) else: utils.status_message('List of pages for wiki "%s" is empty.' % (site_name_active))
def run(self): self.site_active = utils.get_view_site() sites = utils.props.get_setting('site') self.site_keys = [ self.is_checked(x) for x in sorted(sites.keys(), key=str.lower) ] sublime.set_timeout( lambda: self.window.show_quick_panel(self.site_keys, self.on_done), 1)
def run(self, storage_name='mediawiker_pagelist'): # site_name_active = mw.get_setting('mediawiki_site_active') site_name_active = mw.get_view_site() mediawiker_pagelist = mw.get_setting(storage_name, {}) self.my_pages = mediawiker_pagelist.get(site_name_active, []) if self.my_pages: self.my_pages.reverse() # error 'Quick panel unavailable' fix with timeout.. sublime.set_timeout(lambda: self.window.show_quick_panel(self.my_pages, self.on_done), 1) else: mw.status_message('List of pages for wiki "%s" is empty.' % (site_name_active))
def on_activated(self, view): current_syntax = mw.props.get_view_setting(view, 'syntax', plugin=False) # TODO: move method to check mediawiker view to mwutils if (current_syntax is not None and current_syntax.startswith(mw.from_package('Mediawiki')) and current_syntax.endswith(('.tmLanguage', '.sublime-syntax'))): # Mediawiki mode mw.props.set_view_setting(view, 'is_here', True) if not view.file_name(): mw.props.set_view_setting(view, 'wiki_instead_editor', mw.get_setting('wiki_instead_editor')) else: mw.props.set_view_setting(view, 'wiki_instead_editor', False) mw.props.set_view_setting(view, 'site', mw.get_view_site())
def show_select_wiki(self, section, popup): popup.append(self.html.h2('Select wiki')) sites = utils.props.get_setting('site') site_active = utils.get_view_site() popup.append(self.html.ul()) # new popup = self.append_toggle(popup=popup, name='New', status=self.icon(self.RADIO_UNMARKED), value='edit', section=section, params='new', goto='Edit site/new') for site in sorted(sites.keys(), key=str.lower): link = self.html.link(url=self.to_s({ 'section': section, 'value': 'edit', 'params': site, 'goto': 'Edit site/%s' % site }), text=self.html.span( self.icon(self.EDIT_ICON)['icon'], self.icon(self.EDIT_ICON)['css_class'])) adv = ' %s' % (link) popup = self.append_toggle( popup=popup, name=site, status=self.icon( self.RADIO_MARKED if site == site_active else self.RADIO_UNMARKED, 'success' if site == site_active else 'error'), value='', section=section, params=site, goto=section, adv=adv) else: popup = self.post_prepare_popup(section, popup) popup.append(self.html.ul(True)) return popup
def on_activated(self, view): current_syntax = utils.props.get_view_setting(view, 'syntax', plugin=False) # TODO: move method to check mediawiker view to mwutils if (current_syntax is not None and current_syntax.startswith( utils.p.from_package('Mediawiki')) and current_syntax.endswith( ('.tmLanguage', '.sublime-syntax'))): # Mediawiki mode utils.props.set_view_setting(view, 'is_here', True) if not view.file_name(): utils.props.set_view_setting( view, 'wiki_instead_editor', utils.props.get_setting('wiki_instead_editor')) else: utils.props.set_view_setting(view, 'wiki_instead_editor', False) utils.props.set_view_setting(view, 'site', utils.get_view_site())
def process(self, index): if index == 0: site_active_new = None site_active = mw.get_view_site() sites = mw.get_setting('mediawiki_site') host = sites[site_active]['host'] domain_first = '.'.join(host.split('.')[-2:]) # NOTE: only links like lang_prefix.site.com supported.. (like en.wikipedia.org) host_new = '%s.%s' % (self.lang_prefix, domain_first) # if host_new exists in settings we can open page for site in sites: if sites[site]['host'] == host_new: site_active_new = site break if site_active_new: # open page with force site_active_new sublime.active_window().run_command("mediawiker_page", { 'action': 'mediawiker_show_page', 'action_params': {'title': self.page_name, 'site_active': site_active_new} }) else: mw.status_message('Settings not found for host %s.' % (host_new)) elif index == 1: self.view.run_command('mediawiker_replace_text', {'text': self.page_name})
def run(self, edit): sitecon = mw.get_connect() text = self.view.substr(sublime.Region(0, self.view.size())) site_active = mw.get_view_site() site_list = mw.get_setting('mediawiki_site') host = site_list[site_active]['host'] path = site_list[site_active]['path'] head_default = mw.get_setting('mediawiki_preview_head') head = '\n'.join(site_list[site_active].get('preview_custom_head', head_default)) lang = mw.get_setting('mediawiki_preview_lang', 'en') preview_file = mw.get_setting('mediawiki_preview_file', 'Wiki_page_preview_') site_http = 'https' if site_list[site_active].get('https', False) else 'http' html_header_lines = [ '<!DOCTYPE html>', '<html>', '<head>', '%(head)s', '</head>', '<body style="margin:20px;">' ] geshi_css = self.get_geshi_langs() head_tpl = Template(head) head_str = head_tpl.render(http=site_http, host=host, path=path, lang=lang, geshi_css=geshi_css) html_header = '\n'.join(html_header_lines) % {'head': head_str} html_footer = '</body></html>' html = sitecon.parse(text=text, title=mw.get_title(), disableeditsection=True).get('text', {}).get('*', '') html = html.replace('"//', '"%s://' % site_http) # internal links: images,.. html = html.replace('"/', '"%s://%s/' % (site_http, host)) # internal local links: images,.. if preview_file.endswith('.html'): preview_file = os.path.join(sublime.packages_path(), 'User', preview_file) # fixed file in User folder if pythonver >= 3: with open(preview_file, 'w', encoding='utf-8') as tf: tf.write(html_header) tf.write(html) tf.write(html_footer) else: with open(preview_file, 'w') as tf: tf.write(html_header) tf.write(html.encode('utf-8')) tf.write(html_footer) html_view = sublime.active_window().find_open_file(preview_file) if html_view: sublime.active_window().focus_view(html_view) else: sublime.active_window().open_file(preview_file) webbrowser.open(tf.name) else: # temporary file if pythonver >= 3: with tempfile.NamedTemporaryFile(mode='w+t', suffix='.html', prefix=preview_file, dir=None, delete=False, encoding='utf-8') as tf: tf.write(html_header) tf.write(html) tf.write(html_footer) else: with tempfile.NamedTemporaryFile(mode='w+t', suffix='.html', prefix=preview_file, dir=None, delete=False) as tf: tf.write(html_header) tf.write(html.encode('utf-8')) tf.write(html_footer) webbrowser.open(tf.name)
def on_site_selected(self, index): if index < 0: return self.src_site_name = self.site_keys[index] # get remote page src_api = utils.PreAPI(conman=utils.conman, site_name=self.src_site_name) src_page = src_api.call('get_page', title=self.title) if not src_api.page_can_read(src_page): sublime.message_dialog(utils.api.PAGE_CANNOT_READ_MESSAGE) return text = src_api.page_get_text(src_page) cnt = len([i for i in src_page.images()]) if sublime.ok_cancel_dialog('Copy %s images from source page?' % cnt): images = src_page.images() for image in images: file_name = src_api.page_attr(image, 'page_title') is_success = utils.api.call( 'process_upload', url=image.imageinfo['url'], filename=file_name, description='Image for page "%s", copied from "%s"' % (self.title, self.src_site_name)) if is_success: utils.status_message( 'File %s successfully copied to wiki' % (file_name)) else: utils.status_message( 'Error while trying to copy file %s to wiki' % (file_name)) cnt = len([i for i in src_page.templates()]) if sublime.ok_cancel_dialog( 'Copy %s templates (only first level) from source page?' % cnt): templates = src_page.templates() for template in templates: template_name = src_api.page_attr(template, 'page_title') template_text = src_api.page_get_text(template) is_success = utils.api.save_page( page=template, text=template_text, summary='Template copy from %s for page %s' % (self.src_site_name, self.title), mark_as_minor=False) if not is_success: utils.status_message( 'There was an error while trying to copy template [[%s]] to wiki "%s".' % (template_name, utils.get_view_site()), replace=['[', ']']) else: utils.status_message( 'Template [[%s]] was successfully copied to wiki "%s".' % (self.title, utils.get_view_site()), replace=['[', ']']) # get local page page = utils.api.call('get_page', title=self.title) is_success = utils.api.save_page(page=page, text=text, summary='Page copy from %s' % self.src_site_name, mark_as_minor=False) if not is_success: utils.status_message( 'There was an error while trying to copy page [[%s]] to wiki "%s".' % (self.title, utils.get_view_site()), replace=['[', ']']) return else: utils.status_message( 'Page [[%s]] was successfully copied to wiki "%s".' % (self.title, utils.get_view_site()), replace=['[', ']']) self.view.window().run_command( utils.cmd('page'), { 'action': utils.cmd('show_page'), 'action_params': { 'title': self.title, 'new_tab': True } })