소스 검색

Created interlinks plugin

eikiu 10 년 전
부모
커밋
59def6018d
4개의 변경된 파일102개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      interlinks/__init__.py
  2. 46 0
      interlinks/interlinks.py
  3. 46 0
      interlinks/readme.md
  4. 9 0
      interlinks/test_data/testme.md

+ 1 - 0
interlinks/__init__.py

@@ -0,0 +1 @@
+from .interlinks import *

+ 46 - 0
interlinks/interlinks.py

@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+"""
+Interlinks
+=========================
+
+This plugin allows you to include "interwiki" or shortcuts links into the blog, as keyword>rest_of_url
+
+"""
+
+from bs4 import BeautifulSoup
+from pelican import signals
+import re
+
+interlinks = {}
+
+def getSettings (generator):
+
+	global interlinks
+
+	interlinks = {'this': generator.settings['SITEURL']+"/"}
+	if 'INTERLINKS' in generator.settings:
+		for key, value in generator.settings['INTERLINKS'].items():
+			interlinks[key] = value
+
+def content_object_init(instance):
+
+	if instance._content is not None:
+		content = instance._content
+		# use Python's built-in parser so no duplicated html & body tags appear, or use tag.unwrap()
+		text = BeautifulSoup(content, "html.parser")
+		
+		if 'a' in content:
+			for link in text.find_all(href=re.compile("(.+?)>")):
+				url = link.get('href')
+				m = re.search(r"(.+?)>", url).groups()
+				name = m[0]
+				if name in interlinks:
+					hi = url.replace(name+">",interlinks[name])
+					link['href'] = hi
+
+		instance._content = text.decode()
+
+def register():
+	signals.generator_init.connect(getSettings)
+	signals.content_object_init.connect(content_object_init)

+ 46 - 0
interlinks/readme.md

@@ -0,0 +1,46 @@
+Interlinks
+=========================
+
+This plugin allows you to include "interwiki" or shortcuts links into the blog, as keyword>rest-of-url
+
+Requirements
+--------------------
+``interlinks`` requires BeautifulSoup
+
+	pip install beautifulsoup4
+
+Installation
+--------------------
+
+Install the plugin normally (plugins folder), then add interlinks in the settings.py:
+
+	PLUGINS = ["interlinks"]
+	
+Usage
+------------------
+
+The interlinks are specified in the settings.py file as (example):
+
+	INTERLINKS = {
+	    'wikipedia_en': 'http://en.wikipedia.org/wiki/',
+	    'wikipedia_es': 'http://es.wikipedia.org/wiki/',
+	    'ddg': 'https://duckduckgo.com/?q='
+	}
+
+There's also a default key, ``this``, that is mapped to the ``SITEURL`` variable.
+
+Then, in a blog post, you just create a normal link but adding the ``keyword>`` syntax in the url specification, followed by the rest of the url. 
+
+Example 
+-------------------
+(markdown syntax)
+
+	[Normal boring link](http://www.example.com). But this is a [cool link](this>) that links to this site.
+
+	Search in [Wikipedia](wikipedia_en>python), ([here](wikipedia_es>python) in spanish). Also can [search](ddg>python) it.
+
+All the above will be rendered as: 
+
+	<p><a href="http://www.example.com">Normal boring link</a>. But this is a <a href="http://[yoursite]/index.html">cool link</a> that links to this site.</p>
+	
+	<p>Search in <a href="http://en.wikipedia.org/wiki/python">Wikipedia</a>, (<a href="http://es.wikipedia.org/wiki/python">here</a> in spanish). Also can <a href="https://duckduckgo.com/?q=python">search</a> it.</p>

+ 9 - 0
interlinks/test_data/testme.md

@@ -0,0 +1,9 @@
+Title: Testing
+Date: 3000-07-09
+Slug: plugin-test
+
+Testeando un poco la cosa
+
+[Normal boring link](http://www.example.com). But this is a [cool link](this>) that links to this site.
+
+Search in [Wikipedia](wikipedia_en>python), ([here](wikipedia_es>python) in spanish). Also can [search](ddg>python) it.