Difference between revisions of "Html2Wiki"

From Freephile Wiki
Jump to navigation Jump to search
(Remove feature)
(9 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
__NOTOC__ __NOEDITSECTION__
 
__NOTOC__ __NOEDITSECTION__
<!-- {{Feature
+
This extension officially lives at https://www.mediawiki.org/wiki/Extension:Html2Wiki This extension to MediaWiki is used to import HTML content (including images) into the wiki.  We don't want to maintain another copy of the documentation here, but we may well host development ideas.
|explains= Special:Html2Wiki
 
|description=Convert  web pages, Google Docs, or entire websites (including images) to your wiki
 
|notes=Authored by [[User:Freephile|Greg Rundlett]]
 
|tests=Interesting test case: http://howtoreallypronouncegif.com/
 
|examples=
 
}} -->
 
This extension officially lives at [[mw:Extension:Html2Wiki]]
 
  
See the documentation there, since it is maintained with the software.
+
== Custom "Tools" item ==
 +
This is the JavaScript code (added to MediaWiki:Common.js) used to add a custom element to the '''Tools''' panel to the left
  
This site may host development ideas or interesting examples/demos.
+
<source lang="JavaScript">
  
== Other conversion tools ==
+
/* Any JavaScript here will be loaded for all users on every page load. */
Html2Wiki relies on <code>pandoc</code> to do format conversionHere are some other approaches to doing conversions.
+
=== LibreOffice ===
+
LibreOffice Writer can connect to a Wiki, and allow you to edit and save articles in the wiki.
+
/** * Cusomize the sidebar * @see https://www.mediawiki.org/wiki/Manual:Interface/Sidebar * added by Greg Rundlett <info@eQuality-Tech.com> */
* Make sure your LibreOffice can export MediaWiki directly from any format that LibreOffice can read
+
function isObject( obj ) {
sudo apt-get install libreoffice-wiki-publisher
+
return typeof obj == 'object' && obj !== null;
With this library installed, you can now export documents straight out of LibreOffice.
+
}
 +
 +
function isArray( obj ) {
 +
return isObject( obj ) && obj.constructor.toString().indexOf( 'Array' ) != -1;
 +
}
 +
   
 +
Array.prototype.Contains = function( element, strict ) {
 +
for( var i in this ) {
 +
if( this[i] == element && !strict || this[i] === element ) {
 +
return true;
 +
}
 +
}
 +
return false;
 +
};
 +
 +
function ModifySidebar( action, section, name, link ) {
 +
try {
 +
var target;
 +
switch ( section ) {
 +
case 'languages':
 +
target = 'p-lang';
 +
break;
 +
case 'toolbox':
 +
target = 'p-tb';
 +
break;
 +
case 'navigation':
 +
target = 'p-navigation';
 +
break;
 +
default:
 +
target = 'p-' + section;
 +
break;
 +
}
 +
 +
if ( action == 'add' ) {
 +
var node = document.getElementById( target )
 +
  .getElementsByTagName( 'div' )[0]
 +
  .getElementsByTagName( 'ul' )[0];
 +
 +
var aNode = document.createElement( 'a' );
 +
var liNode = document.createElement( 'li' );
 +
 +
aNode.appendChild( document.createTextNode( name ) );
 +
aNode.setAttribute( 'href', link );
 +
liNode.appendChild( aNode );
 +
liNode.className = 'plainlinks';
 +
node.appendChild( liNode );
 +
}
 +
 +
if ( action == 'remove' ) {
 +
var list = document.getElementById( target )
 +
  .getElementsByTagName( 'div' )[0]
 +
  .getElementsByTagName( 'ul' )[0];
 +
 +
var listelements = list.getElementsByTagName( 'li' );
 +
 +
for ( var i = 0; i < listelements.length; i++ ) {
 +
if (
 +
listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
 +
listelements[i].getElementsByTagName( 'a' )[0].href == link
 +
)
 +
{
 +
list.removeChild( listelements[i] );
 +
}
 +
}
 +
}
 +
 +
} catch( e ) {
 +
// let's just ignore what's happened
 +
return;
 +
}
 +
}
 +
 +
function CustomizeModificationsOfSidebar() {
 +
// adds [[Special:Html2Wiki]] to toolbox
 +
ModifySidebar( 'add', 'toolbox', 'Import HTML', '/wiki/Special:Html2Wiki' );
 +
// removes [[Special:Upload]] from toolbox
 +
// ModifySidebar( 'remove', 'toolbox', 'Upload file', 'http://en.wikipedia.org/wiki/Special:Upload' );
 +
}
 +
// for anyone
 +
addOnloadHook( CustomizeModificationsOfSidebar );
 +
// customize only for bureaucrats
 +
// didn't work in testing
 +
/*if ( isArray( wgUserGroups ) ) { if ( wgUserGroups.Contains( 'bureaucrat' ) ) { addOnloadHook( CustomizeModificationsOfSidebar ); } }*/
  
=== Two-step conversion ===
+
</source>
This isn't really better than using LibreOffice directly, but it is an option to at least compare the output (assuming direct export is giving a bad result)
 
* Convert a doc to mediawiki by converting to HTML first, and then using <code>pandoc</code> to convert HTML to MediaWiki markup
 
libreoffice --headless --convert-to html /tmp/awk.cheat.sheet.doc && \
 
pandoc awk.cheat.sheet.html -o awk.cheat.sheet.mw -f html -t mediawiki
 
 
 
=== Online conversion ===
 
https://devotter.com/converter is a webform interface to pandoc
 
 
 
Note: [[MediaWiki/Toolbox]] explains how we add a custom link to the "toolbox" element of this site.
 
 
 
# {{@todo}} [https://phabricator.wikimedia.org/project/board/1094/ Html2Wiki workboard]
 
# {{@todo}} upgrade extension to work with new loading mechanism
 
# {{@todo}} Create a service to import Google Docs to wiki
 
# {{@todo}} Expand Html2Wiki to include anything that pandoc supports
 

Revision as of 01:28, 26 February 2015

This extension officially lives at https://www.mediawiki.org/wiki/Extension:Html2Wiki This extension to MediaWiki is used to import HTML content (including images) into the wiki. We don't want to maintain another copy of the documentation here, but we may well host development ideas.

Custom "Tools" item

This is the JavaScript code (added to MediaWiki:Common.js) used to add a custom element to the Tools panel to the left

/* Any JavaScript here will be loaded for all users on every page load. */
 
 
/** * Cusomize the sidebar * @see https://www.mediawiki.org/wiki/Manual:Interface/Sidebar * added by Greg Rundlett <info@eQuality-Tech.com> */
function isObject( obj ) {
	return typeof obj == 'object' && obj !== null;
}
 
function isArray( obj ) {
	return isObject( obj ) && obj.constructor.toString().indexOf( 'Array' ) != -1;
}
 
Array.prototype.Contains = function( element, strict ) {
	for( var i in this ) {
		if( this[i] == element && !strict || this[i] === element ) {
			return true;
		}
	}
	return false;
};
 
function ModifySidebar( action, section, name, link ) {
	try {
		var target;
		switch ( section ) {
			case 'languages':
				target = 'p-lang';
				break;
			case 'toolbox':
				target = 'p-tb';
				break;
			case 'navigation':
				target = 'p-navigation';
				break;
			default:
				target = 'p-' + section;
				break;
		}
 
		if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 
			var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );
 
			aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}
 
		if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];
 
			var listelements = list.getElementsByTagName( 'li' );
 
			for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}
 
	} catch( e ) {
		// let's just ignore what's happened
		return;
	}
}
 
function CustomizeModificationsOfSidebar() {
	// adds [[Special:Html2Wiki]] to toolbox
	ModifySidebar( 'add', 'toolbox', 'Import HTML', '/wiki/Special:Html2Wiki' );
	// removes [[Special:Upload]] from toolbox
	// ModifySidebar( 'remove', 'toolbox', 'Upload file', 'http://en.wikipedia.org/wiki/Special:Upload' );
}
// for anyone
addOnloadHook( CustomizeModificationsOfSidebar );
// customize only for bureaucrats
// didn't work in testing
/*if ( isArray( wgUserGroups ) ) { 	if ( wgUserGroups.Contains( 'bureaucrat' ) ) { 		addOnloadHook( CustomizeModificationsOfSidebar ); 	} }*/