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 |
1 | 21 | + 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 |
2 | 22 | + 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 |
3 | 23 | + 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 |
1 | 50 | + 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 |
1 | 7 | + 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 |
1 | 328 | + 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 |
1 | 113 | + 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 |
1 | 76 | + 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 |
1 | 617 | + 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 |
1 | 343 | + 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 |
1 | 95 | + 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 |
1 | 258 | + native |
Property changes on: branches/REL1_17/extensions/SelectCategory/SelectCategory |
___________________________________________________________________ |
Added: svn:mergeinfo |
2 | 259 | Merged /trunk/extensions/SelectCategory:r62820-82172,82174 |