r23626 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r23625‎ | r23626 | r23627 >
Date:04:52, 2 July 2007
Author:yurik
Status:old
Tags:
Comment:
API: apiedit-branch update to trunk
Modified paths:
  • /branches/apiedit/phase3 (modified) (history)
  • /branches/apiedit/phase3/RELEASE-NOTES (modified) (history)
  • /branches/apiedit/phase3/docs/hooks.txt (modified) (history)
  • /branches/apiedit/phase3/includes/AjaxDispatcher.php (modified) (history)
  • /branches/apiedit/phase3/includes/Article.php (modified) (history)
  • /branches/apiedit/phase3/includes/DefaultSettings.php (modified) (history)
  • /branches/apiedit/phase3/includes/EditPage.php (modified) (history)
  • /branches/apiedit/phase3/includes/Setup.php (modified) (history)
  • /branches/apiedit/phase3/includes/SpecialMovepage.php (modified) (history)
  • /branches/apiedit/phase3/includes/SpecialUpload.php (modified) (history)
  • /branches/apiedit/phase3/includes/User.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesEn.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesId.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesKab.php (modified) (history)
  • /branches/apiedit/phase3/languages/messages/MessagesTi.php (modified) (history)
  • /branches/apiedit/phase3/skins/common/upload.js (modified) (history)
  • /branches/apiedit/phase3/skins/common/wikibits.js (modified) (history)

Diff [purge]

Index: branches/apiedit/phase3/docs/hooks.txt
@@ -656,14 +656,9 @@
657657 Can be used to set custom CSS/JS
658658 $out: OutputPage object
659659
660 -'ShowRawCssJs': Customise the output of raw CSS and JavaScript in page views
661 -$text: Text being shown
662 -$title: Title of the custom script/stylesheet page
663 -$output: Current OutputPage object
664 -
665660 'AjaxAddScript': Called in output page just before the initialisation
666661 of the javascript ajax engine. The hook is only called when ajax
667662 is enabled ( $wgUseAjax = true; ).
668663
669664 More hooks might be available but undocumented, you can execute
670 -./maintenance/findhooks.php to find hidden one.
\ No newline at end of file
 665+./maintenance/findhooks.php to find hidden one.
Index: branches/apiedit/phase3/RELEASE-NOTES
@@ -104,15 +104,18 @@
105105 * (bug 9250) Remove hardcoded minimum image name length of three characters
106106 * Fixed DISPLAYTITLE behaviour to reject titles which don't normalise to the
107107 same title as the current page, and enabled per default
108 -* Wrap site CSS and JavaScript in a <pre> tag, like user JS/CSS
109 -* (bug 10196) Add classes and dir="ltr" to the <pre>s on CSS and JS pages (new
110 - classes: mw-code, mw-css, mw-js)
 108+* (bug 10196) Add classes and dir="ltr" to <div>s wrapping CSS and JS pages
 109+ (new classes: mw-code, mw-css, mw-js)
111110 * (bug 6711) Add $wgAddGroups and $wgRemoveGroups to allow finer control over
112111 usergroup assignment.
113112 * Introduce 'UserEffectiveGroups' hook; see docs/hooks.txt for more information
114113 * (bug 10387) Detect and handle '.php5' extension environments at install time
115114 Patch by Edward Z. Yang.
116 -* Introduce 'ShowRawCssJs' hook; see docs/hooks.txt for more information
 115+* (bug 10404) Show rights log for the selected user in Special:Userrights
 116+* New javascript for upload page that will show a warning if a file with the
 117+ "destination filename" already exists.
 118+* (bug 10422) Do not wrap user JS/CSS in <pre>; allow it to render as wikitext.
 119+ like site CSS/JS.
117120 * (bug 10404) Show rights log fragment for the selected user in Special:Userrights
118121
119122 == Bugfixes since 1.10 ==
@@ -286,7 +289,7 @@
287290 * (bug 10260) Show page protection status
288291 * (bug 10392) Include MediaWiki version details in version output
289292 * (bug 10411) Site language in meta=siteinfo
290 -* (bug 10297) include previous revision ID in prop=revisions
 293+* (bug 10391) action=help doesn't return help if format is fancy markup
291294
292295 == Maintenance script changes since 1.10 ==
293296
Index: branches/apiedit/phase3/includes/Setup.php
@@ -257,6 +257,7 @@
258258
259259 if ( $wgAjaxSearch ) $wgAjaxExportList[] = 'wfSajaxSearch';
260260 if ( $wgAjaxWatch ) $wgAjaxExportList[] = 'wfAjaxWatch';
 261+if ( $wgAjaxUploadDestCheck ) $wgAjaxExportList[] = 'UploadForm::ajaxGetExistsWarning';
