r88913 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r88912‎ | r88913 | r88914 >
Date:18:42, 26 May 2011
Author:foxtrott
Status:deferred
Tags:
Comment:
Importing Lingo extension
Modified paths:
  • /trunk/extensions/Lingo/COPYING (added) (history)
  • /trunk/extensions/Lingo/Lingo.php (added) (history)
  • /trunk/extensions/Lingo/README (added) (history)
  • /trunk/extensions/Lingo/tooltip.css (added) (history)
  • /trunk/extensions/Lingo/tooltip.min.js (added) (history)

Diff [purge]

Index: trunk/extensions/Lingo/tooltip.css
@@ -0,0 +1,19 @@
 2+#tooltip {
 3+ position: absolute;
 4+ z-index: 3000;
 5+ border: 1px solid #111;
 6+ background-color: #eee;
 7+ padding: 3px;
 8+ font-size: 1.2em;
 9+ opacity: 0.85;
 10+}
 11+#tooltip h3, #tooltip div { margin: 0; }
 12+
 13+.tooltip_hide {
 14+ display: none;
 15+}
 16+
 17+.tooltip_abbr {
 18+ cursor: help;
 19+ border-bottom: 1px dashed green;
 20+}
\ No newline at end of file
Property changes on: trunk/extensions/Lingo/tooltip.css
___________________________________________________________________
Added: svn:eol-style
121 + native
Index: trunk/extensions/Lingo/tooltip.min.js
@@ -0,0 +1,28 @@
 2+/*
 3+ * jQuery Tooltip plugin 1.3
 4+ *
 5+ * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
 6+ * http://docs.jquery.com/Plugins/Tooltip
 7+ *
 8+ * Copyright (c) 2006 - 2008 Jörn Zaefferer
 9+ *
 10+ * $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $
 11+ *
 12+ * Dual licensed under the MIT and GPL licenses:
 13+ * http://www.opensource.org/licenses/mit-license.php
 14+ * http://www.gnu.org/licenses/gpl.html
 15+ */;(function($){var helper={},current,title,tID,IE=$.browser.msie&&/MSIE\s(5\.5|6\.)/.test(navigator.userAgent),track=false;$.tooltip={blocked:false,defaults:{delay:200,fade:false,showURL:true,extraClass:"",top:15,left:15,id:"tooltip"},block:function(){$.tooltip.blocked=!$.tooltip.blocked;}};$.fn.extend({tooltip:function(settings){settings=$.extend({},$.tooltip.defaults,settings);createHelper(settings);return this.each(function(){$.data(this,"tooltip",settings);this.tOpacity=helper.parent.css("opacity");this.tooltipText=this.title;$(this).removeAttr("title");this.alt="";}).mouseover(save).mouseout(hide).click(hide);},fixPNG:IE?function(){return this.each(function(){var image=$(this).css('backgroundImage');if(image.match(/^url\(["']?(.*\.png)["']?\)$/i)){image=RegExp.$1;$(this).css({'backgroundImage':'none','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='"+image+"')"}).each(function(){var position=$(this).css('position');if(position!='absolute'&&position!='relative')$(this).css('position','relative');});}});}:function(){return this;},unfixPNG:IE?function(){return this.each(function(){$(this).css({'filter':'',backgroundImage:''});});}:function(){return this;},hideWhenEmpty:function(){return this.each(function(){$(this)[$(this).html()?"show":"hide"]();});},url:function(){return this.attr('href')||this.attr('src');}});function createHelper(settings){if(helper.parent)return;helper.parent=$('<div id="'+settings.id+'"><h3></h3><div class="body"></div><div class="url"></div></div>').appendTo(document.body).hide();if($.fn.bgiframe)helper.parent.bgiframe();helper.title=$('h3',helper.parent);helper.body=$('div.body',helper.parent);helper.url=$('div.url',helper.parent);}function settings(element){return $.data(element,"tooltip");}function handle(event){if(settings(this).delay)tID=setTimeout(show,settings(this).delay);else
 16+show();track=!!settings(this).track;$(document.body).bind('mousemove',update);update(event);}function save(){if($.tooltip.blocked||this==current||(!this.tooltipText&&!settings(this).bodyHandler))return;current=this;title=this.tooltipText;if(settings(this).bodyHandler){helper.title.hide();var bodyContent=settings(this).bodyHandler.call(this);if(bodyContent.nodeType||bodyContent.jquery){helper.body.empty().append(bodyContent)}else{helper.body.html(bodyContent);}helper.body.show();}else if(settings(this).showBody){var parts=title.split(settings(this).showBody);helper.title.html(parts.shift()).show();helper.body.empty();for(var i=0,part;(part=parts[i]);i++){if(i>0)helper.body.append("<br/>");helper.body.append(part);}helper.body.hideWhenEmpty();}else{helper.title.html(title).show();helper.body.hide();}if(settings(this).showURL&&$(this).url())helper.url.html($(this).url().replace('http://','')).show();else
 17+helper.url.hide();helper.parent.addClass(settings(this).extraClass);if(settings(this).fixPNG)helper.parent.fixPNG();handle.apply(this,arguments);}function show(){tID=null;if((!IE||!$.fn.bgiframe)&&settings(current).fade){if(helper.parent.is(":animated"))helper.parent.stop().show().fadeTo(settings(current).fade,current.tOpacity);else
 18+helper.parent.is(':visible')?helper.parent.fadeTo(settings(current).fade,current.tOpacity):helper.parent.fadeIn(settings(current).fade);}else{helper.parent.show();}update();}function update(event){if($.tooltip.blocked)return;if(event&&event.target.tagName=="OPTION"){return;}if(!track&&helper.parent.is(":visible")){$(document.body).unbind('mousemove',update)}if(current==null){$(document.body).unbind('mousemove',update);return;}helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");var left=helper.parent[0].offsetLeft;var top=helper.parent[0].offsetTop;if(event){left=event.pageX+settings(current).left;top=event.pageY+settings(current).top;var right='auto';if(settings(current).positionLeft){right=$(window).width()-left;left='auto';}helper.parent.css({left:left,right:right,top:top});}var v=viewport(),h=helper.parent[0];if(v.x+v.cx<h.offsetLeft+h.offsetWidth){left-=h.offsetWidth+20+settings(current).left;helper.parent.css({left:left+'px'}).addClass("viewport-right");}if(v.y+v.cy<h.offsetTop+h.offsetHeight){top-=h.offsetHeight+20+settings(current).top;helper.parent.css({top:top+'px'}).addClass("viewport-bottom");}}function viewport(){return{x:$(window).scrollLeft(),y:$(window).scrollTop(),cx:$(window).width(),cy:$(window).height()};}function hide(event){if($.tooltip.blocked)return;if(tID)clearTimeout(tID);current=null;var tsettings=settings(this);function complete(){helper.parent.removeClass(tsettings.extraClass).hide().css("opacity","");}if((!IE||!$.fn.bgiframe)&&tsettings.fade){if(helper.parent.is(':animated'))helper.parent.stop().fadeTo(tsettings.fade,0,complete);else
 19+helper.parent.stop().fadeOut(tsettings.fade,complete);}else
 20+complete();if(settings(this).fixPNG)helper.parent.unfixPNG();}})(jQuery);
 21+
 22+jQuery(function() {
 23+ jQuery(".tooltip_abbr").tooltip( {
 24+ bodyHandler : function() {
 25+ return jQuery("span", this).html();
 26+ },
 27+ showURL : false
 28+ });
 29+});
\ No newline at end of file
Property changes on: trunk/extensions/Lingo/tooltip.min.js
___________________________________________________________________
Added: svn:eol-style
130 + native
Index: trunk/extensions/Lingo/COPYING
@@ -0,0 +1,350 @@
 2+The license text below "----" applies to all files within this distribution,
 3+other than those that are in a directory which contains files named "LICENSE"
 4+or "COPYING", or a subdirectory thereof. For those files, the license text
 5+contained in said file overrides any license information contained in
 6+directories of smaller depth. Alternative licenses are typically used for
 7+software that is provided by external parties, and merely packaged with this
 8+software for convenience.
 9+
 10+----
 11+
 12+ GNU GENERAL PUBLIC LICENSE
 13+ Version 2, June 1991
 14+
 15+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 16+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 17+ Everyone is permitted to copy and distribute verbatim copies
 18+ of this license document, but changing it is not allowed.
 19+
 20+ Preamble
 21+
 22+ The licenses for most software are designed to take away your
 23+freedom to share and change it. By contrast, the GNU General Public
 24+License is intended to guarantee your freedom to share and change free
 25+software--to make sure the software is free for all its users. This
 26+General Public License applies to most of the Free Software
 27+Foundation's software and to any other program whose authors commit to
 28+using it. (Some other Free Software Foundation software is covered by
 29+the GNU Library General Public License instead.) You can apply it to
 30+your programs, too.
 31+
 32+ When we speak of free software, we are referring to freedom, not
 33+price. Our General Public Licenses are designed to make sure that you
 34+have the freedom to distribute copies of free software (and charge for
 35+this service if you wish), that you receive source code or can get it
 36+if you want it, that you can change the software or use pieces of it
 37+in new free programs; and that you know you can do these things.
 38+
 39+ To protect your rights, we need to make restrictions that forbid
 40+anyone to deny you these rights or to ask you to surrender the rights.
 41+These restrictions translate to certain responsibilities for you if you
 42+distribute copies of the software, or if you modify it.
 43+
 44+ For example, if you distribute copies of such a program, whether
 45+gratis or for a fee, you must give the recipients all the rights that
 46+you have. You must make sure that they, too, receive or can get the
 47+source code. And you must show them these terms so they know their
 48+rights.
 49+
 50+ We protect your rights with two steps: (1) copyright the software, and
 51+(2) offer you this license which gives you legal permission to copy,
 52+distribute and/or modify the software.
 53+
 54+ Also, for each author's protection and ours, we want to make certain
 55+that everyone understands that there is no warranty for this free
 56+software. If the software is modified by someone else and passed on, we
 57+want its recipients to know that what they have is not the original, so
 58+that any problems introduced by others will not reflect on the original
 59+authors' reputations.
 60+
 61+ Finally, any free program is threatened constantly by software
 62+patents. We wish to avoid the danger that redistributors of a free
 63+program will individually obtain patent licenses, in effect making the
 64+program proprietary. To prevent this, we have made it clear that any
 65+patent must be licensed for everyone's free use or not licensed at all.
 66+
 67+ The precise terms and conditions for copying, distribution and
 68+modification follow.
 69+
 70+ GNU GENERAL PUBLIC LICENSE
 71+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 72+
 73+ 0. This License applies to any program or other work which contains
 74+a notice placed by the copyright holder saying it may be distributed
 75+under the terms of this General Public License. The "Program", below,
 76+refers to any such program or work, and a "work based on the Program"
 77+means either the Program or any derivative work under copyright law:
 78+that is to say, a work containing the Program or a portion of it,
 79+either verbatim or with modifications and/or translated into another
 80+language. (Hereinafter, translation is included without limitation in
 81+the term "modification".) Each licensee is addressed as "you".
 82+
 83+Activities other than copying, distribution and modification are not
 84+covered by this License; they are outside its scope. The act of
 85+running the Program is not restricted, and the output from the Program
 86+is covered only if its contents constitute a work based on the
 87+Program (independent of having been made by running the Program).
 88+Whether that is true depends on what the Program does.
 89+
 90+ 1. You may copy and distribute verbatim copies of the Program's
 91+source code as you receive it, in any medium, provided that you
 92+conspicuously and appropriately publish on each copy an appropriate
 93+copyright notice and disclaimer of warranty; keep intact all the
 94+notices that refer to this License and to the absence of any warranty;
 95+and give any other recipients of the Program a copy of this License
 96+along with the Program.
 97+
 98+You may charge a fee for the physical act of transferring a copy, and
 99+you may at your option offer warranty protection in exchange for a fee.
 100+
 101+ 2. You may modify your copy or copies of the Program or any portion
 102+of it, thus forming a work based on the Program, and copy and
 103+distribute such modifications or work under the terms of Section 1
 104+above, provided that you also meet all of these conditions:
 105+
 106+ a) You must cause the modified files to carry prominent notices
 107+ stating that you changed the files and the date of any change.
 108+
 109+ b) You must cause any work that you distribute or publish, that in
 110+ whole or in part contains or is derived from the Program or any
 111+ part thereof, to be licensed as a whole at no charge to all third
 112+ parties under the terms of this License.
 113+
 114+ c) If the modified program normally reads commands interactively
 115+ when run, you must cause it, when started running for such
 116+ interactive use in the most ordinary way, to print or display an
 117+ announcement including an appropriate copyright notice and a
 118+ notice that there is no warranty (or else, saying that you provide
 119+ a warranty) and that users may redistribute the program under
 120+ these conditions, and telling the user how to view a copy of this
 121+ License. (Exception: if the Program itself is interactive but
 122+ does not normally print such an announcement, your work based on
 123+ the Program is not required to print an announcement.)
 124+
 125+These requirements apply to the modified work as a whole. If
 126+identifiable sections of that work are not derived from the Program,
 127+and can be reasonably considered independent and separate works in
 128+themselves, then this License, and its terms, do not apply to those
 129+sections when you distribute them as separate works. But when you
 130+distribute the same sections as part of a whole which is a work based
 131+on the Program, the distribution of the whole must be on the terms of
 132+this License, whose permissions for other licensees extend to the
 133+entire whole, and thus to each and every part regardless of who wrote it.
 134+
 135+Thus, it is not the intent of this section to claim rights or contest
 136+your rights to work written entirely by you; rather, the intent is to
 137+exercise the right to control the distribution of derivative or
 138+collective works based on the Program.
 139+
 140+In addition, mere aggregation of another work not based on the Program
 141+with the Program (or with a work based on the Program) on a volume of
 142+a storage or distribution medium does not bring the other work under
 143+the scope of this License.
 144+
 145+ 3. You may copy and distribute the Program (or a work based on it,
 146+under Section 2) in object code or executable form under the terms of
 147+Sections 1 and 2 above provided that you also do one of the following:
 148+
 149+ a) Accompany it with the complete corresponding machine-readable
 150+ source code, which must be distributed under the terms of Sections
 151+ 1 and 2 above on a medium customarily used for software interchange; or,
 152+
 153+ b) Accompany it with a written offer, valid for at least three
 154+ years, to give any third party, for a charge no more than your
 155+ cost of physically performing source distribution, a complete
 156+ machine-readable copy of the corresponding source code, to be
 157+ distributed under the terms of Sections 1 and 2 above on a medium
 158+ customarily used for software interchange; or,
 159+
 160+ c) Accompany it with the information you received as to the offer
 161+ to distribute corresponding source code. (This alternative is
 162+ allowed only for noncommercial distribution and only if you
 163+ received the program in object code or executable form with such
 164+ an offer, in accord with Subsection b above.)
 165+
 166+The source code for a work means the preferred form of the work for
 167+making modifications to it. For an executable work, complete source
 168+code means all the source code for all modules it contains, plus any
 169+associated interface definition files, plus the scripts used to
 170+control compilation and installation of the executable. However, as a
 171+special exception, the source code distributed need not include
 172+anything that is normally distributed (in either source or binary
 173+form) with the major components (compiler, kernel, and so on) of the
 174+operating system on which the executable runs, unless that component
 175+itself accompanies the executable.
 176+
 177+If distribution of executable or object code is made by offering
 178+access to copy from a designated place, then offering equivalent
 179+access to copy the source code from the same place counts as
 180+distribution of the source code, even though third parties are not
 181+compelled to copy the source along with the object code.
 182+
 183+ 4. You may not copy, modify, sublicense, or distribute the Program
 184+except as expressly provided under this License. Any attempt
 185+otherwise to copy, modify, sublicense or distribute the Program is
 186+void, and will automatically terminate your rights under this License.
 187+However, parties who have received copies, or rights, from you under
 188+this License will not have their licenses terminated so long as such
 189+parties remain in full compliance.
 190+
 191+ 5. You are not required to accept this License, since you have not
 192+signed it. However, nothing else grants you permission to modify or
 193+distribute the Program or its derivative works. These actions are
 194+prohibited by law if you do not accept this License. Therefore, by
 195+modifying or distributing the Program (or any work based on the
 196+Program), you indicate your acceptance of this License to do so, and
 197+all its terms and conditions for copying, distributing or modifying
 198+the Program or works based on it.
 199+
 200+ 6. Each time you redistribute the Program (or any work based on the
 201+Program), the recipient automatically receives a license from the
 202+original licensor to copy, distribute or modify the Program subject to
 203+these terms and conditions. You may not impose any further
 204+restrictions on the recipients' exercise of the rights granted herein.
 205+You are not responsible for enforcing compliance by third parties to
 206+this License.
 207+
 208+ 7. If, as a consequence of a court judgment or allegation of patent
 209+infringement or for any other reason (not limited to patent issues),
 210+conditions are imposed on you (whether by court order, agreement or
 211+otherwise) that contradict the conditions of this License, they do not
 212+excuse you from the conditions of this License. If you cannot
 213+distribute so as to satisfy simultaneously your obligations under this
 214+License and any other pertinent obligations, then as a consequence you
 215+may not distribute the Program at all. For example, if a patent
 216+license would not permit royalty-free redistribution of the Program by
 217+all those who receive copies directly or indirectly through you, then
 218+the only way you could satisfy both it and this License would be to
 219+refrain entirely from distribution of the Program.
 220+
 221+If any portion of this section is held invalid or unenforceable under
 222+any particular circumstance, the balance of the section is intended to
 223+apply and the section as a whole is intended to apply in other
 224+circumstances.
 225+
 226+It is not the purpose of this section to induce you to infringe any
 227+patents or other property right claims or to contest validity of any
 228+such claims; this section has the sole purpose of protecting the
 229+integrity of the free software distribution system, which is
 230+implemented by public license practices. Many people have made
 231+generous contributions to the wide range of software distributed
 232+through that system in reliance on consistent application of that
 233+system; it is up to the author/donor to decide if he or she is willing
 234+to distribute software through any other system and a licensee cannot
 235+impose that choice.
 236+
 237+This section is intended to make thoroughly clear what is believed to
 238+be a consequence of the rest of this License.
 239+
 240+ 8. If the distribution and/or use of the Program is restricted in
 241+certain countries either by patents or by copyrighted interfaces, the
 242+original copyright holder who places the Program under this License
 243+may add an explicit geographical distribution limitation excluding
 244+those countries, so that distribution is permitted only in or among
 245+countries not thus excluded. In such case, this License incorporates
 246+the limitation as if written in the body of this License.
 247+
 248+ 9. The Free Software Foundation may publish revised and/or new versions
 249+of the General Public License from time to time. Such new versions will
 250+be similar in spirit to the present version, but may differ in detail to
 251+address new problems or concerns.
 252+
 253+Each version is given a distinguishing version number. If the Program
 254+specifies a version number of this License which applies to it and "any
 255+later version", you have the option of following the terms and conditions
 256+either of that version or of any later version published by the Free
 257+Software Foundation. If the Program does not specify a version number of
 258+this License, you may choose any version ever published by the Free Software
 259+Foundation.
 260+
 261+ 10. If you wish to incorporate parts of the Program into other free
 262+programs whose distribution conditions are different, write to the author
 263+to ask for permission. For software which is copyrighted by the Free
 264+Software Foundation, write to the Free Software Foundation; we sometimes
 265+make exceptions for this. Our decision will be guided by the two goals
 266+of preserving the free status of all derivatives of our free software and
 267+of promoting the sharing and reuse of software generally.
 268+
 269+ NO WARRANTY
 270+
 271+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 272+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
 273+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 274+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 275+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 276+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
 277+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
 278+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 279+REPAIR OR CORRECTION.
 280+
 281+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 282+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 283+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 284+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 285+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 286+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 287+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 288+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 289+POSSIBILITY OF SUCH DAMAGES.
 290+
 291+ END OF TERMS AND CONDITIONS
 292+
 293+ How to Apply These Terms to Your New Programs
 294+
 295+ If you develop a new program, and you want it to be of the greatest
 296+possible use to the public, the best way to achieve this is to make it
 297+free software which everyone can redistribute and change under these terms.
 298+
 299+ To do so, attach the following notices to the program. It is safest
 300+to attach them to the start of each source file to most effectively
 301+convey the exclusion of warranty; and each file should have at least
 302+the "copyright" line and a pointer to where the full notice is found.
 303+
 304+ <one line to give the program's name and a brief idea of what it does.>
 305+ Copyright (C) <year> <name of author>
 306+
 307+ This program is free software; you can redistribute it and/or modify
 308+ it under the terms of the GNU General Public License as published by
 309+ the Free Software Foundation; either version 2 of the License, or
 310+ (at your option) any later version.
 311+
 312+ This program is distributed in the hope that it will be useful,
 313+ but WITHOUT ANY WARRANTY; without even the implied warranty of
 314+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 315+ GNU General Public License for more details.
 316+
 317+ You should have received a copy of the GNU General Public License
 318+ along with this program; if not, write to the Free Software
 319+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 320+
 321+
 322+Also add information on how to contact you by electronic and paper mail.
 323+
 324+If the program is interactive, make it output a short notice like this
 325+when it starts in an interactive mode:
 326+
 327+ Gnomovision version 69, Copyright (C) year name of author
 328+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 329+ This is free software, and you are welcome to redistribute it
 330+ under certain conditions; type `show c' for details.
 331+
 332+The hypothetical commands `show w' and `show c' should show the appropriate
 333+parts of the General Public License. Of course, the commands you use may
 334+be called something other than `show w' and `show c'; they could even be
 335+mouse-clicks or menu items--whatever suits your program.
 336+
 337+You should also get your employer (if you work as a programmer) or your
 338+school, if any, to sign a "copyright disclaimer" for the program, if
 339+necessary. Here is a sample; alter the names:
 340+
 341+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 342+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
 343+
 344+ <signature of Ty Coon>, 1 April 1989
 345+ Ty Coon, President of Vice
 346+
 347+This General Public License does not permit incorporating your program into
 348+proprietary programs. If your program is a subroutine library, you may
 349+consider it more useful to permit linking proprietary applications with the
 350+library. If this is what you want to do, use the GNU Library General
 351+Public License instead of this License.
