r82177 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r82176‎ | r82177 | r82178 >
Date:18:54, 15 February 2011
Author:80686
Status:deferred
Tags:
Comment:
pushing v0.8 into MediaWiki 1.17 branch
Modified paths:
  • /branches/REL1_17/extensions/SelectCategory/SelectCategory (added) (history)

Diff [purge]

Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.css
@@ -0,0 +1,19 @@
 2+/* Stylesheet for the SelectCategory extension, an extension of the
 3+ * edit box of MediaWiki to provide an easy way to add category links
 4+ * to a specific page.
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ * @author Leon Weber <leon@leonweber.de> & Manuel Schneider <manuel.schneider@wikimedia.ch>
 9+ * @copyright © 2006 by Leon Weber & Manuel Schneider
 10+ * @licence GNU General Public Licence 2.0 or later
 11+*/
 12+
 13+#SelectCategoryBox {
 14+ width: 100%;
 15+ padding: .1em;
 16+}
 17+
 18+ul#SelectCategoryList, #SelectCategoryList ul {
 19+ list-style: none outside none !important;
 20+}
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.css
___________________________________________________________________
Added: svn:eol-style
121 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/images/treeview-default.gif
Cannot display: file marked as a binary type.
svn:mime-type = image/gif
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/images/treeview-default.gif
___________________________________________________________________
Added: svn:mime-type
222 + image/gif
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/images/treeview-default-line.gif
Cannot display: file marked as a binary type.
svn:mime-type = image/gif
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/images/treeview-default-line.gif
___________________________________________________________________
Added: svn:mime-type
323 + image/gif
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/CHANGELOG
@@ -0,0 +1,48 @@
 2+* v0.8
 3+ - using JQuery Treeview to collapse / expand branches
 4+
 5+* v0.7dev
 6+ - Update to comply to the current MediaWiki core (Patch by Lambert Lum)
 7+ - Changed the user interface to use checkboxes instead of scrolling lists
 8+ for selecting (Patch by Lambert Lum)
 9+ - Fixed to work with category names containing spaces
 10+ - Fixed a possible raw sql injection problem
 11+ - Update to survive category loops
 12+ - Indent subcategories like in a tree
 13+ - Set our hook functions immediately instead of setting them from the fnSelectCategory()
 14+ entry function. This is to avoid some weird race condition someone experienced where
 15+ the hooks where called before fnSelectCategory(), so they weren't set yet. (Patch by
 16+ Lambert Lum)
 17+ - Avoid an array indexing error (Patch by Lambert Lum)
 18+
 19+* v0.6 - 2008-01-19
 20+ - using wfLoadExtensionMessages now, all messages in one file
 21+
 22+* v0.5 - 2007-10-12
 23+ - fixed problem with additional newline at sectionedits
 24+ - preserve category sortkeys
 25+ - don't show up on sectionedits
 26+ - make extension work with preview
 27+ - removed warning when no category is selected
 28+ - leading blanks will not be removed anymore
 29+ thanks to Daniel Arnold (sortkey, sectionedit) and Samuel Gélineau
 30+ (blanks, preview, warning)
 31+
 32+* v0.4 - 2006-17-12
 33+ - added checks of global configuration variables before setting them
 34+ - changed $wgSelectCategoryRoot into an array of namespaces
 35+
 36+* v0.3 - 2006-12-12
 37+ - added $wgSelectCategoryEnableSubpages
 38+ - disambiguation of page title in database query
 39+ - removed minor flaws
 40+
 41+* v0.2 - 2006-11-30
 42+ - integration into upload form
 43+ - added localised messages
 44+ - major bugfixes in category listing
 45+
 46+* v0.1 - 2006-11-24
 47+ - first working version
 48+ - supports edit form
 49+
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/CHANGELOG
___________________________________________________________________
Added: svn:eol-style
150 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.js
@@ -0,0 +1,5 @@
 2+$j( document ).ready( function() {
 3+ $j( "#SelectCategoryList" ).treeview( {
 4+ collapsed: true
 5+ });
 6+} );
