Exemple #1
0
 def show_list(self, image_prefix):
     self.templates_names = []
     self.sitecon = mw.get_connect()
     templates = self.sitecon.allpages(prefix=image_prefix, namespace=mw.TEMPLATE_NAMESPACE)  # images list by prefix
     for template in templates:
         self.templates_names.append(template.page_title)
     sublime.set_timeout(lambda: sublime.active_window().show_quick_panel(self.templates_names, self.on_done), 1)
    def run(self, edit):
        title = mw.get_title()
        sitecon = mw.get_connect()
        self.mw_get_page_backlinks(sitecon, title)

        if self.links:
            sublime.active_window().show_quick_panel(self.links, self.on_done)
        else:
            mw.status_message("Unable to find links to this page")
Exemple #3
0
 def show_list(self, image_prefix):
     if len(image_prefix) >= self.image_prefix_min_lenght:
         sitecon = mw.get_connect()
         images = sitecon.allpages(prefix=image_prefix, namespace=mw.IMAGE_NAMESPACE)  # images list by prefix
         # self.images_names = map(self.get_page_title, images)
         self.images_names = [self.get_page_title(x) for x in images]
         sublime.set_timeout(lambda: sublime.active_window().show_quick_panel(self.images_names, self.on_done), 1)
     else:
         sublime.message_dialog('Image prefix length must be more than %s. Operation canceled.' % self.image_prefix_min_lenght)
Exemple #4
0
    def command_run(self):

        pre_sitecon = mw.get_connect()
        # TODO: refact.. now: setup connection here.. next steps will reuse it.. else exit..
        #   otherwise we have trying to connect 2 times if connection unavailable (command, then notif..)
        if pre_sitecon:
            self.window.active_view().run_command(self.action, self.action_params)
            try:
                self.get_notifications()
            except Exception as e:
                mw.status_message('Mediawiker exception: %s' % e)
Exemple #5
0
 def on_done(self, file_descr=''):
     sitecon = mw.get_connect()
     if file_descr:
         self.file_descr = file_descr
     else:
         self.file_descr = '%s as %s' % (os.path.basename(self.file_path), self.file_destname)
     try:
         with open(self.file_path, 'rb') as f:
             sitecon.upload(f, self.file_destname, self.file_descr)
         mw.status_message('File %s successfully uploaded to wiki as %s' % (self.file_path, self.file_destname))
     except IOError as e:
         sublime.message_dialog('Upload io error: %s' % e)
     except Exception as e:
         sublime.message_dialog('Upload error: %s' % e)
Exemple #6
0
    def run(self, edit):
        sitecon = mw.get_connect()
        selected_text = self.view.substr(self.view.sel()[0]).strip()
        title = selected_text if selected_text else mw.get_title()
        self.mw_get_page_langlinks(sitecon, title)

        self.lang_prefixes = []
        for lang_prefix in self.links.keys():
            self.lang_prefixes.append(lang_prefix)

        self.links_names = ['%s: %s' % (lp, self.links[lp]) for lp in self.lang_prefixes]
        if self.links_names:
            sublime.active_window().show_quick_panel(self.links_names, self.on_done)
        else:
            mw.status_message('Unable to find laguage links for "%s"' % title)
Exemple #7
0
    def run(self, edit):
        notifications_type = mw.get_setting('mediawiki_notifications_show_all', True)
        self.read_sign = mw.get_setting('mediawiki_notifications_read_sign', ' [+]')
        sitecon = mw.get_connect()
        ns = sitecon.notifications()
        self.msgs = []
        if ns:
            if isinstance(ns, dict):
                for n in ns.keys():
                    msg = ns.get(n, {})
                    msg_read = msg.get('read', '')
                    if notifications_type or not msg_read:
                        self.msgs.append(self._get_data(msg))
            elif isinstance(ns, list):
                for msg in ns:
                    msg_read = msg.get('read', '')
                    if notifications_type or not msg_read:
                        self.msgs.append(self._get_data(msg))

        self.msgs = sorted(self.msgs, key=lambda k: k['read'])
        n_list = ['All in browser'] + ['%s, %s: %s (%s)%s' % (m['title'], m['agent'], m['timestamp'], m['type'], m['read']) for m in self.msgs]
        sublime.active_window().show_quick_panel(n_list, self.on_done)
Exemple #8
0
 def get_notifications(self):
     # check notifications on page open command
     if self.action == 'mediawiker_show_page' and self.check_notifications:
         sitecon = mw.get_connect()
         ns = sitecon.notifications()
         is_notify_exists = False
         if ns:
             if isinstance(ns, dict):
                 for n in ns.keys():
                     msg = ns.get(n, {})
                     msg_read = msg.get('read', None)
                     if not msg_read:
                         is_notify_exists = True
                         break
             elif isinstance(ns, list):
                 for msg in ns:
                     msg_read = msg.get('read', None)
                     if not msg_read:
                         is_notify_exists = True
                         break
         if is_notify_exists:
             show_notify = sublime.ok_cancel_dialog('You have new notifications.')
             if show_notify:
                 self.window.run_command("mediawiker_get_notifications")
Exemple #9
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)
Exemple #10
0
 def get_list_data(self, category_root):
     ''' get objects list by category name '''
     sitecon = mw.get_connect()
     return sitecon.Categories[category_root]
Exemple #11
0
 def do_search(self, string_value):
     sitecon = mw.get_connect()
     namespace = mw.get_setting('mediawiker_search_namespaces')
     return sitecon.search(search=string_value, what='text', limit=self.search_limit, namespace=namespace)
Exemple #12
0
 def run(self, edit):
     self.sitecon = mw.get_connect()
     self.category_root = mw.get_category(mw.get_setting('mediawiker_category_root'))[1]
     sublime.active_window().show_input_panel('Wiki root category:', self.category_root, self.get_category_menu, None, None)