Beispiel #1
0
    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])
Beispiel #2
0
 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)
Beispiel #3
0
    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])
Beispiel #4
0
 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})
Beispiel #5
0
 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))
Beispiel #6
0
 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))
Beispiel #7
0
 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)
Beispiel #8
0
 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))
Beispiel #9
0
    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())
Beispiel #10
0
    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
Beispiel #11
0
    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())
Beispiel #12
0
 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})
Beispiel #13
0
    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)
Beispiel #14
0
    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
                }
            })