\ No newline at end of file
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.js
___________________________________________________________________
Added: svn:eol-style
17 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategoryFunctions.php
@@ -0,0 +1,326 @@
 2+<?php
 3+
 4+/**
 5+ * Implementation of the SelectCategory extension, an extension of the
 6+ * edit box of MediaWiki to provide an easy way to add category links
 7+ * to a specific page.
 8+ *
 9+ * @file
 10+ * @ingroup Extensions
 11+ * @author Leon Weber <leon@leonweber.de> & Manuel Schneider <manuel.schneider@wikimedia.ch>
 12+ * @copyright © 2006 by Leon Weber & Manuel Schneider
 13+ * @licence GNU General Public Licence 2.0 or later
 14+ */
 15+
 16+if( !defined( 'MEDIAWIKI' ) ) {
 17+ echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );
 18+ die();
 19+}
 20+
 21+## Entry point for the hook and main worker function for editing the page:
 22+function fnSelectCategoryShowHook( $m_isUpload = false, $m_pageObj ) {
 23+
 24+ # check if we should do anything or sleep
 25+ if ( fnSelectCategoryCheckConditions( $m_isUpload, $m_pageObj ) ) {
 26+ # Register CSS file for our select box:
 27+ global $wgOut, $wgScriptPath, $wgUser, $wgTitle;
 28+ global $wgSelectCategoryMaxLevel;
 29+
 30+ $wgOut->addLink(
 31+ array(
 32+ 'rel' => 'stylesheet',
 33+ 'type' => 'text/css',
 34+ 'href' => $wgScriptPath.'/extensions/SelectCategory/SelectCategory.css'
 35+ )
 36+ );
 37+ $wgOut->addLink(
 38+ array(
 39+ 'rel' => 'stylesheet',
 40+ 'type' => 'text/css',
 41+ 'href' => $wgScriptPath.'/extensions/SelectCategory/jquery.treeview.css'
 42+ )
 43+ );
 44+ $wgOut->addScript( '<script src="'.$wgScriptPath.'/extensions/SelectCategory/jquery.treeview.js" type="text/javascript"></script>' );
 45+ $wgOut->addScript( '<script src="'.$wgScriptPath.'/extensions/SelectCategory/SelectCategory.js" type="text/javascript"></script>' );
 46+
 47+ $m_skin =& $wgUser->getSkin();
 48+
 49+ $m_skin =& $wgUser->getSkin();
 50+
 51+ # Get all categories from wiki:
 52+ $m_allCats = fnSelectCategoryGetAllCategories();
 53+ # Load system messages:
 54+ wfLoadExtensionMessages( 'SelectCategory' );
 55+ # Get the right member variables, depending on if we're on an upload form or not:
 56+ if( !$m_isUpload ) {
 57+ # Extract all categorylinks from page:
 58+ $m_pageCats = fnSelectCategoryGetPageCategories( $m_pageObj );
 59+
 60+ # Never ever use editFormTextTop here as it resides outside the <form> so we will never get contents
 61+ $m_place = 'editFormTextAfterWarn';
 62+ # Print the localised title for the select box:
 63+ $m_textBefore = '<b>'. wfMsg( 'selectcategory-title' ) . '</b>:';
 64+ } else {
 65+ # No need to get categories:
 66+ $m_pageCats = array();
 67+
 68+ # Place output at the right place:
 69+ $m_place = 'uploadFormTextAfterSummary';
 70+ # Print the part of the table including the localised title for the select box:
 71+ $m_textBefore = "\n</td></tr><tr><td align='right'><label for='wpSelectCategory'>" . wfMsg( 'selectcategory-title' ) .":</label></td><td align='left'>";
 72+ }
 73+ # Introduce the output:
 74+ $m_pageObj->$m_place .= "<!-- SelectCategory begin -->\n";
 75+ # Print the select box:
 76+ $m_pageObj->$m_place .= "\n$m_textBefore";
 77+
 78+ # Begin list output, use <div> to enable custom formatting
 79+ $m_level = 0;
 80+ $m_pageObj->$m_place .= '<ul id="SelectCategoryList">';
 81+ foreach( $m_allCats as $m_cat => $m_depth ) {
 82+ $checked = '';
 83+ # See if the category was already added, so check it
 84+ if( isset( $m_pageCats[$m_cat] ) ) {
 85+ $checked = 'checked="checked"';
 86+ }
 87+ # Clean HTML Output:
 88+ $category = htmlspecialchars( $m_cat );
 89+
 90+ # iterate through levels and adjust divs accordingly
 91+ while( $m_level < $m_depth ) {
 92+ # Collapse subcategories after reaching the configured MaxLevel
 93+ if( $m_level >= ( $wgSelectCategoryMaxLevel - 1 ) ) {
 94+ $m_class = 'display:none;';
 95+ } else {
 96+ $m_class = 'display:block;';
 97+ }
 98+ $m_pageObj->$m_place .= '<ul style="'.$m_class.'">'."\n";
 99+ $m_level++;
 100+ }
 101+ if( $m_level == $m_depth ) $m_pageObj->$m_place .= '</li>'."\n";
 102+ while( $m_level > $m_depth ) {
 103+ $m_pageObj->$m_place .= '</ul></li>'."\n";
 104+ $m_level--;
 105+ }
 106+ # Clean names for text output
 107+ $title = str_replace( '_', ' ', $category );
 108+ $m_title = $wgTitle->newFromText( $category, NS_CATEGORY );
 109+ # Output the actual checkboxes, indented
 110+ $m_pageObj->$m_place .= '<li><input type="checkbox" name="SelectCategoryList[]" value="'.$category.'" class="checkbox" '.$checked.' />'.$m_skin->link( $m_title, $title )."\n";
 111+ # set id for next level
 112+ $m_level_id = 'sc_'.$m_cat;
 113+ } # End walking through cats (foreach)
 114+ # End of list output - close all remaining divs
 115+ while( $m_level > -1 ) {
 116+ $m_pageObj->$m_place .= '</li></ul>'."\n";
 117+ $m_level--;
 118+ }
 119+
 120+ # Print localised help string:
 121+ $m_pageObj->$m_place .= "<!-- SelectCategory end -->\n";
 122+ }
 123+
 124+ # Return true to let the rest work:
 125+ return true;
 126+}
 127+
 128+## Entry point for the hook and main worker function for saving the page:
 129+function fnSelectCategorySaveHook( $m_isUpload, $m_pageObj ) {
 130+ global $wgContLang;
 131+ global $wgTitle;
 132+
 133+ # check if we should do anything or sleep
 134+ if ( fnSelectCategoryCheckConditions( $m_isUpload, $m_pageObj ) ) {
 135+
 136+ # Get localised namespace string:
 137+ $m_catString = $wgContLang->getNsText( NS_CATEGORY );
 138+
 139+ # default sort key is page name with stripped namespace name,
 140+ # otherwise sorting is ugly.
 141+ if( $wgTitle->getNamespace() == NS_MAIN ) {
 142+ $default_sortkey = "";
 143+ } else {
 144+ $default_sortkey = "|{{PAGENAME}}";
 145+ }
 146+
 147+ # Get some distance from the rest of the content:
 148+ $m_text = "\n";
 149+
 150+ # Iterate through all selected category entries:
 151+ if (array_key_exists('SelectCategoryList', $_POST)) {
 152+ foreach( $_POST['SelectCategoryList'] as $m_cat ) {
 153+ $m_text .= "\n[[$m_catString:$m_cat$default_sortkey]]";
 154+ }
 155+ }
 156+ # If it is an upload we have to call a different method:
 157+ if ( $m_isUpload ) {
 158+ $m_pageObj->mUploadDescription .= $m_text;
 159+ } else{
 160+ $m_pageObj->textbox1 .= $m_text;
 161+ }
 162+ }
 163+
 164+ # Return to the let MediaWiki do the rest of the work:
 165+ return true;
 166+}
 167+
 168+## Get all categories from the wiki - starting with a given root or otherwise detect root automagically (expensive)
 169+## Returns an array like this:
 170+## array (
 171+## 'Name' => (int) Depth,
 172+## ...
 173+## )
 174+function fnSelectCategoryGetAllCategories() {
 175+ global $wgTitle;
 176+ global $wgSelectCategoryRoot;
 177+
 178+ # Get current namespace (save duplicate call of method):
 179+ $m_namespace = $wgTitle->getNamespace();
 180+ if( $m_namespace >= 0 && $wgSelectCategoryRoot[$m_namespace] ) {
 181+ # Include root and step into the recursion:
 182+ $m_allCats = array_merge( array( $wgSelectCategoryRoot[$m_namespace] => 0 ), fnSelectCategoryGetChildren( $wgSelectCategoryRoot[$m_namespace] ) );
 183+ } else {
 184+ # Initialize return value:
 185+ $m_allCats = array();
 186+
 187+ # Get a database object:
 188+ $m_dbObj = wfGetDB( DB_SLAVE );
 189+ # Get table names to access them in SQL query:
 190+ $m_tblCatLink = $m_dbObj->tableName( 'categorylinks' );
 191+ $m_tblPage = $m_dbObj->tableName( 'page' );
 192+
 193+ # Automagically detect root categories:
 194+ $m_sql = " SELECT tmpSelectCat1.cl_to AS title
 195+ FROM $m_tblCatLink AS tmpSelectCat1
 196+ LEFT JOIN $m_tblPage AS tmpSelectCatPage ON (tmpSelectCat1.cl_to = tmpSelectCatPage.page_title AND tmpSelectCatPage.page_namespace = 14)
 197+ LEFT JOIN $m_tblCatLink AS tmpSelectCat2 ON tmpSelectCatPage.page_id = tmpSelectCat2.cl_from
 198+ WHERE tmpSelectCat2.cl_from IS NULL GROUP BY tmpSelectCat1.cl_to";
 199+ # Run the query:
 200+ $m_res = $m_dbObj->query( $m_sql, __METHOD__ );
 201+ # Process the resulting rows:
 202+ while ( $m_row = $m_dbObj->fetchRow( $m_res ) ) {
 203+ $m_allCats += array( $m_row['title'] => 0 );
 204+ $m_allCats += fnSelectCategoryGetChildren( $m_row['title'] );
 205+ }
 206+ # Free result:
 207+ $m_dbObj->freeResult( $m_res );
 208+ }
 209+
 210+ # Afterwards return the array to the caller:
 211+ return $m_allCats;
 212+}
 213+
 214+function fnSelectCategoryGetChildren( $m_root, $m_depth = 1 ) {
 215+ # Initialize return value:
 216+ $m_allCats = array();
 217+
 218+ # Get a database object:
 219+ $m_dbObj = wfGetDB( DB_SLAVE );
 220+ # Get table names to access them in SQL query:
 221+ $m_tblCatLink = $m_dbObj->tableName( 'categorylinks' );
 222+ $m_tblPage = $m_dbObj->tableName( 'page' );
 223+
 224+ # The normal query to get all children of a given root category:
 225+ $m_sql = '
 226+ SELECT tmpSelectCatPage.page_title AS title
 227+ FROM '.$m_tblCatLink.' AS tmpSelectCat
 228+ LEFT JOIN '.$m_tblPage.' AS tmpSelectCatPage
 229+ ON tmpSelectCat.cl_from = tmpSelectCatPage.page_id
 230+ WHERE tmpSelectCat.cl_to LIKE '.$m_dbObj->addQuotes( $m_root ).'
 231+ AND tmpSelectCatPage.page_namespace = 14
 232+ ORDER BY tmpSelectCatPage.page_title ASC;';
 233+ # Run the query:
 234+ $m_res = $m_dbObj->query( $m_sql, __METHOD__ );
 235+ # Process the resulting rows:
 236+ while ( $m_row = $m_dbObj->fetchRow( $m_res ) ) {
 237+ # Survive category link loops:
 238+ if( $m_root == $m_row['title'] ) {
 239+ continue;
 240+ }
 241+ # Add current entry to array:
 242+ $m_allCats += array( $m_row['title'] => $m_depth );
 243+ $m_allCats += fnSelectCategoryGetChildren( $m_row['title'], $m_depth + 1 );
 244+ }
 245+ # Free result:
 246+ $m_dbObj->freeResult( $m_res );
 247+
 248+ # Afterwards return the array to the upper recursion level:
 249+ return $m_allCats;
 250+}
 251+
 252+## Returns an array with the categories the articles is in.
 253+## Also removes them from the text the user views in the editbox.
 254+function fnSelectCategoryGetPageCategories( $m_pageObj ) {
 255+
 256+ if (array_key_exists('SelectCategoryList', $_POST)) {
 257+ # We have already extracted the categories, return them instead
 258+ # of extracting zero categories from the page text.
 259+ $m_catLinks = array();
 260+ foreach( $_POST['SelectCategoryList'] as $m_cat ) {
 261+ $m_catLinks[ $m_cat ] = true;
 262+ }
 263+ return $m_catLinks;
 264+ }
 265+
 266+ global $wgContLang;
 267+
 268+ # Get page contents:
 269+ $m_pageText = $m_pageObj->textbox1;
 270+ # Get localised namespace string:
 271+ $m_catString = strtolower( $wgContLang->getNsText( NS_CATEGORY ) );
 272+ # The regular expression to find the category links:
 273+ $m_pattern = "\[\[({$m_catString}|category):([^\|\]]*)(\|{{PAGENAME}}|)\]\]";
 274+ $m_replace = "$2";
 275+ # The container to store all found category links:
 276+ $m_catLinks = array ();
 277+ # The container to store the processed text:
 278+ $m_cleanText = '';
 279+
 280+ # Check linewise for category links:
 281+ foreach( explode( "\n", $m_pageText ) as $m_textLine ) {
 282+ # Filter line through pattern and store the result:
 283+ $m_cleanText .= preg_replace( "/{$m_pattern}/i", "", $m_textLine ) . "\n";
 284+ # Check if we have found a category, else proceed with next line:
 285+ if( !preg_match( "/{$m_pattern}/i", $m_textLine) ) continue;
 286+ # Get the category link from the original text and store it in our list:
 287+ $m_catLinks[ str_replace( ' ', '_', preg_replace( "/.*{$m_pattern}/i", $m_replace, $m_textLine ) ) ] = true;
 288+ }
 289+ # Place the cleaned text into the text box:
 290+ $m_pageObj->textbox1 = trim( $m_cleanText );
 291+
 292+ # Return the list of categories as an array:
 293+ return $m_catLinks;
 294+}
 295+
 296+# Function that checks if we meet the run conditions of the extension
 297+function fnSelectCategoryCheckConditions ($m_isUpload, $m_pageObj ) {
 298+ global $wgSelectCategoryNamespaces;
 299+ global $wgSelectCategoryEnableSubpages;
 300+ global $wgTitle;
 301+
 302+
 303+ # Run only if we are in an upload, an activated namespace or if page is
 304+ # a subpage and subpages are enabled (unfortunately we can't use
 305+ # implication in PHP) but not if we do a sectionedit:
 306+
 307+ if ($m_isUpload == true) {
 308+ return true;
 309+ }
 310+
 311+ $ns = $wgTitle->getNamespace();
 312+ if( array_key_exists( $ns, $wgSelectCategoryNamespaces ) ) {
 313+ $enabledForNamespace = $wgSelectCategoryNamespaces[$ns];
 314+ } else {
 315+ $enabledForNamespace = false;
 316+ }
 317+
 318+ # Check if page is subpage once to save method calls below:
 319+ $m_isSubpage = $wgTitle->isSubpage();
 320+
 321+ if ($enabledForNamespace
 322+ && (!$m_isSubpage
 323+ || $m_isSubpage && $wgSelectCategoryEnableSubpage)
 324+ && $m_pageObj->section == false) {
 325+ return true;
 326+ }
 327+}
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategoryFunctions.php
___________________________________________________________________
Added: svn:eol-style
1328 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/README
@@ -0,0 +1,111 @@
 2+--------------------------------------------------------------------------
 3+README for the CategoryTree extension
 4+Copyright © 2006 by Leon Weber & Manuel Schneider
 5+Licenses: GNU General Public Licence (GPL)
 6+ GNU Free Documentation License (GFDL)
 7+--------------------------------------------------------------------------
 8+
 9+The SelectCategory extensions provides three functions:
 10+- It shows a list of all categories (unless a custom root category is con-
 11+ figured) in their hierarchical structure on the edit page.
 12+
 13+- It strips all categories linked within a page upon editing and selects
 14+ them in the category list list.
 15+
 16+- It adds selected categories from the list to the text body of the page
 17+ on saving.
 18+
 19+
 20+INSTALLING
 21+--------------------------------------------------------------------------
 22+
 23+Copy the SelectCategory directory into the extensions folder of your
 24+MediaWiki installation. Then add the following lines to your
 25+LocalSettings.php file (near the end):
 26+
 27+ require_once( 'extensions/SelectCategory/SelectCategory.php' );
 28+
 29+PARAMETERS
 30+--------------------------------------------------------------------------
 31+
 32+$wgSelectCategoryNamespaces
 33+ - Defines in which namespaces the Extension
 34+ should be active. All namespaces are already predefined in the array. Set
 35+ a specific namespace to true to enable or to false to disable the extension.
 36+ Active per default are: Media, Main, Project, Image, Help, Category.
 37+ - Example
 38+ $wgSelectCategoryNamespaces[NS_PROJECT] = false;
 39+ $wgSelectCategoryNamespaces[NS_CATEGORY] = false;
 40+ - Or
 41+ $wgSelectCategoryNamespaces = array(
 42+ NS_MEDIA => true,
 43+ NS_MAIN => true,
 44+ NS_TALK => false,
 45+ NS_USER => false,
 46+ NS_USER_TALK => false,
 47+ NS_PROJECT => true,
 48+ NS_PROJECT_TALK => false,
 49+ NS_IMAGE => true,
 50+ NS_IMAGE_TALK => false,
 51+ NS_MEDIAWIKI => false,
 52+ NS_MEDIAWIKI_TALK => false,
 53+ NS_TEMPLATE => false,
 54+ NS_TEMPLATE_TALK => false,
 55+ NS_HELP => true,
 56+ NS_HELP_TALK => false,
 57+ NS_CATEGORY => true,
 58+ NS_CATEGORY_TALK => false
 59+ );
 60+
 61+$wgSelectCategoryRoot
 62+ - Set a specific root category depending the namespace. Only categories within
 63+ this root will be displayed when editing a page in a certain namespace.
 64+ Useful on big wiki sites to keep the database load down.
 65+ If not set (default) the extension searches for all root categories and
 66+ displays them including all children.
 67+ - Example
 68+ $wgSelectCategoryRoot = array(
 69+ NS_MEDIA => false,
 70+ NS_MAIN => "My Article Root Category",
 71+ NS_TALK => false,
 72+ NS_USER => false,
 73+ NS_USER_TALK => false,
 74+ NS_PROJECT => false,
 75+ NS_PROJECT_TALK => false,
 76+ NS_IMAGE => "My Image Root Category",
 77+ NS_IMAGE_TALK => false,
 78+ NS_MEDIAWIKI => false,
 79+ NS_MEDIAWIKI_TALK => false,
 80+ NS_TEMPLATE => false,
 81+ NS_TEMPLATE_TALK => false,
 82+ NS_HELP => false,
 83+ NS_HELP_TALK => false,
 84+ NS_CATEGORY => false,
 85+ NS_CATEGORY_TALK => false
 86+ );
 87+
 88+$wgSelectCategoryEnableSubpages
 89+ - Defines if the extension should be active when editing subpages.
 90+ Default is true, as subpages are disabled in MediaWiki by default.
 91+ - Example:
 92+ $wgSelectCategoryEnableSubpages = false;
 93+
 94+APPEARANCE
 95+--------------------------------------------------------------------------
 96+
 97+To customize the design of the select box use the CSS id "SelectCategoryBox"
 98+and attach your own settings to [[MediaWiki:Monobook.css]] or your users
 99+[[User:USERNAME/Monobook.css]].
 100+
 101+BUGS, CONTACT
 102+--------------------------------------------------------------------------
 103+
 104+For bug reports or feature requests file a bug on bugzilla.wikimedia.org
 105+under the product "MediaWiki extensions" and its component "SelectCategory".
 106+
 107+Alternatively you can reach us on
 108+- Leon Weber: <leon@leonweber.de>
 109+- Manuel Schneider: <manuel.schneider@wikimedia.ch>
 110+
 111+The download and description page of this extension can be found at:
 112+http://www.mediawiki.org/wiki/Extension:SelectCategory
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/README
___________________________________________________________________
Added: svn:eol-style
1113 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/jquery.treeview.css
@@ -0,0 +1,74 @@
 2+.treeview, .treeview ul {
 3+ padding: 0;
 4+ margin: 0;
 5+ list-style: none;
 6+}
 7+
 8+.treeview ul {
 9+ background-color: white;
 10+ margin-top: 4px;
 11+}
 12+
 13+.treeview .hitarea {
 14+ background: url(images/treeview-default.gif) -64px -25px no-repeat;
 15+ height: 16px;
 16+ width: 16px;
 17+ margin-left: -16px;
 18+ float: left;
 19+ cursor: pointer;
 20+}
 21+/* fix for IE6 */
 22+* html .hitarea {
 23+ display: inline;
 24+ float:none;
 25+}
 26+
 27+.treeview li {
 28+ margin: 0;
 29+ padding: 3px 0pt 3px 16px;
 30+}
 31+
 32+.treeview a.selected {
 33+ background-color: #eee;
 34+}
 35+
 36+#treecontrol { margin: 1em 0; display: none; }
 37+
 38+.treeview .hover { color: red; cursor: pointer; }
 39+
 40+.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
 41+.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
 42+
 43+.treeview .expandable-hitarea { background-position: -80px -3px; }
 44+
 45+.treeview li.last { background-position: 0 -1766px }
 46+.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }
 47+.treeview li.lastCollapsable { background-position: 0 -111px }
 48+.treeview li.lastExpandable { background-position: -32px -67px }
 49+
 50+.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
 51+
 52+.treeview-red li { background-image: url(images/treeview-red-line.gif); }
 53+.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
 54+
 55+.treeview-black li { background-image: url(images/treeview-black-line.gif); }
 56+.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
 57+
 58+.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
 59+.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
 60+
 61+.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); }
 62+.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
 63+
 64+.treeview .placeholder {
 65+ background: url(images/ajax-loader.gif) 0 0 no-repeat;
 66+ height: 16px;
 67+ width: 16px;
 68+ display: block;
 69+}
 70+
 71+.filetree li { padding: 3px 0 2px 16px; }
 72+.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
 73+.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
 74+.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; }
 75+.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/jquery.treeview.css