Property changes on: trunk/extensions/Lingo/COPYING
___________________________________________________________________
Added: svn:eol-style
1352 + native
Index: trunk/extensions/Lingo/README
@@ -0,0 +1 @@
 2+See http://www.mediawiki.org/wiki/Extension:Lingo for installation instructions
Property changes on: trunk/extensions/Lingo/README
___________________________________________________________________
Added: svn:eol-style
13 + native
Index: trunk/extensions/Lingo/Lingo.php
@@ -0,0 +1,133 @@
 2+<?php
 3+
 4+/**
 5+ * For more info see http://mediawiki.org/wiki/Extension:Lingo
 6+ *
 7+ * @defgroup Lingo
 8+ * @author Barry Coughlan
 9+ * @copyright 2010 Barry Coughlan
 10+ * @version 0.1
 11+ * @licence GNU General Public Licence 2.0 or later
 12+ */
 13+if ( !defined( 'MEDIAWIKI' ) ) {
 14+ die( 'This file is part of a MediaWiki extension, it is not a valid entry point.' );
 15+}
 16+
 17+define( 'LINGO_VERSION', '0.1' );
 18+
 19+
 20+
 21+$wgExtensionCredits[ 'parserhook' ][ ] = array(
 22+ 'path' => __FILE__,
 23+ 'name' => 'Lingo',
 24+ 'author' => 'Barry Coughlan',
 25+ 'url' => 'http://www.mediawiki.org/wiki/Extension:Lingo',
 26+ 'description' => 'Provides hover-over tool tips on articles from words defined on the [[Terminology]] page',
 27+ 'version' => '0.1'
 28+);
 29+
 30+$wgHooks[ 'OutputPageBeforeHTML' ][ ] = 'lingoHook';
 31+
 32+function lingoHook ( &$out, &$text ) {
 33+ global $wgOut, $wgScriptPath;
 34+ $out -> includeJQuery();
 35+ $out -> addHeadItem( 'tooltip.css', '<link rel="stylesheet" type="text/css" href="' . $wgScriptPath . '/extensions/Lingo/tooltip.css"/>' );
 36+ $out -> addHeadItem( 'tooltip.js', '<script type="text/javascript" src="' . $wgScriptPath . '/extensions/Lingo/tooltip.min.js"></script>' );
 37+ return $out;
 38+}
 39+
 40+function getLingoArray ( &$content ) {
 41+ $term = array( );
 42+ $c = explode( "\n", $content );
 43+
 44+ foreach ( $c as $entry ) {
 45+ if ( empty( $entry ) || $entry[ 0 ] !== ';' )
 46+ continue;
 47+
 48+ $terms = explode( ':', $entry, 2 );
 49+ if ( count( $terms ) < 2 )
 50+ continue; //Invalid syntax
 51+ //Add to array
 52+ $term[ trim( substr( $terms[ 0 ], 1 ) ) ] = trim( $terms[ 1 ] );
 53+ }
 54+ return $term;
 55+}
 56+
 57+$wgHooks[ 'ParserAfterTidy' ][ ] = 'lingoParser';
 58+
 59+function lingoParser ( &$parser, &$text ) {
 60+ global $wgRequest;
 61+ $action = $wgRequest -> getVal( 'action', 'view' );
 62+ if ( $action == "edit" || $action == "ajax" || isset( $_POST[ 'wpPreview' ] ) )
 63+ return false;
 64+
 65+ //Get Terminology page
 66+ $rev = Revision::newFromTitle( Title::makeTitle( null, 'Terminology' ) );
 67+ if ( !$rev )
 68+ return false;
 69+ $content = &$rev -> getText();
 70+ if ( empty( $content ) )
 71+ return false;
 72+
 73+ //Get array of terms
 74+ $terms = getLingoArray( $content );
 75+ //Get the minimum length abbreviation so we don't bother checking against words shorter than that
 76+ $min = min( array_map( 'strlen', array_keys( $terms ) ) );
 77+
 78+ //Parse HTML from page
 79+ $doc = new DOMDocument();
 80+ $text = '<html><meta http-equiv="content-type" content="charset=utf-8"/>' . $text . "</html>";
 81+ @$doc -> loadHTML( $text );
 82+ //Find all text in HTML.
 83+ $xpath = new DOMXpath( $doc );
 84+ $elements = $xpath -> query( "//*[text()!=' ']/text()" );
 85+
 86+ //Iterate all HTML text matches
 87+ $nb = $elements -> length;
 88+ $changed = false;
 89+ for ( $pos = 0; $pos < $nb; $pos++ ) {
 90+ $el = &$elements -> item( $pos );
 91+ if ( strlen( $el -> nodeValue ) < $min )
 92+ continue;
 93+
 94+ //Split node text into words, putting offset and text into $offsets[0] array
 95+ preg_match_all( "/\b[^\b\s\.,;:]+/", $el -> nodeValue, $offsets, PREG_OFFSET_CAPTURE );
 96+
 97+ //Search and replace words in reverse order (from end of string backwards),
 98+ //This way we don't mess up the offsets of the words as we iterate
 99+ $len = count( $offsets[ 0 ] );
 100+ for ( $i = $len - 1; $i >= 0; $i-- ) {
 101+ $offset = $offsets[ 0 ][ $i ];
 102+ //Check if word is an abbreviation from the terminologies
 103+ if ( !is_numeric( $offset[ 0 ] ) && isset( $terms[ $offset[ 0 ] ] ) ) { //Word matches, replace with appropriate span tag
 104+ $changed = true;
 105+
 106+ $tip = htmlentities( $terms[ $offset[ 0 ] ] );
 107+
 108+ $beforeMatchNode = $doc -> createTextNode( substr( $el -> nodeValue, 0, $offset[ 1 ] ) );
 109+ $afterMatchNode = $doc -> createTextNode( substr( $el -> nodeValue, $offset[ 1 ] + strlen( $offset[ 0 ] ), strlen( $el -> nodeValue ) - 1 ) );
 110+
 111+ //Wrap abbreviation in <span> tags
 112+ $span = @$doc -> createElement( 'span', $offset[ 0 ] );
 113+ $span -> setAttribute( 'class', "tooltip_abbr" );
 114+
 115+ //Wrap definition in <span> tags, hidden
 116+ $spanTip = @$doc -> createElement( 'span', $tip );
 117+ $spanTip -> setAttribute( 'class', "tooltip_hide" );
 118+
 119+ $el -> parentNode -> insertBefore( $beforeMatchNode, $el );
 120+ $el -> parentNode -> insertBefore( $span, $el );
 121+ $span -> appendChild( $spanTip );
 122+ $el -> parentNode -> insertBefore( $afterMatchNode, $el );
 123+ $el -> parentNode -> removeChild( $el );
 124+ $el = $beforeMatchNode; //Set new element to the text before the match for next iteration
 125+ }
 126+ }
 127+ }
 128+
 129+ if ( $changed ) {
 130+ $text = $doc -> saveHTML();
 131+ }
 132+
 133+ return true;
 134+}
Property changes on: trunk/extensions/Lingo/Lingo.php
___________________________________________________________________
Added: svn:eol-style
1135 + native

Status & tagging log