261262
262263 wfSeedRandom();
263264
Index: branches/apiedit/phase3/includes/Article.php
@@ -784,15 +784,12 @@
785785 if( $this->mTitle->isCssOrJsPage() || $this->mTitle->isCssJsSubpage() ) {
786786 $wgOut->addHtml( wfMsgExt( 'clearyourcache', 'parse' ) );
787787
788 - // Give hooks a chance to customise the output
789 - if( wfRunHooks( 'ShowRawCssJs', array( $this->mContent, $this->mTitle, $wgOut ) ) ) {
790 - // Wrap the whole lot in a <pre> and don't parse
791 - preg_match( '!\.(css|js)$!u', $this->mTitle->getText(), $m );
792 - $wgOut->addHtml( "<pre class=\"mw-code mw-{$m[1]}\" dir=\"ltr\">\n" );
793 - $wgOut->addHtml( htmlspecialchars( $this->mContent ) );
794 - $wgOut->addHtml( "\n</pre>\n" );
795 - }
796 -
 788+ // Add classes, give directionality. Do parse it as wikitext
 789+ // (bug 10422).
 790+ preg_match( '!\.(css|js)$!u', $this->mTitle->getText(), $m );
 791+ $wgOut->addHtml( "<div class=\"mw-code mw-{$m[1]}\" dir=\"ltr\">\n" );
 792+ $wgOut->addWikiText( $this->mContent );
 793+ $wgOut->addHtml( "\n</div>\n" );
797794 }
798795
799796 elseif ( $rt = Title::newFromRedirect( $text ) ) {
Index: branches/apiedit/phase3/includes/SpecialUpload.php
@@ -26,7 +26,7 @@
2727 var $mDestName, $mTempPath, $mFileSize, $mFileProps;
2828 var $mCopyrightStatus, $mCopyrightSource, $mReUpload, $mAction, $mUploadClicked;
2929 var $mSrcName, $mSessionKey, $mStashed, $mDesiredDestName, $mRemoveTempFile, $mSourceType;
30 - var $mCurlDestHandle;
 30+ var $mDestWarningAck, $mCurlDestHandle;
3131 var $mLocalFile;
3232
3333 # Placeholders for text injection by hooks (must be HTML)
@@ -65,7 +65,7 @@
6666 $this->mCopyrightSource = $request->getText( 'wpUploadSource' );
6767 $this->mWatchthis = $request->getBool( 'wpWatchthis' );
6868 $this->mSourceType = $request->getText( 'wpSourceType' );
69 - wfDebug( "UploadForm: watchthis is: '$this->mWatchthis'\n" );
 69+ $this->mDestWarningAck = $request->getText( 'wpDestFileWarningAck' );
7070
7171 $this->mAction = $request->getVal( 'action' );
7272
@@ -411,89 +411,9 @@
412412 $warning .= '<li>'.wfMsgHtml( 'emptyfile' ).'</li>';
413413 }
414414
415 - global $wgUser;
416 - $sk = $wgUser->getSkin();
417 -
418 - // Check for uppercase extension. We allow these filenames but check if an image
419 - // with lowercase extension exists already
420 - if ( $finalExt != strtolower( $finalExt ) ) {
421 - $nt_lc = Title::newFromText( $partname . '.' . strtolower( $finalExt ) );
422 - $image_lc = wfLocalFile( $nt_lc );
 415+ if ( !$this->mDestWarningAck ) {
 416+ $warning .= self::getExistsWarning( $this->mLocalFile );
423417 }
424 -
425 - if( $this->mLocalFile->exists() ) {
426 - $dlink = $sk->makeKnownLinkObj( $nt );
427 - if ( $this->mLocalFile->allowInlineDisplay() ) {
428 - $dlink2 = $sk->makeImageLinkObj( $nt, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
429 - $nt->getText(), 'right', array(), false, true );
430 - } elseif ( !$this->mLocalFile->allowInlineDisplay() && $this->mLocalFile->isSafeFile() ) {
431 - $icon = $this->mLocalFile->iconThumb();
432 - $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $this->mLocalFile->getURL() . '">' .
433 - $icon->toHtml() . '</a><br />' . $dlink . '</div>';
434 - } else {
435 - $dlink2 = '';
436 - }
437 -
438 - $warning .= '<li>' . wfMsgExt( 'fileexists', 'parseline', $dlink ) . '</li>' . $dlink2;
439 -
440 - } elseif ( isset( $image_lc) && $image_lc->exists() ) {
441 - # Check if image with lowercase extension exists.
442 - # It's not forbidden but in 99% it makes no sense to upload the same filename with uppercase extension
443 - $dlink = $sk->makeKnownLinkObj( $nt_lc );
444 - if ( $image_lc->allowInlineDisplay() ) {
445 - $dlink2 = $sk->makeImageLinkObj( $nt_lc, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
446 - $nt_lc->getText(), 'right', array(), false, true );
447 - } elseif ( !$image_lc->allowInlineDisplay() && $image_lc->isSafeFile() ) {
448 - $icon = $image_lc->iconThumb();
449 - $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $image_lc->getURL() . '">' .
450 - $icon->toHtml() . '</a><br />' . $dlink . '</div>';
451 - } else {
452 - $dlink2 = '';
453 - }
454 -
455 - $warning .= '<li>' . wfMsgExt( 'fileexists-extension', 'parsemag' , $partname . '.'
456 - . $finalExt , $dlink ) . '</li>' . $dlink2;
457 -
458 - } elseif ( ( substr( $partname , 3, 3 ) == 'px-' || substr( $partname , 2, 3 ) == 'px-' )
459 - && ereg( "[0-9]{2}" , substr( $partname , 0, 2) ) )
460 - {
461 - # Check for filenames like 50px- or 180px-, these are mostly thumbnails
462 - $nt_thb = Title::newFromText( substr( $partname , strpos( $partname , '-' ) +1 ) . '.' . $finalExt );
463 - $image_thb = wfLocalFile( $nt_thb );
464 - if ($image_thb->exists() ) {
465 - # Check if an image without leading '180px-' (or similiar) exists
466 - $dlink = $sk->makeKnownLinkObj( $nt_thb);
467 - if ( $image_thb->allowInlineDisplay() ) {
468 - $dlink2 = $sk->makeImageLinkObj( $nt_thb,
469 - wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
470 - $nt_thb->getText(), 'right', array(), false, true );
471 - } elseif ( !$image_thb->allowInlineDisplay() && $image_thb->isSafeFile() ) {
472 - $icon = $image_thb->iconThumb();
473 - $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' .
474 - $image_thb->getURL() . '">' . $icon->toHtml() . '</a><br />' .
475 - $dlink . '</div>';
476 - } else {
477 - $dlink2 = '';
478 - }
479 -
480 - $warning .= '<li>' . wfMsgExt( 'fileexists-thumbnail-yes', 'parsemag', $dlink ) .
481 - '</li>' . $dlink2;
482 - } else {
483 - # Image w/o '180px-' does not exists, but we do not like these filenames
484 - $warning .= '<li>' . wfMsgExt( 'file-thumbnail-no', 'parseinline' ,
485 - substr( $partname , 0, strpos( $partname , '-' ) +1 ) ) . '</li>';
486 - }
487 - }
488 - if ( $this->mLocalFile->wasDeleted() ) {
489 - # If the file existed before and was deleted, warn the user of this
490 - # Don't bother doing so if the image exists now, however
491 - $ltitle = SpecialPage::getTitleFor( 'Log' );
492 - $llink = $sk->makeKnownLinkObj( $ltitle, wfMsgHtml( 'deletionlog' ),
493 - 'type=delete&page=' . $nt->getPrefixedUrl() );
494 - $warning .= wfOpenElement( 'li' ) . wfMsgWikiHtml( 'filewasdeleted', $llink ) .
495 - wfCloseElement( 'li' );
496 - }
497 -
498418 if( $warning != '' ) {
499419 /**
500420 * Stash the file in a temporary location; the user can choose
@@ -519,17 +439,124 @@
520440 global $wgUser;
521441 $wgUser->addWatch( $this->mLocalFile->getTitle() );
522442 }
523 - if ( $status === '' ) {
524 - // New upload, redirect to description page
525 - $wgOut->redirect( $this->mLocalFile->getTitle()->getFullURL() );
 443+ // Success, redirect to description page
 444+ $wgOut->redirect( $this->mLocalFile->getTitle()->getFullURL() );
 445+ wfRunHooks( 'UploadComplete', array( &$img ) );
 446+ }
 447+ }
 448+
 449+ /**
 450+ * Do existence checks on a file and produce a warning
 451+ * This check is static and can be done pre-upload via AJAX
 452+ * Returns an HTML fragment consisting of one or more LI elements if there is a warning
 453+ * Returns an empty string if there is no warning
 454+ */
 455+ static function getExistsWarning( $file ) {
 456+ global $wgUser;
 457+ // Check for uppercase extension. We allow these filenames but check if an image
 458+ // with lowercase extension exists already
 459+ $warning = '';
 460+ $ext = $file->getExtension();
 461+ $sk = $wgUser->getSkin();
 462+ if ( $ext !== '' ) {
 463+ $partname = substr( $file->getName(), 0, -strlen( $ext ) - 1 );
 464+ } else {
 465+ $partname = $file->getName();
 466+ }
 467+
 468+ if ( $ext != strtolower( $ext ) ) {
 469+ $nt_lc = Title::newFromText( $partname . '.' . strtolower( $ext ) );
 470+ $file_lc = wfLocalFile( $nt_lc );
 471+ } else {
 472+ $file_lc = false;
 473+ }
 474+
 475+ if( $file->exists() ) {
 476+ $dlink = $sk->makeKnownLinkObj( $file->getTitle() );
 477+ if ( $file->allowInlineDisplay() ) {
 478+ $dlink2 = $sk->makeImageLinkObj( $file->getTitle(), wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
 479+ $file->getName(), 'right', array(), false, true );
 480+ } elseif ( !$file->allowInlineDisplay() && $file->isSafeFile() ) {
 481+ $icon = $file->iconThumb();
 482+ $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $file->getURL() . '">' .
 483+ $icon->toHtml() . '</a><br />' . $dlink . '</div>';
526484 } else {
527 - // Reupload, show success page
528 - $this->showSuccess();
 485+ $dlink2 = '';
529486 }
530 - wfRunHooks( 'UploadComplete', array( &$img ) );
 487+
 488+ $warning .= '<li>' . wfMsgExt( 'fileexists', 'parseline', $dlink ) . '</li>' . $dlink2;
 489+
 490+ } elseif ( $file_lc && $file_lc->exists() ) {
 491+ # Check if image with lowercase extension exists.
 492+ # It's not forbidden but in 99% it makes no sense to upload the same filename with uppercase extension
 493+ $dlink = $sk->makeKnownLinkObj( $nt_lc );
 494+ if ( $file_lc->allowInlineDisplay() ) {
 495+ $dlink2 = $sk->makeImageLinkObj( $nt_lc, wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
 496+ $nt_lc->getText(), 'right', array(), false, true );
 497+ } elseif ( !$file_lc->allowInlineDisplay() && $file_lc->isSafeFile() ) {
 498+ $icon = $file_lc->iconThumb();
 499+ $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' . $file_lc->getURL() . '">' .
 500+ $icon->toHtml() . '</a><br />' . $dlink . '</div>';
 501+ } else {
 502+ $dlink2 = '';
 503+ }
 504+
 505+ $warning .= '<li>' . wfMsgExt( 'fileexists-extension', 'parsemag' , $partname . '.'
 506+ . $ext , $dlink ) . '</li>' . $dlink2;
 507+
 508+ } elseif ( ( substr( $partname , 3, 3 ) == 'px-' || substr( $partname , 2, 3 ) == 'px-' )
 509+ && ereg( "[0-9]{2}" , substr( $partname , 0, 2) ) )
 510+ {
 511+ # Check for filenames like 50px- or 180px-, these are mostly thumbnails
 512+ $nt_thb = Title::newFromText( substr( $partname , strpos( $partname , '-' ) +1 ) . '.' . $ext );
 513+ $file_thb = wfLocalFile( $nt_thb );
 514+ if ($file_thb->exists() ) {
 515+ # Check if an image without leading '180px-' (or similiar) exists
 516+ $dlink = $sk->makeKnownLinkObj( $nt_thb);
 517+ if ( $file_thb->allowInlineDisplay() ) {
 518+ $dlink2 = $sk->makeImageLinkObj( $nt_thb,
 519+ wfMsgExt( 'fileexists-thumb', 'parseinline', $dlink ),
 520+ $nt_thb->getText(), 'right', array(), false, true );
 521+ } elseif ( !$file_thb->allowInlineDisplay() && $file_thb->isSafeFile() ) {
 522+ $icon = $file_thb->iconThumb();
 523+ $dlink2 = '<div style="float:right" id="mw-media-icon"><a href="' .
 524+ $file_thb->getURL() . '">' . $icon->toHtml() . '</a><br />' .
 525+ $dlink . '</div>';
 526+ } else {
 527+ $dlink2 = '';
 528+ }
 529+
 530+ $warning .= '<li>' . wfMsgExt( 'fileexists-thumbnail-yes', 'parsemag', $dlink ) .
 531+ '</li>' . $dlink2;
 532+ } else {
 533+ # Image w/o '180px-' does not exists, but we do not like these filenames
 534+ $warning .= '<li>' . wfMsgExt( 'file-thumbnail-no', 'parseinline' ,
 535+ substr( $partname , 0, strpos( $partname , '-' ) +1 ) ) . '</li>';
 536+ }
531537 }
 538+ if ( $file->wasDeleted() ) {
 539+ # If the file existed before and was deleted, warn the user of this
 540+ # Don't bother doing so if the image exists now, however
 541+ $ltitle = SpecialPage::getTitleFor( 'Log' );
 542+ $llink = $sk->makeKnownLinkObj( $ltitle, wfMsgHtml( 'deletionlog' ),
 543+ 'type=delete&page=' . $file->getTitle()->getPrefixedUrl() );
 544+ $warning .= '<li>' . wfMsgWikiHtml( 'filewasdeleted', $llink ) . '</li>';
 545+ }
 546+ return $warning;
532547 }
533548
 549+ static function ajaxGetExistsWarning( $filename ) {
 550+ $file = wfFindFile( $filename );
 551+ $s = '&nbsp;';
 552+ if ( $file ) {
 553+ $warning = self::getExistsWarning( $file );
 554+ if ( $warning !== '' ) {
 555+ $s = "<ul>$warning</ul>";
 556+ }
 557+ }
 558+ return $s;
 559+ }
 560+
534561 /**
535562 * Stash a file in a temporary directory for later processing
536563 * after the user has confirmed it.
@@ -602,24 +629,6 @@
603630 /* -------------------------------------------------------------- */
604631
605632 /**
606 - * Show some text and linkage on successful upload.
607 - * @access private
608 - */
609 - function showSuccess() {
610 - global $wgUser, $wgOut, $wgContLang;
611 -
612 - $sk = $wgUser->getSkin();
613 - $ilink = $sk->makeMediaLinkObj( $this->mLocalFile->getTitle() );
614 - $dname = $wgContLang->getNsText( NS_IMAGE ) . ':'.$this->mDestName;
615 - $dlink = $sk->makeKnownLink( $dname, $dname );
616 -
617 - $wgOut->addHTML( '<h2>' . wfMsgHtml( 'successfulupload' ) . "</h2>\n" );
618 - $text = wfMsgWikiHtml( 'fileuploaded', $ilink, $dlink );
619 - $wgOut->addHTML( $text );
620 - $wgOut->returnToMain( false );
621 - }
622 -
623 - /**
624633 * @param string $error as HTML
625634 * @access private
626635 */
@@ -703,9 +712,18 @@
704713 */
705714 function mainUploadForm( $msg='' ) {
706715 global $wgOut, $wgUser;
707 - global $wgUseCopyrightUpload;
708 - global $wgRequest, $wgAllowCopyUploads;
 716+ global $wgUseCopyrightUpload, $wgAjaxUploadDestCheck, $wgUseAjax;
 717+ global $wgRequest, $wgAllowCopyUploads, $wgEnableAPI;
 718+ global $wgStylePath;
709719
 720+ $useAjax = $wgAjaxUploadDestCheck && $wgUseAjax;
 721+
 722+ $wgOut->addScript(
 723+ "<script type='text/javascript'>wgAjaxUploadDestCheck = " .
 724+ ($useAjax ? 'true' : 'false' ) . ";</script>\n" .
 725+ "<script type='text/javascript' src=\"$wgStylePath/common/upload.js?1\"></script>\n"
 726+ );
 727+
710728 if( !wfRunHooks( 'UploadForm:initial', array( &$this ) ) )
711729 {
712730 wfDebug( "Hook 'UploadForm:initial' broke output of the upload form" );
@@ -776,6 +794,14 @@
777795 "size='40' />" .
778796 "<input type='hidden' name='wpSourceType' value='file' />" ;
779797 }
 798+ if ( $useAjax ) {
 799+ $warningRow = "<tr><td colspan='2' id='wpDestFile-warning'>&nbsp</td></tr>";
 800+ $destOnkeyup = 'onkeyup="wgUploadWarningObj.keypress();"';
 801+ } else {
 802+ $warningRow = '';
 803+ $destOnkeyup = '';
 804+ }
 805+
780806 $encComment = htmlspecialchars( $this->mComment );
781807
782808 $wgOut->addHTML( <<<EOT
@@ -791,7 +817,8 @@
792818 <tr>
793819 <td align='right'><label for='wpDestFile'>{$destfilename}:</label></td>
794820 <td align='left'>
795 - <input tabindex='2' type='text' name='wpDestFile' id='wpDestFile' size='40' value="$encDestName" />
 821+ <input tabindex='2' type='text' name='wpDestFile' id='wpDestFile' size='40'
 822+ value="$encDestName" $destOnkeyup />
796823 </td>
797824 </tr>
798825 <tr>
@@ -811,7 +838,6 @@
812839 $wgOut->addHTML( "
813840 <td align='right'><label for='wpLicense'>$license:</label></td>
814841 <td align='left'>
815 - <script type='text/javascript' src=\"$wgStylePath/common/upload.js\"></script>
816842 <select name='wpLicense' id='wpLicense' tabindex='4'
817843 onchange='licenseSelectorCheck()'>
818844 <option value=''>$nolicense</option>
@@ -843,7 +869,6 @@
844870 ");
845871 }
846872
847 -
848873 $wgOut->addHtml( "
849874 <td></td>
850875 <td>
@@ -853,11 +878,11 @@
854879 <label for='wpIgnoreWarning'>" . wfMsgHtml( 'ignorewarnings' ) . "</label>
855880 </td>
856881 </tr>
 882+ $warningRow
857883 <tr>
858884 <td></td>
859885 <td align='left'><input tabindex='9' type='submit' name='wpUpload' value=\"{$ulb}\" /></td>
860886 </tr>
861 -
862887 <tr>
863888 <td></td>
864889 <td align='left'>
@@ -868,6 +893,7 @@
869894 </tr>
870895
871896 </table>
 897+ <input type='hidden' name='wpDestFileWarningAck' id='wpDestFileWarningAck' value=''/>
872898 </form>" );
873899 }
874900
Index: branches/apiedit/phase3/includes/AjaxDispatcher.php
@@ -84,8 +84,13 @@
8585 wfHttpError( 400, 'Bad Request',
8686 "unknown function " . (string) $this->func_name );
8787 } else {
 88+ if ( strpos( $this->func_name, '::' ) !== false ) {
 89+ $func = explode( '::', $this->func_name, 2 );
 90+ } else {
 91+ $func = $this->func_name;
 92+ }
8893 try {
89 - $result = call_user_func_array($this->func_name, $this->args);
 94+ $result = call_user_func_array($func, $this->args);
9095
9196 if ( $result === false || $result === NULL ) {
9297 wfHttpError( 500, 'Internal Error',
Index: branches/apiedit/phase3/includes/SpecialMovepage.php
@@ -274,22 +274,25 @@
275275 $old = Title::newFromText( $wgRequest->getText( 'oldtitle' ) );
276276 $new = Title::newFromText( $wgRequest->getText( 'newtitle' ) );
277277 $talkmoved = $wgRequest->getVal( 'talkmoved' );
278 -
279 - $olink = $wgUser->getSkin()->makeKnownLinkObj( $old, '', 'redirect=no' );
280 - $nlink = $wgUser->getSkin()->makeKnownLinkObj( $new );
 278+ $oldUrl = $old->getFullUrl( 'redirect=no' );
 279+ $newUrl = $new->getFullURl();
 280+ $oldText = $old->getPrefixedText();
 281+ $newText = $new->getPrefixedText();
 282+ $oldLink = "<span class='plainlinks'>[$oldUrl $oldText]</span>";
 283+ $newLink = "<span class='plainlinks'>[$newUrl $newText]</span>";
281284
282 - $wgOut->addHtml( wfMsgExt( 'movepage-moved', array( 'parseinline', 'replaceafter' ),
283 - $olink, $nlink, $old->getPrefixedText(), $new->getPrefixedText() ) );
 285+ $s = wfMsg( 'movepage-moved', $oldLink, $newLink, $oldText, $newText );
284286
285287 if ( $talkmoved == 1 ) {
286 - $wgOut->addWikiText( wfMsg( 'talkpagemoved' ) );
 288+ $s .= "\n\n" . wfMsg( 'talkpagemoved' );
287289 } elseif( 'articleexists' == $talkmoved ) {
288 - $wgOut->addWikiText( wfMsg( 'talkexists' ) );
 290+ $s .= "\n\n" . wfMsg( 'talkexists' );
289291 } else {
290292 if( !$old->isTalkPage() && $talkmoved != 'notalkpage' ) {
291 - $wgOut->addWikiText( wfMsg( 'talkpagenotmoved', wfMsg( $talkmoved ) ) );
 293+ $s .= "\n\n" . wfMsg( 'talkpagenotmoved', wfMsg( $talkmoved ) );
292294 }
293295 }
 296+ $wgOut->addWikiText( $s );
294297 }
295298
296299 function showLogFragment( $title, &$out ) {
Index: branches/apiedit/phase3/includes/EditPage.php
@@ -20,6 +20,7 @@
2121 var $firsttime;
2222 var $lastDelete;
2323 var $mTokenOk = false;
 24+ var $mTokenOkExceptSuffix = false;
2425 var $mTriedSave = false;
2526 var $tooBig = false;
2627 var $kblength = false;
@@ -576,7 +577,9 @@
577578 */
578579 function tokenOk( &$request ) {
579580 global $wgUser;
580 - $this->mTokenOk = $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
 581+ $token = $request->getVal( 'wpEditToken' );
 582+ $this->mTokenOk = $wgUser->matchEditToken( $token );
 583+ $this->mTokenOkExceptSuffix = $wgUser->matchEditTokenNoSuffix( $token );
581584 return $this->mTokenOk;
582585 }
583586
@@ -1369,7 +1372,11 @@
13701373 wfProfileIn( $fname );
13711374
13721375 if ( $this->mTriedSave && !$this->mTokenOk ) {
1373 - $msg = 'session_fail_preview';
 1376+ if ( $this->mTokenOkExceptSuffix ) {
 1377+ $msg = 'token_suffix_mismatch';
 1378+ } else {
 1379+ $msg = 'session_fail_preview';
 1380+ }
13741381 } else {
13751382 $msg = 'previewnote';
13761383 }
Index: branches/apiedit/phase3/includes/DefaultSettings.php
@@ -2552,6 +2552,11 @@
25532553 $wgAjaxWatch = true;
25542554
25552555 /**
 2556+ * Enable AJAX check for file overwrite, pre-upload
 2557+ */
 2558+$wgAjaxUploadDestCheck = true;
 2559+
 2560+/**
25562561 * Allow DISPLAYTITLE to change title display
25572562 */
25582563 $wgAllowDisplayTitle = true;
Index: branches/apiedit/phase3/includes/User.php
@@ -2312,7 +2312,6 @@
23132313 * @public
23142314 */
23152315 function matchEditToken( $val, $salt = '' ) {
2316 - global $wgMemc;
23172316 $sessionToken = $this->editToken( $salt );
23182317 if ( $val != $sessionToken ) {
23192318 wfDebug( "User::matchEditToken: broken session data\n" );
@@ -2321,6 +2320,14 @@
23222321 }
23232322
23242323 /**
 2324+ * Check whether the edit token is fine except for the suffix
 2325+ */
 2326+ function matchEditTokenNoSuffix( $val, $salt = '' ) {
 2327+ $sessionToken = $this->editToken( $salt );
 2328+ return substr( $sessionToken, 0, 32 ) == substr( $val, 0, 32 );
 2329+ }
 2330+
 2331+ /**
23252332 * Generate a new e-mail confirmation token and send a confirmation
23262333 * mail to the user's given address.
23272334 *
Index: branches/apiedit/phase3/languages/messages/MessagesTi.php
@@ -37,10 +37,12 @@
3838 'qbmyoptions' => 'ፅሑፋተይ',
3939 'mypage' => 'ፅሑፈይ',
4040
 41+'help' => 'ፍንጪ',
4142 'search' => 'ድሉይ',
4243 'searchbutton' => 'ድሉይ',
4344 'history' => 'ናይ ፅሑፍ ታሪኽ',
4445 'history_short' => 'ታሪኽ',
 46+'newpage' => 'ሓዳስ ፅሑፍ',
4547 'jumptosearch' => 'ድሉይ',
4648
4749 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
@@ -57,10 +59,18 @@
5860 'viewsourcefor' => 'ን$1',
5961
6062 # Login and logout pages
 63+'yourname' => 'ናይ ኣባል ሽም:',
 64+'youremail' => 'ኢ-መይል:',
6165 'yourlanguage' => 'ቋንቋ:',
 66+'email' => 'ኢ-መይል',
6267
 68+# Edit pages
 69+'savearticle' => 'ፅሑፍ ኣቐምጥ',
 70+'newarticle' => '(ሓዳስ)',
 71+
6372 # History pages
64 -'next' => 'ዝቕጽል',
 73+'next' => 'ዝቕጽል',
 74+'historysize' => '($1 ባይታት)',
6575
6676 # Search results
6777 'prevn' => 'ናይ ቀደም $1',
@@ -70,7 +80,9 @@
7181 # Preferences page
7282 'preferences' => 'ኣማረጽቲ',
7383 'mypreferences' => 'ናተይ ኣማረጽቲ',
 84+'saveprefs' => 'ኣቐምጥ',
7485 'searchresultshead' => 'ድሉይ',
 86+'savedprefs' => 'ዘቕረብኩሞ መርኣይ ብትክክል ተቀሚጡ ኣሎ።',
7587 'files' => 'ምስልታት',
7688
7789 # Groups
@@ -80,30 +92,42 @@
8193 'group-sysop-member' => 'ሲሶፕ',
8294
8395 # Recent changes
84 -'hist' => 'ታሪኽ',
 96+'hist' => 'ታሪኽ',
 97+'newpageletter' => 'ሓ',
8598
 99+# Upload
 100+'savefile' => 'ምስሊ ኣቐምጥ',
 101+
86102 # Image list
87103 'imagelist' => 'ምስልታት',
88104 'ilsubmit' => 'ድሉይ',
89105 'imgfile' => 'ምስሊ',
90106 'imghistory' => 'ናይ ምስሊ ታሪኽ',
 107+'imagelist_name' => 'ሽም',
91108 'imagelist_user' => 'ኣባል',
92109
93110 # Miscellaneous special pages
94 -'nbytes' => '$1 {{PLURAL:$1|ባይት|ባይታት}}',
95 -'listusers' => 'ኣባላት',
96 -'newpages' => 'ሓደሽቲ ዛዕባታት',
 111+'nbytes' => '$1 {{PLURAL:$1|ባይት|ባይታት}}',
 112+'longpages' => 'ነዋሕቲ ፅሑፋት',
 113+'listusers' => 'ኣባላት',
 114+'newpages' => 'ሓደሽቲ ዛዕባታት',
 115+'newpages-username' => 'ናይ ኣባል ሽም:',
97116
 117+# Book sources
 118+'booksources-go' => 'ኪድ',
 119+
98120 'alphaindexline' => '$1 ናብ $2',
99121
100122 # Special:Log
101123 'specialloguserlabel' => 'ኣባል:',
 124+'log-search-submit' => 'ኪድ',
102125
103126 # Special:Allpages
104 -'nextpage' => 'ዝቕጽል ፅሑፍ ($1)',
105 -'prevpage' => 'ናይ ቀደም ፅሑፍ ($1)',
106 -'allpagesprev' => 'ናይ ቀደም',
107 -'allpagesnext' => 'ዝቕጽል',
 127+'nextpage' => 'ዝቕጽል ፅሑፍ ($1)',
 128+'prevpage' => 'ናይ ቀደም ፅሑፍ ($1)',
 129+'allpagesprev' => 'ናይ ቀደም',
 130+'allpagesnext' => 'ዝቕጽል',
 131+'allpagessubmit' => 'ኪድ',
108132
109133 # Watchlist
110134 'watchlistfor' => "(ን'''$1''')",
@@ -122,9 +146,15 @@
123147 # Block/unblock
124148 'ipblocklist-submit' => 'ድሉይ',
125149
 150+# Namespace 8 related
 151+'allmessagesname' => 'ሽም',
 152+
126153 # Tooltip help for the actions
127154 'tooltip-pt-preferences' => 'ናተይ ኣማረጽቲ',
128155
 156+# Metadata
 157+'metadata' => 'ሜታዳታ',
 158+
129159 'loginlanguagelabel' => 'ቋንቋ: $1',
130160
131161 # Multipage image navigation
@@ -132,9 +162,13 @@
133163 'imgmultipagenext' => 'ዝቕጽል ፅሑፍ →',
134164
135165 # Table pager
136 -'table_pager_next' => 'ዝቕጽል ፅሑፍ',
137 -'table_pager_prev' => 'ናይ ቀደም ፅሑፍ',
 166+'table_pager_next' => 'ዝቕጽል ፅሑፍ',
 167+'table_pager_prev' => 'ናይ ቀደም ፅሑፍ',
 168+'table_pager_limit_submit' => 'ኪድ',
138169
 170+# Auto-summaries
 171+'autosumm-new' => 'ሓዳስ ፅሑፍ: $1',
 172+
139173 # Size units
140174 'size-bytes' => '$1 ባይታት',
141175 'size-kilobytes' => '$1 ኪሎባይታት',
@@ -143,4 +177,4 @@
144178
145179 );
146180
147 -
 181+?>
Index: branches/apiedit/phase3/languages/messages/MessagesEn.php
@@ -995,6 +995,9 @@
996996 ''Because this wiki has raw HTML enabled, the preview is hidden as a precaution against JavaScript attacks.''
997997
998998 <strong>If this is a legitimate edit attempt, please try again. If it still doesn't work, try logging out and logging back in.</strong>",
 999+'token_suffix_mismatch' => '<strong>Your edit has been rejected because your client mangled the punctuation characters
 1000+in the edit token. The edit has been rejected to prevent corruption of the article text.
 1001+This sometimes happens when you are using a buggy web-based anonymous proxy service.</strong>',
9991002 'importing' => 'Importing $1',
10001003 'editing' => 'Editing $1',
10011004 'editinguser' => 'Editing user <b>$1</b>',
Index: branches/apiedit/phase3/languages/messages/MessagesKab.php
@@ -18,14 +18,19 @@
1919 NS_IMAGE_TALK => 'Amyannan_n_tugna',
2020 NS_MEDIAWIKI => 'MediaWiki',
2121 NS_MEDIAWIKI_TALK => 'Amyannan_n_MediaWiki',
22 - NS_TEMPLATE => 'Talγa',
23 - NS_TEMPLATE_TALK => 'Amyannan_n_talγa',
 22+ NS_TEMPLATE => 'Talɣa',
 23+ NS_TEMPLATE_TALK => 'Amyannan_n_talɣa',
2424 NS_HELP => 'Tallat',
2525 NS_HELP_TALK => 'Amyannan_n_tallat',
2626 NS_CATEGORY => 'Taggayt',
2727 NS_CATEGORY_TALK => 'Amyannan_n_taggayt'
2828 );
2929
 30+$namespaceAliases = array(
 31+ 'Talγa' => NS_TEMPLATE,
 32+ 'Amyannan_n_talγa' => NS_TEMPLATE_TALK,
 33+);
 34+
3035 $messages = array(
3136 # User preference toggles
3237 'tog-underline' => 'Derrer izdayen:',
@@ -38,9 +43,9 @@
3944 'tog-showtoolbar' => 'Ssken tanuga n dduzan n ubeddel (JavaScript)',
4045 'tog-editondblclick' => 'Beddel isebtaren asmi wekkiɣ snat n tikwal (JavaScript)',
4146 'tog-editsection' => 'Eğğ abeddel n umur s yizdayen [beddel]',
42 -'tog-editsectiononrightclick' => 'Eğğ abeddel n umur asmi wekkiɣ ɣef uyeffus<br /> γef yizwal n umur (JavaScript)',
 47+'tog-editsectiononrightclick' => 'Eğğ abeddel n umur asmi wekkiɣ ɣef uyeffus<br /> ɣef yizwal n umur (JavaScript)',
4348 'tog-showtoc' => 'Ssken agbur (i isebtaren i yesɛan kter n 3 izwalen)',
44 -'tog-rememberpassword' => 'Cfu ɣef yisem n umseqdac inu di uselkim-agi',
 49+'tog-rememberpassword' => 'Cfu ɣef yisem n wemseqdac inu di uselkim-agi',
4550 'tog-editwidth' => 'Tankult ubeddel tesɛa tehri ettmam',
4651 'tog-watchcreations' => 'Rnu isebtaren i xelqeɣ di umuɣ n uɛessi inu',
4752 'tog-watchdefault' => 'Rnu isebtaren i beddleɣ di umuruɣ n uɛessi inu',
@@ -185,7 +190,7 @@
186191 'talk' => 'Amyannan',
187192 'views' => 'Tuẓrin',
188193 'toolbox' => 'Dduzan',
189 -'userpage' => 'Ẓer asebtar n umseqdac',
 194+'userpage' => 'Ẓer asebtar n wemseqdac',
190195 'projectpage' => 'Ẓer asebtar n usenfar',
191196 'imagepage' => 'Ẓer asebtar n tugna',
192197 'mediawikipage' => 'Ẓer asebtar n izen',
@@ -256,7 +261,7 @@
257262
258263 # Short words for each namespace, by default used in the 'article' tab in monobook
259264 'nstab-main' => 'Amagrad',
260 -'nstab-user' => 'Asebtar n umseqdac',
 265+'nstab-user' => 'Asebtar n wemseqdac',
261266 'nstab-media' => 'Asebtar n media',
262267 'nstab-special' => 'Uslig',
263268 'nstab-project' => 'Awal ɣef...',
@@ -333,62 +338,62 @@
334339 # Login and logout pages
335340 'logouttitle' => 'Tuffɣa',
336341 'logouttext' => '<strong>Tura teffɣeḍ.</strong><br />
337 -Tzemreḍ ad tesseqdceḍ {{SITENAME}} d udrig, neɣ tzemreḍ ad tkecmeḍ daɣen s yisem umseqdac inek (neɣ nniḍen). Kra n yisebtaren zemren ad sskanen belli mazal-ik s yisem umseqdac inek armi temḥuḍ lkac.',
 342+Tzemreḍ ad tesseqdceḍ {{SITENAME}} d udrig, neɣ tzemreḍ ad tkecmeḍ daɣen s yisem n wemseqdac inek (neɣ nniḍen). Kra n yisebtaren zemren ad sskanen belli mazal-ik s yisem n wemseqdac inek armi temḥuḍ lkac.',
338343 'welcomecreation' => '== Anṣuf yis-k, $1! ==
339344
340 -Isem n umseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{SITENAME}} inek.',
 345+Isem n wemseqdac inek yettwaxleq. Ur tettuḍ ara ad tbeddleḍ Isemyifiyen n {{SITENAME}} inek.',
341346 'loginpagetitle' => 'Takcemt',
342 -'yourname' => 'Isem n umseqdac',
 347+'yourname' => 'Isem n wemseqdac',
343348 'yourpassword' => 'Awal n tbaḍnit',
344349 'yourpasswordagain' => 'Ɛiwed ssekcem awal n tbaḍnit',
345350 'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi.',
346351 'yourdomainname' => 'Taɣult inek',
347 -'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an umseqdac aberrani inek.',
 352+'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an wemseqdac aberrani inek.',
348353 'loginproblem' => '<b>Yella ugur akk d ukcam inek.</b><br />Ɛreḍ daɣen!',
349354 'alreadyloggedin' => '<strong>A(y) $1, tkecmeḍ yagi!</strong><br />',
350355 'login' => 'Kcem',
351 -'loginprompt' => 'Yessefk teğğiḍ ikukiyen (cookies) iwakken ad tkecmeḍ ar {{SITENAME}}.',
352 -'userlogin' => 'Kcem / Xleq isem n umseqdac',
 356+'loginprompt' => 'Yessefk ad teğğiḍ ikukiyen (cookies) iwakken ad tkecmeḍ ar {{SITENAME}}.',
 357+'userlogin' => 'Kcem / Xleq isem n wemseqdac',
353358 'logout' => 'Ffeɣ',
354359 'userlogout' => 'Ffeɣ',
355360 'notloggedin' => 'Ur tekcimeḍ ara',
356 -'nologin' => 'Ur tesɛiḍ ara isem n umseqdac? $1.',
357 -'nologinlink' => 'Xleq isem n umseqdac',
358 -'createaccount' => 'Xleq isem n umseqdac',
359 -'gotaccount' => 'Tesɛiḍ yagi isem n umseqdac? $1.',
 361+'nologin' => 'Ur tesɛiḍ ara isem n wemseqdac? $1.',
 362+'nologinlink' => 'Xleq isem n wemseqdac',
 363+'createaccount' => 'Xleq isem n wemseqdac',
 364+'gotaccount' => 'Tesɛiḍ yagi isem n wemseqdac? $1.',
360365 'gotaccountlink' => 'Kcem',
361366 'createaccountmail' => 's e-mail',
362367 'badretype' => 'Awal n tbaḍnit amezwaru d wis sin mačči d kif-kif.',
363 -'userexists' => 'Isem umseqdac yeddem-as amdan wayeḍ. Fren yiwen nniḍen.',
 368+'userexists' => 'Isem n wemseqdac yeddem-as amdan wayeḍ. Fren yiwen nniḍen.',
364369 'youremail' => 'E-mail *:',
365 -'username' => 'Isem n umseqdac:',
 370+'username' => 'Isem n wemseqdac:',
366371 'uid' => 'Amseqdac ID:',
367372 'yourrealname' => 'Isem n ṣṣeḥ *:',
368373 'yourlanguage' => 'Tutlayt:',
369374 'yourvariant' => 'Ameskil',
370375 'yournick' => 'Isem wis sin (mačči d amenṣib):',
371376 'badsig' => 'Azmul mačči d ṣaḥiḥ; Ssenqed tags n HTML.',
372 -'prefs-help-realname' => '* Isem n ṣṣeḥ (am tebγiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.',
 377+'prefs-help-realname' => '* Isem n ṣṣeḥ (am tebɣiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.',
373378 'loginerror' => 'Agul n ukcam',
374379 'prefs-help-email' => '* E-mail (am tebɣiḍ): Teğği imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.',
375 -'nocookiesnew' => 'Isem umseqdac-agi yettwaxleq, meɛna ur tekcimeḍ ara. {{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eğğ-aten, umbeɛd kecm s yisem umseqdac akk d awal n tbaḍnit inek.',
 380+'nocookiesnew' => 'Isem n wemseqdac-agi yettwaxleq, meɛna ur tekcimeḍ ara. {{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eğğ-aten, umbeɛd kecm s yisem n wemseqdac akk d wawal n tbaḍnit inek.',
376381 'nocookieslogin' => '{{SITENAME}} yesseqdac ikukiyen (cookies) iwakken ad tkecmeḍ. Tekseḍ ikukiyen-nni. Eğğ-aten iwakken ad tkecmeḍ.',
377 -'noname' => 'Ur tefkiḍ ara isem n umseqdac ṣaḥiḥ.',
 382+'noname' => 'Ur tefkiḍ ara isem n wemseqdac ṣaḥiḥ.',
378383 'loginsuccesstitle' => 'Tkecmeḍ!',
379 -'loginsuccess' => "'''Tkecmeḍ ar {{SITENAME}} s yisem umseqdac \"\$1\".'''",
380 -'nosuchuser' => 'Ulac isem umseqdac s yisem "$1". Ssenqed tira n yisem-nni, neɣ xelq isem umseqdac amaynut.',
381 -'nosuchusershort' => 'Ulac isem umseqdac s yisem "$1". Ssenqed tira n yisem-nni.',
382 -'nouserspecified' => 'Yessefk ad tefkeḍ isem n umseqdac.',
 384+'loginsuccess' => "'''Tkecmeḍ ar {{SITENAME}} s yisem n wemseqdac \"\$1\".'''",
 385+'nosuchuser' => 'Ulac isem n wemseqdac s yisem "$1". Ssenqed tira n yisem-nni, neɣ xelq isem n wemseqdac amaynut.',
 386+'nosuchusershort' => 'Ulac isem n wemseqdac s yisem "$1". Ssenqed tira n yisem-nni.',
 387+'nouserspecified' => 'Yessefk ad tefkeḍ isem n wemseqdac.',
383388 'wrongpassword' => 'Awal n tbaḍnit ɣaleṭ. Ɛreḍ daɣen.',
384389 'wrongpasswordempty' => 'Awal n tbaḍnit ulac-it. Ɛreḍ daɣen.',
385390 'mailmypassword' => 'Awal n tbaḍnit n e-mail',
386391 'passwordremindertitle' => 'Asmekti n wawal n tbaḍnit seg {{SITENAME}}',
387392 'passwordremindertext' => 'Amdan (waqila d kečč, seg tansa IP $1)
388393 yesteqsa iwakken a nazen awal n tbaḍnit amaynut i {{SITENAME}} ($4).
389 -Awal n tbaḍnit iumseqdac "$2" yuɣal-d tura "$3".
 394+Awal n tbaḍnit i wemseqdac "$2" yuɣal-d tura "$3".
390395 Mliḥ lukan tkecmeḍ u tbeddleḍ awal n tbaḍnit tura.
391396
392 -Lukan mačči d kečč i yesteqsatn neɣ tecfiḍ ɣef awal n tbaḍnit, tzemreḍ ad tkemmleḍ mebla ma tbeddleḍ awal n tbaḍnit.',
 397+Lukan mačči d kečč i yesteqsan neɣ tecfiḍ ɣef awal n tbaḍnit, tzemreḍ ad tkemmleḍ mebla ma tbeddleḍ awal n tbaḍnit.',
393398 'noemail' => '"$1" ur yesɛi ara email.',
394399 'passwordsent' => 'Awal n tbaḍnit amaynut yettwazen i emal inek, aylaw n "$1".
395400 G leɛnaya-k, kcem tikelt nniḍen yis-s.',
@@ -399,14 +404,14 @@
400405 iwakken ad tbeyyneḍ belli tansa n email inek.',
401406 'throttled-mailpassword' => 'Asmekti n wawal n tbaḍnit yettwazen yagi deg $1 sswayeɛ i iɛeddan. Asmekti n wawal n tbaḍnit yettwazen tikelt kan mkul $1 swayeɛ.',
402407 'mailerror' => 'Agul asmi yettwazen e-mail: $1',
403 -'acct_creation_throttle_hit' => 'Surf-aɣ, txelqeḍ aṭas n ysimawen umseqdac ($1). Ur tettalaseḍ ara txelqeḍ kter.',
 408+'acct_creation_throttle_hit' => 'Surf-aɣ, txelqeḍ aṭas n yismawen n wemseqdac ($1). Ur tettalaseḍ ara ad txelqeḍ kter.',
404409 'emailauthenticated' => 'Tansa e-mail inek tettuɛqel deg $1.',
405410 'emailnotauthenticated' => 'Tansa e-mail inek mazal ur tettuɛqel. Ḥedd e-mail ur ttwazen i ulaḥedd n iḍaɣaren-agi.',
406411 'noemailprefs' => 'Efk tansa e-mail iwakken ad leḥḥun iḍaɣaren-nni.',
407412 'emailconfirmlink' => 'Sentem tansa e-mail inek',
408413 'invalidemailaddress' => 'Tansa e-mail-agi ur telhi, ur tesɛi ara taseddast n lɛali. Ssekcem tansa e-mail s taseddast n lɛali neɣ ur tefkiḍ acemma.',
409 -'accountcreated' => 'Isem umseqdac yettwaxleq',
410 -'accountcreatedtext' => 'Isem umseqdac i $1 yettwaxleq.',
 414+'accountcreated' => 'Isem n wemseqdac yettwaxleq',
 415+'accountcreatedtext' => 'Isem n wemseqdac i $1 yettwaxleq.',
411416
412417 # Password reset dialog
413418 'resetpass' => 'Iɛawed awal n tbaḍnit',
@@ -458,22 +463,22 @@
459464 'summary-preview' => 'Pre-timeẓriwt n ugzul',
460465 'subject-preview' => 'Pre-timeẓriwt asentel/azwel azellum',
461466 'blockedtitle' => 'Amseqdac iɛekkel',
462 -'blockedtext' => "<big>'''Isem umseqdac neɣ tansa n IP inek ɛekkelen.'''</big>
 467+'blockedtext' => "<big>'''Isem n wemseqdac neɣ tansa n IP inek ɛekkelen.'''</big>
463468
464469 $1 iɛekkel-it u yenna-d ''$2''.
465470
466471 Tzemreḍ ad tmeslayeḍ akk d $1 neɣ [[{{MediaWiki:grouppage-sysop}}|anedbal]] nniḍen iwakken ad tsmelayem ɣef uɛekkil-nni.
467 -Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen umseqdac]], ur tezmireḍ ara ad tazneḍ email. Tansa n IP inek n tura d $3, ID n uɛekkil d #$5. Smekti-ten u fka-ten i unedbal-nni.",
 472+Lukan ur tefkiḍ ara email saḥih deg [[Special:Preferences|isemyifiyen n wemseqdac]], ur tezmireḍ ara ad tazneḍ email. Tansa n IP inek n tura d $3, ID n uɛekkil d #$5. Smekti-ten u fka-ten i unedbal-nni.",
468473 'blockedoriginalsource' => "Aɣablu n '''$1''' hat deg ukessar:",
469474 'blockededitsource' => "Aḍris n '''ubeddel inek''' i '''$1''' hat deg ukessar:",
470475 'whitelistedittitle' => 'Yessefk ad tkecmeḍ iwakken ad tbeddleḍ',
471476 'whitelistedittext' => 'Yessefk ad $1 iwakken ad tbeddleḍ isebtaren.',
472477 'whitelistreadtitle' => 'Yessefk ad tkecmeḍ iwakken ad teqqareḍ',
473478 'whitelistreadtext' => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] iwakken ad teqqareḍ isebtaren.',
474 -'whitelistacctitle' => 'Ur tettalaseḍ ara txelqeḍ isem n umseqdac',
475 -'whitelistacctext' => 'Aakken ad txelqeḍ isem umseqdac deg wiki-yagi yessefk ad [[Special:Userlogin|tkecmeḍ]] u tesɛa izerfan usligen.',
 479+'whitelistacctitle' => 'Ur tettalaseḍ ara ad txelqeḍ isem n wemseqdac',
 480+'whitelistacctext' => 'Aakken ad txelqeḍ isem n wemseqdac deg wiki-yagi yessefk ad [[Special:Userlogin|tkecmeḍ]] u tesɛa izerfan usligen.',
476481 'confirmedittitle' => 'Yessef ad tsentmeḍ e-mail inek iwakken ad tbeddleḍ',
477 -'confirmedittext' => 'Yessefl ad tsentmeḍ tansa e-mail inek uqbel abeddel. Xtar tansa e-mail di [[Special:Preferences|isemyifiyen umseqdac]].',
 482+'confirmedittext' => 'Yessefk ad tsentmeḍ tansa e-mail inek uqbel abeddel. Xtar tansa e-mail di [[Special:Preferences|isemyifiyen n wemseqdac]].',
478483 'nosuchsectiontitle' => 'Amur ulac-it',
479484 'nosuchsectiontext' => 'Tɛerḍeḍ ad tbeddleḍ amur ulac-it. Ulac amur am akka deg usebtar $1.',
480485 'loginreqtitle' => 'Yessefk ad tkecmeḍ',
@@ -486,7 +491,7 @@
487492 Akken ad txelqeḍ asebtar-nni, aru deg tankult i tella deg ukessar
488493 (ẓer [[{{MediaWiki:helppage}}|asebtar n tallat]] akken ad tessneḍ kter).
489494 Ma tɣelṭeḍ, wekki kan ɣef tqeffalt "Back/Précédent" n browser/explorateur inek.',
490 -'anontalkpagetext' => "----''Wagi d asebtar n umyennan n umseqdac adrig. Ihi, yessef a nefk-as ID, nesseqdac tansa n IP ines akken a t-neɛqel. Tansa n IP nni ahat tettuseqdac sɣur aṭṭas n yimdanen. Lukan ula d kečč aqla-k amseqdac adrig u ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:Userlogin|xleq isem umseqdac neɣ kcem]].''",
 495+'anontalkpagetext' => "----''Wagi d asebtar n umyennan n wemseqdac adrig. Ihi, yessef ad as nefk ID, nesseqdac tansa n IP ines akken a t-neɛqel. Tansa n IP nni ahat tettuseqdac sɣur aṭṭas n yimdanen. Lukan ula d kečč aqla-k amseqdac adrig u ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:Userlogin|xleq isem n wemseqdac neɣ kcem]].''",
491496 'noarticletext' => 'Ulac aḍris deg usebtar-agi, tzemreḍ ad [[Special:Search/{{PAGENAME}}|tnadiḍ ɣef uzwel n usebtar-agi]] deg isebtaren wiyaḍ neɣ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḍ asebtar-agi].',
492497 'clearyourcache' => "'''Tamawt:''' Beɛd asmekti, ahat yessefk ad temḥuḍ lkac n browser/explorateur inek akken teẓriḍ ibeddlen. '''Mozilla / Firefox / Safari:''' qqim twekkiḍ ''Shift'' u wekki ɣef ''Reload/Recharger'', neɣ wekki ɣef ''Ctrl-Shift-R'' (''Cmd-Shift-R'' deg Apple Mac); '''IE:''' qqim twekkiḍ ɣef ''Ctrl'' u wekki ɣef ''Refresh/Actualiser'', neɣ wekki ɣef ''Ctrl-F5''; '''Konqueror:''': wekki kan ɣef taqeffalt ''Reload'', neɣ wekki ɣef ''F5''; '''Opera''' yessefk ad tesseqdceḍ ''Tools→Preferences/Outils→Préférences'' akken ad temḥud akk lkac.",
493498 'usercssjsyoucanpreview' => "<strong>Tixidest:</strong> Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ CSS/JS amynut inek uqbel ma tesmektiḍ.",
@@ -506,7 +511,7 @@
507512 <strong>Lukan abeddel agi d aḥeqqani, g leɛnayek ɛreḍ tikelt nniḍen.. Lukan mazal yella ugur, ffeɣ umbeɛd kcem.</strong>",
508513 'importing' => 'Asekcam n $1',
509514 'editing' => 'Abeddel n $1',
510 -'editinguser' => 'Abeddel n umseqdac <b>$1</b>',
 515+'editinguser' => 'Abeddel n wemseqdac <b>$1</b>',
511516 'editingsection' => 'Abeddel n $1 (amur)',
512517 'editingcomment' => 'Abeddel n $1 (awennit)',
513518 'editconflict' => 'Amennuɣ deg ubeddel: $1',
@@ -534,7 +539,7 @@
535540 ihi ur tezmireḍ ara ad tesmektiḍ ibeddlen inek tura. Smekti aḍris inek
536541 deg afaylu nniḍen akken tesseqdceḍ-it umbeɛd.</strong>',
537542 'protectedpagewarning' => '<strong>AƔTAL: Asebtar-agi yettwaḥrez, ala inedbalen i zemren a t-beddlen</strong>',
538 -'semiprotectedpagewarning' => "'''Tamawt:''' Asebtar-agi yettwaḥrez, ala imseqdacen i yesɛan isem umseqdac i zemren a t-beddlen.",
 543+'semiprotectedpagewarning' => "'''Tamawt:''' Asebtar-agi yettwaḥrez, ala imseqdacen i yesɛan isem n wemseqdac i zemren a t-beddlen.",
539544 'cascadeprotectedwarning' => "'''Aɣtal:''' Asebtar-agi iɛekkel akken ad zemren ala sysop i t-beddlen, axaṭer yettwassekcem deg isebtaren i yettwaḥerzen agi (acercur):",
540545 'templatesused' => 'Talɣiwin ttuseqdacen deg usebtar-agi:',
541546 'templatesusedpreview' => 'Talɣiwin ttuseqdacen deg pre-timeẓriwt-agi:',
@@ -544,7 +549,7 @@
545550 'edittools' => '<!-- Aḍris yettbanen-d seddaw talɣa n ubeddil d uzen. -->',
546551 'nocreatetitle' => 'Axleq n yisebtaren meḥdud',
547552 'nocreatetext' => 'Adeg in internet agi iḥedd axleq n yisebtaren imaynuten.
548 -Tzemreḍ ad d-uɣaleḍ u tbeddleḍ asebtar i yellan, neɣ ad [[Special:Userlogin|tkecmeḍ neɣ ad txelqeḍ isem umseqdac]].',
 553+Tzemreḍ ad d-uɣaleḍ u tbeddleḍ asebtar i yellan, neɣ ad [[Special:Userlogin|tkecmeḍ neɣ ad txelqeḍ isem n wemseqdac]].',
549554
550555 # "Undo" feature
551556 'undo-success' => 'Tzemreḍ ad tessefsuḍ abeddil. Ssenqed asidmer akken ad tessneḍ ayen tebɣiḍ ad txdmeḍ d ṣṣeḥ, umbeɛd smekti ibeddlen u tkemmleḍ ad tessefsuḍ abeddil.',
@@ -552,8 +557,8 @@
553558 'undo-summary' => 'Ssefsu tasiwelt $1 sɣur [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]])',
554559
555560 # Account creation failure
556 -'cantcreateaccounttitle' => 'Ur yezmir ara yexleq isem umseqdac',
557 -'cantcreateaccounttext' => 'Yeɛkel axleq n isem umseqdac n tansa n IP agi : (<b>$1</b>).
 561+'cantcreateaccounttitle' => 'Ur yezmir ara ad yexleq isem n wemseqdac',
 562+'cantcreateaccounttext' => 'Yeɛkel axlaq n yisem n wemseqdac n tansa n IP agi : (<b>$1</b>).
558563 Ahat llan aṭas n yimidanen icerrɛen seg lakul inek neɣ provider inek.',
559564
560565 # History pages
@@ -595,7 +600,7 @@
596601
597602 # Revision deletion
598603 'rev-deleted-comment' => '(awennit yettwakes)',
599 -'rev-deleted-user' => '(isem umseqdac yettwakes)',
 604+'rev-deleted-user' => '(isem n wemseqdac yettwakes)',
600605 'rev-deleted-event' => '(asekcem yettwakkes)',
601606 'rev-deleted-text-permission' => '<div class="mw-warning plainlinks">
602607 Tasiwelt-agi n tettwakkes seg weɣbar azayez.
@@ -620,7 +625,7 @@
621626 'revdelete-hide-text' => 'Ffer aḍris n tsiwelt',
622627 'revdelete-hide-name' => 'Ffer tigawt d nnican',
623628 'revdelete-hide-comment' => 'Ffer abeddel n uwennit',
624 -'revdelete-hide-user' => 'Ffer Isem-umseqdac/IP n umeskar',
 629+'revdelete-hide-user' => 'Ffer Isem n wemseqdac/IP n umeskar',
625630 'revdelete-hide-restricted' => 'Eg icekkilen i inedbalen d yimdanen wiyaḍ',
626631 'revdelete-suppress' => 'Kkes talɣut seg inedbalen d yimdanen wiyaḍ',
627632 'revdelete-hide-image' => 'Ffer ayen yellan deg ufaylu',
@@ -655,9 +660,9 @@
656661 'searchsubtitle' => "Tnadiḍ ɣef '''[[:$1]]'''",
657662 'searchsubtitleinvalid' => "Tnadiḍ ɣef '''$1'''",
658663 'badquery' => 'Anadi ur yelhi',
659 -'badquerytext' => 'Ur nezmir ara ad naf ayen tebγiḍ.
660 -Axaṭer balak tnadiḍ γef awal yesɛan qell n 3 isekkilen,
661 -Neγ ur turiḍ ara mliḥ γef wayen tnadiḍ,
 664+'badquerytext' => 'Ur nezmir ara ad naf ayen tebɣiḍ.
 665+Axaṭer balak tnadiḍ ɣef awal yesɛan qell n 3 isekkilen,
 666+Neɣ ur turiḍ ara mliḥ ɣef wayen tnadiḍ,
662667 s umedya : "izem d d wuccen".
663668 Ɛreḍ d wawal nniḍen.',
664669 'matchtotals' => 'Ayen tnadiḍ : "$1" yecban $2 n yizwal n usebtar
@@ -674,7 +679,7 @@
675680 'showingresultsnum' => "Tamuli n {{PLURAL:$3|'''Yiwen''' wegmud|'''$3''' n yigmad}} seg #'''$2'''.",
676681 'nonefound' => "'''Tamawt''': S umata, asmi ur tufiḍ acemma
677682 d ilmen awalen am \"ala\" and \"seg\",
678 -awalen-agi mačči deg tasmult, neγ tefkiḍ kter n yiwen n wawal (ala isebtaren
 683+awalen-agi mačči deg tasmult, neɣ tefkiḍ kter n yiwen n wawal (ala isebtaren
679684 i yesɛan akk awalen i banen-d).",
680685 'powersearch' => 'Nadi',
681686 'powersearchtext' => 'Nadi deg yismawen n taɣult:<br />$1<br />$2 Amuɣ n yisemmimḍen<br />Nadi ɣef $3 $9',
@@ -708,7 +713,7 @@
709714 'math_bad_tmpdir' => 'Ur yezmir ara ad yaru ɣef/ɣer tusnakt n temp directory/dossier',
710715 'math_bad_output' => 'Ur yezmir ara ad yaru ɣef/ɣer tusnakt n tuffɣa directory/dossier',
711716 'math_notexvc' => "''texvc executable'' / ''executable texvc'' ulac-it; ẓer math/README akken a textareḍ isemyifiyen.",
712 -'prefs-personal' => 'Profile n umseqdac',
 717+'prefs-personal' => 'Profile n wemseqdac',
713718 'prefs-rc' => 'Ibeddlen imaynuten',
714719 'prefs-watchlist' => 'Amuɣ uɛessi',
715720 'prefs-watchlist-days' => 'Geddac n wussan yessefk ad yesskan deg umuɣ uɛessi:',
@@ -734,16 +739,16 @@
735740 'timezoneoffset' => 'Amgirred n ukud',
736741 'servertime' => 'Akud n server',
737742 'guesstimezone' => 'Sseqdec azal n browser/explorateur',
738 -'allowemail' => 'Eğğ imseqdacen wiyaḍ ad azen-ik email',
 743+'allowemail' => 'Eğğ imseqdacen wiyaḍ a k-aznen email',
739744 'defaultns' => 'Nadi deg yismawen n taɣult s umeslugen:',
740745 'default' => 'ameslugen',
741746 'files' => 'Ifayluwen',
742747
743748 # User rights
744749 'userrights-lookup-user' => 'Laɛej iderman n yimseqdacen',
745 -'userrights-user-editname' => 'Ssekcem isem n umseqdac:',
 750+'userrights-user-editname' => 'Ssekcem isem n wemseqdac:',
746751 'editusergroup' => 'Beddel iderman n yimseqdacen',
747 -'userrights-editusergroup' => 'Beddel iderman n umseqdac',
 752+'userrights-editusergroup' => 'Beddel iderman n wemseqdac',
748753 'saveusergroups' => 'Smekti iderman n yimseqdacen',
749754 'userrights-groupsmember' => 'Amaslad deg:',
750755 'userrights-groupsavailable' => 'Iderman i yellan:',
@@ -760,7 +765,7 @@
761766 'grouppage-sysop' => '{{ns:project}}:Inedbalen',
762767
763768 # User rights log
764 -'rightslog' => 'Aɣmis n yizerfan n umseqdac',
 769+'rightslog' => 'Aɣmis n yizerfan n wemseqdac',
765770 'rightslogtext' => 'Wagi d aɣmis n yibeddlen n yizerfan n umseqdac',
766771 'rightslogentry' => 'Yettubeddel izerfan n umseqdac $1 seg $2 ar $3',
767772 'rightsnone' => '(ulaḥedd)',
@@ -818,15 +823,14 @@
819824 'uploadedfiles' => 'Ifayluwen yettwaznen',
820825 'ignorewarning' => 'Ttu aɣtal u smekti afaylu',
821826 'ignorewarnings' => 'Ttu iɣtalen',
822 -'minlength' => 'Isem n ufaylu yessefk ad yesɛu 3 isekkilen neɣ kter.',
823 -'illegalfilename' => 'Isem n ufaylu "$1" yesɛa isekkilen i ur tettalaseḍ ara tesseqdceḍ deg yizwal n yisebtaren. G leɛnayek beddel isem n ufaylu u azen-it tikelt nniḍen.',
 827+'illegalfilename' => 'Isem n ufaylu "$1" yesɛa isekkilen ur tettalaseḍ ara a ten-tesseqdceḍ deg yizwal n yisebtaren. G leɛnayek beddel isem n ufaylu u azen-it tikkelt nniḍen.',
824828 'badfilename' => 'Isem ufaylu yettubeddel ar "$1".',
825 -'filetype-badmime' => 'Ur tettalaseḍ ara tazneḍ ufayluwen n anaw n MIME "$1".',
 829+'filetype-badmime' => 'Ur tettalaseḍ ara ad tazneḍ ufayluwen n anaw n MIME "$1".',
826830 'filetype-badtype' => "Ur neqbil ara ufayluwen n anwan am '''\".\$1\"'''
827831 : Amuɣ n inawen i neqbel: \$2",
828832 'filetype-missing' => 'Afaylu ur yesɛi ara taseggiwit (am ".jpg").',
829833 'large-file' => 'Ilaq tiddi n ufayluwen ur tettili kter n $1; tiddi n ufaylu-agi $2.',
830 -'largefileserver' => 'Afaylu meqqer aṭṭas, server ur t-yebil ara.',
 834+'largefileserver' => 'Afaylu meqqer aṭṭas, server ur t-yeqbil ara.',
831835 'emptyfile' => 'Afaylu i tazneḍ d ilem. Waqila tɣelṭeḍ deg isem-is. G leɛnayek ssenqed-it.',
832836 'fileexists' => 'Afaylu s yisem-agi yewğed yagi, ssenqed <strong><tt>$1</tt></strong> ma telliḍ mačči meḍmun akken a t-tbeddleḍ.',
833837 'fileexists-extension' => 'Afaylu s yisem-agi yewğed:<br />
@@ -948,7 +952,7 @@
949953
950954 Ṭul n [http://meta.wikimedia.org/wiki/Help:Job_queue umuti n wexdam] '''\$7'''.",
951955 'userstatstext' => "{{PLURAL:$1|Yella '''yiwen''' umseqdac|Llan '''$1''' n yimseqdacen}}, seg-sen
952 -'''$2''' (neγ '''$4%''') {{PLURAL:$2|yesɛa|sɛan}} $5 n yizerfan.",
 956+'''$2''' (neɣ '''$4%''') {{PLURAL:$2|yesɛa|sɛan}} izerfan n $5.",
953957 'statistics-mostpopular' => 'Isebtaren mmeẓren aṭṭas',
954958
955959 'disambiguations' => 'Isebtaren n usefham',
@@ -1006,7 +1010,7 @@
10071011 'restrictedpheading' => 'Isebtaren usligen gedlen',
10081012 'rclsub' => '(ar isebtaren myezdin seg "$1")',
10091013 'newpages' => 'Isebtaren imaynuten',
1010 -'newpages-username' => 'Isem n umseqdac:',
 1014+'newpages-username' => 'Isem n wemseqdac:',
10111015 'ancientpages' => 'Isebtaren iqdimen',
10121016 'intl' => 'Izdayen ar tutlayin nniḍen zdaxel wikipedia',
10131017 'move' => 'Smimeḍ',
@@ -1022,7 +1026,7 @@
10231027
10241028 'categoriespagetext' => 'Llant taggayin-agi deg wiki-yagi.',
10251029 'data' => 'Talɣut',
1026 -'userrights' => 'Laɛej iserfan n umseqdac',
 1030+'userrights' => 'Laɛej iserfan n wemseqdac',
10271031 'groups' => 'Iderman n yimseqdacen',
10281032 'alphaindexline' => '$1 ar $2',
10291033 'version' => 'Tasiwelt',
@@ -1060,8 +1064,8 @@
10611065 'mailnologin' => 'Ur yufi ḥedd (tansa)',
10621066 'mailnologintext' => 'Yessefk ad [[Special:Userlogin|tkecmeḍ]] u tesɛiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
10631067 iwakken ad tazneḍ email i imseqdacen wiyaḍ.',
1064 -'emailuser' => 'Azen e-mail i umseqdac-agi',
1065 -'emailpage' => 'Azen e-mail i umseqdac',
 1068+'emailuser' => 'Azen e-mail i wemseqdac-agi',
 1069+'emailpage' => 'Azen e-mail i wemseqdac',
10661070 'emailpagetext' => 'Lukan amseqdac-agi yefka-d tansa n email ṣaḥiḥ
10671071 deg imsifiyen ines, talɣa deg ukessar a t-tazen izen.
10681072 Tansa n email i tefkiḍ deg imisifyen inek ad tban-d
@@ -1108,7 +1112,7 @@
11091113 'notanarticle' => 'Mačči d amagrad',
11101114 'watchnochange' => 'Ulaḥedd n yiferdas n umuɣ n uɛessi inek ma yettubeddel deg tawala i textareḍ.',
11111115 'watchdetails' => '* ttɛassaɣ {{PLURAL:$1|$1 usebtar|$1 n yisebtaren}} mebla isebtaren "amyannan"
1112 -* [[Special:Watchlist/edit|Ssken u beddel amuɣ uɛesi]]
 1116+* [[Special:Watchlist/edit|Ssken u beddel amuɣ uɛessi]]
11131117 * [[Special:Watchlist/clear|Kkes akk isebtaren]]',
11141118 'wlheader-enotif' => '* Yeğğa Email n talɣut.',
11151119 'wlheader-showupdated' => "* Isebtaren ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s '''uḍris aberbuz'''",
@@ -1190,7 +1194,7 @@
11911195 'editcomment' => 'Agzul n ubeddel yella: "<i>$1</i>".', # only shown if there is an edit comment
11921196 'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]',
11931197 'sessionfailure' => 'Yella ugul akk d takmect inek;
1194 -Axdam-agi yebṭel axaṭer waqila yella wemdan nniḍen i yeddem isem umseqdac inek.
 1198+Axdam-agi yebṭel axaṭer waqila yella wemdan nniḍen i yeddem isem n wemseqdac inek.
11951199 G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek, umbeɛd wekki ɣef "Actualiser/reload" akk ad tɛerḍeḍ tikelt nniḍen.',
11961200 'protectlogpage' => 'Aɣmis n wemḥay',
11971201 'protectedarticle' => '"[[$1]]" yettwaḥrez',
@@ -1220,7 +1224,7 @@
12211225 'invert' => 'Snegdam ayen textareḍ',
12221226
12231227 # Contributions
1224 -'contributions' => 'Tikkin n umseqdac',
 1228+'contributions' => 'Tikkin n wemseqdac',
12251229 'mycontris' => 'Tikkin inu',
12261230 'contribsub2' => 'n $1 ($2)',
12271231 'nocontribs' => 'Ur yufi ara abddel i tebɣiḍ.',
@@ -1236,7 +1240,7 @@
12371241 'sp-contributions-newbies-sub' => 'I yisem yimseqdacen imaynuten',
12381242 'sp-contributions-blocklog' => 'Aɣmis n uɛeṭṭil',
12391243 'sp-contributions-search' => 'Nadi i tikkin',
1240 -'sp-contributions-username' => 'Tansa IP neɣ isem umseqdac:',
 1244+'sp-contributions-username' => 'Tansa IP neɣ isem n wemseqdac:',
12411245 'sp-contributions-submit' => 'Nadi',
12421246
12431247 'sp-newimages-showfrom' => 'Ssken tugniwin timaynutin seg $1',
@@ -1244,7 +1248,7 @@
12451249 # What links here
12461250 'whatlinkshere' => 'Ayen yewwi-d ɣer dagi',
12471251 'notargettitle' => 'Ulac nnican',
1248 -'notargettext' => 'Ur textareḍ ara asebtar d nnican neɣ umseqdac d nnican.',
 1252+'notargettext' => 'Ur textareḍ ara asebtar d nnican neɣ asebtar n wemseqdac d nnican.',
12491253 'linklistsub' => '(Amuɣ n yizdayen)',
12501254 'linkshere' => "Isebtaren-agi sɛan azday ɣer '''[[:$1]]''':",
12511255 'nolinkshere' => "Ulac asebtar i yesɛan azday ɣer '''[[:$1]]'''.",
@@ -1256,7 +1260,7 @@
12571261
12581262 # Block/unblock
12591263 'ipaddress' => 'Tansa IP',
1260 -'ipadressorusername' => 'Tansa IP neɣ isem umseqdac',
 1264+'ipadressorusername' => 'Tansa IP neɣ isem n wemseqdac',
12611265 'ipbreason' => 'Ayɣer',
12621266 'ipbotheroption' => 'nniḍen',
12631267 'badipaddress' => 'Tansa IP mačči d ṣaḥiḥ',
@@ -1266,20 +1270,20 @@
12671271 'proxyblockreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy". G leɛnayek, meslay akk d provider inek.',
12681272 'proxyblocksuccess' => 'D ayen.',
12691273 'sorbsreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da.',
1270 -'sorbs_create_account_reason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da. Ur tezmireḍ ara ad txelqeḍ isem umseqdac',
 1274+'sorbs_create_account_reason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da. Ur tezmireḍ ara ad txelqeḍ isem n wemseqdac',
12711275
12721276 # Move page
12731277 'movepage' => 'Smimeḍ asebtar',
12741278 'movepagetext' => "Mi tedsseqdceḍ talɣa deg ukessar ad ibddel isem n usebtar, yesmimeḍ akk
1275 -umezruy-is γer isem amaynut.
1276 -Azwel aqdim ad yuγal azady n wesmimeḍ γer azwel amaynut.
1277 -Izdayen γer azwel aqdim ur ttubeddlen ara; ssenqd-iten
 1279+umezruy-is ɣer isem amaynut.
 1280+Azwel aqdim ad yuɣal azady n wesmimeḍ ɣer azwel amaynut.
 1281+Izdayen ɣer azwel aqdim ur ttubeddlen ara; ssenqd-iten
12781282 u ssenqed izdayen n snat d tlata tikkwal.
12791283 D kečč i yessefk a ten-yessenqed.
12801284
1281 -Meɛna, ma yella amagrad deg azwel amaynut neγ azday n wamsmimeḍ
 1285+Meɛna, ma yella amagrad deg azwel amaynut neɣ azday n wamsmimeḍ
12821286 mebla amezruy, asebtar-inek '''ur''' yettusmimeḍ '''ara'''.
1283 -Yernu, tzemreḍ ad tesmimeḍ asebtar γer isem-is aqdim ma tγelṭeḍ.",
 1287+Yernu, tzemreḍ ad tesmimeḍ asebtar ɣer isem-is aqdim ma tɣelṭeḍ.",
12841288 'movepagetalktext' => "Asebtar \"Amyannan\" yettusmimeḍ ula d netta '''ma ulac:'''
12851289 *Yella asebtar \"Amyannan\" deg isem amaynut, neɣ
12861290 *Trecmeḍ tankult deg ukessar.
@@ -1287,13 +1291,12 @@
12881292 Lukan akka, yessefk a t-tedmeḍ weḥdek.",
12891293 'movearticle' => 'Smimeḍ asebtar',
12901294 'movenologin' => 'Ur tekcimeḍ ara',
1291 -'movenologintext' => 'Yessefk ad tesɛuḍ isem n umseqdac u [[Special:Userlogin|tkecmeḍ]]
 1295+'movenologintext' => 'Yessefk ad tesɛuḍ isem n wemseqdac u [[Special:Userlogin|tkecmeḍ]]
12921296 iwakken ad tesmimḍeḍ asebtar.',
12931297 'newtitle' => 'Ar azwel amaynut',
12941298 'move-watch' => 'Ɛass asebtar-agi',
12951299 'movepagebtn' => 'Smimeḍ asebtar',
12961300 'pagemovedsub' => 'Asemmimeḍ yekfa',
1297 -'pagemovedtext' => 'Asebtar "[[$1]]" yettwasmimeḍ ar "[[$2]]".',
12981301 'articleexists' => 'Yella yagi yisem am wagi, neɣ
12991302 isem ayen textareḍ mačči d ṣaḥiḥ.
13001303 Xtar yiwen nniḍen.',
@@ -1370,8 +1373,8 @@
13711374 'import-logentry-interwiki-detail' => '$1 tasiwelt(tisiwal) seg $2',
13721375
13731376 # Tooltip help for the actions
1374 -'tooltip-pt-userpage' => 'Asebtar n umseqdac inu',
1375 -'tooltip-pt-anonuserpage' => 'Asebtar umseqdac n IP wukud tekkiḍ',
 1377+'tooltip-pt-userpage' => 'Asebtar n wemseqdac inu',
 1378+'tooltip-pt-anonuserpage' => 'Asebtar wemseqdac n IP wukud tekkiḍ',
13761379 'tooltip-pt-mytalk' => 'Asebtar n umyannan inu',
13771380 'tooltip-pt-anontalk' => 'Amyannan ɣef yibeddlen n tansa ip-yagi',
13781381 'tooltip-pt-preferences' => 'Isemyifiyen inu',
@@ -1404,12 +1407,12 @@
14051408 'tooltip-t-recentchangeslinked' => 'Ibeddlen imaynuten deg yisebtaren myezdin seg asebtar-agi',
14061409 'tooltip-feed-rss' => 'RSS feed n usebtar-agi',
14071410 'tooltip-feed-atom' => 'Atom feed n usebtar-agi',
1408 -'tooltip-t-contributions' => 'Ẓer amuɣ n tikkin n umseqdac-agi',
1409 -'tooltip-t-emailuser' => 'Azen e-mail i umseqdac-agi',
 1411+'tooltip-t-contributions' => 'Ẓer amuɣ n tikkin n wemseqdac-agi',
 1412+'tooltip-t-emailuser' => 'Azen e-mail i wemseqdac-agi',
14101413 'tooltip-t-upload' => 'Azen tugna neɣ afaylu nniḍen',
14111414 'tooltip-t-specialpages' => 'Amuɣ n akk isebtaren usligen',
14121415 'tooltip-ca-nstab-main' => 'Ẓer ayen yellan deg usebtar',
1413 -'tooltip-ca-nstab-user' => 'Ẓer asebtar umseqdac',
 1416+'tooltip-ca-nstab-user' => 'Ẓer asebtar n wemseqdac',
14141417 'tooltip-ca-nstab-media' => 'Ẓer asebtar n media',
14151418 'tooltip-ca-nstab-special' => 'Wagi asebtar uslig, ur tezmireḍ ara a t-tbeddleḍ',
14161419 'tooltip-ca-nstab-project' => 'Ẓer asebtar usenfar',
@@ -1431,7 +1434,7 @@
14321435 'siteuser' => '{{SITENAME}} amseqdac $1',
14331436 'lastmodifiedatby' => 'Tikelt taneggarut asmi yettubeddel asebtar-agi $2, $1 sɣur $3.', # $1 date, $2 time, $3 user
14341437 'and' => 'u',
1435 -'othercontribs' => 'Tikkin n umseqdac-agi.',
 1438+'othercontribs' => 'Tikkin n wemseqdac-agi.',
14361439 'others' => 'wiyaḍ',
14371440 'siteusers' => '{{SITENAME}} amseqdac(imseqdacen) $1',
14381441 'creditspage' => 'Win ixedmen asebtar',
@@ -1515,18 +1518,18 @@
15161519
15171520 # E-mail address confirmation
15181521 'confirmemail' => 'Sentem tansa n e-mail',
1519 -'confirmemail_noemail' => 'Ur tesɛiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen umseqdac]] inek.',
 1522+'confirmemail_noemail' => 'Ur tesɛiḍ ara tansa n email ṣaḥiḥ deg [[Special:Preferences|isemyifiyen n wemseqdac]] inek.',
15201523 'confirmemail_text' => 'Deg wiki-yagi, yessefk ad tvalidiḍ tansa n email inek
15211524 qbel ma tesseqdceḍ iḍaɣaren n email. Tella taqeffalt d akessar, wekki fell-as
15221525 iwakken yettwazen ungal n usentem semail. Email-nni yesɛa azady, ldi-t.',
15231526 'confirmemail_pending' => '<div class="error">
1524 -Yettwazen-ak yagi ungal n usentem; lukan txelqeḍ isem umseqdac tura kan,
 1527+Yettwazen-ak yagi ungal n usentem; lukan txelqeḍ isem wemseqdac tura kan,
15251528 ahat yessefk ad tegguniḍ cwiṭ qbel ma tɛreḍeḍ ad testeqsiḍ ɣef ungal amaynut.
15261529 </div>',
15271530 'confirmemail_send' => 'Azen-iyi-d angal n usentem s e-mail iwakken ad snetmeɣ.',
15281531 'confirmemail_sent' => 'E-mail yettwazen iwakken ad tsentmeḍ.',
15291532 'confirmemail_oncreate' => 'Angal n usentem yettwazen ar tansa n e-mail inek.
1530 -Yessefk tesseqdceḍ angal-agi iwakken ad tkecmeḍ, meɛna yessefk a t-tefkeḍ
 1533+Yessefk ad tesseqdceḍ angal-agi iwakken ad tkecmeḍ, meɛna yessefk a t-tefkeḍ
15311534 iwakken ad xedmen yiḍaɣaren n email deg wiki-yagi.',
15321535 'confirmemail_sendfailed' => 'Ur yezmir ara ad yazen asentem n email. Ssenqed tansa n email inek.
15331536
@@ -1538,9 +1541,9 @@
15391542 'confirmemail_error' => 'Yella ugur s usmekti n usentem inek.',
15401543 'confirmemail_subject' => 'Asentem n tansa n email seg {{SITENAME}}',
15411544 'confirmemail_body' => 'Amdan, waqila d kečč, seg tansa IP $1, yexleq
1542 -isem umseqdac "$2" s tansa n e-mail deg {{SITENAME}}.
 1545+isem n wemseqdac "$2" s tansa n e-mail deg {{SITENAME}}.
15431546
1544 -Iwakken tbeyyneḍ belli isem umseqdac inek u terreḍ
 1547+Iwakken tbeyyneḍ belli isem n wemseqdac inek u terreḍ
15451548 iḍaɣaren n email ad xdemen deg {{SITENAME}}, ldi azday agi:
15461549
15471550 $3
@@ -1556,7 +1559,7 @@
15571560 # Scary transclusion
15581561 'scarytranscludedisabled' => '[Yettwakkes assekcam n yisebtaren seg wiki wiyaḍ]',
15591562 'scarytranscludefailed' => '[Ur yezmir ara yewwi-d talɣa n $1; suref-aɣ]',
1560 -'scarytranscludetoolong' => '[URL d aγezfan bezzaf; suref-aɣ]',
 1563+'scarytranscludetoolong' => '[URL d aɣezfan bezzaf; suref-aɣ]',
15611564
15621565 # Trackbacks
15631566 'trackbackbox' => '<div id="mw_trackbacks">
@@ -1589,9 +1592,6 @@
15901593 'articletitles' => "Imagraden i yebdan s ''$1''",
15911594 'hideresults' => 'Ffer igmad',
15921595
1593 -# DISPLAYTITLE
1594 -'displaytitle' => '(Xdem azday ar asebtar-agi akka [[$1]])',
1595 -
15961596 'loginlanguagelabel' => 'Tutlayt: $1',
15971597
15981598 # Multipage image navigation
@@ -1634,4 +1634,4 @@
16351635
16361636 );
16371637
1638 -
 1638+?>
Index: branches/apiedit/phase3/languages/messages/MessagesId.php
@@ -966,18 +966,18 @@
967967 'files' => 'Berkas',
968968
969969 # User rights
970 -'userrights-lookup-user' => 'Mengatur kelompok pengguna',
971 -'userrights-user-editname' => 'Masukkan nama pengguna:',
972 -'editusergroup' => 'Sunting kelompok pengguna',
973 -'userrights-editusergroup' => 'Sunting kelompok pengguna',
974 -'saveusergroups' => 'Simpan kelompok pengguna',
975 -'userrights-groupsmember' => 'Anggota dari:',
976 -'userrights-groupsavailable' => 'Kelompok yang tersedia:',
977 -'userrights-groupshelp' => 'Pilih kelompok yang Anda ingin hapus dari atau tambahkan pada pengguna. Kelompok yang tak dipilih tak akan diganti. Anda dapat membatalkan pilihan dengan menekan tombol CTRL + Klik kiri',
978 -'userrights-reason' => 'Alasan pengubahan:',
979 -'userrights-list' => 'Karena Anda adalah anggota dari $1, Anda dapat memberi akses untuk $2 serta mencabut akses untuk $3.',
980 -'userrights-list-nogroups' => 'tak satu pun kelompok',
981 -'userrights-list-groups' => '{{PLURAL:$1|kelompok|kelompok-kelompok}} $2',
 970+'userrights-lookup-user' => 'Mengatur kelompok pengguna',
 971+'userrights-user-editname' => 'Masukkan nama pengguna:',
 972+'editusergroup' => 'Sunting kelompok pengguna',
 973+'userrights-editusergroup' => 'Sunting kelompok pengguna',
 974+'saveusergroups' => 'Simpan kelompok pengguna',
 975+'userrights-groupsmember' => 'Anggota dari:',
 976+'userrights-groupsavailable' => 'Kelompok yang tersedia:',
 977+'userrights-groupshelp' => 'Pilih kelompok yang Anda ingin hapus dari atau tambahkan pada pengguna. Kelompok yang tak dipilih tak akan diganti. Anda dapat membatalkan pilihan dengan menekan tombol CTRL + Klik kiri',
 978+'userrights-reason' => 'Alasan pengubahan:',
 979+'userrights-available-none' => 'Anda tak dapat mengganti keangotaan kelompok.',
 980+'userrights-available-add' => 'Anda dapat memasukkan pengguna ke $1.',
 981+'userrights-available-remove' => 'Anda dapat mengeluarkan pengguna dari $1.',
982982
983983 # Groups
984984 'group' => 'Kelompok:',
@@ -1646,7 +1646,7 @@
16471647 'move-watch' => 'Pantau halaman ini',
16481648 'movepagebtn' => 'Pindahkan halaman',
16491649 'pagemovedsub' => 'Pemindahan berhasil',
1650 -'movepage-moved' => '<big>\'\'\'"$1" dipindahkan ke "$2".\'\'\'</big>',
 1650+'movepage-moved' => '<big>\'\'\'"$1" dipindahkan ke "$2".\'\'\'</big>', # The two titles are passed in plain text as $3 and $4 to allow additional goodies in the message.
16511651 'articleexists' => 'Halaman dengan nama tersebut telah ada atau nama yang dipilih tidak sah. Silakan pilih nama lain.',
16521652 'talkexists' => 'Halaman tersebut berhasil dipindahkan, tetapi halaman pembicaraan dari halaman tersebut tidak dapat dipindahkan karena telah ada halaman pembicaraan pada judul yang baru. Silakan gabungkan halaman-halaman pembicaraan tersebut secara manual.',
16531653 'movedto' => 'dipindahkan ke',
Index: branches/apiedit/phase3/skins/common/upload.js
@@ -11,13 +11,125 @@
1212 // for MSIE/Mac; non-breaking spaces cause the <option> not to render
1313 // but, for some reason, setting the text to itself works
1414 var selector = document.getElementById("wpLicense");
15 - var ua = navigator.userAgent;
16 - var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
17 - if (isMacIe) {
18 - for (var i = 0; i < selector.options.length; i++) {
19 - selector.options[i].text = selector.options[i].text;
 15+ if (selector) {
 16+ var ua = navigator.userAgent;
 17+ var isMacIe = (ua.indexOf("MSIE") != -1) && (ua.indexOf("Mac") != -1);
 18+ if (isMacIe) {
 19+ for (var i = 0; i < selector.options.length; i++) {
 20+ selector.options[i].text = selector.options[i].text;
 21+ }
2022 }
2123 }
2224 }
2325
 26+var wgUploadWarningObj = {
 27+ 'responseCache' : { '' : '&nbsp;' },
 28+ 'nameToCheck' : '',
 29+ 'typing': false,
 30+ 'delay': 500, // ms
 31+ 'timeoutID': false,
 32+
 33+ 'keypress': function () {
 34+ // Find file to upload
 35+ var destFile = document.getElementById('wpDestFile');
 36+ var warningElt = document.getElementById( 'wpDestFile-warning' );
 37+ if ( !destFile || !warningElt ) return ;
 38+
 39+ this.nameToCheck = destFile.value ;
 40+
 41+ // Clear timer
 42+ if ( this.timeoutID ) {
 43+ window.clearTimeout( this.timeoutID );
 44+ }
 45+ // Check response cache
 46+ if ( this.nameToCheck in this.responseCache ) {
 47+ this.setWarning(this.responseCache[this.nameToCheck]);
 48+ return;
 49+ }
 50+
 51+ this.setInnerHTML(warningElt, '..'); // TODO: pretty animated GIF
 52+ this.timeoutID = window.setTimeout( 'wgUploadWarningObj.timeout()', this.delay );
 53+ },
 54+
 55+ 'checkNow': function (fname) {
 56+ if ( this.timeoutID ) {
 57+ window.clearTimeout( this.timeoutID );
 58+ }
 59+ this.nameToCheck = fname;
 60+ this.timeout();
 61+ },
 62+
 63+ 'timeout' : function() {
 64+ var warningElt = document.getElementById( 'wpDestFile-warning' );
 65+ this.setInnerHTML(warningElt, '....'); // TODO: pretty animated GIF
 66+
 67+ // Get variables into local scope so that they will be preserved for the
 68+ // anonymous callback. fileName is copied so that multiple overlapping
 69+ // ajax requests can be supported.
 70+ var obj = this;
 71+ var fileName = this.nameToCheck;
 72+ sajax_do_call( 'UploadForm::ajaxGetExistsWarning', [this.nameToCheck],
 73+ function (result) {
 74+ obj.processResult(result, fileName)
 75+ }
 76+ );
 77+ },
 78+
 79+ 'processResult' : function (result, fileName) {
 80+ this.setWarning(result.responseText);
 81+ this.responseCache[fileName] = result.responseText;
 82+ },
 83+
 84+ 'setWarning' : function (warning) {
 85+ var warningElt = document.getElementById( 'wpDestFile-warning' );
 86+ var ackElt = document.getElementById( 'wpDestFileWarningAck' );
 87+ this.setInnerHTML(warningElt, warning);
 88+
 89+ // Set a value in the form indicating that the warning is acknowledged and
 90+ // doesn't need to be redisplayed post-upload
 91+ if ( warning == '' || warning == '&nbsp' ) {
 92+ ackElt.value = '';
 93+ } else {
 94+ ackElt.value = '1';
 95+ }
 96+ },
 97+
 98+ 'setInnerHTML' : function (element, text) {
 99+ // Check for no change to avoid flicker in IE 7
 100+ if (element.innerHTML != text) {
 101+ element.innerHTML = text;
 102+ }
 103+ }
 104+}
 105+
 106+function fillDestFilename(id) {
 107+ if (!document.getElementById) {
 108+ return;
 109+ }
 110+ var path = document.getElementById(id).value;
 111+ // Find trailing part
 112+ var slash = path.lastIndexOf('/');
 113+ var backslash = path.lastIndexOf('\\');
 114+ var fname;
 115+ if (slash == -1 && backslash == -1) {
 116+ fname = path;
 117+ } else if (slash > backslash) {
 118+ fname = path.substring(slash+1, 10000);
 119+ } else {
 120+ fname = path.substring(backslash+1, 10000);
 121+ }
 122+
 123+ // Capitalise first letter and replace spaces by underscores
 124+ fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
 125+
 126+ // Output result
 127+ var destFile = document.getElementById('wpDestFile');
 128+ if (destFile) {
 129+ destFile.value = fname;
 130+ if ( wgAjaxUploadDestCheck ) {
 131+ wgUploadWarningObj.checkNow(fname) ;
 132+ }
 133+ }
 134+}
 135+
24136 addOnloadHook(licenseSelectorFixup);
Index: branches/apiedit/phase3/skins/common/wikibits.js
@@ -766,33 +766,6 @@
767767 document.getElementById(idb).checked=false;
768768 }
769769
770 -function fillDestFilename(id) {
771 - if (!document.getElementById) {
772 - return;
773 - }
774 - var path = document.getElementById(id).value;
775 - // Find trailing part
776 - var slash = path.lastIndexOf('/');
777 - var backslash = path.lastIndexOf('\\');
778 - var fname;
779 - if (slash == -1 && backslash == -1) {
780 - fname = path;
781 - } else if (slash > backslash) {
782 - fname = path.substring(slash+1, 10000);
783 - } else {
784 - fname = path.substring(backslash+1, 10000);
785 - }
786 -
787 - // Capitalise first letter and replace spaces by underscores
788 - fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
789 -
790 - // Output result
791 - var destFile = document.getElementById('wpDestFile');
792 - if (destFile) {
793 - destFile.value = fname;
794 - }
795 -}
796 -
797770 function scrollEditBox() {
798771 var editBoxEl = document.getElementById("wpTextbox1");
799772 var scrollTopEl = document.getElementById("wpScrolltop");
Property changes on: branches/apiedit/phase3
___________________________________________________________________
Modified: svnmerge-integrated
800773 - /trunk/phase3:1-23560
801774 + /trunk/phase3:1-23624

Status & tagging log