___________________________________________________________________
Added: svn:eol-style
176 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.i18n.php
@@ -0,0 +1,615 @@
 2+<?php
 3+/**
 4+ * Internationalisation file for extension SelectCategory.
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ * @author Leon Weber <leon.weber@leonweber.de> & Manuel Schneider <manuel.schneider@wikimedia.ch>
 9+ * @copyright © 2006 by Leon Weber & Manuel Schneider
 10+ * @licence GNU General Public Licence 2.0 or later
 11+ */
 12+
 13+$messages = array();
 14+
 15+/** English
 16+ * @author Leon Weber <leon.weber@leonweber.de>
 17+ * @author Manuel Schneider <manuel.schneider@wikimedia.ch>
 18+ */
 19+$messages['en'] = array(
 20+ 'selectcategory-title' => 'Select categories',
 21+ 'selectcategory-desc' => 'Allows the user to select from existing categories when editing a page',
 22+ 'selectcategory-subtitle' => 'Shift-mouse to select multiple contiguous entries, Ctrl-mouse to select non-contiguous entries.',
 23+);
 24+
 25+/** Message documentation (Message documentation)
 26+ * @author Purodha
 27+ */
 28+$messages['qqq'] = array(
 29+ 'selectcategory-desc' => 'Used in [[Special:Version]]',
 30+);
 31+
 32+/** Arabic (العربية)
 33+ * @author Meno25
 34+ */
 35+$messages['ar'] = array(
 36+ 'selectcategory-title' => 'اختر التصنيفات',
 37+ 'selectcategory-desc' => 'يسمح للمستخدم بالاختيار من التصنيفات الموجودة عند تعديل صفحة',
 38+ 'selectcategory-subtitle' => 'Shift-mouse لاختيار مدخلات متوافقة متعددة، Ctrl-mouse لاختيار مدخلات غير متوافقة.',
 39+);
 40+
 41+/** Egyptian Spoken Arabic (مصرى)
 42+ * @author Meno25
 43+ */
 44+$messages['arz'] = array(
 45+ 'selectcategory-title' => 'اختر التصنيفات',
 46+ 'selectcategory-desc' => 'يسمح للمستخدم بالاختيار من التصنيفات الموجودة عند تعديل صفحة',
 47+ 'selectcategory-subtitle' => 'Shift-mouse لاختيار مدخلات متوافقة متعددة، Ctrl-mouse لاختيار مدخلات غير متوافقة.',
 48+);
 49+
 50+/** Asturian (Asturianu)
 51+ * @author Esbardu
 52+ */
 53+$messages['ast'] = array(
 54+ 'selectcategory-title' => 'Selecionar categoríes',
 55+ 'selectcategory-desc' => 'Permite al usuariu seleicionar categoríes esistentes al editar una páxina',
 56+ 'selectcategory-subtitle' => 'Caltén pulsada la tecla de mayúscules pa seleicionar entraes múltiples contigües, o la tecla CTRL pa seleicionar entraes non contigües.',
 57+);
 58+
 59+/** Bavarian (Boarisch)
 60+ * @author Man77
 61+ */
 62+$messages['bar'] = array(
 63+ 'selectcategory-title' => 'Kategorien auswöihn',
 64+);
 65+
 66+/** Bikol Central (Bikol Central)
 67+ * @author Filipinayzd
 68+ */
 69+$messages['bcl'] = array(
 70+ 'selectcategory-title' => 'Magpilì nin mga kategorya',
 71+);
 72+
 73+/** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬)
 74+ * @author EugeneZelenko
 75+ * @author Jim-by
 76+ */
 77+$messages['be-tarask'] = array(
 78+ 'selectcategory-title' => 'Выбар катэгорый',
 79+ 'selectcategory-desc' => 'Дазваляе ўдзельніку выбіраць з існуючых катэгорый пад час рэдагаваньня старонкі',
 80+ 'selectcategory-subtitle' => 'Shift+клік мышкі выбірае некалькі суседніх элемэнтаў, Ctrl+клік мышкі выбірае элемэнты, якія знаходзяцца ня побач.',
 81+);
 82+
 83+/** Bulgarian (Български)
 84+ * @author DCLXVI
 85+ * @author Spiritia
 86+ */
 87+$messages['bg'] = array(
 88+ 'selectcategory-title' => 'Избор на категории',
 89+ 'selectcategory-desc' => 'Позволява на потребителя при редактиране на страница да избира и добавя от съществуващите категории',
 90+ 'selectcategory-subtitle' => 'Shift + ляв бутон на мишката за избор на множество последователни записи, Ctrl + ляв бутон на мишката за избор на непоследователни записи.',
 91+);
 92+
 93+/** Bengali (বাংলা)
 94+ * @author Bellayet
 95+ */
 96+$messages['bn'] = array(
 97+ 'selectcategory-title' => 'বিষয়শ্রেণী নির্বাচন',
 98+ 'selectcategory-desc' => 'পাতা সম্পাদনার সময় ব্যবহারকারীকে বিদ্যমান বিষয়শ্রেণী থেকে তা নির্বাচনের অনুমতি',
 99+);
 100+
 101+/** Breton (Brezhoneg)
 102+ * @author Fulup
 103+ */
 104+$messages['br'] = array(
 105+ 'selectcategory-title' => 'Diuzañ ar rummadoù',
 106+ 'selectcategory-desc' => "Talvezout a ra d'an implijerien da ziuzañ rummadoù zo anezho dija pa zegasont kemmoù war ur bajenn",
 107+ 'selectcategory-subtitle' => 'Pennlizh.+klik da ziuzañ meur a enmont stok-ha-stok, Ctrl+klik da ziuzañ enmontoù distok.',
 108+);
 109+
 110+/** Bosnian (Bosanski)
 111+ * @author CERminator
 112+ */
 113+$messages['bs'] = array(
 114+ 'selectcategory-title' => 'Odaberi kategorije',
 115+ 'selectcategory-desc' => 'Omogućuje korisniku da odabere neku od postojećih kategorija pri uređivanju stranice',
 116+ 'selectcategory-subtitle' => 'Pritisnite Shift i mišem odaberite više poredanih stavki, pritisnite Ctrl i mišem odaberite stavke koje nisu poredane.',
 117+);
 118+
 119+/** Catalan (Català)
 120+ * @author Solde
 121+ */
 122+$messages['ca'] = array(
 123+ 'selectcategory-title' => 'Seleccinoa les categories',
 124+);
 125+
 126+/** Czech (Česky)
 127+ * @author Kuvaly
 128+ */
 129+$messages['cs'] = array(
 130+ 'selectcategory-title' => 'Vyberte kategorie',
 131+ 'selectcategory-desc' => 'Umožňuje uživatelovi vybírat z již existujících kategorií při úpravě stránky',
 132+ 'selectcategory-subtitle' => 'Shift+kliknutí označí souvislou skupinu položek, ctrl+kliknutí označí jednotlivé nesouvislé položky.',
 133+);
 134+
 135+/** German (Deutsch)
 136+ * @author Leithian
 137+ * @author Manuel Schneider <manuel.schneider@wikimedia.ch>
 138+ */
 139+$messages['de'] = array(
 140+ 'selectcategory-title' => 'Kategorien auswählen',
 141+ 'selectcategory-desc' => 'Ermöglicht es dem Benutzer, beim Bearbeiten einer Seite aus bestehenden Kategorien auszuwählen',
 142+ 'selectcategory-subtitle' => 'Shift-Maus um mehrere nachfolgende Einträge zu (de-)selektieren, Strg-Maus um einzelne Einträge zu (de-)selektieren.',
 143+);
 144+
 145+/** Lower Sorbian (Dolnoserbski)
 146+ * @author Michawiki
 147+ */
 148+$messages['dsb'] = array(
 149+ 'selectcategory-title' => 'Kategorije wubraś',
 150+ 'selectcategory-desc' => 'Dowólujo wužywarjeju pśi wobźěłowanju z eksistěrujucych kategorijow wubraś',
 151+ 'selectcategory-subtitle' => 'Umsch-myš, aby někotare naslědujuce zapiski wubrał, Strg-myš, aby jadnotliwe zapiski wubrał.',
 152+);
 153+
 154+/** Greek (Ελληνικά)
 155+ * @author Consta
 156+ */
 157+$messages['el'] = array(
 158+ 'selectcategory-title' => 'Επέλεξε κατηγορίες',
 159+);
 160+
 161+/** Esperanto (Esperanto)
 162+ * @author Yekrats
 163+ */
 164+$messages['eo'] = array(
 165+ 'selectcategory-title' => 'Elektu kategoriojn',
 166+ 'selectcategory-desc' => 'Permesas al la uzanto selekti de ekzistantaj kategorioj kiam redaktante paĝojn',
 167+);
 168+
 169+/** Spanish (Español)
 170+ * @author Crazymadlover
 171+ */
 172+$messages['es'] = array(
 173+ 'selectcategory-title' => 'Seleccionar categorías',
 174+ 'selectcategory-desc' => 'Permite a los usuarios seleccionar de categorías existentes cuando editen una página',
 175+ 'selectcategory-subtitle' => 'tecla shift y botón del mouse para seleccionar entradas contíguas múltiples, tecla ctrl y botón del mouse para seleccionar entradas no contíguas.',
 176+);
 177+
 178+/** Basque (Euskara)
 179+ * @author Kobazulo
 180+ */
 181+$messages['eu'] = array(
 182+ 'selectcategory-title' => 'Kategoriak hautatu',
 183+);
 184+
 185+/** Extremaduran (Estremeñu)
 186+ * @author Better
 187+ */
 188+$messages['ext'] = array(
 189+ 'selectcategory-title' => 'Ligil categorias',
 190+ 'selectcategory-desc' => 'Premiti al ussuáriu ligil entri categorias ya dessistentis al crial una página',
 191+ 'selectcategory-subtitle' => 'Gasta "shift-ratón" pa ligil entrás contínuas, u "ctrl-ratón" pa ligilas una a una.',
 192+);
 193+
 194+/** Persian (فارسی)
 195+ * @author Tofighi
 196+ */
 197+$messages['fa'] = array(
 198+ 'selectcategory-title' => 'انتخاب رده‌ها',
 199+ 'selectcategory-desc' => 'به کاربر امکان انتخاب از رده‌های موجود را در هنگام ویرایش صفحه می‌دهد',
 200+ 'selectcategory-subtitle' => 'از Shift-mouse برای انتخاب چند مدخل مجاور استفاده کنید،Ctrl-mouse را برای مدخل های غیر مجاور به کار برید.',
 201+);
 202+
 203+/** Finnish (Suomi)
 204+ * @author Jaakonam
 205+ * @author Nike
 206+ */
 207+$messages['fi'] = array(
 208+ 'selectcategory-title' => 'Valitse luokat',
 209+ 'selectcategory-desc' => 'Käyttäjä voi muokatessaan valita jo olemassa olevista luokista sopivan',
 210+ 'selectcategory-subtitle' => 'Painamalla yhtä aikaa Shift-näppäintä ja hiiren vasenta painiketta voi valikosta poimia useita peräkkäisiä vaihtoehtoja. Ctrl-näppäintä ja hiiren vasenta painiketta yhtä aikaa painamalla voi valita haluamansa vaihtoehdot yksitellen.',
 211+);
 212+
 213+/** French (Français)
 214+ * @author Jean-Frédéric
 215+ * @author Marius Engler <marius.engler@coop.ch>
 216+ * @author Sherbrooke
 217+ */
 218+$messages['fr'] = array(
 219+ 'selectcategory-title' => 'Choix de catégories',
 220+ 'selectcategory-desc' => 'Permet à l’utilisateur de sélectionner des catégories existantes lors de l’édition d’une page',
 221+ 'selectcategory-subtitle' => 'Maj+clic afin de (dé)sélectionner plusieurs catégories d’affilée, Ctrl+clic afin de (dé)sélectionner des catégories individuellement.',
 222+);
 223+
 224+/** Franco-Provençal (Arpetan)
 225+ * @author ChrisPtDe
 226+ */
 227+$messages['frp'] = array(
 228+ 'selectcategory-title' => 'Chouèsir les catègories',
 229+);
 230+
 231+/** Galician (Galego)
 232+ * @author Alma
 233+ * @author Xosé
 234+ */
 235+$messages['gl'] = array(
 236+ 'selectcategory-title' => 'Seleccionar categorías',
 237+ 'selectcategory-desc' => 'Permite que o usuario seleccione das categorías existentes cando edita unha páxina',
 238+ 'selectcategory-subtitle' => 'Faga clic co botón de maiúsculas e o rato para seleccionar varias entradas contiguas. Co botón Ctrl e o rato para seleccionar entradas non contiguas.',
 239+);
 240+
 241+/** Swiss German (Alemannisch)
 242+ * @author Als-Holder
 243+ * @author Manuel Schneider <manuel.schneider@wikimedia.ch>
 244+ */
 245+$messages['gsw'] = array(
 246+ 'selectcategory-title' => 'Kategori ussueche',
 247+ 'selectcategory-desc' => 'Macht s fir dr Benutzer megli, bim Bearbeite vun ere Syte us Kategorie, wu s het, uuszwehle',
 248+ 'selectcategory-subtitle' => 'Gross-Muus go verschiedeni Iiträg hintrenander go uswähle, Strg-Muus go einzelni Iiträg go uswähle',
 249+);
 250+
 251+/** Hebrew (עברית)
 252+ * @author Rotemliss
 253+ * @author YaronSh
 254+ */
 255+$messages['he'] = array(
 256+ 'selectcategory-title' => 'בחירת קטגוריות',
 257+ 'selectcategory-desc' => 'מתן האפשרות למשתמש לבחור מקטגוריות קיימות בעת עריכת דף.',
 258+ 'selectcategory-subtitle' => 'השתמשו ב־Shift בזמן הלחיצה על העכבר כדי לבחור מספר רשומות עוקבות, והשתמשו ב־Ctrl בזמן לחיצת העכבר כדי לבחור מספר רשומות לא עוקבות.',
 259+);
 260+
 261+/** Hindi (हिन्दी)
 262+ * @author Kaustubh
 263+ */
 264+$messages['hi'] = array(
 265+ 'selectcategory-title' => 'श्रेणीयाँ चुनें',
 266+);
 267+
 268+/** Upper Sorbian (Hornjoserbsce)
 269+ * @author Michawiki
 270+ */
 271+$messages['hsb'] = array(
 272+ 'selectcategory-title' => 'Kategorije wubrać',
 273+ 'selectcategory-desc' => 'Zmóžnja wužiwarjej z eksistowacych kategorijow wubrać, hdyž stronu wobdźěłuje',
 274+ 'selectcategory-subtitle' => 'Umschalt-Myš, zo bychu so wjacore susodne zapiski wubrali, Strg-myš, zo bychu so njesusodne zapiski wubrali.',
 275+);
 276+
 277+/** Hungarian (Magyar)
 278+ * @author Glanthor Reviol
 279+ */
 280+$messages['hu'] = array(
 281+ 'selectcategory-title' => 'Kategóriák kiválasztása',
 282+ 'selectcategory-desc' => 'Lehetővé teszi a felhasználóknak, hogy válasszanak a meglevő kategóriákból lap szerkesztésekor',
 283+ 'selectcategory-subtitle' => 'Shift+egérkattintás több egymás után következő bejegyzés kijelöléséhez, Ctrl+kattintás nem egymás utáni bejegyzések kijelöléséhez.',
 284+);
 285+
 286+/** Interlingua (Interlingua)
 287+ * @author McDutchie
 288+ */
 289+$messages['ia'] = array(
 290+ 'selectcategory-title' => 'Seliger categorias',
 291+ 'selectcategory-desc' => 'Permitte que le usator selige inter categorias existente quando modifica un pagina',
 292+ 'selectcategory-subtitle' => 'Clicca tenente premite le clave SHIFT pro seliger plure entratas adjacente, o CTRL pro seliger entratas non adjacente.',
 293+);
 294+
 295+/** Indonesian (Bahasa Indonesia)
 296+ * @author Bennylin
 297+ * @author Ivan Lanin <ivanlanin@gmail.com>
 298+ */
 299+$messages['id'] = array(
 300+ 'selectcategory-title' => 'Pilih kategori',
 301+ 'selectcategory-desc' => 'Mengijinkan pengguna pada saat menyunting suatu halaman untuk memilih dari kategori-kategori yang telah ada',
 302+ 'selectcategory-subtitle' => 'Tekan "Shift"+klik untuk memilih entri yang berurutan, Tekan "Ctrl"+klik untuk memilih entri yang tidak berurutan.',
 303+);
 304+
 305+/** Italian (Italiano)
 306+ * @author BrokenArrow
 307+ * @author Darth Kule
 308+ * @author Marius Engler <marius.engler@coop.ch>
 309+ */
 310+$messages['it'] = array(
 311+ 'selectcategory-title' => 'Selezionare le categorie',
 312+ 'selectcategory-desc' => "Permette all'utente di selezionare da categorie esistenti quando modifica una pagina",
 313+ 'selectcategory-subtitle' => 'Fare clic con il mouse tenendo premuto MAIUSC per selezionare più voci adiacenti o CTRL per selezionare più voci non adiacenti.',
 314+);
 315+
 316+/** Japanese (日本語)
 317+ * @author Mizusumashi
 318+ */
 319+$messages['ja'] = array(
 320+ 'selectcategory-title' => 'カテゴリ選択',
 321+ 'selectcategory-desc' => '利用者が、ページの編集時に、既存のカテゴリから選択できるようにする',
 322+ 'selectcategory-subtitle' => 'Shift+マウスクリックで隣接する複数のエントリを選択でき、Ctrl+マウスクリックで隣接していないエントリを選択できます。',
 323+);
 324+
 325+/** Javanese (Basa Jawa)
 326+ * @author Meursault2004
 327+ */
 328+$messages['jv'] = array(
 329+ 'selectcategory-title' => 'Pilih kategori',
 330+);
 331+
 332+/** Khmer (ភាសាខ្មែរ)
 333+ * @author Chhorran
 334+ * @author Lovekhmer
 335+ * @author Thearith
 336+ */
 337+$messages['km'] = array(
 338+ 'selectcategory-title' => 'ជ្រើសយកចំណាត់ថ្នាក់ក្រុម',
 339+ 'selectcategory-desc' => 'អនុញ្ញាត អ្នកប្រើប្រាស់ ឱ្យជ្រើសយក ពីចំណាត់ក្រុមមានស្រាប់ ពេលកែប្រែ មួយទំព័រ',
 340+);
 341+
 342+/** Colognian (Ripoarisch)
 343+ * @author Purodha
 344+ */
 345+$messages['ksh'] = array(
 346+ 'selectcategory-title' => 'Saachjruppe ußsöke',
 347+ 'selectcategory-desc' => 'Määt et müjjelesch, beim Sigge-Ändere uß dä Saachjroppe ußzewähle, di ald beshtonn.',
 348+ 'selectcategory-subtitle' => 'Ettlije Enndräsch op eijmol ußsöke met „Jrußschreff+Muus“, un nit mieh ußsööke met „Strg+Muus“.',
 349+);
 350+
 351+/** Luxembourgish (Lëtzebuergesch)
 352+ * @author Robby
 353+ */
 354+$messages['lb'] = array(
 355+ 'selectcategory-title' => 'Kategorie wielen',
 356+ 'selectcategory-desc' => "Erlaabt dem Benotzer et fir Kategorien aus enger Lëscht auszewielen wann d'Säit geännert gëtt",
 357+ 'selectcategory-subtitle' => 'Shift + Maus fir méi Rubriken hannereneen unzewielen, Ctrl + Maus fir eenzel Rubriken unzewielen',
 358+);
 359+
 360+/** Macedonian (Македонски)
 361+ * @author Bjankuloski06
 362+ */
 363+$messages['mk'] = array(
 364+ 'selectcategory-title' => 'Изберете категории',
 365+ 'selectcategory-desc' => 'Му овоможува на корисникот да избира од постоечките категории кога уредува страница',
 366+ 'selectcategory-subtitle' => 'Држете Shift и влечете со глушецот за да одберете повеќе последователни ставки, Држете Ctrl и влечете со глушецот за да одбирате непоследователни ставки.',
 367+);
 368+
 369+/** Malayalam (മലയാളം)
 370+ * @author Shijualex
 371+ */
 372+$messages['ml'] = array(
 373+ 'selectcategory-title' => 'വർഗ്ഗങ്ങൾ തിരഞ്ഞെടുക്കുക',
 374+);
 375+
 376+/** Marathi (मराठी)
 377+ * @author Kaustubh
 378+ */
 379+$messages['mr'] = array(
 380+ 'selectcategory-title' => 'वर्ग निवडा',
 381+ 'selectcategory-desc' => 'एखादे पान संपादित करीत असताना सदस्याला वर्ग निवडण्याची सुविधा देते',
 382+ 'selectcategory-subtitle' => 'शिफ्ट+माउस एकापुढे एक असलेल्या नोंदी निवडण्यासाठी, कंट्रोल+माउस एका पुढे एक नसलेल्या नोंदी निवडण्यासाठी.',
 383+);
 384+
 385+/** Dutch (Nederlands)
 386+ * @author Siebrand
 387+ */
 388+$messages['nl'] = array(
 389+ 'selectcategory-title' => 'Selecteer categorieën',
 390+ 'selectcategory-desc' => 'Stelt gebruikers in staat uit bestaande categorieën te kiezen bij het bewerken van een pagina',
 391+ 'selectcategory-subtitle' => 'Shiftklik om meerdere opeenvolgende categorieën te selecteren, Ctrlklik om niet-openvolgende categorieën te selecteren.',
 392+);
 393+
 394+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 395+ * @author Harald Khan
 396+ */
 397+$messages['nn'] = array(
 398+ 'selectcategory-title' => 'Vel kategoriar',
 399+ 'selectcategory-desc' => 'Lét brukaren velja frå eksisterande kategoriar når han/ho endrar ei sida.',
 400+ 'selectcategory-subtitle' => 'Shift+klikk for å velja fleire samahengande val, Ctrl+klikk for å velja ikkje-samanhengande val.',
 401+);
 402+
 403+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 404+ * @author Jon Harald Søby
 405+ */
 406+$messages['no'] = array(
 407+ 'selectcategory-title' => 'Velg kategorier',
 408+ 'selectcategory-desc' => 'Lar brukeren velge fra eksisterende kategorier når han/hun redigerer en side',
 409+ 'selectcategory-subtitle' => 'Shift+klikk for å velge flere sammenhengende alternativer, Ctrl+klikk for å velge ikke-sammenhengende alternativer.',
 410+);
 411+
 412+/** Occitan (Occitan)
 413+ * @author Cedric31
 414+ */
 415+$messages['oc'] = array(
 416+ 'selectcategory-title' => 'Causida de categorias',
 417+ 'selectcategory-desc' => 'Permet a l’utilizaire de seleccionar de categorias existentas al moment de l’edicion d’una pagina',
 418+ 'selectcategory-subtitle' => "Maj+click pr'amor de (de)seleccionar mantuna categoria d’arrèu, Ctrl+click pr'amor de (de)seleccionar de categorias individualament.",
 419+);
 420+
 421+/** Polish (Polski)
 422+ * @author Derbeth
 423+ * @author Leinad
 424+ */
 425+$messages['pl'] = array(
 426+ 'selectcategory-title' => 'Wybór kategorii',
 427+ 'selectcategory-desc' => 'Pozwala użytkownikowi podczas edytowania strony wybrać istniejącą kategorię',
 428+ 'selectcategory-subtitle' => 'Shift+przycisk myszy wybiera wiele sąsiednich elementów, Ctrl+przycisk myszy wybiera elementy, które nie są koło siebie',
 429+);
 430+
 431+/** Piedmontese (Piemontèis)
 432+ * @author Bèrto 'd Sèra
 433+ * @author Dragonòt
 434+ */
 435+$messages['pms'] = array(
 436+ 'selectcategory-title' => 'Selession për categorìe',
 437+ 'selectcategory-desc' => "A përmëtt a l'utent ëd selessioné da categorìe esistente quand ch'a modìfica na pàgina",
 438+ 'selectcategory-subtitle' => "Ch'a dòvra sò rat con la ciav dlë Shift sgnacà për sërne ëd categorìe ch'as ven-o l'un-a dapress a l'àotra, ò pura con ën sgmacand la ciav Ctrl për pieje un-a pr'un-a.",
 439+);
 440+
 441+/** Pashto (پښتو)
 442+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 443+ */
 444+$messages['ps'] = array(
 445+ 'selectcategory-title' => 'وېشنيزې ټاکل',
 446+);
 447+
 448+/** Portuguese (Português)
 449+ * @author Lijealso
 450+ * @author Malafaya
 451+ */
 452+$messages['pt'] = array(
 453+ 'selectcategory-title' => 'Seleccionar categorias',
 454+ 'selectcategory-desc' => 'Permitir ao utilizador seleccionar a partir das categorias existentes quando editar uma página',
 455+ 'selectcategory-subtitle' => 'Shift-clique para seleccionar múltiplas entradas contíguas, Ctrl-clique para seleccionar entradas não-contíguas.',
 456+);
 457+
 458+/** Brazilian Portuguese (Português do Brasil)
 459+ * @author Eduardo.mps
 460+ */
 461+$messages['pt-br'] = array(
 462+ 'selectcategory-title' => 'Selecionar categorias',
 463+ 'selectcategory-desc' => 'Permitir ao utilizador selecionar a partir das categorias existentes quando editar uma página',
 464+ 'selectcategory-subtitle' => 'Shift-clique para selecionar múltiplas entradas contíguas, Ctrl-clique para selecionar entradas não-contíguas.',
 465+);
 466+
 467+/** Romanian (Română)
 468+ * @author Stelistcristi
 469+ */
 470+$messages['ro'] = array(
 471+ 'selectcategory-title' => 'Selectează categoriile',
 472+);
 473+
 474+/** Tarandíne (Tarandíne)
 475+ * @author Joetaras
 476+ */
 477+$messages['roa-tara'] = array(
 478+ 'selectcategory-title' => 'Selezione le categorije',
 479+ 'selectcategory-desc' => "Permette a l'utende de selezionà da le categorije già esistende quanne cange 'na pàgene",
 480+ 'selectcategory-subtitle' => "Cazze 'u SHIFT e 'u mouse pe scacchià cchiù categorije une attaccate a l'otre, cazze 'u CTRL e 'u mouse pe scacchià cchiù categorije ca non ge vonne une rete a l'otre.",
 481+);
 482+
 483+/** Russian (Русский)
 484+ * @author Александр Сигачёв
 485+ */
 486+$messages['ru'] = array(
 487+ 'selectcategory-title' => 'Выбор категорий',
 488+ 'selectcategory-desc' => 'Позволяет участнику выбирать существующие категории при редактировании страницы',
 489+ 'selectcategory-subtitle' => 'Щелчёк с клавишей Shift — выбор последовательности элементов, щелчёк с клавишей Ctrl — выбор непоследовательных элементов.',
 490+);
 491+
 492+/** Slovak (Slovenčina)
 493+ * @author Helix84
 494+ */
 495+$messages['sk'] = array(
 496+ 'selectcategory-title' => 'Vybrať kategórie',
 497+ 'selectcategory-desc' => 'Umožňuje používateľovi vybrať z existujúcich kategórií pri úprave stránky',
 498+ 'selectcategory-subtitle' => 'Shift+kliknutie označí súvislú skupinu položiek, ctrl+kliknutie označí jednotlivé nesúvislé položky.',
 499+);
 500+
 501+/** Seeltersk (Seeltersk)
 502+ * @author Pyt
 503+ */
 504+$messages['stq'] = array(
 505+ 'selectcategory-title' => 'Kategorien uutwääle',
 506+ 'selectcategory-desc' => 'Moaket et dän Benutser muugelk, bie dät Beoarbaidjen fon ne Siede uut bestoundene Kategorien uuttouwäälen',
 507+ 'selectcategory-subtitle' => 'Shift-Muus uum moorere ätterfoulgjende Iendraage tou (de-)selektierjen, Strg-Muus uum eenpelde Iendraage tou (de-)selektierjen.',
 508+);
 509+
 510+/** Swedish (Svenska)
 511+ * @author M.M.S.
 512+ */
 513+$messages['sv'] = array(
 514+ 'selectcategory-title' => 'Välj kategorier',
 515+ 'selectcategory-desc' => 'Låter användaren välja från existerande kategorier när hen redigerar en sida',
 516+ 'selectcategory-subtitle' => 'Shift+klick för att välja flera sammanhängande alternativ, Ctrl+klick för att välja ej sammanhängande alternativ.',
 517+);
 518+
 519+/** Telugu (తెలుగు)
 520+ * @author Veeven
 521+ */
 522+$messages['te'] = array(
 523+ 'selectcategory-title' => 'వర్గాలను ఎంచుకోండి',
 524+ 'selectcategory-desc' => 'ఒక పేజీని సరిదిద్దుతున్నప్పుడు ప్రస్తుతమున్న వర్గాల్లోనుండి వర్గాలని ఎన్నుకునే వీలుని కల్పిస్తుంది',
 525+);
 526+
 527+/** Thai (ไทย)
 528+ * @author Passawuth
 529+ */
 530+$messages['th'] = array(
 531+ 'selectcategory-title' => 'เลือกหมวดหมู่',
 532+);
 533+
 534+/** Tagalog (Tagalog)
 535+ * @author AnakngAraw
 536+ */
 537+$messages['tl'] = array(
 538+ 'selectcategory-title' => 'Pumili ng mga kaurian',
 539+ 'selectcategory-desc' => 'Nagpapahintulot sa tagagamit na makapili mula sa umiiral na mga kaurian habang nagbabago ng isang pahina',
 540+ 'selectcategory-subtitle' => "Gamitin ang ''Shift-mouse'' upang mapili ang sunud-sunod/magkakadikit na mga entrada (mga ipapasok/ilalagay), gamitin ang ''Ctrl-mouse'' upang mapili naman ang hindi magkakasunod/magkakadikit na mga entrada.",
 541+);
 542+
 543+/** Turkish (Türkçe)
 544+ * @author Vito Genovese
 545+ */
 546+$messages['tr'] = array(
 547+ 'selectcategory-title' => 'Kategorileri seç',
 548+ 'selectcategory-desc' => 'Bir sayfada değişiklik yaparken kullanıcının mevcut kategorilerden seçim yapmasını sağlar',
 549+ 'selectcategory-subtitle' => 'Birden fazla bitiş girdi seçmek için Shift-fare, bitişik olmayan girdileri seçmek için Ctrl-fare kombinasyonunu kullanın.',
 550+);
 551+
 552+/** Vèneto (Vèneto)
 553+ * @author Candalua
 554+ */
 555+$messages['vec'] = array(
 556+ 'selectcategory-title' => 'Selessiona le categorie',
 557+ 'selectcategory-desc' => "Permete a l'utente de siegliar tra le categorie esistenti quando el modifica na pagina",
 558+ 'selectcategory-subtitle' => 'Struca el boton del mouse tegnendo macà MAIUSC par selessionar più voçi adiacenti o CTRL par selessionar più voçi non adiacenti.',
 559+);
 560+
 561+/** Veps (Vepsan kel')
 562+ * @author Игорь Бродский
 563+ */
 564+$messages['vep'] = array(
 565+ 'selectcategory-title' => 'Valiče kategorijad',
 566+ 'selectcategory-desc' => 'Laskeb kävutajale valita olijoiš kategorijoišpäi lehtpolen redaktiruindan aigan',
 567+ 'selectcategory-subtitle' => "Hiren plok + Shift - elementoiden jäl'gendusen valičend, hiren plok + Ctrl - elementoiden individualine valičend.",
 568+);
 569+
 570+/** Vietnamese (Tiếng Việt)
 571+ * @author Vinhtantran
 572+ */
 573+$messages['vi'] = array(
 574+ 'selectcategory-title' => 'Chọn thể loại',
 575+ 'selectcategory-desc' => 'Cho phép thành viên chọn từ các thể loại đang có khi sửa trang',
 576+ 'selectcategory-subtitle' => 'Shift-nhấn chuột để chọn nhiều mục kề nhau liên tục, Ctrl-nhấn chuột để chọn các mục không liên tục.',
 577+);
 578+
 579+/** Volapük (Volapük)
 580+ * @author Smeira
 581+ */
 582+$messages['vo'] = array(
 583+ 'selectcategory-title' => 'Välön kladis',
 584+ 'selectcategory-desc' => 'Dälon gebane ad välön kladi se klads dabinöls dü padaredakam',
 585+ 'selectcategory-subtitle' => 'El „Shift“ + mugaparat ad välön binetis nilü oks, el „Ctrl“ + mugaparat ad välön binetis no nilü oks.',
 586+);
 587+
 588+/** Cantonese (粵語)
 589+ * @author Shinjiman
 590+ */
 591+$messages['yue'] = array(
 592+ 'selectcategory-title' => '選擇分類',
 593+ 'selectcategory-subtitle' => '撳住Shift掣再用個mouse去揀連續嘅項目,撳住Ctrl掣再用個mouse去揀非連續嘅項目。',
 594+);
 595+
 596+/** Simplified Chinese (‪中文(简体)‬)
 597+ * @author Gaoxuewei
 598+ * @author Shinjiman
 599+ */
 600+$messages['zh-hans'] = array(
 601+ 'selectcategory-title' => '选择分类',
 602+ 'selectcategory-desc' => '允许用户编辑页面时,自列表选择页面分类。',
 603+ 'selectcategory-subtitle' => '按着Shift键再以鼠标选取连续的项目,按着Ctrl键再以鼠标选取非连续的项目。',
 604+);
 605+
 606+/** Traditional Chinese (‪中文(繁體)‬)
 607+ * @author Alexsh
 608+ * @author Mark85296341
 609+ * @author Shinjiman
 610+ */
 611+$messages['zh-hant'] = array(
 612+ 'selectcategory-title' => '選擇分類',
 613+ 'selectcategory-desc' => '讓使用者可以在編輯頁面時直接選擇已存在的分類',
 614+ 'selectcategory-subtitle' => '按著 Shift 鍵再以滑鼠選取連續的項目,按著 Ctrl 鍵再以滑鼠選取非連續的項目。',
 615+);
 616+
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.i18n.php
___________________________________________________________________
Added: svn:eol-style
1617 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/LICENSE
@@ -0,0 +1,341 @@
 2+
 3+ GNU GENERAL PUBLIC LICENSE
 4+ Version 2, June 1991
 5+
 6+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 7+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 8+ Everyone is permitted to copy and distribute verbatim copies
 9+ of this license document, but changing it is not allowed.
 10+
 11+ Preamble
 12+
 13+ The licenses for most software are designed to take away your
 14+freedom to share and change it. By contrast, the GNU General Public
 15+License is intended to guarantee your freedom to share and change free
 16+software--to make sure the software is free for all its users. This
 17+General Public License applies to most of the Free Software
 18+Foundation's software and to any other program whose authors commit to
 19+using it. (Some other Free Software Foundation software is covered by
 20+the GNU Library General Public License instead.) You can apply it to
 21+your programs, too.
 22+
 23+ When we speak of free software, we are referring to freedom, not
 24+price. Our General Public Licenses are designed to make sure that you
 25+have the freedom to distribute copies of free software (and charge for
 26+this service if you wish), that you receive source code or can get it
 27+if you want it, that you can change the software or use pieces of it
 28+in new free programs; and that you know you can do these things.
 29+
 30+ To protect your rights, we need to make restrictions that forbid
 31+anyone to deny you these rights or to ask you to surrender the rights.
 32+These restrictions translate to certain responsibilities for you if you
 33+distribute copies of the software, or if you modify it.
 34+
 35+ For example, if you distribute copies of such a program, whether
 36+gratis or for a fee, you must give the recipients all the rights that
 37+you have. You must make sure that they, too, receive or can get the
 38+source code. And you must show them these terms so they know their
 39+rights.
 40+
 41+ We protect your rights with two steps: (1) copyright the software, and
 42+(2) offer you this license which gives you legal permission to copy,
 43+distribute and/or modify the software.
 44+
 45+ Also, for each author's protection and ours, we want to make certain
 46+that everyone understands that there is no warranty for this free
 47+software. If the software is modified by someone else and passed on, we
 48+want its recipients to know that what they have is not the original, so
 49+that any problems introduced by others will not reflect on the original
 50+authors' reputations.
 51+
 52+ Finally, any free program is threatened constantly by software
 53+patents. We wish to avoid the danger that redistributors of a free
 54+program will individually obtain patent licenses, in effect making the
 55+program proprietary. To prevent this, we have made it clear that any
 56+patent must be licensed for everyone's free use or not licensed at all.
 57+
 58+ The precise terms and conditions for copying, distribution and
 59+modification follow.
 60+
 61+ GNU GENERAL PUBLIC LICENSE
 62+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 63+
 64+ 0. This License applies to any program or other work which contains
 65+a notice placed by the copyright holder saying it may be distributed
 66+under the terms of this General Public License. The "Program", below,
 67+refers to any such program or work, and a "work based on the Program"
 68+means either the Program or any derivative work under copyright law:
 69+that is to say, a work containing the Program or a portion of it,
 70+either verbatim or with modifications and/or translated into another
 71+language. (Hereinafter, translation is included without limitation in
 72+the term "modification".) Each licensee is addressed as "you".
 73+
 74+Activities other than copying, distribution and modification are not
 75+covered by this License; they are outside its scope. The act of
 76+running the Program is not restricted, and the output from the Program
 77+is covered only if its contents constitute a work based on the
 78+Program (independent of having been made by running the Program).
 79+Whether that is true depends on what the Program does.
 80+
 81+ 1. You may copy and distribute verbatim copies of the Program's
 82+source code as you receive it, in any medium, provided that you
 83+conspicuously and appropriately publish on each copy an appropriate
 84+copyright notice and disclaimer of warranty; keep intact all the
 85+notices that refer to this License and to the absence of any warranty;
 86+and give any other recipients of the Program a copy of this License
 87+along with the Program.
 88+
 89+You may charge a fee for the physical act of transferring a copy, and
 90+you may at your option offer warranty protection in exchange for a fee.
 91+
 92+ 2. You may modify your copy or copies of the Program or any portion
 93+of it, thus forming a work based on the Program, and copy and
 94+distribute such modifications or work under the terms of Section 1
 95+above, provided that you also meet all of these conditions:
 96+
 97+ a) You must cause the modified files to carry prominent notices
 98+ stating that you changed the files and the date of any change.
 99+
 100+ b) You must cause any work that you distribute or publish, that in
 101+ whole or in part contains or is derived from the Program or any
 102+ part thereof, to be licensed as a whole at no charge to all third
 103+ parties under the terms of this License.
 104+
 105+ c) If the modified program normally reads commands interactively
 106+ when run, you must cause it, when started running for such
 107+ interactive use in the most ordinary way, to print or display an
 108+ announcement including an appropriate copyright notice and a
 109+ notice that there is no warranty (or else, saying that you provide
 110+ a warranty) and that users may redistribute the program under
 111+ these conditions, and telling the user how to view a copy of this
 112+ License. (Exception: if the Program itself is interactive but
 113+ does not normally print such an announcement, your work based on
 114+ the Program is not required to print an announcement.)
 115+
 116+These requirements apply to the modified work as a whole. If
 117+identifiable sections of that work are not derived from the Program,
 118+and can be reasonably considered independent and separate works in
 119+themselves, then this License, and its terms, do not apply to those
 120+sections when you distribute them as separate works. But when you
 121+distribute the same sections as part of a whole which is a work based
 122+on the Program, the distribution of the whole must be on the terms of
 123+this License, whose permissions for other licensees extend to the
 124+entire whole, and thus to each and every part regardless of who wrote it.
 125+
 126+Thus, it is not the intent of this section to claim rights or contest
 127+your rights to work written entirely by you; rather, the intent is to
 128+exercise the right to control the distribution of derivative or
 129+collective works based on the Program.
 130+
 131+In addition, mere aggregation of another work not based on the Program
 132+with the Program (or with a work based on the Program) on a volume of
 133+a storage or distribution medium does not bring the other work under
 134+the scope of this License.
 135+
 136+ 3. You may copy and distribute the Program (or a work based on it,
 137+under Section 2) in object code or executable form under the terms of
 138+Sections 1 and 2 above provided that you also do one of the following:
 139+
 140+ a) Accompany it with the complete corresponding machine-readable
 141+ source code, which must be distributed under the terms of Sections
 142+ 1 and 2 above on a medium customarily used for software interchange; or,
 143+
 144+ b) Accompany it with a written offer, valid for at least three
 145+ years, to give any third party, for a charge no more than your
 146+ cost of physically performing source distribution, a complete
 147+ machine-readable copy of the corresponding source code, to be
 148+ distributed under the terms of Sections 1 and 2 above on a medium
 149+ customarily used for software interchange; or,
 150+
 151+ c) Accompany it with the information you received as to the offer
 152+ to distribute corresponding source code. (This alternative is
 153+ allowed only for noncommercial distribution and only if you
 154+ received the program in object code or executable form with such
 155+ an offer, in accord with Subsection b above.)
 156+
 157+The source code for a work means the preferred form of the work for
 158+making modifications to it. For an executable work, complete source
 159+code means all the source code for all modules it contains, plus any
 160+associated interface definition files, plus the scripts used to
 161+control compilation and installation of the executable. However, as a
 162+special exception, the source code distributed need not include
 163+anything that is normally distributed (in either source or binary
 164+form) with the major components (compiler, kernel, and so on) of the
 165+operating system on which the executable runs, unless that component
 166+itself accompanies the executable.
 167+
 168+If distribution of executable or object code is made by offering
 169+access to copy from a designated place, then offering equivalent
 170+access to copy the source code from the same place counts as
 171+distribution of the source code, even though third parties are not
 172+compelled to copy the source along with the object code.
 173+
 174+ 4. You may not copy, modify, sublicense, or distribute the Program
 175+except as expressly provided under this License. Any attempt
 176+otherwise to copy, modify, sublicense or distribute the Program is
 177+void, and will automatically terminate your rights under this License.
 178+However, parties who have received copies, or rights, from you under
 179+this License will not have their licenses terminated so long as such
 180+parties remain in full compliance.
 181+
 182+ 5. You are not required to accept this License, since you have not
 183+signed it. However, nothing else grants you permission to modify or
 184+distribute the Program or its derivative works. These actions are
 185+prohibited by law if you do not accept this License. Therefore, by
 186+modifying or distributing the Program (or any work based on the
 187+Program), you indicate your acceptance of this License to do so, and
 188+all its terms and conditions for copying, distributing or modifying
 189+the Program or works based on it.
 190+
 191+ 6. Each time you redistribute the Program (or any work based on the
 192+Program), the recipient automatically receives a license from the
 193+original licensor to copy, distribute or modify the Program subject to
 194+these terms and conditions. You may not impose any further
 195+restrictions on the recipients' exercise of the rights granted herein.
 196+You are not responsible for enforcing compliance by third parties to
 197+this License.
 198+
 199+ 7. If, as a consequence of a court judgment or allegation of patent
 200+infringement or for any other reason (not limited to patent issues),
 201+conditions are imposed on you (whether by court order, agreement or
 202+otherwise) that contradict the conditions of this License, they do not
 203+excuse you from the conditions of this License. If you cannot
 204+distribute so as to satisfy simultaneously your obligations under this
 205+License and any other pertinent obligations, then as a consequence you
 206+may not distribute the Program at all. For example, if a patent
 207+license would not permit royalty-free redistribution of the Program by
 208+all those who receive copies directly or indirectly through you, then
 209+the only way you could satisfy both it and this License would be to
 210+refrain entirely from distribution of the Program.
 211+
 212+If any portion of this section is held invalid or unenforceable under
 213+any particular circumstance, the balance of the section is intended to
 214+apply and the section as a whole is intended to apply in other
 215+circumstances.
 216+
 217+It is not the purpose of this section to induce you to infringe any
 218+patents or other property right claims or to contest validity of any
 219+such claims; this section has the sole purpose of protecting the
 220+integrity of the free software distribution system, which is
 221+implemented by public license practices. Many people have made
 222+generous contributions to the wide range of software distributed
 223+through that system in reliance on consistent application of that
 224+system; it is up to the author/donor to decide if he or she is willing
 225+to distribute software through any other system and a licensee cannot
 226+impose that choice.
 227+
 228+This section is intended to make thoroughly clear what is believed to
 229+be a consequence of the rest of this License.
 230+
 231+ 8. If the distribution and/or use of the Program is restricted in
 232+certain countries either by patents or by copyrighted interfaces, the
 233+original copyright holder who places the Program under this License
 234+may add an explicit geographical distribution limitation excluding
 235+those countries, so that distribution is permitted only in or among
 236+countries not thus excluded. In such case, this License incorporates
 237+the limitation as if written in the body of this License.
 238+
 239+ 9. The Free Software Foundation may publish revised and/or new versions
 240+of the General Public License from time to time. Such new versions will
 241+be similar in spirit to the present version, but may differ in detail to
 242+address new problems or concerns.
 243+
 244+Each version is given a distinguishing version number. If the Program
 245+specifies a version number of this License which applies to it and "any
 246+later version", you have the option of following the terms and conditions
 247+either of that version or of any later version published by the Free
 248+Software Foundation. If the Program does not specify a version number of
 249+this License, you may choose any version ever published by the Free Software
 250+Foundation.
 251+
 252+ 10. If you wish to incorporate parts of the Program into other free
 253+programs whose distribution conditions are different, write to the author
 254+to ask for permission. For software which is copyrighted by the Free
 255+Software Foundation, write to the Free Software Foundation; we sometimes
 256+make exceptions for this. Our decision will be guided by the two goals
 257+of preserving the free status of all derivatives of our free software and
 258+of promoting the sharing and reuse of software generally.
 259+
 260+ NO WARRANTY
 261+
 262+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 263+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
 264+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 265+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 266+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 267+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
 268+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
 269+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 270+REPAIR OR CORRECTION.
 271+
 272+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 273+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 274+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 275+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 276+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 277+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 278+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 279+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 280+POSSIBILITY OF SUCH DAMAGES.
 281+
 282+ END OF TERMS AND CONDITIONS
 283+
 284+ How to Apply These Terms to Your New Programs
 285+
 286+ If you develop a new program, and you want it to be of the greatest
 287+possible use to the public, the best way to achieve this is to make it
 288+free software which everyone can redistribute and change under these terms.
 289+
 290+ To do so, attach the following notices to the program. It is safest
 291+to attach them to the start of each source file to most effectively
 292+convey the exclusion of warranty; and each file should have at least
 293+the "copyright" line and a pointer to where the full notice is found.
 294+
 295+ <one line to give the program's name and a brief idea of what it does.>
 296+ Copyright (C) <year> <name of author>
 297+
 298+ This program is free software; you can redistribute it and/or modify
 299+ it under the terms of the GNU General Public License as published by
 300+ the Free Software Foundation; either version 2 of the License, or
 301+ (at your option) any later version.
 302+
 303+ This program is distributed in the hope that it will be useful,
 304+ but WITHOUT ANY WARRANTY; without even the implied warranty of
 305+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 306+ GNU General Public License for more details.
 307+
 308+ You should have received a copy of the GNU General Public License
 309+ along with this program; if not, write to the Free Software
 310+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 311+
 312+
 313+Also add information on how to contact you by electronic and paper mail.
 314+
 315+If the program is interactive, make it output a short notice like this
 316+when it starts in an interactive mode:
 317+
 318+ Gnomovision version 69, Copyright (C) year name of author
 319+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 320+ This is free software, and you are welcome to redistribute it
 321+ under certain conditions; type `show c' for details.
 322+
 323+The hypothetical commands `show w' and `show c' should show the appropriate
 324+parts of the General Public License. Of course, the commands you use may
 325+be called something other than `show w' and `show c'; they could even be
 326+mouse-clicks or menu items--whatever suits your program.
 327+
 328+You should also get your employer (if you work as a programmer) or your
 329+school, if any, to sign a "copyright disclaimer" for the program, if
 330+necessary. Here is a sample; alter the names:
 331+
 332+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 333+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
 334+
 335+ <signature of Ty Coon>, 1 April 1989
 336+ Ty Coon, President of Vice
 337+
 338+This General Public License does not permit incorporating your program into
 339+proprietary programs. If your program is a subroutine library, you may
 340+consider it more useful to permit linking proprietary applications with the
 341+library. If this is what you want to do, use the GNU Library General
 342+Public License instead of this License.
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/LICENSE
___________________________________________________________________
Added: svn:eol-style
1343 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.php
@@ -0,0 +1,93 @@
 2+<?php
 3+/**
 4+ * Setup and Hooks for the SelectCategory extension, an extension of the
 5+ * edit box of MediaWiki to provide an easy way to add category links
 6+ * to a specific page.
 7+ *
 8+ * @file
 9+ * @ingroup Extensions
 10+ * @author Leon Weber <leon.weber@leonweber.de> & Manuel Schneider <manuel.schneider@wikimedia.ch>
 11+ * @copyright © 2006 by Leon Weber & Manuel Schneider
 12+ * @licence GNU General Public Licence 2.0 or later
 13+ */
 14+
 15+if( !defined( 'MEDIAWIKI' ) ) {
 16+ echo( "This file is an extension to the MediaWiki software and cannot be used standalone.\n" );
 17+ die();
 18+}
 19+
 20+## Load the file containing the hook functions:
 21+require_once( 'SelectCategoryFunctions.php' );
 22+
 23+## Options:
 24+# $wgSelectCategoryNamespaces - list of namespaces in which this extension should be active
 25+if( !isset( $wgSelectCategoryNamespaces ) ) $wgSelectCategoryNamespaces = array(
 26+ NS_MEDIA => true,
 27+ NS_MAIN => true,
 28+ NS_TALK => false,
 29+ NS_USER => false,
 30+ NS_USER_TALK => false,
 31+ NS_PROJECT => true,
 32+ NS_PROJECT_TALK => false,
 33+ NS_IMAGE => true,
 34+ NS_IMAGE_TALK => false,
 35+ NS_MEDIAWIKI => false,
 36+ NS_MEDIAWIKI_TALK => false,
 37+ NS_TEMPLATE => false,
 38+ NS_TEMPLATE_TALK => false,
 39+ NS_HELP => true,
 40+ NS_HELP_TALK => false,
 41+ NS_CATEGORY => true,
 42+ NS_CATEGORY_TALK => false
 43+);
 44+# $wgSelectCategoryRoot - root category to use for which namespace, otherwise self detection (expensive)
 45+if( !isset( $wgSelectCategoryRoot ) ) $wgSelectCategoryRoot = array(
 46+ NS_MEDIA => false,
 47+ NS_MAIN => false,
 48+ NS_TALK => false,
 49+ NS_USER => false,
 50+ NS_USER_TALK => false,
 51+ NS_PROJECT => false,
 52+ NS_PROJECT_TALK => false,
 53+ NS_IMAGE => false,
 54+ NS_IMAGE_TALK => false,
 55+ NS_MEDIAWIKI => false,
 56+ NS_MEDIAWIKI_TALK => false,
 57+ NS_TEMPLATE => false,
 58+ NS_TEMPLATE_TALK => false,
 59+ NS_HELP => false,
 60+ NS_HELP_TALK => false,
 61+ NS_CATEGORY => false,
 62+ NS_CATEGORY_TALK => false
 63+);
 64+# $wgSelectCategoryEnableSubpages - if the extension should be active on subpages or not (true, as subpages are disabled by default)
 65+if( !isset( $wgSelectCategoryEnableSubpages ) ) $wgSelectCategoryEnableSubpages = true;
 66+
 67+## Register extension setup hook and credits:
 68+$wgExtensionCredits['parserhook'][] = array(
 69+ 'path' => __FILE__,
 70+ 'name' => 'SelectCategory',
 71+ 'version' => '0.7dev',
 72+ 'author' => 'Leon Weber & Manuel Schneider',
 73+ 'url' => 'http://www.mediawiki.org/wiki/Extension:SelectCategory',
 74+ 'descriptionmsg' => 'selectcategory-desc',
 75+);
 76+
 77+$dir = dirname(__FILE__) . '/';
 78+$wgExtensionMessagesFiles['SelectCategory'] = $dir . 'SelectCategory.i18n.php';
 79+
 80+## Set Hook:
 81+global $wgHooks;
 82+
 83+## Showing the boxes
 84+# Hook when starting editing:
 85+$wgHooks['EditPage::showEditForm:initial'][] = array( 'fnSelectCategoryShowHook', false );
 86+# Hook for the upload page:
 87+$wgHooks['UploadForm:initial'][] = array( 'fnSelectCategoryShowHook', true );
 88+
 89+## Saving the data
 90+# Hook when saving page:
 91+$wgHooks['EditPage::attemptSave'][] = array( 'fnSelectCategorySaveHook', false );
 92+# Hook when saving the upload:
 93+$wgHooks['UploadForm:BeforeProcessing'][] = array( 'fnSelectCategorySaveHook', true );
 94+
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/SelectCategory.php
___________________________________________________________________
Added: svn:eol-style
195 + native
Index: branches/REL1_17/extensions/SelectCategory/SelectCategory/jquery.treeview.js
@@ -0,0 +1,256 @@
 2+/*
 3+ * Treeview 1.4.1 - jQuery plugin to hide and show branches of a tree
 4+ *
 5+ * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
 6+ * http://docs.jquery.com/Plugins/Treeview
 7+ *
 8+ * Copyright (c) 2007 Jörn Zaefferer
 9+ *
 10+ * Dual licensed under the MIT and GPL licenses:
 11+ * http://www.opensource.org/licenses/mit-license.php
 12+ * http://www.gnu.org/licenses/gpl.html
 13+ *
 14+ * Revision: $Id: jquery.treeview.js 5759 2008-07-01 07:50:28Z joern.zaefferer $
 15+ *
 16+ */
 17+
 18+;(function($j) {
 19+
 20+ // TODO rewrite as a widget, removing all the extra plugins
 21+ $j.extend($j.fn, {
 22+ swapClass: function(c1, c2) {
 23+ var c1Elements = this.filter('.' + c1);
 24+ this.filter('.' + c2).removeClass(c2).addClass(c1);
 25+ c1Elements.removeClass(c1).addClass(c2);
 26+ return this;
 27+ },
 28+ replaceClass: function(c1, c2) {
 29+ return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
 30+ },
 31+ hoverClass: function(className) {
 32+ className = className || "hover";
 33+ return this.hover(function() {
 34+ $j(this).addClass(className);
 35+ }, function() {
 36+ $j(this).removeClass(className);
 37+ });
 38+ },
 39+ heightToggle: function(animated, callback) {
 40+ animated ?
 41+ this.animate({ height: "toggle" }, animated, callback) :
 42+ this.each(function(){
 43+ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
 44+ if(callback)
 45+ callback.apply(this, arguments);
 46+ });
 47+ },
 48+ heightHide: function(animated, callback) {
 49+ if (animated) {
 50+ this.animate({ height: "hide" }, animated, callback);
 51+ } else {
 52+ this.hide();
 53+ if (callback)
 54+ this.each(callback);
 55+ }
 56+ },
 57+ prepareBranches: function(settings) {
 58+ if (!settings.prerendered) {
 59+ // mark last tree items
 60+ this.filter(":last-child:not(ul)").addClass(CLASSES.last);
 61+ // collapse whole tree, or only those marked as closed, anyway except those marked as open
 62+ this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
 63+ }
 64+ // return all items with sublists
 65+ return this.filter(":has(>ul)");
 66+ },
 67+ applyClasses: function(settings, toggler) {
 68+ // TODO use event delegation
 69+ this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
 70+ // don't handle click events on children, eg. checkboxes
 71+ if ( this == event.target )
 72+ toggler.apply($j(this).next());
 73+ }).add( $j("a", this) ).hoverClass();
 74+
 75+ if (!settings.prerendered) {
 76+ // handle closed ones first
 77+ this.filter(":has(>ul:hidden)")
 78+ .addClass(CLASSES.expandable)
 79+ .replaceClass(CLASSES.last, CLASSES.lastExpandable);
 80+
 81+ // handle open ones
 82+ this.not(":has(>ul:hidden)")
 83+ .addClass(CLASSES.collapsable)
 84+ .replaceClass(CLASSES.last, CLASSES.lastCollapsable);
 85+
 86+ // create hitarea if not present
 87+ var hitarea = this.find("div." + CLASSES.hitarea);
 88+ if (!hitarea.length)
 89+ hitarea = this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea);
 90+ hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
 91+ var classes = "";
 92+ $j.each($j(this).parent().attr("class").split(" "), function() {
 93+ classes += this + "-hitarea ";
 94+ });
 95+ $j(this).addClass( classes );
 96+ })
 97+ }
 98+
 99+ // apply event to hitarea
 100+ this.find("div." + CLASSES.hitarea).click( toggler );
 101+ },
 102+ treeview: function(settings) {
 103+
 104+ settings = $j.extend({
 105+ cookieId: "treeview"
 106+ }, settings);
 107+
 108+ if ( settings.toggle ) {
 109+ var callback = settings.toggle;
 110+ settings.toggle = function() {
 111+ return callback.apply($j(this).parent()[0], arguments);
 112+ };
 113+ }
 114+
 115+ // factory for treecontroller
 116+ function treeController(tree, control) {
 117+ // factory for click handlers
 118+ function handler(filter) {
 119+ return function() {
 120+ // reuse toggle event handler, applying the elements to toggle
 121+ // start searching for all hitareas
 122+ toggler.apply( $j("div." + CLASSES.hitarea, tree).filter(function() {
 123+ // for plain toggle, no filter is provided, otherwise we need to check the parent element
 124+ return filter ? $j(this).parent("." + filter).length : true;
 125+ }) );
 126+ return false;
 127+ };
 128+ }
 129+ // click on first element to collapse tree
 130+ $j("a:eq(0)", control).click( handler(CLASSES.collapsable) );
 131+ // click on second to expand tree
 132+ $j("a:eq(1)", control).click( handler(CLASSES.expandable) );
 133+ // click on third to toggle tree
 134+ $j("a:eq(2)", control).click( handler() );
 135+ }
 136+
 137+ // handle toggle event
 138+ function toggler() {
 139+ $j(this)
 140+ .parent()
 141+ // swap classes for hitarea
 142+ .find(">.hitarea")
 143+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
 144+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
 145+ .end()
 146+ // swap classes for parent li
 147+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
 148+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
 149+ // find child lists
 150+ .find( ">ul" )
 151+ // toggle them
 152+ .heightToggle( settings.animated, settings.toggle );
 153+ if ( settings.unique ) {
 154+ $j(this).parent()
 155+ .siblings()
 156+ // swap classes for hitarea
 157+ .find(">.hitarea")
 158+ .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
 159+ .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
 160+ .end()
 161+ .replaceClass( CLASSES.collapsable, CLASSES.expandable )
 162+ .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
 163+ .find( ">ul" )
 164+ .heightHide( settings.animated, settings.toggle );
 165+ }
 166+ }
 167+ this.data("toggler", toggler);
 168+
 169+ function serialize() {
 170+ function binary(arg) {
 171+ return arg ? 1 : 0;
 172+ }
 173+ var data = [];
 174+ branches.each(function(i, e) {
 175+ data[i] = $j(e).is(":has(>ul:visible)") ? 1 : 0;
 176+ });
 177+ $j.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
 178+ }
 179+
 180+ function deserialize() {
 181+ var stored = $j.cookie(settings.cookieId);
 182+ if ( stored ) {
 183+ var data = stored.split("");
 184+ branches.each(function(i, e) {
 185+ $j(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
 186+ });
 187+ }
 188+ }
 189+
 190+ // add treeview class to activate styles
 191+ this.addClass("treeview");
 192+
 193+ // prepare branches and find all tree items with child lists
 194+ var branches = this.find("li").prepareBranches(settings);
 195+
 196+ switch(settings.persist) {
 197+ case "cookie":
 198+ var toggleCallback = settings.toggle;
 199+ settings.toggle = function() {
 200+ serialize();
 201+ if (toggleCallback) {
 202+ toggleCallback.apply(this, arguments);
 203+ }
 204+ };
 205+ deserialize();
 206+ break;
 207+ case "location":
 208+ var current = this.find("a").filter(function() {
 209+ return this.href.toLowerCase() == location.href.toLowerCase();
 210+ });
 211+ if ( current.length ) {
 212+ // TODO update the open/closed classes
 213+ var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
 214+ if (settings.prerendered) {
 215+ // if prerendered is on, replicate the basic class swapping
 216+ items.filter("li")
 217+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
 218+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
 219+ .find(">.hitarea")
 220+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
 221+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
 222+ }
 223+ }
 224+ break;
 225+ }
 226+
 227+ branches.applyClasses(settings, toggler);
 228+
 229+ // if control option is set, create the treecontroller and show it
 230+ if ( settings.control ) {
 231+ treeController(this, settings.control);
 232+ $j(settings.control).show();
 233+ }
 234+
 235+ return this;
 236+ }
 237+ });
 238+
 239+ // classes used by the plugin
 240+ // need to be styled via external stylesheet, see first example
 241+ $j.treeview = {};
 242+ var CLASSES = ($j.treeview.classes = {
 243+ open: "open",
 244+ closed: "closed",
 245+ expandable: "expandable",
 246+ expandableHitarea: "expandable-hitarea",
 247+ lastExpandableHitarea: "lastExpandable-hitarea",
 248+ collapsable: "collapsable",
 249+ collapsableHitarea: "collapsable-hitarea",
 250+ lastCollapsableHitarea: "lastCollapsable-hitarea",
 251+ lastCollapsable: "lastCollapsable",
 252+ lastExpandable: "lastExpandable",
 253+ last: "last",
 254+ hitarea: "hitarea"
 255+ });
 256+
 257+})(jQuery);
\ No newline at end of file
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory/jquery.treeview.js
___________________________________________________________________
Added: svn:eol-style
1258 + native
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory
___________________________________________________________________
Added: svn:mergeinfo
2259 Merged /trunk/extensions/SelectCategory:r62820-82172,82174

Status & tagging log