Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/lqt.css |
— | — | @@ -482,7 +482,9 @@ |
483 | 483 | top: 15px; |
484 | 484 | height: 32px; |
485 | 485 | } |
486 | | - |
| 486 | +.TalkpagePager_nav { |
| 487 | + margin: 30px auto 10px; |
| 488 | +} |
487 | 489 | /* Float Clearing - If you confused, http://www.positioniseverything.net/easyclearing.html */ |
488 | 490 | .lqt_thread_heading:after |
489 | 491 | { |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/LiquidThreads.php |
— | — | @@ -3,11 +3,11 @@ |
4 | 4 | die(); |
5 | 5 | |
6 | 6 | $wgExtensionCredits['other'][] = array( |
7 | | - 'path' => __FILE__, |
8 | | - 'name' => 'Liquid Threads', |
9 | | - 'version' => '2.0-alpha', |
10 | | - 'url' => 'http://www.mediawiki.org/wiki/Extension:LiquidThreads', |
11 | | - 'author' => array( 'David McCabe', 'Andrew Garrett' ), |
| 7 | + 'path' => __FILE__, |
| 8 | + 'name' => 'Liquid Threads', |
| 9 | + 'version' => '2.0-alpha', |
| 10 | + 'url' => 'http://www.mediawiki.org/wiki/Extension:LiquidThreads', |
| 11 | + 'author' => array( 'David McCabe', 'Andrew Garrett' ), |
12 | 12 | 'descriptionmsg' => 'lqt-desc', |
13 | 13 | ); |
14 | 14 | |
— | — | @@ -22,15 +22,15 @@ |
23 | 23 | define( 'LQT_OLDEST_THREADS', 'ot' ); |
24 | 24 | |
25 | 25 | // FIXME: would be neat if it was possible to somehow localise this. |
26 | | -$wgCanonicalNamespaceNames[NS_LQT_THREAD] = 'Thread'; |
27 | | -$wgCanonicalNamespaceNames[NS_LQT_THREAD_TALK] = 'Thread_talk'; |
28 | | -$wgCanonicalNamespaceNames[NS_LQT_SUMMARY] = 'Summary'; |
| 26 | +$wgCanonicalNamespaceNames[NS_LQT_THREAD] = 'Thread'; |
| 27 | +$wgCanonicalNamespaceNames[NS_LQT_THREAD_TALK] = 'Thread_talk'; |
| 28 | +$wgCanonicalNamespaceNames[NS_LQT_SUMMARY] = 'Summary'; |
29 | 29 | $wgCanonicalNamespaceNames[NS_LQT_SUMMARY_TALK] = 'Summary_talk'; |
30 | 30 | |
31 | 31 | // FIXME: would be neat if it was possible to somehow localise this. |
32 | | -$wgExtraNamespaces[NS_LQT_THREAD] = 'Thread'; |
33 | | -$wgExtraNamespaces[NS_LQT_THREAD_TALK] = 'Thread_talk'; |
34 | | -$wgExtraNamespaces[NS_LQT_SUMMARY] = 'Summary'; |
| 32 | +$wgExtraNamespaces[NS_LQT_THREAD] = 'Thread'; |
| 33 | +$wgExtraNamespaces[NS_LQT_THREAD_TALK] = 'Thread_talk'; |
| 34 | +$wgExtraNamespaces[NS_LQT_SUMMARY] = 'Summary'; |
35 | 35 | $wgExtraNamespaces[NS_LQT_SUMMARY_TALK] = 'Summary_talk'; |
36 | 36 | |
37 | 37 | // Localisation |
— | — | @@ -171,8 +171,8 @@ |
172 | 172 | |
173 | 173 | // Logging |
174 | 174 | $wgLogTypes[] = 'liquidthreads'; |
175 | | -$wgLogNames['liquidthreads'] = 'lqt-log-name'; |
176 | | -$wgLogHeaders['liquidthreads'] = 'lqt-log-header'; |
| 175 | +$wgLogNames['liquidthreads'] = 'lqt-log-name'; |
| 176 | +$wgLogHeaders['liquidthreads'] = 'lqt-log-header'; |
177 | 177 | |
178 | 178 | foreach ( array( 'move', 'split', 'merge', 'subjectedit', 'resort' ) as $action ) { |
179 | 179 | $wgLogActionsHandlers["liquidthreads/$action"] = 'LqtLogFormatter::formatLogEntry'; |
— | — | @@ -192,8 +192,8 @@ |
193 | 193 | $wgAutoloadClasses['ApiThreadAction'] = "$dir/api/ApiThreadAction.php"; |
194 | 194 | $wgAPIModules['threadaction'] = 'ApiThreadAction'; |
195 | 195 | |
196 | | -// Name of the extension (wmf-specific, for splitting to versions) |
197 | | -$wgLiquidThreadsExtensionName = 'LiquidThreads'; |
| 196 | +// Path to the LQT directory |
| 197 | +$wgLiquidThreadsExtensionPath = "{$wgScriptPath}/extensions/LiquidThreads"; |
198 | 198 | |
199 | 199 | /** CONFIGURATION SECTION */ |
200 | 200 | |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/Threads.php |
— | — | @@ -92,7 +92,6 @@ |
93 | 93 | } |
94 | 94 | |
95 | 95 | static function where( $where, $options = array(), $bulkLoad = true ) { |
96 | | - global $wgDBprefix; |
97 | 96 | $dbr = wfGetDB( DB_SLAVE ); |
98 | 97 | |
99 | 98 | $res = $dbr->select( 'thread', '*', $where, __METHOD__, $options ); |
— | — | @@ -323,12 +322,12 @@ |
324 | 323 | $roundRowsAffected = 0; |
325 | 324 | |
326 | 325 | // Fix wrong title. |
327 | | - $res = $dbw->update( 'thread', $titleCond, $fixTitleCond, |
| 326 | + $dbw->update( 'thread', $titleCond, $fixTitleCond, |
328 | 327 | __METHOD__, $options ); |
329 | 328 | $roundRowsAffected += $dbw->affectedRows(); |
330 | 329 | |
331 | 330 | // Fix wrong ID |
332 | | - $res = $dbw->update( 'thread', $idCond, $fixIdCond, __METHOD__, $options ); |
| 331 | + $dbw->update( 'thread', $idCond, $fixIdCond, __METHOD__, $options ); |
333 | 332 | $roundRowsAffected += $dbw->affectedRows(); |
334 | 333 | |
335 | 334 | $rowsAffected += $roundRowsAffected; |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/View.php |
— | — | @@ -80,7 +80,7 @@ |
81 | 81 | if ( $operand ) { |
82 | 82 | $query['lqt_operand'] = $operand; |
83 | 83 | } |
84 | | - |
| 84 | + |
85 | 85 | if ( ! $thread ) { |
86 | 86 | throw new MWException( "Empty thread passed to ".__METHOD__ ); |
87 | 87 | } |
— | — | @@ -114,7 +114,7 @@ |
115 | 115 | |
116 | 116 | static function linkInContextData( $thread, $contextType = 'page' ) { |
117 | 117 | $query = array(); |
118 | | - |
| 118 | + |
119 | 119 | if ( ! $thread ) { |
120 | 120 | throw new MWException( "Null thread passed to linkInContextData" ); |
121 | 121 | } |
— | — | @@ -249,9 +249,6 @@ |
250 | 250 | static function talkpageUrl( $title, $method = null, $operand = null, |
251 | 251 | $includeFragment = true, $perpetuateOffset = true ) |
252 | 252 | { |
253 | | - global $wgUser; |
254 | | - $sk = $wgUser->getSkin(); |
255 | | - |
256 | 253 | list( $title, $query ) = |
257 | 254 | self::talkpageLinkData( $title, $method, $operand, $includeFragment, |
258 | 255 | $perpetuateOffset ); |
— | — | @@ -282,9 +279,9 @@ |
283 | 280 | } |
284 | 281 | |
285 | 282 | /************************************************************* |
286 | | - * Editing methods (here be dragons) * |
| 283 | + * Editing methods (here be dragons) * |
287 | 284 | * Forget dragons: This section distorts the rest of the code * |
288 | | - * like a star bending spacetime around itself. * |
| 285 | + * like a star bending spacetime around itself. * |
289 | 286 | *************************************************************/ |
290 | 287 | |
291 | 288 | /** |
— | — | @@ -311,7 +308,7 @@ |
312 | 309 | $operand = $this->request->getVal( 'lqt_operand' ); |
313 | 310 | |
314 | 311 | $thread = Threads::withId( intval( $operand ) ); |
315 | | - |
| 312 | + |
316 | 313 | $hookResult = wfRunHooks( 'LiquidThreadsDoInlineEditForm', |
317 | 314 | array( |
318 | 315 | $thread, |
— | — | @@ -331,20 +328,20 @@ |
332 | 329 | |
333 | 330 | $this->output->setArticleBodyOnly( true ); |
334 | 331 | } |
335 | | - |
| 332 | + |
336 | 333 | function showNewThreadForm( $talkpage ) { |
337 | 334 | $submitted_nonce = $this->request->getVal( 'lqt_nonce' ); |
338 | 335 | $nonce_key = wfMemcKey( 'lqt-nonce', $submitted_nonce, $this->user->getName() ); |
339 | 336 | if ( ! $this->handleNonce( $submitted_nonce, $nonce_key ) ) return; |
340 | | - |
| 337 | + |
341 | 338 | if ( Thread::canUserPost( $this->user, $this->article ) !== true ) { |
342 | 339 | $this->output->addWikiMsg( 'lqt-protected-newthread' ); |
343 | 340 | return; |
344 | 341 | } |
345 | 342 | $subject = $this->request->getVal( 'lqt_subject_field', false ); |
346 | | - |
| 343 | + |
347 | 344 | $t = null; |
348 | | - |
| 345 | + |
349 | 346 | $subjectOk = Thread::validateSubject( $subject, $t, |
350 | 347 | null, $this->article ); |
351 | 348 | if ( ! $subjectOk ) { |
— | — | @@ -354,65 +351,65 @@ |
355 | 352 | $t = $this->scratchTitle(); |
356 | 353 | } |
357 | 354 | } |
358 | | - |
| 355 | + |
359 | 356 | $article = new Article( $t ); |
360 | | - |
| 357 | + |
361 | 358 | LqtHooks::$editTalkpage = $talkpage; |
362 | 359 | LqtHooks::$editArticle = $article; |
363 | 360 | LqtHooks::$editThread = null; |
364 | 361 | LqtHooks::$editType = 'new'; |
365 | 362 | LqtHooks::$editAppliesTo = null; |
366 | | - |
| 363 | + |
367 | 364 | wfRunHooks( 'LiquidThreadsShowNewThreadForm', array( &$e, $talkpage ) ); |
368 | | - |
| 365 | + |
369 | 366 | $e = new EditPage( $article ); |
370 | | - |
| 367 | + |
371 | 368 | global $wgRequest; |
372 | 369 | // Quietly force a preview if no subject has been specified. |
373 | 370 | if ( !$subjectOk ) { |
374 | 371 | // Dirty hack to prevent saving from going ahead |
375 | 372 | $wgRequest->setVal( 'wpPreview', true ); |
376 | | - |
| 373 | + |
377 | 374 | if ( $this->request->wasPosted() ) { |
378 | 375 | if ( !$subject ) { |
379 | 376 | $msg = 'lqt_empty_subject'; |
380 | 377 | } else { |
381 | 378 | $msg = 'lqt_invalid_subject'; |
382 | 379 | } |
383 | | - |
| 380 | + |
384 | 381 | $e->editFormPageTop .= |
385 | 382 | Xml::tags( 'div', array( 'class' => 'error' ), |
386 | 383 | wfMsgExt( $msg, 'parse' ) ); |
387 | 384 | } |
388 | 385 | } |
389 | | - |
| 386 | + |
390 | 387 | $e->suppressIntro = true; |
391 | 388 | $e->editFormTextBeforeContent .= |
392 | 389 | $this->perpetuate( 'lqt_method', 'hidden' ) . |
393 | 390 | $this->perpetuate( 'lqt_operand', 'hidden' ) . |
394 | 391 | Xml::hidden( 'lqt_nonce', wfGenerateToken() ); |
395 | | - |
| 392 | + |
396 | 393 | $e->mShowSummaryField = false; |
397 | | - |
| 394 | + |
398 | 395 | $summary = wfMsgForContent( 'lqt-newpost-summary', $subject ); |
399 | 396 | $wgRequest->setVal( 'wpSummary', $summary ); |
400 | | - |
| 397 | + |
401 | 398 | list( $signatureEditor, $signatureHTML ) = $this->getSignatureEditor( $this->user ); |
402 | | - |
| 399 | + |
403 | 400 | $e->editFormTextAfterContent .= |
404 | 401 | $signatureEditor; |
405 | 402 | $e->previewTextAfterContent .= |
406 | 403 | Xml::tags( 'p', null, $signatureHTML ); |
407 | | - |
| 404 | + |
408 | 405 | $e->editFormTextBeforeContent .= $this->getSubjectEditor( '', $subject ); |
409 | | - |
| 406 | + |
410 | 407 | wfRunHooks( 'LiquidThreadsAfterShowNewThreadForm', array( &$e, $talkpage ) ); |
411 | | - |
| 408 | + |
412 | 409 | $e->edit(); |
413 | | - |
| 410 | + |
414 | 411 | if ( $e->didSave ) { |
415 | 412 | $signature = $this->request->getVal( 'wpLqtSignature', null ); |
416 | | - |
| 413 | + |
417 | 414 | $info = |
418 | 415 | array( |
419 | 416 | 'talkpage' => $talkpage, |
— | — | @@ -422,66 +419,66 @@ |
423 | 420 | 'root' => $article, |
424 | 421 | 'subject' => $subject, |
425 | 422 | ); |
426 | | - |
| 423 | + |
427 | 424 | wfRunHooks( 'LiquidThreadsSaveNewThread', |
428 | 425 | array( &$info, &$e, &$talkpage ) ); |
429 | | - |
| 426 | + |
430 | 427 | $thread = LqtView::newPostMetadataUpdates( $info ); |
431 | | - |
| 428 | + |
432 | 429 | if ( $submitted_nonce && $nonce_key ) { |
433 | 430 | global $wgMemc; |
434 | 431 | $wgMemc->set( $nonce_key, 1, 3600 ); |
435 | 432 | } |
436 | 433 | } |
437 | | - |
| 434 | + |
438 | 435 | if ( $this->output->getRedirect() != '' ) { |
439 | | - $redirectTitle = clone $talkpage->getTitle(); |
440 | | - if ( !empty($thread) ) { |
441 | | - $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
442 | | - } |
443 | | - $this->output->redirect( $this->title->getFullURL() ); |
| 436 | + $redirectTitle = clone $talkpage->getTitle(); |
| 437 | + if ( !empty($thread) ) { |
| 438 | + $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
| 439 | + } |
| 440 | + $this->output->redirect( $this->title->getFullURL() ); |
444 | 441 | } |
445 | | - |
| 442 | + |
446 | 443 | } |
447 | | - |
| 444 | + |
448 | 445 | function showReplyForm( $thread ) { |
449 | 446 | global $wgRequest; |
450 | | - |
| 447 | + |
451 | 448 | $submitted_nonce = $this->request->getVal( 'lqt_nonce' ); |
452 | 449 | $nonce_key = wfMemcKey( 'lqt-nonce', $submitted_nonce, $this->user->getName() ); |
453 | 450 | if ( ! $this->handleNonce( $submitted_nonce, $nonce_key ) ) return; |
454 | | - |
| 451 | + |
455 | 452 | $perm_result = $thread->canUserReply( $this->user ); |
456 | 453 | if ( $perm_result !== true ) { |
457 | 454 | $this->showReplyProtectedNotice( $thread ); |
458 | 455 | return; |
459 | 456 | } |
460 | | - |
| 457 | + |
461 | 458 | $html = Xml::openElement( 'div', |
462 | 459 | array( 'class' => 'lqt-reply-form' ) ); |
463 | 460 | $this->output->addHTML( $html ); |
464 | 461 | |
465 | | - |
| 462 | + |
466 | 463 | try { |
467 | 464 | $t = $this->newReplyTitle( null, $thread ); |
468 | 465 | } catch ( MWException $excep ) { |
469 | 466 | $t = $this->scratchTitle(); |
470 | 467 | $valid_subject = false; |
471 | 468 | } |
472 | | - |
| 469 | + |
473 | 470 | $article = new Article( $t ); |
474 | 471 | $talkpage = $thread->article(); |
475 | | - |
| 472 | + |
476 | 473 | LqtHooks::$editTalkpage = $talkpage; |
477 | 474 | LqtHooks::$editArticle = $article; |
478 | 475 | LqtHooks::$editThread = $thread; |
479 | 476 | LqtHooks::$editType = 'reply'; |
480 | 477 | LqtHooks::$editAppliesTo = $thread; |
481 | | - |
| 478 | + |
482 | 479 | $e = new EditPage( $article ); |
483 | | - |
| 480 | + |
484 | 481 | $e->mShowSummaryField = false; |
485 | | - |
| 482 | + |
486 | 483 | $reply_subject = $thread->subject(); |
487 | 484 | $reply_title = $thread->title()->getPrefixedText(); |
488 | 485 | $summary = wfMsgForContent( |
— | — | @@ -490,37 +487,37 @@ |
491 | 488 | $reply_title |
492 | 489 | ); |
493 | 490 | $wgRequest->setVal( 'wpSummary', $summary ); |
494 | | - |
| 491 | + |
495 | 492 | // Add an offset so it works if it's on the wrong page. |
496 | 493 | $dbr = wfGetDB( DB_SLAVE ); |
497 | 494 | $offset = wfTimestamp( TS_UNIX, $thread->topmostThread()->sortkey() ); |
498 | 495 | $offset++; |
499 | 496 | $offset = $dbr->timestamp( $offset ); |
500 | | - |
| 497 | + |
501 | 498 | $e->suppressIntro = true; |
502 | 499 | $e->editFormTextBeforeContent .= |
503 | 500 | $this->perpetuate( 'lqt_method', 'hidden' ) . |
504 | 501 | $this->perpetuate( 'lqt_operand', 'hidden' ) . |
505 | 502 | Xml::hidden( 'lqt_nonce', wfGenerateToken() ) . |
506 | 503 | Xml::hidden( 'offset', $offset ); |
507 | | - |
| 504 | + |
508 | 505 | list( $signatureEditor, $signatureHTML ) = $this->getSignatureEditor( $this->user ); |
509 | | - |
| 506 | + |
510 | 507 | $e->editFormTextAfterContent .= |
511 | 508 | $signatureEditor; |
512 | 509 | $e->previewTextAfterContent .= |
513 | 510 | Xml::tags( 'p', null, $signatureHTML ); |
514 | | - |
| 511 | + |
515 | 512 | $wgRequest->setVal( 'wpWatchThis', false ); |
516 | | - |
| 513 | + |
517 | 514 | wfRunHooks( 'LiquidThreadsShowReplyForm', array( &$e, $thread ) ); |
518 | | - |
| 515 | + |
519 | 516 | $e->edit(); |
520 | | - |
| 517 | + |
521 | 518 | if ( $e->didSave ) { |
522 | 519 | $bump = $this->request->getBool( 'wpBumpThread' ); |
523 | 520 | $signature = $this->request->getVal( 'wpLqtSignature', null ); |
524 | | - |
| 521 | + |
525 | 522 | $info = array( |
526 | 523 | 'replyTo' => $thread, |
527 | 524 | 'text' => $e->textbox1, |
— | — | @@ -529,106 +526,106 @@ |
530 | 527 | 'signature' => $signature, |
531 | 528 | 'root' => $article, |
532 | 529 | ); |
533 | | - |
| 530 | + |
534 | 531 | wfRunHooks( 'LiquidThreadsSaveReply', |
535 | 532 | array( &$info, &$e, &$thread ) ); |
536 | | - |
| 533 | + |
537 | 534 | $newThread = LqtView::replyMetadataUpdates( $info ); |
538 | | - |
| 535 | + |
539 | 536 | if ( $submitted_nonce && $nonce_key ) { |
540 | 537 | global $wgMemc; |
541 | 538 | $wgMemc->set( $nonce_key, 1, 3600 ); |
542 | 539 | } |
543 | 540 | } |
544 | | - |
| 541 | + |
545 | 542 | if ( $this->output->getRedirect() != '' ) { |
546 | | - $redirectTitle = clone $talkpage->getTitle(); |
547 | | - if ( !empty( $newThread ) ) { |
548 | | - $redirectTitle->setFragment( '#' . |
549 | | - $this->anchorName( $newThread ) ); |
550 | | - } |
551 | | - $this->output->redirect( $this->title->getFullURL() ); |
| 543 | + $redirectTitle = clone $talkpage->getTitle(); |
| 544 | + if ( !empty( $newThread ) ) { |
| 545 | + $redirectTitle->setFragment( '#' . |
| 546 | + $this->anchorName( $newThread ) ); |
| 547 | + } |
| 548 | + $this->output->redirect( $this->title->getFullURL() ); |
552 | 549 | } |
553 | | - |
| 550 | + |
554 | 551 | $this->output->addHTML( '</div>' ); |
555 | 552 | } |
556 | | - |
| 553 | + |
557 | 554 | function showPostEditingForm( $thread ) { |
558 | 555 | $submitted_nonce = $this->request->getVal( 'lqt_nonce' ); |
559 | 556 | $nonce_key = wfMemcKey( 'lqt-nonce', $submitted_nonce, $this->user->getName() ); |
560 | 557 | if ( ! $this->handleNonce( $submitted_nonce, $nonce_key ) ) return; |
561 | | - |
| 558 | + |
562 | 559 | $subject_expected = $thread->isTopmostThread(); |
563 | 560 | $subject = $this->request->getVal( 'lqt_subject_field', '' ); |
564 | | - |
| 561 | + |
565 | 562 | if ( !$subject ) { |
566 | 563 | $subject = $thread->subject(); |
567 | 564 | } |
568 | | - |
| 565 | + |
569 | 566 | $t = null; |
570 | 567 | $subjectOk = Thread::validateSubject( $subject, $t, |
571 | 568 | $thread->superthread(), $this->article ); |
572 | 569 | if ( ! $subjectOk ) { |
573 | 570 | $subject = false; |
574 | 571 | } |
575 | | - |
| 572 | + |
576 | 573 | $article = $thread->root(); |
577 | 574 | $talkpage = $thread->article(); |
578 | | - |
| 575 | + |
579 | 576 | wfRunHooks( 'LiquidThreadsEditFormContent', array( $thread, &$article, $talkpage ) ); |
580 | | - |
| 577 | + |
581 | 578 | LqtHooks::$editTalkpage = $talkpage; |
582 | 579 | LqtHooks::$editArticle = $article; |
583 | 580 | LqtHooks::$editThread = $thread; |
584 | 581 | LqtHooks::$editType = 'edit'; |
585 | 582 | LqtHooks::$editAppliesTo = $thread; |
586 | | - |
| 583 | + |
587 | 584 | $e = new EditPage( $article ); |
588 | | - |
| 585 | + |
589 | 586 | global $wgRequest; |
590 | 587 | // Quietly force a preview if no subject has been specified. |
591 | 588 | if ( !$subjectOk ) { |
592 | 589 | // Dirty hack to prevent saving from going ahead |
593 | 590 | $wgRequest->setVal( 'wpPreview', true ); |
594 | | - |
| 591 | + |
595 | 592 | if ( $this->request->wasPosted() ) { |
596 | 593 | $e->editFormPageTop .= |
597 | 594 | Xml::tags( 'div', array( 'class' => 'error' ), |
598 | 595 | wfMsgExt( 'lqt_invalid_subject', 'parse' ) ); |
599 | 596 | } |
600 | 597 | } |
601 | | - |
| 598 | + |
602 | 599 | // Add an offset so it works if it's on the wrong page. |
603 | 600 | $dbr = wfGetDB( DB_SLAVE ); |
604 | 601 | $offset = wfTimestamp( TS_UNIX, $thread->topmostThread()->sortkey() ); |
605 | 602 | $offset++; |
606 | 603 | $offset = $dbr->timestamp( $offset ); |
607 | | - |
| 604 | + |
608 | 605 | $e->suppressIntro = true; |
609 | 606 | $e->editFormTextBeforeContent .= |
610 | 607 | $this->perpetuate( 'lqt_method', 'hidden' ) . |
611 | 608 | $this->perpetuate( 'lqt_operand', 'hidden' ) . |
612 | 609 | Xml::hidden( 'lqt_nonce', wfGenerateToken() ) . |
613 | 610 | Xml::hidden( 'offset', $offset ); |
614 | | - |
| 611 | + |
615 | 612 | list( $signatureEditor, $signatureHTML ) = $this->getSignatureEditor( $thread ); |
616 | | - |
| 613 | + |
617 | 614 | $e->editFormTextAfterContent .= |
618 | 615 | $signatureEditor; |
619 | 616 | $e->previewTextAfterContent .= |
620 | 617 | Xml::tags( 'p', null, $signatureHTML ); |
621 | | - |
| 618 | + |
622 | 619 | if ( $thread->isTopmostThread() ) { |
623 | 620 | $e->editFormTextBeforeContent .= |
624 | 621 | $this->getSubjectEditor( $thread->subject(), $subject ); |
625 | 622 | } |
626 | | - |
| 623 | + |
627 | 624 | $e->edit(); |
628 | | - |
| 625 | + |
629 | 626 | if ( $e->didSave ) { |
630 | 627 | $bump = $this->request->getBool( 'wpBumpThread' ); |
631 | 628 | $signature = $this->request->getVal( 'wpLqtSignature', null ); |
632 | | - |
| 629 | + |
633 | 630 | LqtView::editMetadataUpdates( |
634 | 631 | array( |
635 | 632 | 'thread' => $thread, |
— | — | @@ -640,63 +637,63 @@ |
641 | 638 | 'root' => $article, |
642 | 639 | ) |
643 | 640 | ); |
644 | | - |
| 641 | + |
645 | 642 | if ( $submitted_nonce && $nonce_key ) { |
646 | 643 | global $wgMemc; |
647 | 644 | $wgMemc->set( $nonce_key, 1, 3600 ); |
648 | 645 | } |
649 | 646 | } |
650 | | - |
| 647 | + |
651 | 648 | if ( $this->output->getRedirect() != '' ) { |
652 | | - $redirectTitle = clone $talkpage->getTitle(); |
653 | | - $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
654 | | - $this->output->redirect( $this->title->getFullURL() ); |
| 649 | + $redirectTitle = clone $talkpage->getTitle(); |
| 650 | + $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
| 651 | + $this->output->redirect( $this->title->getFullURL() ); |
655 | 652 | } |
656 | | - |
| 653 | + |
657 | 654 | } |
658 | | - |
| 655 | + |
659 | 656 | function showSummarizeForm( $thread ) { |
660 | 657 | $submitted_nonce = $this->request->getVal( 'lqt_nonce' ); |
661 | 658 | $nonce_key = wfMemcKey( 'lqt-nonce', $submitted_nonce, $this->user->getName() ); |
662 | 659 | if ( ! $this->handleNonce( $submitted_nonce, $nonce_key ) ) return; |
663 | | - |
| 660 | + |
664 | 661 | if ( $thread->summary() ) { |
665 | 662 | $article = $thread->summary(); |
666 | 663 | } else { |
667 | 664 | $t = $this->newSummaryTitle( $thread ); |
668 | 665 | $article = new Article( $t ); |
669 | 666 | } |
670 | | - |
| 667 | + |
671 | 668 | $this->output->addWikiMsg( 'lqt-summarize-intro' ); |
672 | | - |
| 669 | + |
673 | 670 | $talkpage = $thread->article(); |
674 | | - |
| 671 | + |
675 | 672 | LqtHooks::$editTalkpage = $talkpage; |
676 | 673 | LqtHooks::$editArticle = $article; |
677 | 674 | LqtHooks::$editThread = $thread; |
678 | 675 | LqtHooks::$editType = 'summarize'; |
679 | 676 | LqtHooks::$editAppliesTo = $thread; |
680 | | - |
| 677 | + |
681 | 678 | $e = new EditPage( $article ); |
682 | | - |
| 679 | + |
683 | 680 | // Add an offset so it works if it's on the wrong page. |
684 | 681 | $dbr = wfGetDB( DB_SLAVE ); |
685 | 682 | $offset = wfTimestamp( TS_UNIX, $thread->topmostThread()->sortkey() ); |
686 | 683 | $offset++; |
687 | 684 | $offset = $dbr->timestamp( $offset ); |
688 | | - |
| 685 | + |
689 | 686 | $e->suppressIntro = true; |
690 | 687 | $e->editFormTextBeforeContent .= |
691 | 688 | $this->perpetuate( 'lqt_method', 'hidden' ) . |
692 | 689 | $this->perpetuate( 'lqt_operand', 'hidden' ) . |
693 | 690 | Xml::hidden( 'lqt_nonce', wfGenerateToken() ) . |
694 | 691 | Xml::hidden( 'offset', $offset ); |
695 | | - |
| 692 | + |
696 | 693 | $e->edit(); |
697 | | - |
| 694 | + |
698 | 695 | if ( $e->didSave ) { |
699 | 696 | $bump = $this->request->getBool( 'wpBumpThread' ); |
700 | | - |
| 697 | + |
701 | 698 | LqtView::summarizeMetadataUpdates( |
702 | 699 | array( |
703 | 700 | 'thread' => $thread, |
— | — | @@ -705,25 +702,25 @@ |
706 | 703 | 'bump' => $bump, |
707 | 704 | ) |
708 | 705 | ); |
709 | | - |
| 706 | + |
710 | 707 | if ( $submitted_nonce && $nonce_key ) { |
711 | 708 | global $wgMemc; |
712 | 709 | $wgMemc->set( $nonce_key, 1, 3600 ); |
713 | 710 | } |
714 | 711 | } |
715 | | - |
| 712 | + |
716 | 713 | if ( $this->output->getRedirect() != '' ) { |
717 | | - $redirectTitle = clone $talkpage->getTitle(); |
718 | | - $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
719 | | - $this->output->redirect( $this->title->getFullURL() ); |
| 714 | + $redirectTitle = clone $talkpage->getTitle(); |
| 715 | + $redirectTitle->setFragment( '#' . $this->anchorName( $thread ) ); |
| 716 | + $this->output->redirect( $this->title->getFullURL() ); |
720 | 717 | } |
721 | | - |
| 718 | + |
722 | 719 | } |
723 | | - |
| 720 | + |
724 | 721 | public function handleNonce( $submitted_nonce, $nonce_key ) { |
725 | 722 | // Add a one-time random string to a hidden field. Store the random string |
726 | | - // in memcached on submit and don't allow the edit to go ahead if it's already |
727 | | - // been added. |
| 723 | + // in memcached on submit and don't allow the edit to go ahead if it's already |
| 724 | + // been added. |
728 | 725 | if ( $submitted_nonce ) { |
729 | 726 | global $wgMemc; |
730 | 727 | |
— | — | @@ -732,13 +729,13 @@ |
733 | 730 | return false; |
734 | 731 | } |
735 | 732 | } |
736 | | - |
| 733 | + |
737 | 734 | return true; |
738 | 735 | } |
739 | | - |
| 736 | + |
740 | 737 | public function getSubjectEditor( $db_subject, $subject ) { |
741 | 738 | if ( $subject === false ) $subject = $db_subject; |
742 | | - |
| 739 | + |
743 | 740 | $subject_label = wfMsg( 'lqt_subject' ); |
744 | 741 | |
745 | 742 | $attr = array( 'tabindex' => 1 ); |
— | — | @@ -747,7 +744,7 @@ |
748 | 745 | 'lqt_subject_field', 60, $subject, $attr ) . |
749 | 746 | Xml::element( 'br' ); |
750 | 747 | } |
751 | | - |
| 748 | + |
752 | 749 | public function getSignatureEditor( $from ) { |
753 | 750 | $signatureText = $this->request->getVal( 'wpLqtSignature', null ); |
754 | 751 | |
— | — | @@ -776,19 +773,19 @@ |
777 | 774 | ); |
778 | 775 | |
779 | 776 | $signatureEditor = $signaturePreview . $signatureEditBox; |
780 | | - |
| 777 | + |
781 | 778 | return array( $signatureEditor, $signatureHTML ); |
782 | 779 | } |
783 | | - |
| 780 | + |
784 | 781 | static function replyMetadataUpdates( $data = array() ) { |
785 | 782 | $requiredFields = array( 'replyTo', 'root', 'text' ); |
786 | | - |
| 783 | + |
787 | 784 | foreach ( $requiredFields as $f ) { |
788 | 785 | if ( !isset( $data[$f] ) ) { |
789 | 786 | throw new MWException( "Missing required field $f" ); |
790 | 787 | } |
791 | 788 | } |
792 | | - |
| 789 | + |
793 | 790 | $signature = null; |
794 | 791 | if ( isset( $data['signature'] ) ) { |
795 | 792 | $signature = $data['signature']; |
— | — | @@ -796,72 +793,72 @@ |
797 | 794 | global $wgUser; |
798 | 795 | $signature = LqtView::getUserSignature( $wgUser ); |
799 | 796 | } |
800 | | - |
| 797 | + |
801 | 798 | $summary = isset( $data['summary'] ) ? $data['summary'] : ''; |
802 | | - |
| 799 | + |
803 | 800 | $replyTo = $data['replyTo']; |
804 | 801 | $root = $data['root']; |
805 | 802 | $text = $data['text']; |
806 | 803 | $bump = !empty( $data['bump'] ); |
807 | | - |
| 804 | + |
808 | 805 | $subject = $replyTo->subject(); |
809 | 806 | $talkpage = $replyTo->article(); |
810 | | - |
| 807 | + |
811 | 808 | $thread = Thread::create( |
812 | 809 | $root, $talkpage, $replyTo, Threads::TYPE_NORMAL, $subject, |
813 | 810 | $summary, $bump, $signature |
814 | 811 | ); |
815 | | - |
| 812 | + |
816 | 813 | wfRunHooks( 'LiquidThreadsAfterReplyMetadataUpdates', array( &$thread ) ); |
817 | | - |
| 814 | + |
818 | 815 | return $thread; |
819 | 816 | } |
820 | | - |
| 817 | + |
821 | 818 | static function summarizeMetadataUpdates( $data = array() ) { |
822 | 819 | $requiredFields = array( 'thread', 'article', 'summary' ); |
823 | | - |
| 820 | + |
824 | 821 | foreach ( $requiredFields as $f ) { |
825 | 822 | if ( !isset( $data[$f] ) ) { |
826 | 823 | throw new MWException( "Missing required field $f" ); |
827 | 824 | } |
828 | 825 | } |
829 | | - |
| 826 | + |
830 | 827 | extract( $data ); |
831 | | - |
| 828 | + |
832 | 829 | $bump = isset( $bump ) ? $bump : null; |
833 | | - |
| 830 | + |
834 | 831 | $thread->setSummary( $article ); |
835 | 832 | $thread->commitRevision( |
836 | 833 | Threads::CHANGE_EDITED_SUMMARY, $thread, $summary, $bump ); |
837 | | - |
| 834 | + |
838 | 835 | return $thread; |
839 | 836 | } |
840 | | - |
| 837 | + |
841 | 838 | static function editMetadataUpdates( $data = array() ) { |
842 | 839 | $requiredFields = array( 'thread', 'text', 'summary' ); |
843 | | - |
| 840 | + |
844 | 841 | foreach ( $requiredFields as $f ) { |
845 | 842 | if ( !isset( $data[$f] ) ) { |
846 | 843 | throw new MWException( "Missing required field $f" ); |
847 | 844 | } |
848 | 845 | } |
849 | | - |
| 846 | + |
850 | 847 | $thread = $data['thread']; |
851 | | - |
| 848 | + |
852 | 849 | // Use a separate type if the content is blanked. |
853 | 850 | $type = strlen( trim( $data['text'] ) ) |
854 | 851 | ? Threads::CHANGE_EDITED_ROOT |
855 | 852 | : Threads::CHANGE_ROOT_BLANKED; |
856 | | - |
| 853 | + |
857 | 854 | if ( isset( $data['signature'] ) ) { |
858 | 855 | $thread->setSignature( $data['signature'] ); |
859 | 856 | } |
860 | | - |
| 857 | + |
861 | 858 | $bump = !empty( $data['bump'] ); |
862 | 859 | |
863 | 860 | // Add the history entry. |
864 | 861 | $thread->commitRevision( $type, $thread, $data['summary'], $bump ); |
865 | | - |
| 862 | + |
866 | 863 | // Update subject if applicable. |
867 | 864 | if ( $thread->isTopmostThread() && !empty( $data['subject'] ) && |
868 | 865 | $data['subject'] != $thread->subject() ) { |
— | — | @@ -872,20 +869,20 @@ |
873 | 870 | // Disabled page-moving for now. |
874 | 871 | // $this->renameThread( $thread, $subject, $e->summary ); |
875 | 872 | } |
876 | | - |
| 873 | + |
877 | 874 | return $thread; |
878 | 875 | } |
879 | 876 | |
880 | 877 | static function newPostMetadataUpdates( $data ) |
881 | 878 | { |
882 | 879 | $requiredFields = array( 'talkpage', 'root', 'text', 'subject' ); |
883 | | - |
| 880 | + |
884 | 881 | foreach ( $requiredFields as $f ) { |
885 | 882 | if ( !isset( $data[$f] ) ) { |
886 | 883 | throw new MWException( "Missing required field $f" ); |
887 | 884 | } |
888 | 885 | } |
889 | | - |
| 886 | + |
890 | 887 | $signature = null; |
891 | 888 | if ( isset( $data['signature'] ) ) { |
892 | 889 | $signature = $data['signature']; |
— | — | @@ -893,9 +890,9 @@ |
894 | 891 | global $wgUser; |
895 | 892 | $signature = LqtView::getUserSignature( $wgUser ); |
896 | 893 | } |
897 | | - |
| 894 | + |
898 | 895 | $summary = isset( $data['summary'] ) ? $data['summary'] : ''; |
899 | | - |
| 896 | + |
900 | 897 | $talkpage = $data['talkpage']; |
901 | 898 | $root = $data['root']; |
902 | 899 | $text = $data['text']; |
— | — | @@ -906,7 +903,7 @@ |
907 | 904 | Threads::TYPE_NORMAL, $subject, |
908 | 905 | $summary, null, $signature |
909 | 906 | ); |
910 | | - |
| 907 | + |
911 | 908 | wfRunHooks( 'LiquidThreadsAfterNewPostMetadataUpdates', array( &$thread ) ); |
912 | 909 | |
913 | 910 | return $thread; |
— | — | @@ -958,21 +955,21 @@ |
959 | 956 | |
960 | 957 | return true; |
961 | 958 | } |
962 | | - |
| 959 | + |
963 | 960 | function scratchTitle() { |
964 | 961 | return Title::makeTitle( NS_LQT_THREAD, wfGenerateToken() ); |
965 | 962 | } |
966 | 963 | |
967 | 964 | /** |
968 | 965 | * Example return value: |
969 | | - * array ( |
970 | | - * edit => array( 'label' => 'Edit', |
971 | | - * 'href' => 'http...', |
972 | | - * 'enabled' => false ), |
973 | | - * reply => array( 'label' => 'Reply', |
974 | | - * 'href' => 'http...', |
975 | | - * 'enabled' => true ) |
976 | | - * ) |
| 966 | + * array ( |
| 967 | + * edit => array( 'label' => 'Edit', |
| 968 | + * 'href' => 'http...', |
| 969 | + * 'enabled' => false ), |
| 970 | + * reply => array( 'label' => 'Reply', |
| 971 | + * 'href' => 'http...', |
| 972 | + * 'enabled' => true ) |
| 973 | + * ) |
977 | 974 | */ |
978 | 975 | function threadCommands( $thread ) { |
979 | 976 | wfLoadExtensionMessages( 'LiquidThreads' ); |
— | — | @@ -1038,7 +1035,7 @@ |
1039 | 1036 | 'enabled' => true |
1040 | 1037 | ); |
1041 | 1038 | } |
1042 | | - |
| 1039 | + |
1043 | 1040 | $commands['link'] = array( |
1044 | 1041 | 'label' => wfMsgExt( 'lqt_permalink', 'parseinline' ), |
1045 | 1042 | 'href' => $thread->title()->getFullURL(), |
— | — | @@ -1046,7 +1043,7 @@ |
1047 | 1044 | 'showlabel' => true, |
1048 | 1045 | 'tooltip' => wfMsgExt( 'lqt_permalink', 'parseinline' ) |
1049 | 1046 | ); |
1050 | | - |
| 1047 | + |
1051 | 1048 | wfRunHooks( 'LiquidThreadsThreadCommands', array( $thread, &$commands ) ); |
1052 | 1049 | |
1053 | 1050 | return $commands; |
— | — | @@ -1086,7 +1083,7 @@ |
1087 | 1084 | 'tooltip' => $label |
1088 | 1085 | ); |
1089 | 1086 | } |
1090 | | - |
| 1087 | + |
1091 | 1088 | if ( $thread->canUserReply( $this->user ) === true ) { |
1092 | 1089 | $commands['reply'] = array( |
1093 | 1090 | 'label' => wfMsgExt( 'lqt_reply', 'parseinline' ), |
— | — | @@ -1098,12 +1095,12 @@ |
1099 | 1096 | 'icon' => 'reply.png', |
1100 | 1097 | ); |
1101 | 1098 | } |
1102 | | - |
| 1099 | + |
1103 | 1100 | // Parent post link |
1104 | 1101 | if ( !$thread->isTopmostThread() ) { |
1105 | 1102 | $parent = $thread->superthread(); |
1106 | 1103 | $anchor = $parent->getAnchorName(); |
1107 | | - |
| 1104 | + |
1108 | 1105 | $commands['parent'] = array( |
1109 | 1106 | 'label' => wfMsgExt( 'lqt-parent', 'parseinline' ), |
1110 | 1107 | 'href' => '#' . $anchor, |
— | — | @@ -1111,7 +1108,7 @@ |
1112 | 1109 | 'showlabel' => 1, |
1113 | 1110 | ); |
1114 | 1111 | } |
1115 | | - |
| 1112 | + |
1116 | 1113 | wfRunHooks( 'LiquidThreadsThreadMajorCommands', |
1117 | 1114 | array( $thread, &$commands ) ); |
1118 | 1115 | |
— | — | @@ -1175,14 +1172,14 @@ |
1176 | 1173 | 'href' => $summarizeUrl, |
1177 | 1174 | 'enabled' => true, |
1178 | 1175 | ); |
1179 | | - |
| 1176 | + |
1180 | 1177 | wfRunHooks( 'LiquidThreadsTopLevelCommands', array( $thread, &$commands ) ); |
1181 | 1178 | |
1182 | 1179 | return $commands; |
1183 | 1180 | } |
1184 | 1181 | |
1185 | 1182 | /************************* |
1186 | | - * Output methods * |
| 1183 | + * Output methods * |
1187 | 1184 | *************************/ |
1188 | 1185 | |
1189 | 1186 | static function addJSandCSS() { |
— | — | @@ -1190,30 +1187,27 @@ |
1191 | 1188 | return; |
1192 | 1189 | } |
1193 | 1190 | |
1194 | | - global $wgOut, $wgStylePath; |
1195 | | - global $wgScriptPath, $wgStyleVersion; |
1196 | | - global $wgEnableJS2system; |
1197 | | - global $wgLiquidThreadsExtensionName; |
| 1191 | + global $wgOut; |
| 1192 | + global $wgStyleVersion; |
| 1193 | + global $wgLiquidThreadsExtensionPath; |
1198 | 1194 | |
1199 | 1195 | LqtHooks::$scriptVariables['wgLqtMessages'] = self::exportJSLocalisation(); |
1200 | 1196 | |
1201 | | - $basePath = "$wgScriptPath/extensions/$wgLiquidThreadsExtensionName"; |
1202 | | - |
1203 | 1197 | if ( method_exists( $wgOut, 'includeJQuery' ) ) { |
1204 | 1198 | $wgOut->includeJQuery(); |
1205 | | - $wgOut->addScriptFile( "$basePath/jquery/plugins.js" ); |
| 1199 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/jquery/plugins.js" ); |
1206 | 1200 | } else { |
1207 | | - $wgOut->addScriptFile( "$basePath/jquery/js2.combined.js" ); |
| 1201 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/jquery/js2.combined.js" ); |
1208 | 1202 | } |
1209 | | - |
1210 | | - $wgOut->addExtensionStyle( "$basePath/jquery/jquery-ui-1.7.2.css" ); |
1211 | 1203 | |
1212 | | - $wgOut->addScriptFile( "$basePath/jquery/jquery.autogrow.js" ); |
| 1204 | + $wgOut->addExtensionStyle( "$wgLiquidThreadsExtensionPath/jquery/jquery-ui-1.7.2.css" ); |
1213 | 1205 | |
1214 | | - $wgOut->addScriptFile( "$basePath/lqt.js" ); |
1215 | | - $wgOut->addScriptFile( "$basePath/js/lqt.toolbar.js" ); |
1216 | | - $wgOut->addExtensionStyle( "$basePath/lqt.css?{$wgStyleVersion}" ); |
1217 | | - |
| 1206 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/jquery/jquery.autogrow.js" ); |
| 1207 | + |
| 1208 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/lqt.js" ); |
| 1209 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/js/lqt.toolbar.js" ); |
| 1210 | + $wgOut->addExtensionStyle( "$wgLiquidThreadsExtensionPath/lqt.css?{$wgStyleVersion}" ); |
| 1211 | + |
1218 | 1212 | if ( class_exists( 'WikiEditorHooks' ) ) { |
1219 | 1213 | $temp = null; |
1220 | 1214 | WikiEditorHooks::addModules( $temp ); |
— | — | @@ -1294,9 +1288,6 @@ |
1295 | 1289 | } |
1296 | 1290 | |
1297 | 1291 | function showThreadToolbar( $thread ) { |
1298 | | - global $wgLang; |
1299 | | - |
1300 | | - $sk = $this->user->getSkin(); |
1301 | 1292 | $html = ''; |
1302 | 1293 | |
1303 | 1294 | $headerParts = array(); |
— | — | @@ -1361,7 +1352,6 @@ |
1362 | 1353 | $tooltip = isset( $command['tooltip'] ) ? $command['tooltip'] : ''; |
1363 | 1354 | |
1364 | 1355 | if ( isset( $command['icon'] ) ) { |
1365 | | - global $wgScriptPath; |
1366 | 1356 | $icon = Xml::tags( 'div', array( 'title' => $label, |
1367 | 1357 | 'class' => 'lqt-command-icon' ), ' ' ); |
1368 | 1358 | if ( $icon_divs ) { |
— | — | @@ -1424,12 +1414,12 @@ |
1425 | 1415 | $html = ''; |
1426 | 1416 | |
1427 | 1417 | // No way am I refactoring EditForm to return its output as HTML. |
1428 | | - // so I'm just flushing the HTML and displaying it as-is. |
| 1418 | + // so I'm just flushing the HTML and displaying it as-is. |
1429 | 1419 | $this->showPostEditingForm( $thread ); |
1430 | 1420 | $html .= Xml::closeElement( 'div' ); |
1431 | 1421 | } elseif ( $showAnything ) { |
1432 | 1422 | $html .= Xml::openElement( 'div', array( 'class' => $divClass ) ); |
1433 | | - |
| 1423 | + |
1434 | 1424 | $show = wfRunHooks( 'LiquidThreadsShowPostContent', |
1435 | 1425 | array( $thread, &$post ) ); |
1436 | 1426 | if ( $show ) { |
— | — | @@ -1438,7 +1428,7 @@ |
1439 | 1429 | $html .= Xml::closeElement( 'div' ); |
1440 | 1430 | $html .= Xml::tags( 'div', array( 'style' => 'clear: both; height: 0' ), |
1441 | 1431 | ' ' ); |
1442 | | - |
| 1432 | + |
1443 | 1433 | wfRunHooks( 'LiquidThreadsShowPostThreadBody', |
1444 | 1434 | array( $thread, $this->request, &$html ) ); |
1445 | 1435 | |
— | — | @@ -1454,8 +1444,7 @@ |
1455 | 1445 | } |
1456 | 1446 | |
1457 | 1447 | function threadSignature( $thread ) { |
1458 | | - global $wgUser, $wgLang; |
1459 | | - $sk = $wgUser->getSkin(); |
| 1448 | + global $wgLang; |
1460 | 1449 | |
1461 | 1450 | $signature = $thread->signature(); |
1462 | 1451 | $signature = LqtView::parseSignature( $signature ); |
— | — | @@ -1463,11 +1452,11 @@ |
1464 | 1453 | $signature = Xml::tags( 'span', array( 'class' => 'lqt-thread-user-signature' ), |
1465 | 1454 | $signature ); |
1466 | 1455 | |
1467 | | - $timestamp = $wgLang->timeanddate( $thread->created(), true ); |
| 1456 | + $timestamp = $wgLang->timeanddate( $thread->created(), true ); |
1468 | 1457 | $signature .= Xml::element( 'span', |
1469 | 1458 | array( 'class' => 'lqt-thread-toolbar-timestamp' ), |
1470 | 1459 | $timestamp ); |
1471 | | - |
| 1460 | + |
1472 | 1461 | wfRunHooks( 'LiquidThreadsThreadSignature', array( $thread, &$signature ) ); |
1473 | 1462 | |
1474 | 1463 | $signature = Xml::tags( 'div', array( 'class' => 'lqt-thread-signature' ), |
— | — | @@ -1493,22 +1482,22 @@ |
1494 | 1483 | $lastEdit = $wgLang->timeanddate( $lastEdit, true ); |
1495 | 1484 | $editors = ''; |
1496 | 1485 | $editorCount = 0; |
1497 | | - |
| 1486 | + |
1498 | 1487 | if ( $editedFlag > Threads::EDITED_BY_AUTHOR ) { |
1499 | 1488 | $editors = $thread->editors(); |
1500 | 1489 | $editorCount = count( $editors ); |
1501 | 1490 | $formattedEditors = array(); |
1502 | | - |
| 1491 | + |
1503 | 1492 | foreach ( $editors as $ed ) { |
1504 | 1493 | $id = IP::isIPAddress( $ed ) ? 0 : 1; |
1505 | 1494 | $fEditor = $sk->userLink( $id, $ed ) . |
1506 | 1495 | $sk->userToolLinks( $id, $ed ); |
1507 | 1496 | $formattedEditors[] = $fEditor; |
1508 | 1497 | } |
1509 | | - |
| 1498 | + |
1510 | 1499 | $editors = $wgLang->commaList( $formattedEditors ); |
1511 | 1500 | } |
1512 | | - |
| 1501 | + |
1513 | 1502 | if ( isset( $ebLookup[$editedFlag] ) ) { |
1514 | 1503 | $editedBy = $ebLookup[$editedFlag]; |
1515 | 1504 | // Used messages: lqt-thread-edited-author, lqt-thread-edited-others |
— | — | @@ -1521,7 +1510,7 @@ |
1522 | 1511 | 'lqt-thread-toolbar-edited-' . $editedBy ), |
1523 | 1512 | $editedNotice ); |
1524 | 1513 | } |
1525 | | - |
| 1514 | + |
1526 | 1515 | wfRunHooks( 'LiquidThreadsThreadInfoPanel', array( $thread, &$infoElements ) ); |
1527 | 1516 | |
1528 | 1517 | if ( ! count( $infoElements ) ) { |
— | — | @@ -1551,10 +1540,10 @@ |
1552 | 1541 | $id = 'lqt-header-' . $thread->id(); |
1553 | 1542 | |
1554 | 1543 | $html = $thread->formattedSubject(); |
1555 | | - |
| 1544 | + |
1556 | 1545 | $show = wfRunHooks( 'LiquidThreadsShowThreadHeading', |
1557 | 1546 | array( $thread, &$html ) ); |
1558 | | - |
| 1547 | + |
1559 | 1548 | if ( $show ) { |
1560 | 1549 | $html = Xml::tags( 'span', array( 'class' => 'mw-headline' ), $html ); |
1561 | 1550 | $html .= Xml::hidden( 'raw-header', $thread->subject() ); |
— | — | @@ -1562,7 +1551,7 @@ |
1563 | 1552 | array( 'class' => 'lqt_header', 'id' => $id ), |
1564 | 1553 | $html ) . $commands_html; |
1565 | 1554 | } |
1566 | | - |
| 1555 | + |
1567 | 1556 | // wrap it all in a container |
1568 | 1557 | $html = Xml::tags( 'div', |
1569 | 1558 | array( 'class' => 'lqt_thread_heading' ), |
— | — | @@ -1627,8 +1616,6 @@ |
1628 | 1617 | |
1629 | 1618 | /** Shows a deleted thread. Returns true to show the thread body */ |
1630 | 1619 | function showDeletedThread( $thread ) { |
1631 | | - $sk = $this->user->getSkin(); |
1632 | | - |
1633 | 1620 | if ( $this->user->isAllowed( 'deletedhistory' ) ) { |
1634 | 1621 | $this->output->addWikiMsg( 'lqt_thread_deleted_for_sysops' ); |
1635 | 1622 | return true; |
— | — | @@ -1764,11 +1751,11 @@ |
1765 | 1752 | $cascadeOptions, $interruption = false ) { |
1766 | 1753 | $repliesClass = 'lqt-thread-replies lqt-thread-replies-' . |
1767 | 1754 | $this->threadNestingLevel; |
1768 | | - |
| 1755 | + |
1769 | 1756 | if ( $interruption ) { |
1770 | 1757 | $repliesClass .= ' lqt-thread-replies-interruption'; |
1771 | 1758 | } |
1772 | | - |
| 1759 | + |
1773 | 1760 | $div = Xml::openElement( 'div', array( 'class' => $repliesClass ) ); |
1774 | 1761 | $sep = Xml::tags( 'div', array( 'class' => 'lqt-post-sep' ), ' ' ); |
1775 | 1762 | |
— | — | @@ -1802,7 +1789,7 @@ |
1803 | 1790 | ++$showCount; |
1804 | 1791 | if ( $showCount == 1 ) { |
1805 | 1792 | // There's a post sep before each reply group to |
1806 | | - // separate from the parent thread. |
| 1793 | + // separate from the parent thread. |
1807 | 1794 | $this->output->addHTML( $sep . $div ); |
1808 | 1795 | } |
1809 | 1796 | |
— | — | @@ -1812,7 +1799,7 @@ |
1813 | 1800 | |
1814 | 1801 | // Handle must-show threads. |
1815 | 1802 | // FIXME this thread will be duplicated if somebody clicks the |
1816 | | - // "show more" link (probably needs fixing in the JS) |
| 1803 | + // "show more" link (probably needs fixing in the JS) |
1817 | 1804 | if ( $st->type() != Threads::TYPE_DELETED && !$shown && |
1818 | 1805 | array_key_exists( $st->id(), $mustShowThreads ) ) { |
1819 | 1806 | |
— | — | @@ -1835,7 +1822,6 @@ |
1836 | 1823 | |
1837 | 1824 | function showThread( $thread, $levelNum = 1, $totalInLevel = 1, |
1838 | 1825 | $options = array() ) { |
1839 | | - global $wgLang; |
1840 | 1826 | |
1841 | 1827 | // Safeguard |
1842 | 1828 | if ( $thread->type() & Threads::TYPE_DELETED || |
— | — | @@ -1846,7 +1832,7 @@ |
1847 | 1833 | $this->threadNestingLevel++; |
1848 | 1834 | |
1849 | 1835 | // Figure out which threads *need* to be shown because they're involved in an |
1850 | | - // operation |
| 1836 | + // operation |
1851 | 1837 | $mustShowOption = array(); |
1852 | 1838 | if ( isset( $options['mustShowThreads'] ) ) { |
1853 | 1839 | $mustShowOption = $options['mustShowThreads' ]; |
— | — | @@ -1905,12 +1891,8 @@ |
1906 | 1892 | ) ); |
1907 | 1893 | $replyTo = $this->methodAppliesToThread( 'reply', $thread ); |
1908 | 1894 | |
1909 | | - $sk = $this->user->getSkin(); |
1910 | 1895 | $html = ''; |
1911 | 1896 | |
1912 | | - $html .= Xml::element( 'a', array( 'name' => $this->anchorName( $thread ) ), ' ' ); |
1913 | | - $html .= $this->showThreadHeading( $thread ); |
1914 | | - |
1915 | 1897 | $class = $this->threadDivClass( $thread ); |
1916 | 1898 | if ( $levelNum == 1 ) { |
1917 | 1899 | $class .= ' lqt-thread-first'; |
— | — | @@ -1923,6 +1905,8 @@ |
1924 | 1906 | } else { |
1925 | 1907 | $class .= ' lqt-thread-no-subthreads'; |
1926 | 1908 | } |
| 1909 | + |
| 1910 | + $class .= ' lqt-thread-wrapper'; |
1927 | 1911 | |
1928 | 1912 | $html .= Xml::openElement( |
1929 | 1913 | 'div', |
— | — | @@ -1931,6 +1915,9 @@ |
1932 | 1916 | 'id' => 'lqt_thread_id_' . $thread->id() |
1933 | 1917 | ) |
1934 | 1918 | ); |
| 1919 | + |
| 1920 | + $html .= Xml::element( 'a', array( 'name' => $this->anchorName( $thread ) ), ' ' ); |
| 1921 | + $html .= $this->showThreadHeading( $thread ); |
1935 | 1922 | |
1936 | 1923 | // Metadata stuck in the top of the lqt_thread div. |
1937 | 1924 | // Modified time for topmost threads... |
— | — | @@ -1949,7 +1936,7 @@ |
1950 | 1937 | array( 'id' => 'lqt-thread-sortkey-' . $thread->id() ) |
1951 | 1938 | ); |
1952 | 1939 | } |
1953 | | - |
| 1940 | + |
1954 | 1941 | if ( ! $thread->title() ) { |
1955 | 1942 | throw new MWException( "Thread " . $thread->id() . " has null title" ); |
1956 | 1943 | } |
— | — | @@ -1973,17 +1960,20 @@ |
1974 | 1961 | |
1975 | 1962 | $cascadeOptions = $options; |
1976 | 1963 | unset( $cascadeOptions['startAt'] ); |
1977 | | - |
| 1964 | + |
1978 | 1965 | $replyInterruption = $levelNum < $totalInLevel; |
1979 | 1966 | |
1980 | 1967 | if ( ( $hasSubthreads && $showThreads ) ) { |
| 1968 | + // If the thread has subthreads, and we want to show them, we should do so. |
1981 | 1969 | $this->showThreadReplies( $thread, $startAt, $maxCount, $showThreads, |
1982 | 1970 | $cascadeOptions, $replyInterruption ); |
1983 | 1971 | } elseif ( $hasSubthreads && !$showThreads ) { |
| 1972 | + // If the thread has subthreads, but we don't want to show them, then |
| 1973 | + // show the reply form if necessary, and add the "Show X replies" link. |
1984 | 1974 | if ( $replyTo ) { |
1985 | 1975 | $this->showReplyForm( $thread ); |
1986 | 1976 | } |
1987 | | - |
| 1977 | + |
1988 | 1978 | // Add a "show subthreads" link. |
1989 | 1979 | $link = $this->getShowReplies( $thread ); |
1990 | 1980 | |
— | — | @@ -1994,6 +1984,8 @@ |
1995 | 1985 | Xml::tags( 'div', array( 'class' => 'lqt-post-sep' ), ' ' ) ); |
1996 | 1986 | } |
1997 | 1987 | } elseif ( $levelNum < $totalInLevel ) { |
| 1988 | + // If we have no replies, and we're not at the end of this level, add the post separator |
| 1989 | + // and a reply box if necessary. |
1998 | 1990 | $this->output->addHTML( |
1999 | 1991 | Xml::tags( 'div', array( 'class' => 'lqt-post-sep' ), ' ' ) ); |
2000 | 1992 | |
— | — | @@ -2002,7 +1994,7 @@ |
2003 | 1995 | $this->threadNestingLevel; |
2004 | 1996 | $html = Xml::openElement( 'div', array( 'class' => $class ) ); |
2005 | 1997 | $this->output->addHTML( $html ); |
2006 | | - |
| 1998 | + |
2007 | 1999 | $this->showReplyForm( $thread ); |
2008 | 2000 | |
2009 | 2001 | $finishDiv = Xml::tags( 'div', |
— | — | @@ -2016,13 +2008,15 @@ |
2017 | 2009 | $this->output->addHTML( $finishHTML ); |
2018 | 2010 | } |
2019 | 2011 | } elseif ( !$hasSubthreads && $replyTo ) { |
| 2012 | + // If we have no replies, we're at the end of this level, and we want to reply, |
| 2013 | + // show the reply box. |
2020 | 2014 | $class = 'lqt-thread-replies lqt-thread-replies-' . |
2021 | 2015 | $this->threadNestingLevel; |
2022 | 2016 | $html = Xml::openElement( 'div', array( 'class' => $class ) ); |
2023 | 2017 | $this->output->addHTML( $html ); |
2024 | | - |
| 2018 | + |
2025 | 2019 | $this->showReplyForm( $thread ); |
2026 | | - |
| 2020 | + |
2027 | 2021 | $html = Xml::tags( 'div', |
2028 | 2022 | array( 'class' => 'lqt-replies-finish' ), |
2029 | 2023 | Xml::tags( 'div', |
— | — | @@ -2033,17 +2027,18 @@ |
2034 | 2028 | $this->output->addHTML( $html ); |
2035 | 2029 | } |
2036 | 2030 | |
2037 | | - if ( $this->threadNestingLevel == 1 ) { |
2038 | | - if ( !( $hasSubthreads && $showThreads ) ) { |
2039 | | - $this->showReplyBox( $thread ); |
2040 | | - $finishDiv = ''; |
2041 | | - $finishDiv .= Xml::tags( 'div', array( 'class' => 'lqt-replies-finish' ), |
2042 | | - Xml::tags( 'div', array( 'class' => 'lqt-replies-finish-corner' ), ' ' ) ); |
| 2031 | + // I don't remember why this is here, commenting out. |
| 2032 | +// if ( $this->threadNestingLevel == 1 ) { |
| 2033 | +// if ( !( $hasSubthreads && $showThreads && !$replyTo ) ) { |
| 2034 | +// $this->showReplyBox( $thread ); |
| 2035 | +// $finishDiv = ''; |
| 2036 | +// $finishDiv .= Xml::tags( 'div', array( 'class' => 'lqt-replies-finish' ), |
| 2037 | +// Xml::tags( 'div', array( 'class' => 'lqt-replies-finish-corner' ), ' ' ) ); |
| 2038 | +// |
| 2039 | +// $this->output->addHTML( $finishDiv ); |
| 2040 | +// } |
| 2041 | +// } |
2043 | 2042 | |
2044 | | - $this->output->addHTML( $finishDiv ); |
2045 | | - } |
2046 | | - } |
2047 | | - |
2048 | 2043 | $this->output->addHTML( Xml::closeElement( 'div' ) ); |
2049 | 2044 | |
2050 | 2045 | $this->threadNestingLevel--; |
— | — | @@ -2052,7 +2047,6 @@ |
2053 | 2048 | function showReplyBox( $thread ) { |
2054 | 2049 | // Check if we're actually replying to this thread. |
2055 | 2050 | if ( $this->methodAppliesToThread( 'reply', $thread ) ) { |
2056 | | - // As with above, flush HTML to avoid refactoring EditPage. |
2057 | 2051 | $this->showReplyForm( $thread ); |
2058 | 2052 | return; |
2059 | 2053 | } elseif ( !$thread->canUserReply( $this->user ) ) { |
— | — | @@ -2062,7 +2056,7 @@ |
2063 | 2057 | $html = ''; |
2064 | 2058 | $html .= Xml::tags( 'div', |
2065 | 2059 | array( 'class' => 'lqt-reply-form lqt-edit-form', |
2066 | | - 'style' => 'display: none;' ), |
| 2060 | + 'style' => 'display: none;' ), |
2067 | 2061 | '' ); |
2068 | 2062 | |
2069 | 2063 | $this->output->addHTML( $html ); |
— | — | @@ -2149,7 +2143,7 @@ |
2150 | 2144 | } |
2151 | 2145 | |
2152 | 2146 | static function getUserSignature( $user, $uid = null ) { |
2153 | | - global $wgParser, $wgOut, $wgTitle; |
| 2147 | + global $wgParser; |
2154 | 2148 | if ( !$user ) { |
2155 | 2149 | $user = User::newFromId( $uid ); |
2156 | 2150 | } |
— | — | @@ -2184,8 +2178,8 @@ |
2185 | 2179 | } |
2186 | 2180 | |
2187 | 2181 | static function signaturePST( $sig, $user ) { |
2188 | | - global $wgParser, $wgOut, $wgTitle; |
2189 | | - |
| 2182 | + global $wgParser, $wgTitle; |
| 2183 | + |
2190 | 2184 | $title = $wgTitle ? $wgTitle : $user->getUserPage(); |
2191 | 2185 | |
2192 | 2186 | // Parser gets antsy about parser options here if it hasn't parsed anything before. |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/Dispatch.php |
— | — | @@ -28,7 +28,6 @@ |
29 | 29 | */ |
30 | 30 | $action = $request->getVal( 'action' ); |
31 | 31 | $header_actions = array( 'history', 'edit', 'submit', 'delete' ); |
32 | | - global $wgRequest; |
33 | 32 | |
34 | 33 | $lqt_action = $request->getVal( 'lqt_method' ); |
35 | 34 | if ( $action == 'edit' && $request->getVal( 'section' ) == 'new' ) { |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/Hooks.php |
— | — | @@ -35,8 +35,6 @@ |
36 | 36 | |
37 | 37 | // Custom display for new posts. |
38 | 38 | if ( $rc->mAttribs['rc_new'] ) { |
39 | | - global $wgOut; |
40 | | - |
41 | 39 | // Article link, timestamp, user |
42 | 40 | $s = ''; |
43 | 41 | $s .= $sk->link( $thread->getTitle() ); |
— | — | @@ -304,8 +302,7 @@ |
305 | 303 | } |
306 | 304 | |
307 | 305 | public static function onLoadExtensionSchemaUpdates() { |
308 | | - global $wgExtNewTables, $wgExtNewFields, $wgExtPGNewFields, |
309 | | - $wgExtPGAlteredFields, $wgExtNewIndexes, $wgDBtype; |
| 306 | + global $wgExtNewTables, $wgExtNewFields, $wgExtNewIndexes; |
310 | 307 | |
311 | 308 | $dir = realpath( dirname( __FILE__ ) . '/..' ); |
312 | 309 | |
— | — | @@ -405,12 +402,12 @@ |
406 | 403 | static function onPersonalUrls( &$personal_urls, &$title ) { |
407 | 404 | global $wgUser, $wgLang; |
408 | 405 | |
409 | | - if ( $wgUser->isAnon() ) return true; |
| 406 | + if ( $wgUser->isAnon() ) { |
| 407 | + return true; |
| 408 | + } |
410 | 409 | |
411 | 410 | wfLoadExtensionMessages( 'LiquidThreads' ); |
412 | 411 | |
413 | | - $dbr = wfGetDB( DB_SLAVE ); |
414 | | - |
415 | 412 | $newMessagesCount = NewMessages::newMessageCount( $wgUser ); |
416 | 413 | |
417 | 414 | // Add new messages link. |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/Thread.php |
— | — | @@ -64,8 +64,6 @@ |
65 | 65 | $type = Threads::TYPE_NORMAL, $subject = '', |
66 | 66 | $summary = '', $bump = null, $signature = null ) { |
67 | 67 | |
68 | | - $dbw = wfGetDB( DB_MASTER ); |
69 | | - |
70 | 68 | $thread = new Thread( null ); |
71 | 69 | |
72 | 70 | if ( !in_array( $type, self::$VALID_TYPES ) ) { |
— | — | @@ -80,8 +78,6 @@ |
81 | 79 | |
82 | 80 | global $wgUser; |
83 | 81 | |
84 | | - $timestamp = wfTimestampNow(); |
85 | | - |
86 | 82 | $thread->setAuthor( $wgUser ); |
87 | 83 | |
88 | 84 | if ( is_object( $root ) ) { |
— | — | @@ -259,7 +255,7 @@ |
260 | 256 | $fname = __METHOD__ . "/" . $fname; |
261 | 257 | } |
262 | 258 | |
263 | | - $res = $dbr->update( 'thread', |
| 259 | + $dbr->update( 'thread', |
264 | 260 | /* SET */ $this->getRow(), |
265 | 261 | /* WHERE */ array( 'thread_id' => $this->id, ), |
266 | 262 | $fname ); |
— | — | @@ -406,8 +402,6 @@ |
407 | 403 | function leaveTrace( $reason, $oldTitle, $newTitle ) { |
408 | 404 | $this->dieIfHistorical(); |
409 | 405 | |
410 | | - $dbw = wfGetDB( DB_MASTER ); |
411 | | - |
412 | 406 | // Create redirect text |
413 | 407 | $mwRedir = MagicWord::get( 'redirect' ); |
414 | 408 | $redirectText = $mwRedir->getSynonym( 0 ) . |
— | — | @@ -1379,7 +1373,6 @@ |
1380 | 1374 | |
1381 | 1375 | function setSortKey( $k = null ) { |
1382 | 1376 | if ( is_null( $k ) ) { |
1383 | | - $dbr = wfGetDB( DB_SLAVE ); |
1384 | 1377 | $k = wfTimestamp( TS_MW ); |
1385 | 1378 | } |
1386 | 1379 | |
— | — | @@ -1591,7 +1584,9 @@ |
1592 | 1585 | $this->reactions = self::$reactionCacheById[$this->id()]; |
1593 | 1586 | } else { |
1594 | 1587 | $reactions = array(); |
1595 | | - |
| 1588 | + |
| 1589 | + $dbr = wfGetDB( DB_SLAVE ); |
| 1590 | + |
1596 | 1591 | $res = $dbr->select( 'thread_reaction', |
1597 | 1592 | array( 'tr_thread' => $this->id() ), |
1598 | 1593 | __METHOD__ ); |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/classes/ThreadHistoryPager.php |
— | — | @@ -65,7 +65,7 @@ |
66 | 66 | } |
67 | 67 | |
68 | 68 | function formatValue( $name, $value ) { |
69 | | - global $wgOut, $wgLang, $wgTitle; |
| 69 | + global $wgLang, $wgTitle; |
70 | 70 | |
71 | 71 | static $sk = null; |
72 | 72 | |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/lqt.sql |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | CREATE TABLE /*$wgDBprefix*/thread ( |
3 | | - thread_id int(8) unsigned NOT NULL auto_increment, |
| 3 | + thread_id int(8) unsigned NOT NULL PRIMARY KEY auto_increment, |
4 | 4 | thread_root int(8) unsigned UNIQUE NOT NULL, |
5 | 5 | thread_ancestor int(8) unsigned NOT NULL, |
6 | 6 | thread_parent int(8) unsigned NULL, |
— | — | @@ -19,29 +19,27 @@ |
20 | 20 | |
21 | 21 | -- Special thread types (deleted/move trace/normal) |
22 | 22 | thread_type int(4) unsigned NOT NULL default 0, |
23 | | - |
| 23 | + |
24 | 24 | -- Sort key |
25 | 25 | thread_sortkey varchar(255) NOT NULL default '', |
26 | | - |
| 26 | + |
27 | 27 | -- Reply count, -1 means uninitialised. |
28 | 28 | thread_replies int(8) DEFAULT -1, |
29 | | - |
| 29 | + |
30 | 30 | -- Signature |
31 | 31 | thread_signature TINYBLOB NULL, |
32 | 32 | |
33 | | - PRIMARY KEY thread_id (thread_id), |
34 | | - UNIQUE INDEX thread_root_page (thread_root), |
35 | | - INDEX thread_ancestor (thread_ancestor, thread_parent), |
36 | | - INDEX thread_article_title (thread_article_namespace, thread_article_title, thread_sortkey), |
37 | | - INDEX thread_article (thread_article_id, thread_sortkey), |
38 | | - INDEX thread_modified (thread_modified), |
39 | | - INDEX thread_created (thread_created), |
40 | | - INDEX thread_summary_page (thread_summary_page), |
41 | | - INDEX (thread_author_id,thread_author_name), |
42 | | - INDEX (thread_sortkey) |
| 33 | + UNIQUE (thread_root) |
43 | 34 | ) /*$wgDBTableOptions*/; |
| 35 | +CREATE INDEX thread_ancestor ON /*$wgDBprefix*/thread (thread_ancestor, thread_parent); |
| 36 | +CREATE INDEX thread_article_title ON /*$wgDBprefix*/thread (thread_article_namespace, thread_article_title, thread_sortkey); |
| 37 | +CREATE INDEX thread_article ON /*$wgDBprefix*/thread (thread_article_id, thread_sortkey); |
| 38 | +CREATE INDEX thread_modified ON /*$wgDBprefix*/thread (thread_modified); |
| 39 | +CREATE INDEX thread_created ON /*$wgDBprefix*/thread (thread_created); |
| 40 | +CREATE INDEX thread_summary_page ON /*$wgDBprefix*/thread (thread_summary_page); |
| 41 | +CREATE INDEX thread_author_name ON /*$wgDBprefix*/thread (thread_author_id,thread_author_name); |
| 42 | +CREATE INDEX thread_sortkey ON /*$wgDBprefix*/thread (thread_sortkey); |
44 | 43 | |
45 | | - |
46 | 44 | -- Old storage table for "historical" (i.e. non-current) threads |
47 | 45 | -- Now superseded by thread_history. |
48 | 46 | CREATE TABLE /*$wgDBprefix*/historical_thread ( |
— | — | @@ -52,7 +50,8 @@ |
53 | 51 | hthread_contents BLOB NOT NULL, |
54 | 52 | hthread_change_type int(4) unsigned NOT NULL, |
55 | 53 | hthread_change_object int(8) unsigned NULL, |
56 | | - PRIMARY KEY hthread_id_revision (hthread_id, hthread_revision) |
| 54 | + |
| 55 | + PRIMARY KEY (hthread_id, hthread_revision) |
57 | 56 | ) /*$wgDBTableOptions*/; |
58 | 57 | |
59 | 58 | CREATE TABLE /*$wgDBprefix*/user_message_state ( |
— | — | @@ -60,32 +59,30 @@ |
61 | 60 | ums_thread int(8) unsigned NOT NULL, |
62 | 61 | ums_read_timestamp varbinary(14), |
63 | 62 | |
64 | | - PRIMARY KEY (ums_user, ums_thread), |
65 | | - KEY (ums_user,ums_read_timestamp) |
| 63 | + PRIMARY KEY (ums_user, ums_thread) |
66 | 64 | ) /*$wgDBTableOptions*/; |
| 65 | +CREATE INDEX ums_user_read ON /*$wgDBprefix*/user_message_state (ums_user,ums_read_timestamp); |
67 | 66 | |
68 | 67 | -- "New" storage location for history data. |
69 | 68 | CREATE TABLE /*_*/thread_history ( |
70 | | - th_id int unsigned NOT NULL auto_increment, |
| 69 | + th_id int unsigned NOT NULL PRIMARY KEY auto_increment, |
71 | 70 | th_thread int unsigned NOT NULL, |
72 | | - |
| 71 | + |
73 | 72 | th_timestamp varbinary(14) NOT NULL, |
74 | | - |
| 73 | + |
75 | 74 | th_user int unsigned NOT NULL, |
76 | 75 | th_user_text varchar(255) NOT NULL, |
77 | | - |
| 76 | + |
78 | 77 | th_change_type int unsigned NOT NULL, |
79 | 78 | th_change_object int unsigned NOT NULL, |
80 | 79 | th_change_comment TINYTEXT NOT NULL, |
81 | | - |
| 80 | + |
82 | 81 | -- Actual content, stored as a serialised thread row. |
83 | | - th_content LONGBLOB NOT NULL, |
84 | | - |
85 | | - PRIMARY KEY (th_id), |
86 | | - KEY (th_thread,th_timestamp), |
87 | | - KEY (th_timestamp,th_thread), |
88 | | - KEY (th_user,th_user_text) |
| 82 | + th_content LONGBLOB NOT NULL |
89 | 83 | ) /*$wgDBTableOptions*/; |
| 84 | +CREATE INDEX th_thread_timestamp ON /*$wgDBprefix*/thread_history (th_thread,th_timestamp); |
| 85 | +CREATE INDEX th_timestamp_thread ON /*$wgDBprefix*/thread_history (th_timestamp,th_thread); |
| 86 | +CREATE INDEX th_user_text ON /*$wgDBprefix*/thread_history (th_user,th_user_text); |
90 | 87 | |
91 | 88 | -- Storage for "pending" relationships from import |
92 | 89 | CREATE TABLE /*_*/thread_pending_relationship ( |
— | — | @@ -103,7 +100,7 @@ |
104 | 101 | tr_user_text varbinary(255) NOT NULL, |
105 | 102 | tr_type varbinary(64) NOT NULL, |
106 | 103 | tr_value int NOT NULL, |
107 | | - |
108 | | - PRIMARY KEY (tr_thread,tr_user,tr_user_text,tr_type,tr_value), |
109 | | - KEY (tr_user,tr_user_text,tr_type,tr_value) |
| 104 | + |
| 105 | + PRIMARY KEY (tr_thread,tr_user,tr_user_text,tr_type,tr_value) |
110 | 106 | ) /*$wgDBTableOptions*/; |
| 107 | +CREATE INDEX tr_user_text_value ON /*$wgDBprefix*/thread_reaction (tr_user,tr_user_text,tr_type,tr_value); |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/SpecialMoveThread.php |
— | — | @@ -39,7 +39,7 @@ |
40 | 40 | |
41 | 41 | global $wgUser; |
42 | 42 | $sk = $wgUser->getSkin(); |
43 | | - $page = $article_name = $this->mThread->getTitle()->getPrefixedText(); |
| 43 | + $page = $this->mThread->getTitle()->getPrefixedText(); |
44 | 44 | |
45 | 45 | $edit_text = wfMsgExt( 'lqt_move_torename_edit', 'parseinline' ); |
46 | 46 | $edit_link = $sk->link( |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/TalkpageHistoryView.php |
— | — | @@ -34,7 +34,6 @@ |
35 | 35 | function customizeTabs( $skin, &$links ) { |
36 | 36 | TalkpageView::customizeTalkpageTabs( $skin, $links, $this ); |
37 | 37 | |
38 | | - $tabid = $this->article->getTitle()->getNamespaceKey(); |
39 | 38 | $links['history']['class'] = 'selected'; |
40 | 39 | } |
41 | 40 | |
— | — | @@ -80,7 +79,7 @@ |
81 | 80 | } |
82 | 81 | |
83 | 82 | function formatValue( $name, $value ) { |
84 | | - global $wgOut, $wgLang, $wgTitle; |
| 83 | + global $wgLang; |
85 | 84 | |
86 | 85 | static $sk = null; |
87 | 86 | |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/ThreadPermalinkView.php |
— | — | @@ -218,7 +218,7 @@ |
219 | 219 | } |
220 | 220 | |
221 | 221 | // Expose feed links. |
222 | | - global $wgFeedClasses, $wgScriptPath, $wgServer; |
| 222 | + global $wgFeedClasses; |
223 | 223 | $thread = $this->thread->topmostThread()->title()->getPrefixedText(); |
224 | 224 | $apiParams = array( |
225 | 225 | 'action' => 'feedthreads', |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/NewUserMessagesView.php |
— | — | @@ -26,7 +26,7 @@ |
27 | 27 | |
28 | 28 | function getReadAllButton( $threads ) { |
29 | 29 | wfLoadExtensionMessages( 'LiquidThreads' ); |
30 | | - $ids = array_map( create_function( '$t', 'return $t->id();' ), $threads ); // ew |
| 30 | + $ids = array_map( create_function( '$t', 'return $t->id();' ), $threads ); // ew |
31 | 31 | return $this->htmlForReadButton( |
32 | 32 | wfMsg( 'lqt-read-all' ), |
33 | 33 | wfMsg( 'lqt-read-all-tooltip' ), |
— | — | @@ -45,7 +45,7 @@ |
46 | 46 | $msg = wfMsgExt( 'lqt-marked-read', 'parseinline', array( $t->subject() ) ); |
47 | 47 | } else { |
48 | 48 | $count = count( $ids ); |
49 | | - $msg = wfMsgExt( 'lqt-count-marked-read', 'parseinline', array( $count ) ); |
| 49 | + $msg = wfMsgExt( 'lqt-count-marked-read', 'parseinline', array( $count ) ); |
50 | 50 | } |
51 | 51 | $operand = implode( ',', $ids ); |
52 | 52 | |
— | — | @@ -84,15 +84,14 @@ |
85 | 85 | |
86 | 86 | function showOnce() { |
87 | 87 | self::addJSandCSS(); |
88 | | - |
| 88 | + |
89 | 89 | NewMessages::recacheMessageCount( $this->user->getId() ); |
90 | 90 | |
91 | 91 | static $scriptDone = false; |
92 | 92 | |
93 | 93 | if ( !$scriptDone ) { |
94 | | - global $wgOut, $wgScriptPath, $wgLiquidThreadsExtensionName; |
95 | | - $prefix = "{$wgScriptPath}/extensions/{$wgLiquidThreadsExtensionName}"; |
96 | | - $wgOut->addScriptFile( "$prefix/newmessages.js" ); |
| 94 | + global $wgOut, $wgLiquidThreadsExtensionPath; |
| 95 | + $wgOut->addScriptFile( "$wgLiquidThreadsExtensionPath/newmessages.js" ); |
97 | 96 | } |
98 | 97 | |
99 | 98 | $this->user->setNewtalk( false ); |
— | — | @@ -180,7 +179,7 @@ |
181 | 180 | $title->setFragment( '#' . $t->getAnchorName() ); |
182 | 181 | |
183 | 182 | // Make sure it points to the right page. The Pager seems to use the DB |
184 | | - // representation of a timestamp for its offset field, odd. |
| 183 | + // representation of a timestamp for its offset field, odd. |
185 | 184 | $dbr = wfGetDB( DB_SLAVE ); |
186 | 185 | $offset = wfTimestamp( TS_UNIX, $topmostThread->modified() ) + 1; |
187 | 186 | $offset = $dbr->timestamp( $offset ); |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/SpecialNewMessages.php |
— | — | @@ -2,10 +2,10 @@ |
3 | 3 | if ( !defined( 'MEDIAWIKI' ) ) die; |
4 | 4 | |
5 | 5 | class SpecialNewMessages extends SpecialPage { |
6 | | - private $user, $output, $request, $title; |
| 6 | + private $user, $output, $request; |
7 | 7 | |
8 | 8 | function __construct() { |
9 | | - SpecialPage::SpecialPage( 'NewMessages' ); |
| 9 | + parent::SpecialPage( 'NewMessages' ); |
10 | 10 | $this->includable( true ); |
11 | 11 | } |
12 | 12 | |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/pages/TalkpageView.php |
— | — | @@ -48,8 +48,6 @@ |
49 | 49 | |
50 | 50 | $article = new Article( $this->title ); |
51 | 51 | |
52 | | - $oldid = $this->request->getVal( 'oldid', null ); |
53 | | - |
54 | 52 | wfLoadExtensionMessages( 'LiquidThreads' ); |
55 | 53 | // If $article_text == "", the talkpage was probably just created |
56 | 54 | // when the first thread was posted to make the links blue. |
— | — | @@ -111,8 +109,6 @@ |
112 | 110 | |
113 | 111 | wfLoadExtensionMessages( 'LiquidThreads' ); |
114 | 112 | |
115 | | - $sk = $this->user->getSkin(); |
116 | | - |
117 | 113 | $html = ''; |
118 | 114 | |
119 | 115 | $h2_header = Xml::tags( 'h2', null, wfMsgExt( 'lqt_contents_title', 'parseinline' ) ); |
— | — | @@ -152,7 +148,9 @@ |
153 | 149 | |
154 | 150 | $html .= $headerRow . "\n" . Xml::tags( 'tbody', null, implode( "\n", $rows ) ); |
155 | 151 | $html = $h2_header . Xml::tags( 'table', array( 'class' => 'lqt_toc' ), $html ); |
156 | | - |
| 152 | + // wrap our output in a div for containment |
| 153 | + $html = Xml::tags( 'div', array( 'class' => 'lqt-contents-wrapper' ), $html ); |
| 154 | + |
157 | 155 | return $html; |
158 | 156 | } |
159 | 157 | |
— | — | @@ -180,8 +178,6 @@ |
181 | 179 | |
182 | 180 | if ( $article->exists() ) { |
183 | 181 | $form_action_url = $this->talkpageUrl( $this->title, 'talkpage_sort_order' ); |
184 | | - $go = wfMsg( 'go' ); |
185 | | - |
186 | 182 | $html = ''; |
187 | 183 | |
188 | 184 | $html .= Xml::label( wfMsg( 'lqt_sorting_order' ), 'lqt_sort_select' ) . ' '; |
— | — | @@ -230,7 +226,7 @@ |
231 | 227 | self::addJSandCSS(); |
232 | 228 | |
233 | 229 | // Expose feed links. |
234 | | - global $wgFeedClasses, $wgScriptPath, $wgServer; |
| 230 | + global $wgFeedClasses; |
235 | 231 | $apiParams = array( 'action' => 'feedthreads', 'type' => 'replies|newthreads', |
236 | 232 | 'talkpage' => $this->title->getPrefixedText() ); |
237 | 233 | $urlPrefix = wfScript( 'api' ) . '?'; |
— | — | @@ -300,7 +296,6 @@ |
301 | 297 | |
302 | 298 | $this->output->addHTML( $talkpageHeader ); |
303 | 299 | |
304 | | - global $wgRequest; |
305 | 300 | if ( $this->methodApplies( 'talkpage_new_thread' ) ) { |
306 | 301 | $params = array( 'class' => 'lqt-new-thread lqt-edit-form' ); |
307 | 302 | $this->output->addHTML( Xml::openElement( 'div', $params ) ); |
— | — | @@ -323,6 +318,7 @@ |
324 | 319 | } |
325 | 320 | |
326 | 321 | $html .= $pager->getNavigationBar(); |
| 322 | + $html .= Xml::openElement( 'div', array( 'class' => 'lqt-threads lqt-talkpage-threads' ) ); |
327 | 323 | |
328 | 324 | $this->output->addHTML( $html ); |
329 | 325 | |
— | — | @@ -330,7 +326,7 @@ |
331 | 327 | $this->showThread( $t ); |
332 | 328 | } |
333 | 329 | |
334 | | - $this->output->addHTML( $pager->getNavigationBar() ); |
| 330 | + $this->output->addHTML( Xml::closeElement( 'div' ) . $pager->getNavigationBar() ); |
335 | 331 | |
336 | 332 | return false; |
337 | 333 | } |
Property changes on: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/schema-changes/thread_pending_relationship.sql |
___________________________________________________________________ |
Added: svn:eol-style |
338 | 334 | + native |
Property changes on: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/schema-changes/thread_reactions.sql |
___________________________________________________________________ |
Added: svn:eol-style |
339 | 335 | + native |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/api/ApiQueryLQTThreads.php |
— | — | @@ -44,8 +44,6 @@ |
45 | 45 | } |
46 | 46 | |
47 | 47 | public function execute() { |
48 | | - global $wgUser; |
49 | | - |
50 | 48 | $params = $this->extractRequestParams(); |
51 | 49 | $prop = array_flip( $params['prop'] ); |
52 | 50 | $result = $this->getResult(); |
— | — | @@ -95,7 +93,6 @@ |
96 | 94 | $threads = Threads::loadFromResult( $res, $this->getDB() ); |
97 | 95 | } |
98 | 96 | |
99 | | - |
100 | 97 | $ids = array(); |
101 | 98 | $count = 0; |
102 | 99 | foreach ( $res as $row ) |
— | — | @@ -279,6 +276,15 @@ |
280 | 277 | } |
281 | 278 | } |
282 | 279 | |
| 280 | + public function getCacheMode( $params ) { |
| 281 | + if ( $params['render'] ) { |
| 282 | + // Rendering uses $wgUser |
| 283 | + return 'anon-public-user-private'; |
| 284 | + } else { |
| 285 | + return 'public'; |
| 286 | + } |
| 287 | + } |
| 288 | + |
283 | 289 | public function getAllowedParams() { |
284 | 290 | return array ( |
285 | 291 | 'startid' => array( |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/api/ApiThreadAction.php |
— | — | @@ -92,8 +92,6 @@ |
93 | 93 | } |
94 | 94 | |
95 | 95 | public function actionSplit( $threads, $params ) { |
96 | | - global $wgUser; |
97 | | - |
98 | 96 | if ( count( $threads ) > 1 ) { |
99 | 97 | $this->dieUsage( 'You may only split one thread at a time', |
100 | 98 | 'too-many-threads' ); |
— | — | @@ -152,8 +150,6 @@ |
153 | 151 | } |
154 | 152 | |
155 | 153 | public function actionMerge( $threads, $params ) { |
156 | | - global $wgUser; |
157 | | - |
158 | 154 | if ( count( $threads ) < 1 ) { |
159 | 155 | $this->dieUsage( 'You must specify a thread to merge', |
160 | 156 | 'no-specified-threads' ); |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/api/ApiFeedLQTThreads.php |
— | — | @@ -43,7 +43,7 @@ |
44 | 44 | * Wrap the result as an RSS/Atom feed. |
45 | 45 | */ |
46 | 46 | public function execute() { |
47 | | - global $wgFeedClasses, $wgFeedLimit, $wgSitename, $wgContLanguageCode; |
| 47 | + global $wgFeedClasses; |
48 | 48 | |
49 | 49 | $params = $this->extractRequestParams(); |
50 | 50 | |
— | — | @@ -173,7 +173,6 @@ |
174 | 174 | } |
175 | 175 | |
176 | 176 | // Thread conditions |
177 | | - $threadConds = array(); |
178 | 177 | $threads = (array)$params['thread']; |
179 | 178 | foreach ( $threads as $thread ) { |
180 | 179 | $root = new Article( Title::newFromText( $thread ) ); |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/lqt.js |
— | — | @@ -5,61 +5,61 @@ |
6 | 6 | var liquidThreads = { |
7 | 7 | currentReplyThread : null, |
8 | 8 | currentToolbar : null, |
9 | | - |
| 9 | + |
10 | 10 | 'handleReplyLink' : function(e) { |
11 | 11 | if (e.preventDefault) |
12 | 12 | e.preventDefault(); |
13 | 13 | |
14 | 14 | var target = this; |
15 | | - |
| 15 | + |
16 | 16 | if ( !this.className && e.target) { |
17 | 17 | target = $j(e.target); |
18 | 18 | } |
19 | | - |
| 19 | + |
20 | 20 | var container = $j(target).closest('.lqt_thread')[0]; |
21 | 21 | var thread_id = $j(this).data('thread-id'); |
22 | | - |
| 22 | + |
23 | 23 | // hide the form for this thread if it's currently being shown |
24 | 24 | if ( thread_id == liquidThreads.currentReplyThread && $j( '#wpTextbox1' ).is( ':visible' ) ) { |
25 | 25 | liquidThreads.cancelEdit({}); |
26 | 26 | return; |
27 | 27 | } |
28 | | - |
| 28 | + |
29 | 29 | var query = '&lqt_method=reply&lqt_operand='+thread_id; |
30 | | - |
| 30 | + |
31 | 31 | var repliesElement = $j(container).contents().filter('.lqt-thread-replies'); |
32 | 32 | var replyDiv = repliesElement.contents().filter('.lqt-reply-form'); |
33 | 33 | replyDiv = replyDiv.add( $j(container).contents().filter('.lqt-reply-form') ); |
34 | 34 | if (!replyDiv.length) { |
35 | 35 | // Create a div for it |
36 | 36 | replyDiv = $j('<div class="lqt-reply-form lqt-edit-form"/>'); |
37 | | - |
| 37 | + |
38 | 38 | // Try to find a place for it |
39 | 39 | if ( !repliesElement.length ) { |
40 | 40 | repliesElement = liquidThreads.getRepliesElement( $j(container) ); |
41 | 41 | } |
42 | | - |
| 42 | + |
43 | 43 | repliesElement.find('.lqt-replies-finish').before( replyDiv ); |
44 | 44 | } |
45 | 45 | replyDiv.show(); |
46 | | - |
| 46 | + |
47 | 47 | replyDiv = replyDiv[0]; |
48 | | - |
| 48 | + |
49 | 49 | liquidThreads.injectEditForm( query, replyDiv, e.preload ); |
50 | 50 | liquidThreads.currentReplyThread = thread_id; |
51 | 51 | }, |
52 | | - |
| 52 | + |
53 | 53 | 'getRepliesElement' : function(thread /* a .lqt_thread */ ) { |
54 | 54 | var repliesElement = thread.contents().filter('.lqt-thread-replies'); |
55 | | - |
| 55 | + |
56 | 56 | if ( !repliesElement.length ) { |
57 | 57 | repliesElement = $j('<div class="lqt-thread-replies"/>' ); |
58 | | - |
| 58 | + |
59 | 59 | var finishDiv = $j('<div class="lqt-replies-finish"/>'); |
60 | 60 | finishDiv.append($j('<div class="lqt-replies-finish-corner"/>')); |
61 | 61 | finishDiv.contents().html(' '); |
62 | 62 | repliesElement.append(finishDiv); |
63 | | - |
| 63 | + |
64 | 64 | var repliesFinishElement = thread.contents().filter('.lqt-replies-finish'); |
65 | 65 | if ( repliesFinishElement.length ) { |
66 | 66 | repliesFinishElement.before(repliesElement); |
— | — | @@ -67,15 +67,15 @@ |
68 | 68 | thread.append(repliesElement); |
69 | 69 | } |
70 | 70 | } |
71 | | - |
| 71 | + |
72 | 72 | return repliesElement; |
73 | 73 | }, |
74 | | - |
| 74 | + |
75 | 75 | 'checkEmptyReplies' : function( element, action ) { |
76 | 76 | var contents = element.contents(); |
77 | | - |
| 77 | + |
78 | 78 | contents = contents.not('.lqt-replies-finish,.lqt-post-sep,.lqt-edit-form'); |
79 | | - |
| 79 | + |
80 | 80 | if ( !contents.length ) { |
81 | 81 | if ( typeof action == 'undefined' || action == 'remove' ) { |
82 | 82 | element.remove(); |
— | — | @@ -84,62 +84,62 @@ |
85 | 85 | } |
86 | 86 | } |
87 | 87 | }, |
88 | | - |
| 88 | + |
89 | 89 | 'handleNewLink' : function(e) { |
90 | 90 | e.preventDefault(); |
91 | | - |
| 91 | + |
92 | 92 | var query = '&lqt_method=talkpage_new_thread'; |
93 | | - |
| 93 | + |
94 | 94 | var container = $j('.lqt-new-thread' ); |
95 | | - |
| 95 | + |
96 | 96 | liquidThreads.injectEditForm( query, container ); |
97 | 97 | liquidThreads.currentReplyThread = 0; |
98 | 98 | }, |
99 | | - |
| 99 | + |
100 | 100 | 'handleEditLink' : function(e) { |
101 | 101 | e.preventDefault(); |
102 | | - |
| 102 | + |
103 | 103 | // Grab the container. |
104 | 104 | var parent = $j(this).closest('.lqt-post-wrapper'); |
105 | | - |
| 105 | + |
106 | 106 | var container = $j('<div/>').addClass('lqt-edit-form'); |
107 | 107 | parent.contents().fadeOut(); |
108 | 108 | parent.append(container); |
109 | 109 | var query='&lqt_method=edit&lqt_operand='+parent.data('thread-id'); |
110 | | - |
| 110 | + |
111 | 111 | liquidThreads.injectEditForm( query, container ); |
112 | 112 | }, |
113 | | - |
| 113 | + |
114 | 114 | 'injectEditForm' : function(query, container, preload) { |
115 | 115 | var url = wgServer+wgScript+'?lqt_inline=1&title='+encodeURIComponent(wgPageName)+ |
116 | 116 | query; |
117 | | - |
| 117 | + |
118 | 118 | liquidThreads.cancelEdit( container ); |
119 | | - |
| 119 | + |
120 | 120 | var isIE7 = $j.browser.msie && $j.browser.version.substr(0,1) == '7'; |
121 | | - |
| 121 | + |
122 | 122 | var loadSpinner = $j('<div class="mw-ajax-loader lqt-loader"/>'); |
123 | 123 | $j(container).before( loadSpinner ); |
124 | | - |
| 124 | + |
125 | 125 | var finishShow = function() { |
126 | 126 | // Scroll to the textbox |
127 | 127 | var targetOffset = $j(container).offset().top; |
128 | 128 | var windowHeight = $j(window).height(); |
129 | 129 | var editBoxHeight = $j(container).height(); |
130 | | - |
| 130 | + |
131 | 131 | var scrollOffset; |
132 | 132 | if ( windowHeight < editBoxHeight ) { |
133 | 133 | scrollOffset = targetOffset; |
134 | 134 | } else { |
135 | 135 | scrollOffset = targetOffset - windowHeight + editBoxHeight; |
136 | 136 | } |
137 | | - |
| 137 | + |
138 | 138 | $j('html,body').animate({scrollTop: scrollOffset}, 'slow'); |
139 | 139 | // Auto-focus and set to auto-grow as well |
140 | 140 | $j(container).find('#wpTextbox1').focus();//.autogrow(); |
141 | 141 | // Focus the subject field if there is one. Overrides previous line. |
142 | 142 | $j(container).find('#lqt_subject_field').focus(); |
143 | | - |
| 143 | + |
144 | 144 | // Update signature editor |
145 | 145 | $j(container).find('input[name=wpLqtSignature]').hide(); |
146 | 146 | $j(container).find('.lqt-signature-preview').show(); |
— | — | @@ -150,33 +150,35 @@ |
151 | 151 | $j(container).find('.lqt-signature-preview').after(editLink); |
152 | 152 | editLink.before(' '); |
153 | 153 | } |
154 | | - |
| 154 | + |
155 | 155 | var finishSetup = function() { |
156 | 156 | // Kill the loader. |
157 | 157 | loadSpinner.remove(); |
158 | | - |
| 158 | + |
159 | 159 | if (preload) { |
160 | 160 | $j("textarea", container)[0].value = preload; |
161 | 161 | } |
162 | | - |
| 162 | + |
163 | 163 | if ( isIE7 ) { |
164 | 164 | setTimeout( finishShow, 500 ); |
165 | 165 | } else { |
166 | 166 | $j(container).slideDown( 'slow', finishShow ); |
167 | 167 | } |
168 | | - |
| 168 | + |
169 | 169 | var cancelButton = $j(container).find('#mw-editform-cancel'); |
170 | 170 | cancelButton.click( liquidThreads.cancelEdit ); |
171 | | - |
| 171 | + |
172 | 172 | $j(container).find('#wpTextbox1').attr( 'rows', 12 ); |
173 | 173 | $j(container).find('#wpDiff').hide(); |
174 | | - |
| 174 | + |
175 | 175 | if ( $j.fn.wikiEditor && $j.wikiEditor.isSupported( $j.wikiEditor.modules.toolbar ) ) { |
176 | 176 | if ( wgWikiEditorPreferences.toolbar.dialogs && $j.wikiEditor.isSupported( $j.wikiEditor.modules.dialogs ) ) { |
177 | 177 | $j( '#wpTextbox1' ).addClass( 'toolbar-dialogs' ); |
178 | 178 | } |
179 | | - // Add wikiEditor toolbar |
| 179 | + // Add wikiEditor toolbar |
180 | 180 | $j( '#wpTextbox1' ).wikiEditor( 'addModule', { 'toolbar': liquidThreads.toolbar.config, 'dialogs': liquidThreads.toolbar.dialogs } ); |
| 181 | + // cleanup unnecessary things from the old toolbar |
| 182 | + $j( '#editpage-specialchars' ).remove(); |
181 | 183 | } else { |
182 | 184 | // Add old toolbar |
183 | 185 | mwSetupToolbar() |
— | — | @@ -187,9 +189,9 @@ |
188 | 190 | currentFocused = this; |
189 | 191 | } ); |
190 | 192 | }; |
191 | | - |
| 193 | + |
192 | 194 | mwEditButtons = []; |
193 | | - |
| 195 | + |
194 | 196 | $j.getScript( stylepath+'/common/edit.js', |
195 | 197 | function() { |
196 | 198 | if ( isIE7 ) { |
— | — | @@ -203,9 +205,9 @@ |
204 | 206 | query+'&lqt_inline=1', finishSetup ); |
205 | 207 | } |
206 | 208 | } ); |
207 | | - |
| 209 | + |
208 | 210 | }, |
209 | | - |
| 211 | + |
210 | 212 | 'doLivePreview' : function( e ) { |
211 | 213 | e.preventDefault(); |
212 | 214 | if ( typeof doLivePreview == 'function' ) { |
— | — | @@ -215,7 +217,7 @@ |
216 | 218 | function() { doLivePreview(e); }); |
217 | 219 | } |
218 | 220 | }, |
219 | | - |
| 221 | + |
220 | 222 | //From http://clipmarks.com/clipmark/CEFC94CB-94D6-4495-A7AA-791B7355E284/ |
221 | 223 | 'insertAtCursor' : function(myField, myValue) { |
222 | 224 | //IE support |
— | — | @@ -235,7 +237,7 @@ |
236 | 238 | myField.value += myValue; |
237 | 239 | } |
238 | 240 | }, |
239 | | - |
| 241 | + |
240 | 242 | 'getSelection' : function() { |
241 | 243 | if (window.getSelection) { |
242 | 244 | return window.getSelection().toString(); |
— | — | @@ -247,79 +249,79 @@ |
248 | 250 | return ''; |
249 | 251 | } |
250 | 252 | }, |
251 | | - |
| 253 | + |
252 | 254 | 'cancelEdit' : function( e ) { |
253 | 255 | if ( typeof e != 'undefined' && typeof e.preventDefault == 'function' ) { |
254 | 256 | e.preventDefault(); |
255 | 257 | } |
256 | | - |
| 258 | + |
257 | 259 | $j('.lqt-edit-form').not(e).each( |
258 | 260 | function() { |
259 | 261 | var repliesElement = $j(this).closest('.lqt-thread-replies'); |
260 | 262 | $j(this).fadeOut('slow', |
261 | 263 | function() { |
262 | 264 | $j(this).empty(); |
263 | | - |
| 265 | + |
264 | 266 | if ( $j(this).parent().is('.lqt-post-wrapper') ) { |
265 | 267 | $j(this).parent().contents().fadeIn(); |
266 | 268 | $j(this).remove(); |
267 | 269 | } |
268 | | - |
| 270 | + |
269 | 271 | liquidThreads.checkEmptyReplies( repliesElement ); |
270 | 272 | } ) |
271 | 273 | } ); |
272 | | - |
| 274 | + |
273 | 275 | liquidThreads.currentReplyThread = null; |
274 | 276 | }, |
275 | | - |
| 277 | + |
276 | 278 | 'setupMenus' : function() { |
277 | 279 | var post = $j(this); |
278 | | - |
| 280 | + |
279 | 281 | var toolbar = post.contents().filter('.lqt-thread-toolbar'); |
280 | 282 | var threadID = post.data('thread-id'); |
281 | 283 | var menu = post.find('.lqt-thread-toolbar-command-list'); |
282 | 284 | var menuContainer = post.find( '.lqt-thread-toolbar-menu' ); |
283 | 285 | menu.remove().appendTo( menuContainer ); |
284 | 286 | menuContainer.find('.lqt-thread-toolbar-command-list').hide(); |
285 | | - |
| 287 | + |
286 | 288 | // Add handler for reply link |
287 | 289 | var replyLink = toolbar.find('.lqt-command-reply > a'); |
288 | 290 | replyLink.data( 'thread-id', threadID ); |
289 | 291 | replyLink.click( liquidThreads.handleReplyLink ); |
290 | | - |
| 292 | + |
291 | 293 | // Add "Drag to new location" to menu |
292 | 294 | var dragLI = $j('<li class="lqt-command-drag" />' ); |
293 | 295 | var dragLink = $j('<a/>').text( wgLqtMessages['lqt-drag-activate'] ); |
294 | 296 | dragLink.attr('href','#'); |
295 | 297 | dragLI.append(dragLink); |
296 | 298 | dragLink.click( liquidThreads.activateDragDrop ); |
297 | | - |
| 299 | + |
298 | 300 | menu.append(dragLI); |
299 | | - |
| 301 | + |
300 | 302 | // Remove split and merge |
301 | 303 | menu.contents().filter('.lqt-command-split,.lqt-command-merge').remove(); |
302 | 304 | |
303 | | - var trigger = menuContainer.find( '.lqt-thread-actions-trigger' ) |
| 305 | + var trigger = menuContainer.find( '.lqt-thread-actions-trigger' ) |
304 | 306 | |
305 | 307 | trigger.show(); |
306 | 308 | menu.hide(); |
307 | | - |
| 309 | + |
308 | 310 | trigger.click( |
309 | 311 | function(e) { |
310 | 312 | e.stopImmediatePropagation(); |
311 | 313 | e.preventDefault(); |
312 | | - |
| 314 | + |
313 | 315 | // Hide the other menus |
314 | 316 | $j('.lqt-thread-toolbar-command-list').not(menu).hide('fast'); |
315 | | - |
| 317 | + |
316 | 318 | menu.toggle( 'fast' ); |
317 | | - |
| 319 | + |
318 | 320 | var windowHeight = $j(window).height(); |
319 | 321 | var toolbarOffset = toolbar.offset().top; |
320 | 322 | var scrollPos = $j(window).scrollTop(); |
321 | | - |
| 323 | + |
322 | 324 | var menuBottom = ( toolbarOffset + 150 - scrollPos ); |
323 | | - |
| 325 | + |
324 | 326 | if ( menuBottom > windowHeight ) { |
325 | 327 | // Switch to an upwards menu. |
326 | 328 | menu.css( 'bottom', toolbar.height() ); |
— | — | @@ -328,44 +330,44 @@ |
329 | 331 | } |
330 | 332 | } ); |
331 | 333 | }, |
332 | | - |
| 334 | + |
333 | 335 | 'setupThreadMenu' : function( menu, id ) { |
334 | 336 | if ( menu.find('.lqt-command-edit-subject').length ) { |
335 | 337 | return; |
336 | 338 | } |
337 | | - |
| 339 | + |
338 | 340 | var editSubjectField = $j('<li/>'); |
339 | 341 | var editSubjectLink = $j('<a href="#"/>'); |
340 | 342 | editSubjectLink.text( wgLqtMessages['lqt-change-subject'] ); |
341 | 343 | editSubjectField.append( editSubjectLink ); |
342 | 344 | editSubjectField.click( liquidThreads.handleChangeSubject ); |
343 | 345 | editSubjectField.data( 'thread-id', id ) |
344 | | - |
| 346 | + |
345 | 347 | editSubjectField.addClass( 'lqt-command-edit-subject' ); |
346 | | - |
| 348 | + |
347 | 349 | menu.append( editSubjectField ); |
348 | 350 | }, |
349 | | - |
| 351 | + |
350 | 352 | 'handleChangeSubject' : function(e) { |
351 | 353 | e.preventDefault(); |
352 | | - |
| 354 | + |
353 | 355 | $j(this).closest('.lqt-command-edit-subject').hide(); |
354 | 356 | |
355 | 357 | // Grab the h2 |
356 | 358 | var threadId = $j(this).data('thread-id'); |
357 | 359 | var header = $j('#lqt-header-'+threadId); |
358 | 360 | var headerText = header.find("input[name='raw-header']").val(); |
359 | | - |
| 361 | + |
360 | 362 | var textbox = $j('<input type="textbox" />').val(headerText); |
361 | 363 | textbox.attr('id', 'lqt-subject-input-'+threadId); |
362 | 364 | textbox.attr('size', '75'); |
363 | 365 | textbox.val(headerText); |
364 | | - |
| 366 | + |
365 | 367 | var saveText = wgLqtMessages['lqt-save-subject']; |
366 | 368 | var saveButton = $j('<input type="button" />'); |
367 | 369 | saveButton.val( saveText ); |
368 | 370 | saveButton.click( liquidThreads.handleSubjectSave ); |
369 | | - |
| 371 | + |
370 | 372 | var cancelButton = $j('<input type="button" />'); |
371 | 373 | cancelButton.val( wgLqtMessages['lqt-cancel-subject-edit'] ); |
372 | 374 | cancelButton.click( function(e) { |
— | — | @@ -374,11 +376,11 @@ |
375 | 377 | header.contents().filter('.mw-headline').show(); |
376 | 378 | header.next().find('.lqt-command-edit-subject').show(); |
377 | 379 | form.remove(); |
378 | | - |
| 380 | + |
379 | 381 | } ); |
380 | | - |
| 382 | + |
381 | 383 | header.contents().filter('span.mw-headline').hide(); |
382 | | - |
| 384 | + |
383 | 385 | var subjectForm = $j('<span class="mw-subject-editor"/>'); |
384 | 386 | subjectForm.append(textbox); |
385 | 387 | subjectForm.append( ' ' ); |
— | — | @@ -386,11 +388,11 @@ |
387 | 389 | subjectForm.append( ' ' ); |
388 | 390 | subjectForm.append( cancelButton ); |
389 | 391 | subjectForm.data( 'thread-id', threadId ); |
390 | | - |
| 392 | + |
391 | 393 | header.append(subjectForm); |
392 | | - |
| 394 | + |
393 | 395 | }, |
394 | | - |
| 396 | + |
395 | 397 | 'handleSubjectSave' : function(e) { |
396 | 398 | var button = $j(this); |
397 | 399 | var subjectForm = button.closest('.mw-subject-editor'); |
— | — | @@ -398,36 +400,36 @@ |
399 | 401 | var threadId = subjectForm.data('thread-id'); |
400 | 402 | var textbox = $j('#lqt-subject-input-'+threadId); |
401 | 403 | var newSubject = textbox.val().trim(); |
402 | | - |
| 404 | + |
403 | 405 | if (!newSubject) { |
404 | 406 | alert( wgLqtMessages['lqt-ajax-no-subject'] ); |
405 | 407 | return; |
406 | 408 | } |
407 | | - |
| 409 | + |
408 | 410 | // Add a spinner |
409 | 411 | var spinner = $j('<div class="mw-ajax-loader"/>'); |
410 | 412 | header.append(spinner); |
411 | 413 | subjectForm.hide(); |
412 | | - |
| 414 | + |
413 | 415 | var request = { |
414 | 416 | 'action' : 'threadaction', |
415 | 417 | 'threadaction' : 'setsubject', |
416 | 418 | 'subject' : newSubject.trim(), |
417 | 419 | 'thread' : threadId |
418 | 420 | }; |
419 | | - |
| 421 | + |
420 | 422 | var errorHandler = function(reply) { |
421 | 423 | try { |
422 | 424 | code = reply.error.code; |
423 | 425 | description = reply.error.info; |
424 | | - |
| 426 | + |
425 | 427 | if (code == 'invalid-subject') { |
426 | 428 | alert( wgLqtMessages['lqt-ajax-invalid-subject'] ); |
427 | 429 | } else { |
428 | 430 | var msg = wgLqtMessages['lqt-save-subject-failed']; |
429 | 431 | msg.replace( '$1', description ); |
430 | 432 | } |
431 | | - |
| 433 | + |
432 | 434 | subjectForm.show(); |
433 | 435 | spinner.remove(); |
434 | 436 | } catch (err) { |
— | — | @@ -438,21 +440,21 @@ |
439 | 441 | header.next().find('.lqt-command-edit-subject').show(); |
440 | 442 | } |
441 | 443 | } |
442 | | - |
| 444 | + |
443 | 445 | // Set new subject through API. |
444 | 446 | liquidThreads.apiRequest( request, function(reply) { |
445 | 447 | var result; |
446 | | - |
| 448 | + |
447 | 449 | try { |
448 | 450 | result = reply.threadaction.thread.result; |
449 | 451 | } catch (err) { |
450 | 452 | result = 'error'; |
451 | 453 | } |
452 | | - |
| 454 | + |
453 | 455 | if ( result == 'success' ) { |
454 | 456 | spinner.remove(); |
455 | 457 | header.next().find('.lqt-command-edit-subject').show(); |
456 | | - |
| 458 | + |
457 | 459 | var thread = $j('#lqt_thread_id_'+threadId); |
458 | 460 | liquidThreads.doReloadThread( thread ); |
459 | 461 | } else { |
— | — | @@ -460,163 +462,172 @@ |
461 | 463 | } |
462 | 464 | } ); |
463 | 465 | }, |
464 | | - |
| 466 | + |
465 | 467 | 'handleDocumentClick' : function(e) { |
466 | 468 | // Collapse all menus |
467 | 469 | $j('.lqt-thread-toolbar-command-list').hide('fast'); |
468 | 470 | }, |
469 | | - |
| 471 | + |
470 | 472 | 'checkForUpdates' : function() { |
471 | 473 | var threadModifiedTS = {}; |
472 | 474 | var threads = []; |
473 | | - |
| 475 | + |
474 | 476 | $j('.lqt-thread-topmost').each( function() { |
475 | 477 | var tsField = $j(this).find('.lqt-thread-modified'); |
476 | | - var oldTS = tsField.val(); |
477 | | - // Prefix is lqt-thread-modified- |
478 | | - var threadID = tsField.attr('id').substr( "lqt-thread-modified-".length ); |
479 | | - |
480 | | - threadModifiedTS[threadID] = oldTS; |
481 | | - threads.push(threadID); |
| 478 | + if ( tsField.length ) { |
| 479 | + var oldTS = tsField.val(); |
| 480 | + // Prefix is lqt-thread-modified- |
| 481 | + var threadID = tsField.attr('id').substr( "lqt-thread-modified-".length ); |
| 482 | + threadModifiedTS[threadID] = oldTS; |
| 483 | + threads.push(threadID); |
| 484 | + } |
482 | 485 | } ); |
483 | | - |
| 486 | + |
484 | 487 | // Optimisation: if no threads are to be checked, do not check. |
485 | 488 | if ( ! threads.length ) { |
486 | 489 | return; |
487 | 490 | } |
488 | | - |
| 491 | + |
489 | 492 | var getData = { 'action' : 'query', 'list' : 'threads', 'thid' : threads.join('|'), |
490 | 493 | 'format' : 'json', 'thprop' : 'id|subject|parent|modified' }; |
491 | | - |
| 494 | + |
492 | 495 | $j.get( wgScriptPath+'/api.php', getData, |
493 | 496 | function(data) { |
494 | 497 | var threads = data.query.threads; |
495 | | - |
| 498 | + |
496 | 499 | $j.each( threads, function( i, thread ) { |
497 | 500 | var threadID = thread.id; |
498 | 501 | var threadModified = thread.modified; |
499 | | - |
| 502 | + |
500 | 503 | if ( threadModified != threadModifiedTS[threadID] ) { |
501 | 504 | liquidThreads.showUpdated(threadID); |
502 | 505 | } |
503 | 506 | } ); |
504 | 507 | }, 'json' ); |
505 | 508 | }, |
506 | | - |
| 509 | + |
507 | 510 | 'showUpdated' : function(id) { |
508 | 511 | // Check if there's already an updated marker here |
509 | 512 | var threadObject = $j("#lqt_thread_id_"+id); |
510 | | - |
| 513 | + |
511 | 514 | if ( threadObject.find('.lqt-updated-notification').length ) { |
512 | 515 | return; |
513 | 516 | } |
514 | | - |
| 517 | + |
515 | 518 | var notifier = $j('<div/>'); |
516 | 519 | notifier.text( wgLqtMessages['lqt-ajax-updated'] + ' ' ); |
517 | 520 | notifier.addClass( 'lqt-updated-notification' ); |
518 | | - |
| 521 | + |
519 | 522 | var updateButton = $j('<a href="#"/>'); |
520 | 523 | updateButton.text( wgLqtMessages['lqt-ajax-update-link'] ); |
521 | 524 | updateButton.addClass( 'lqt-update-link' ); |
522 | 525 | updateButton.click( liquidThreads.updateThread ); |
523 | | - |
| 526 | + |
524 | 527 | notifier.append( updateButton ); |
525 | | - |
| 528 | + |
526 | 529 | threadObject.prepend(notifier); |
527 | 530 | }, |
528 | | - |
| 531 | + |
529 | 532 | 'updateThread' : function(e) { |
530 | 533 | e.preventDefault(); |
531 | | - |
| 534 | + |
532 | 535 | var thread = $j(this).closest('.lqt_thread'); |
533 | 536 | |
534 | 537 | liquidThreads.doReloadThread( thread ); |
535 | 538 | }, |
536 | | - |
| 539 | + |
537 | 540 | 'doReloadThread' : function( thread /* The .lqt_thread */ ) { |
538 | 541 | var post = thread.find('div.lqt-post-wrapper')[0]; |
539 | 542 | post = $j(post); |
540 | 543 | var threadId = thread.data('thread-id'); |
541 | 544 | var loader = $j('<div class="mw-ajax-loader"/>'); |
542 | 545 | var header = $j('#lqt-header-'+threadId); |
543 | | - |
| 546 | + |
544 | 547 | thread.prepend(loader); |
545 | | - |
| 548 | + |
546 | 549 | // Build an AJAX request |
547 | 550 | var apiReq = { 'action' : 'query', 'list' : 'threads', 'thid' : threadId, |
548 | 551 | 'format' : 'json', 'thrender' : 1 }; |
549 | | - |
| 552 | + |
550 | 553 | $j.get( wgScriptPath+'/api.php', apiReq, |
551 | 554 | function(data) { |
552 | 555 | // Load data from JSON |
553 | 556 | var html = data.query.threads[threadId].content; |
554 | 557 | var newContent = $j(html); |
555 | | - |
| 558 | + |
556 | 559 | // Clear old post and header. |
557 | 560 | thread.empty(); |
558 | 561 | thread.hide(); |
559 | 562 | header.empty(); |
560 | 563 | header.hide(); |
561 | | - |
| 564 | + |
562 | 565 | // Replace post content |
563 | 566 | var newThread = newContent.filter('div.lqt_thread'); |
564 | 567 | var newThreadContent = newThread.contents(); |
565 | 568 | thread.append( newThreadContent ); |
566 | 569 | thread.attr( 'class', newThread.attr('class') ); |
567 | | - |
568 | | - // Replace header content |
569 | | - var newHeader = newContent.filter('#lqt-header-'+threadId); |
570 | | - if ( header.length ) { |
571 | | - var newHeaderContent = $j(newHeader).contents(); |
572 | | - header.append( newHeaderContent ); |
573 | | - } else { |
574 | | - // No existing header, add one before the thread |
575 | | - thread.before(newHeader); |
576 | | - } |
577 | | - |
| 570 | + |
| 571 | +// Replace header content |
| 572 | +// var newHeader = newContent.filter('#lqt-header-'+threadId); |
| 573 | +// if ( header.length ) { |
| 574 | +// var newHeaderContent = $j(newHeader).contents(); |
| 575 | +// header.append( newHeaderContent ); |
| 576 | +// } else { |
| 577 | +// // No existing header, add one before the thread |
| 578 | +// thread.before(newHeader); |
| 579 | +// } |
| 580 | + |
578 | 581 | // Set up thread. |
579 | 582 | thread.find('.lqt-post-wrapper').each( function() { |
580 | 583 | liquidThreads.setupThread( $j(this) ); |
581 | 584 | } ); |
582 | | - |
| 585 | + |
583 | 586 | header.fadeIn(); |
584 | 587 | thread.fadeIn(); |
585 | | - |
| 588 | + |
586 | 589 | // Scroll to the updated thread. |
587 | 590 | var targetOffset = $j(thread).offset().top; |
588 | 591 | $j('html,body').animate({scrollTop: targetOffset}, 'slow'); |
589 | | - |
| 592 | + |
590 | 593 | }, 'json' ); |
591 | 594 | }, |
592 | | - |
| 595 | + |
593 | 596 | 'setupThread' : function(threadContainer) { |
594 | 597 | var prefixLength = "lqt_thread_id_".length; |
595 | | - |
| 598 | + // add the interruption class if it needs it |
| 599 | + // Fixme - misses a lot of cases |
| 600 | + $parentWrapper = $j( threadContainer ) |
| 601 | + .closest( '.lqt-thread-wrapper' ).parent().closest( '.lqt-thread-wrapper' ); |
| 602 | + if( $parentWrapper.next( '.lqt-thread-wrapper' ).length > 0 ) { |
| 603 | + $parentWrapper |
| 604 | + .find( '.lqt-thread-replies' ) |
| 605 | + .addClass( 'lqt-thread-replies-interruption' ); |
| 606 | + } |
596 | 607 | // Update reply links |
597 | 608 | var threadWrapper = $j(threadContainer).closest('.lqt_thread')[0] |
598 | 609 | var threadId = threadWrapper.id.substring( prefixLength ); |
599 | | - |
| 610 | + |
600 | 611 | $j(threadContainer).data( 'thread-id', threadId ); |
601 | 612 | $j(threadWrapper).data( 'thread-id', threadId ); |
602 | | - |
| 613 | + |
603 | 614 | // Set up reply link |
604 | 615 | var replyLinks = $j(threadWrapper).find('.lqt-add-reply'); |
605 | 616 | replyLinks.click( liquidThreads.handleReplyLink ); |
606 | 617 | replyLinks.data( 'thread-id', threadId ); |
607 | | - |
| 618 | + |
608 | 619 | // Hide edit forms |
609 | 620 | $j(threadContainer).find('div.lqt-edit-form').each( |
610 | 621 | function() { |
611 | 622 | if ( $j(this).find('#wpTextbox1').length ) { |
612 | 623 | return; |
613 | 624 | } |
614 | | - |
| 625 | + |
615 | 626 | this.style.display = 'none'; |
616 | 627 | } ); |
617 | | - |
| 628 | + |
618 | 629 | // Update menus |
619 | 630 | $j(threadContainer).each( liquidThreads.setupMenus ); |
620 | | - |
| 631 | + |
621 | 632 | // Update thread-level menu, if appropriate |
622 | 633 | if ( $j(threadWrapper).hasClass( 'lqt-thread-topmost' ) ) { |
623 | 634 | // To perform better, check the 3 elements before the top-level thread container before |
— | — | @@ -624,25 +635,25 @@ |
625 | 636 | var menu = undefined; |
626 | 637 | var threadLevelCommandSelector = '#lqt-threadlevel-commands-'+threadId; |
627 | 638 | var traverseElement = $j(threadWrapper); |
628 | | - |
| 639 | + |
629 | 640 | for( i=0;i<3 && typeof menu == 'undefined';++i ) { |
630 | 641 | traverseElement = traverseElement.prev(); |
631 | 642 | if ( traverseElement.is(threadLevelCommandSelector) ) { |
632 | 643 | menu = traverseElement |
633 | 644 | } |
634 | 645 | } |
635 | | - |
| 646 | + |
636 | 647 | if ( typeof menu == 'undefined' ) { |
637 | 648 | menu = $j(threadLevelCommandSelector); |
638 | 649 | } |
639 | | - |
| 650 | + |
640 | 651 | liquidThreads.setupThreadMenu( menu, threadId ); |
641 | 652 | } |
642 | 653 | }, |
643 | | - |
| 654 | + |
644 | 655 | 'showReplies' : function(e) { |
645 | 656 | e.preventDefault(); |
646 | | - |
| 657 | + |
647 | 658 | // Grab the closest thread |
648 | 659 | var thread = $j(this).closest('.lqt_thread').find('div.lqt-post-wrapper')[0]; |
649 | 660 | thread = $j(thread); |
— | — | @@ -650,98 +661,98 @@ |
651 | 662 | var replies = thread.parent().find('.lqt-thread-replies'); |
652 | 663 | var loader = $j('<div class="mw-ajax-loader"/>'); |
653 | 664 | var sep = $j('<div class="lqt-post-sep"> </div>'); |
654 | | - |
| 665 | + |
655 | 666 | replies.empty(); |
656 | 667 | replies.hide(); |
657 | 668 | replies.before( loader ); |
658 | | - |
| 669 | + |
659 | 670 | var apiParams = { 'action' : 'query', 'list' : 'threads', 'thid' : threadId, |
660 | 671 | 'format' : 'json', 'thrender' : '1', 'thprop' : 'id' }; |
661 | | - |
| 672 | + |
662 | 673 | $j.get( wgScriptPath+'/api'+wgScriptExtension, apiParams, |
663 | 674 | function(data) { |
664 | 675 | // Interpret |
665 | 676 | var content = data.query.threads[threadId].content; |
666 | 677 | content = $j(content).find('.lqt-thread-replies')[0]; |
667 | | - |
| 678 | + |
668 | 679 | // Inject |
669 | 680 | replies.empty().append( $j(content).contents() ); |
670 | | - |
| 681 | + |
671 | 682 | // Remove post separator, if it follows the replies element |
672 | 683 | if ( replies.next().is('.lqt-post-sep') ) { |
673 | 684 | replies.next().remove(); |
674 | 685 | } |
675 | | - |
| 686 | + |
676 | 687 | // Set up |
677 | 688 | replies.find('div.lqt-post-wrapper').each( function() { |
678 | 689 | liquidThreads.setupThread( $j(this) ); |
679 | 690 | } ); |
680 | | - |
| 691 | + |
681 | 692 | replies.before(sep); |
682 | | - |
| 693 | + |
683 | 694 | // Show |
684 | 695 | loader.remove(); |
685 | 696 | replies.fadeIn('slow'); |
686 | 697 | }, 'json' ); |
687 | 698 | }, |
688 | | - |
| 699 | + |
689 | 700 | 'showMore' : function(e) { |
690 | 701 | e.preventDefault(); |
691 | | - |
| 702 | + |
692 | 703 | // Add spinner |
693 | 704 | var loader = $j('<div class="mw-ajax-loader"/>'); |
694 | 705 | $j(this).after(loader); |
695 | | - |
| 706 | + |
696 | 707 | // Grab the appropriate thread |
697 | 708 | var thread = $j(this).closest('.lqt_thread').find('div.lqt-post-wrapper')[0]; |
698 | 709 | thread = $j(thread); |
699 | 710 | var threadId = thread.data('thread-id'); |
700 | | - |
| 711 | + |
701 | 712 | // Find the hidden field that gives the point to start at. |
702 | 713 | var startAtField = $j(this).siblings().filter('.lqt-thread-start-at'); |
703 | 714 | var startAt = startAtField.val(); |
704 | 715 | startAtField.remove(); |
705 | | - |
| 716 | + |
706 | 717 | // API request |
707 | 718 | var apiParams = { 'action' : 'query', 'list' : 'threads', 'thid' : threadId, |
708 | 719 | 'format' : 'json', 'thrender' : '1', 'thprop' : 'id', |
709 | 720 | 'threnderstartrepliesat' : startAt }; |
710 | | - |
| 721 | + |
711 | 722 | $j.get( wgScriptPath+'/api.php', apiParams, |
712 | 723 | function(data) { |
713 | 724 | var content = data.query.threads[threadId].content; |
714 | 725 | content = $j(content).find('.lqt-thread-replies')[0]; |
715 | 726 | content = $j(content).contents(); |
716 | 727 | content = content.not('.lqt-replies-finish'); |
717 | | - |
| 728 | + |
718 | 729 | if ( $j(content[0]).is('.lqt-post-sep') ) { |
719 | 730 | content = content.not($j(content[0])); |
720 | 731 | } |
721 | | - |
| 732 | + |
722 | 733 | // Inject loaded content. |
723 | 734 | content.hide(); |
724 | 735 | loader.after( content ); |
725 | | - |
| 736 | + |
726 | 737 | content.find('div.lqt-post-wrapper').each( function() { |
727 | 738 | liquidThreads.setupThread( $j(this) ); |
728 | 739 | } ); |
729 | | - |
| 740 | + |
730 | 741 | content.fadeIn(); |
731 | 742 | loader.remove(); |
732 | 743 | }, 'json' ); |
733 | | - |
| 744 | + |
734 | 745 | $j(this).remove(); |
735 | 746 | }, |
736 | | - |
| 747 | + |
737 | 748 | 'asyncWatch' : function(e) { |
738 | 749 | var button = $j(this); |
739 | 750 | var tlcOffset = "lqt-threadlevel-commands-".length; |
740 | | - |
| 751 | + |
741 | 752 | // Find the title of the thread |
742 | 753 | var threadLevelCommands = button.closest('.lqt_threadlevel_commands'); |
743 | 754 | var threadID = threadLevelCommands.attr('id').substring( tlcOffset ); |
744 | 755 | var title = $j('#lqt-thread-title-'+threadID).val(); |
745 | | - |
| 756 | + |
746 | 757 | // Check if we're watching or unwatching. |
747 | 758 | var action = ''; |
748 | 759 | if ( button.hasClass( 'lqt-command-watch' ) ) { |
— | — | @@ -751,26 +762,26 @@ |
752 | 763 | button.removeClass( 'lqt-command-unwatch' ); |
753 | 764 | action = 'unwatch'; |
754 | 765 | } |
755 | | - |
| 766 | + |
756 | 767 | // Replace the watch link with a spinner |
757 | 768 | button.empty().addClass( 'mw-small-spinner' ); |
758 | | - |
| 769 | + |
759 | 770 | // Do the AJAX call. |
760 | 771 | var apiParams = { 'action' : 'watch', 'title' : title, 'format' : 'json' }; |
761 | | - |
| 772 | + |
762 | 773 | if (action == 'unwatch') { |
763 | 774 | apiParams.unwatch = 'yes'; |
764 | 775 | } |
765 | | - |
| 776 | + |
766 | 777 | $j.get( wgScriptPath+'/api'+wgScriptExtension, apiParams, |
767 | 778 | function( data ) { |
768 | 779 | threadLevelCommands.load( window.location.href+' '+ |
769 | 780 | '#'+threadLevelCommands.attr('id')+' > *' ); |
770 | 781 | }, 'json' ); |
771 | | - |
| 782 | + |
772 | 783 | e.preventDefault(); |
773 | 784 | }, |
774 | | - |
| 785 | + |
775 | 786 | 'showThreadLinkWindow' : function(e) { |
776 | 787 | e.preventDefault(); |
777 | 788 | var linkURL = $j(this).find('a').attr('href'); |
— | — | @@ -778,43 +789,42 @@ |
779 | 790 | var linkTitle = thread.find('.lqt-thread-title-metadata').val(); |
780 | 791 | liquidThreads.showLinkWindow( linkTitle, linkURL ); |
781 | 792 | }, |
782 | | - |
| 793 | + |
783 | 794 | 'showSummaryLinkWindow' : function(e) { |
784 | 795 | e.preventDefault(); |
785 | 796 | var linkURL = $j(this).attr('href'); |
786 | 797 | var linkTitle = $j(this).parent().find('input[name=summary-title]').val(); |
787 | 798 | liquidThreads.showLinkWindow( linkTitle, linkURL ); |
788 | 799 | }, |
789 | | - |
| 800 | + |
790 | 801 | 'showLinkWindow' : function(linkTitle, linkURL) { |
791 | 802 | linkTitle = '[['+linkTitle+']]'; |
792 | | - |
| 803 | + |
793 | 804 | // Build dialog |
794 | 805 | var urlLabel = $j('<th/>').text(wgLqtMessages['lqt-thread-link-url']); |
795 | 806 | var urlField = $j('<td/>').addClass( 'lqt-thread-link-url' ); |
796 | 807 | urlField.text(linkURL); |
797 | 808 | var urlRow = $j('<tr/>').append(urlLabel).append(urlField ); |
798 | | - |
| 809 | + |
799 | 810 | var titleLabel = $j('<th/>').text(wgLqtMessages['lqt-thread-link-title']); |
800 | 811 | var titleField = $j('<td/>').addClass( 'lqt-thread-link-title' ); |
801 | 812 | titleField.text(linkTitle); |
802 | 813 | var titleRow = $j('<tr/>').append(titleLabel).append(titleField ); |
803 | | - |
| 814 | + |
804 | 815 | var table = $j('<table><tbody></tbody></table>'); |
805 | 816 | table.find('tbody').append(urlRow).append(titleRow); |
806 | | - |
| 817 | + |
807 | 818 | var dialog = $j('<div/>').append(table); |
808 | | - |
| 819 | + |
809 | 820 | $j('body').prepend(dialog); |
810 | | - |
| 821 | + |
811 | 822 | var dialogOptions = { |
812 | | - 'AutoOpen' : true, |
813 | 823 | 'width' : 600 |
814 | 824 | }; |
815 | | - |
| 825 | + |
816 | 826 | dialog.dialog( dialogOptions ); |
817 | 827 | }, |
818 | | - |
| 828 | + |
819 | 829 | 'getToken' : function( callback ) { |
820 | 830 | var getTokenParams = |
821 | 831 | { |
— | — | @@ -824,121 +834,81 @@ |
825 | 835 | 'titles' : 'Some Title', |
826 | 836 | 'format' : 'json' |
827 | 837 | }; |
828 | | - |
| 838 | + |
829 | 839 | $j.get( wgScriptPath+'/api'+wgScriptExtension, getTokenParams, |
830 | 840 | function( data ) { |
831 | 841 | var token = data.query.pages[-1].edittoken; |
832 | | - |
| 842 | + |
833 | 843 | callback(token); |
834 | 844 | }, 'json' ); |
835 | 845 | }, |
836 | | - |
| 846 | + |
837 | 847 | 'handleAJAXSave' : function( e ) { |
838 | 848 | var editform = $j(this).closest('.lqt-edit-form'); |
839 | 849 | var type = editform.find('input[name=lqt_method]').val(); |
840 | | - |
| 850 | + |
841 | 851 | var text = editform.find('#wpTextbox1').val(); |
842 | 852 | var summary = editform.find('#wpSummary').val(); |
843 | | - |
| 853 | + |
844 | 854 | var signature; |
845 | 855 | if ( editform.find('input[name=wpLqtSignature]').length ) { |
846 | 856 | signature = editform.find('input[name=wpLqtSignature]').val(); |
847 | 857 | } else { |
848 | 858 | signature = undefined |
849 | 859 | } |
850 | | - |
| 860 | + |
851 | 861 | // Check if summary is undefined |
852 | 862 | if (summary === undefined) { |
853 | 863 | summary = ''; |
854 | 864 | } |
855 | | - |
| 865 | + |
856 | 866 | var subject = editform.find( '#lqt_subject_field' ).val(); |
857 | 867 | var replyThread = editform.find('input[name=lqt_operand]').val(); |
858 | 868 | var bump = editform.find('#wpBumpThread').is(':checked') ? 1 : 0; |
859 | | - |
| 869 | + |
860 | 870 | var spinner = $j('<div class="mw-ajax-loader"/>'); |
861 | 871 | editform.prepend(spinner); |
862 | | - |
863 | | - var replyCallback = function( data ) { |
864 | | - // Grab topmost thread, reload it. |
865 | | - var topmostThread = editform.closest('.lqt-thread-topmost'); |
866 | | - var post = topmostThread.find('.lqt-post-wrapper'); |
867 | | -// var threadID = post.data('thread-id'); Unused, but useful |
868 | | - var newPostID = data.threadaction.thread['thread-id']; |
869 | | - |
870 | | - // Load data from JSON |
871 | | - var html = data.threadaction.thread['html'] |
872 | | - var newContent = $j(html); |
873 | | - |
874 | | - // Clear old post. |
875 | | - topmostThread.empty(); |
876 | | - |
877 | | - // Replace post content |
878 | | - var newThread = newContent.filter('div.lqt_thread')[0]; |
879 | | - var newThreadContent = $j(newThread).contents(); |
880 | | - topmostThread.append( newThreadContent ); |
881 | | - topmostThread.removeClass( 'lqt-thread-no-subthreads' ); |
882 | | - topmostThread.addClass( 'lqt-thread-with-subthreads' ); |
883 | | - |
884 | | - // Set up thread. |
885 | | - topmostThread.find('.lqt-post-wrapper').each( function() { |
886 | | - liquidThreads.setupThread( $j(this) ); |
887 | | - } ); |
888 | | - |
889 | | - // Scroll to the new post. |
890 | | - var newPost = $j('#lqt_thread_id_'+newPostID); |
891 | | - var targetOffset = $j(newPost).offset().top; |
892 | | - $j('html,body').animate({scrollTop: targetOffset}, 'slow'); |
| 872 | + |
| 873 | + var replyCallback = function( data ) { |
| 874 | + $parent = $j( '#lqt_thread_id_' + data.threadaction.thread['parent-id'] ); |
| 875 | + $html = $j( data.threadaction.thread['html'] ); |
| 876 | + $newThread = $html.find( '#lqt_thread_id_' + data.threadaction.thread['thread-id'] ); |
| 877 | + $parent.find( '.lqt-thread-replies:first' ).append( $newThread ); |
| 878 | + liquidThreads.setupThread( $newThread.find( '.lqt-post-wrapper' ) ); |
| 879 | + $j( 'html,body' ).animate({scrollTop: $newThread.offset().top}, 'slow'); |
893 | 880 | }; |
894 | | - |
| 881 | + |
895 | 882 | var newCallback = function( data ) { |
896 | | - // Grab the thread ID |
897 | | - var newThreadID = data.threadaction.thread['thread-id']; |
898 | | - var html = data.threadaction.thread['html']; |
899 | | - |
900 | | - var newThread = $j(html); |
901 | | - |
902 | | - if ( $j('.lqt_toc').length ) { |
903 | | - $j('.lqt_toc').after(newThread); |
904 | | - } else { |
905 | | - $j('.lqt-no-threads').replaceWith( newThread ); |
906 | | - } |
907 | | - |
908 | | - $j(newThread).find( '.lqt-post-wrapper').each( |
909 | | - function() { |
910 | | - // Set up thread. |
911 | | - liquidThreads.setupThread( $j(this) ); |
912 | | - |
913 | | - targetOffset = $j(this).offset().top; |
914 | | - $j('html,body').animate( |
915 | | - {scrollTop: targetOffset}, |
916 | | - 'slow'); |
917 | | - } |
918 | | - ); |
| 883 | + var $newThread = $j( data.threadaction.thread['html'] ); |
| 884 | + $j( '.lqt-threads' ).prepend( $newThread ); |
| 885 | + // remove the no threads message if it's on the page |
| 886 | + $j('.lqt-no-threads').remove(); |
| 887 | + liquidThreads.setupThread( $newThread.find( '.lqt-post-wrapper' ) ); |
| 888 | + $j( 'html,body' ).animate( { scrollTop: $newThread.offset().top }, 'slow' ); |
919 | 889 | }; |
920 | | - |
| 890 | + |
921 | 891 | var editCallback = function( data ) { |
922 | 892 | var thread = editform.closest('.lqt-thread-topmost'); |
923 | | - |
| 893 | + |
924 | 894 | liquidThreads.doReloadThread( thread ); |
925 | 895 | } |
926 | | - |
| 896 | + |
927 | 897 | var doneCallback = function(data) { |
928 | 898 | try { |
929 | 899 | var result = data.threadaction.thread.result; |
930 | 900 | } catch ( err ) { |
931 | 901 | result = 'error'; |
932 | 902 | } |
933 | | - |
| 903 | + |
934 | 904 | if ( result != 'Success' ) { |
935 | 905 | // Create a hidden field to mimic the save button, and |
936 | 906 | // submit it normally, so they'll get a real error message. |
937 | | - |
| 907 | + |
938 | 908 | var saveHidden = $j('<input/>'); |
939 | 909 | saveHidden.attr( 'type', 'hidden' ); |
940 | 910 | saveHidden.attr( 'name', 'wpSave' ); |
941 | 911 | saveHidden.attr( 'value', 'Save' ); |
942 | | - |
| 912 | + |
943 | 913 | var form = editform.find('#editform'); |
944 | 914 | form.append(saveHidden); |
945 | 915 | form.submit(); |
— | — | @@ -946,36 +916,36 @@ |
947 | 917 | } |
948 | 918 | |
949 | 919 | var callback; |
950 | | - |
| 920 | + |
951 | 921 | if ( type == 'reply' ) { |
952 | 922 | callback = replyCallback; |
953 | 923 | } |
954 | | - |
| 924 | + |
955 | 925 | if ( type == 'talkpage_new_thread' ) { |
956 | 926 | callback = newCallback; |
957 | 927 | } |
958 | | - |
| 928 | + |
959 | 929 | if ( type == 'edit' ) { |
960 | 930 | callback = editCallback; |
961 | 931 | } |
962 | | - |
| 932 | + |
963 | 933 | editform.empty().hide(); |
964 | | - |
| 934 | + |
965 | 935 | callback(data); |
966 | | - |
| 936 | + |
967 | 937 | // Load the new TOC |
968 | 938 | liquidThreads.reloadTOC(); |
969 | 939 | }; |
970 | | - |
971 | | - if ( type == 'reply' ) { |
| 940 | + |
| 941 | + if ( type == 'reply' ) { |
972 | 942 | liquidThreads.doReply( replyThread, text, summary, |
973 | 943 | doneCallback, bump, signature ); |
974 | | - |
| 944 | + |
975 | 945 | e.preventDefault(); |
976 | 946 | } else if ( type == 'talkpage_new_thread' ) { |
977 | 947 | liquidThreads.doNewThread( wgPageName, subject, text, summary, |
978 | 948 | doneCallback, bump, signature ); |
979 | | - |
| 949 | + |
980 | 950 | e.preventDefault(); |
981 | 951 | } else if ( type == 'edit' ) { |
982 | 952 | liquidThreads.doEditThread( replyThread, subject, text, summary, |
— | — | @@ -983,19 +953,19 @@ |
984 | 954 | e.preventDefault(); |
985 | 955 | } |
986 | 956 | }, |
987 | | - |
| 957 | + |
988 | 958 | 'reloadTOC' : function() { |
989 | 959 | var toc = $j('.lqt_toc'); |
990 | | - |
| 960 | + |
991 | 961 | if ( !toc.length ) { |
992 | 962 | toc = $j('<table/>').addClass('lqt_toc'); |
993 | 963 | $j('.lqt-new-thread').after(toc); |
994 | | - |
| 964 | + |
995 | 965 | var contentsHeading = $j('<h2/>'); |
996 | 966 | contentsHeading.text(wgLqtMessages['lqt_contents_title']); |
997 | 967 | toc.before(contentsHeading); |
998 | 968 | } |
999 | | - |
| 969 | + |
1000 | 970 | var loadTOCSpinner = $j('<div class="mw-ajax-loader"/>'); |
1001 | 971 | loadTOCSpinner.css( 'height', toc.height() ); |
1002 | 972 | toc.empty().append( loadTOCSpinner ); |
— | — | @@ -1004,7 +974,7 @@ |
1005 | 975 | loadTOCSpinner.remove(); |
1006 | 976 | } ); |
1007 | 977 | }, |
1008 | | - |
| 978 | + |
1009 | 979 | 'doNewThread' : function( talkpage, subject, text, summary, callback, bump, signature ) { |
1010 | 980 | liquidThreads.getToken( |
1011 | 981 | function(token) { |
— | — | @@ -1021,11 +991,11 @@ |
1022 | 992 | 'reason' : summary, |
1023 | 993 | 'bump' : bump |
1024 | 994 | }; |
1025 | | - |
| 995 | + |
1026 | 996 | if ( typeof signature != 'undefined' ) { |
1027 | 997 | newTopicParams.signature = signature; |
1028 | 998 | } |
1029 | | - |
| 999 | + |
1030 | 1000 | $j.post( wgScriptPath+'/api'+wgScriptExtension, newTopicParams, |
1031 | 1001 | function(data) { |
1032 | 1002 | if (callback) { |
— | — | @@ -1034,7 +1004,7 @@ |
1035 | 1005 | }, 'json' ); |
1036 | 1006 | } ); |
1037 | 1007 | }, |
1038 | | - |
| 1008 | + |
1039 | 1009 | 'doReply' : function( thread, text, summary, callback, bump, signature ) { |
1040 | 1010 | liquidThreads.getToken( |
1041 | 1011 | function(token) { |
— | — | @@ -1050,11 +1020,11 @@ |
1051 | 1021 | 'reason' : summary, |
1052 | 1022 | 'bump' : bump |
1053 | 1023 | }; |
1054 | | - |
| 1024 | + |
1055 | 1025 | if ( typeof signature != 'undefined' ) { |
1056 | 1026 | replyParams.signature = signature; |
1057 | 1027 | } |
1058 | | - |
| 1028 | + |
1059 | 1029 | $j.post( wgScriptPath+'/api'+wgScriptExtension, replyParams, |
1060 | 1030 | function(data) { |
1061 | 1031 | if (callback) { |
— | — | @@ -1063,7 +1033,7 @@ |
1064 | 1034 | }, 'json' ); |
1065 | 1035 | } ); |
1066 | 1036 | }, |
1067 | | - |
| 1037 | + |
1068 | 1038 | 'doEditThread' : function( thread, subject, text, summary, |
1069 | 1039 | callback, bump, signature ) { |
1070 | 1040 | var request = |
— | — | @@ -1078,14 +1048,14 @@ |
1079 | 1049 | 'bump' : bump, |
1080 | 1050 | 'subject':subject |
1081 | 1051 | }; |
1082 | | - |
| 1052 | + |
1083 | 1053 | if ( typeof signature != 'undefined' ) { |
1084 | 1054 | request.signature = signature; |
1085 | 1055 | } |
1086 | | - |
| 1056 | + |
1087 | 1057 | liquidThreads.apiRequest( request, callback ); |
1088 | 1058 | }, |
1089 | | - |
| 1059 | + |
1090 | 1060 | 'onTextboxKeyUp' : function(e) { |
1091 | 1061 | // Check if a user has signed their post, and if so, tell them they don't have to. |
1092 | 1062 | var text = $j(this).val().trim(); |
— | — | @@ -1094,30 +1064,30 @@ |
1095 | 1065 | if ( prevWarning.length ) { |
1096 | 1066 | return; |
1097 | 1067 | } |
1098 | | - |
| 1068 | + |
1099 | 1069 | // Show the warning |
1100 | 1070 | var msg = wgLqtMessages['lqt-sign-not-necessary']; |
1101 | 1071 | var elem = $j('<div id="lqt-sign-warning" class="error"/>'); |
1102 | 1072 | elem.text(msg); |
1103 | | - |
| 1073 | + |
1104 | 1074 | $j(this).before( elem ); |
1105 | 1075 | } else { |
1106 | 1076 | prevWarning.remove(); |
1107 | 1077 | } |
1108 | 1078 | }, |
1109 | | - |
| 1079 | + |
1110 | 1080 | 'apiRequest' : function( request, callback ) { |
1111 | 1081 | // Set new subject through API. |
1112 | 1082 | liquidThreads.getToken( function(token) { |
1113 | | - |
| 1083 | + |
1114 | 1084 | if ( typeof request == 'function' ) { |
1115 | 1085 | request = request(token); |
1116 | 1086 | } else { |
1117 | 1087 | request.token = token; |
1118 | 1088 | } |
1119 | | - |
| 1089 | + |
1120 | 1090 | request.format = 'json'; |
1121 | | - |
| 1091 | + |
1122 | 1092 | var path = wgScriptPath+'/api'+wgScriptExtension; |
1123 | 1093 | $j.post( path, request, |
1124 | 1094 | function(data) { |
— | — | @@ -1127,23 +1097,23 @@ |
1128 | 1098 | }, 'json' ); |
1129 | 1099 | } ); |
1130 | 1100 | }, |
1131 | | - |
| 1101 | + |
1132 | 1102 | 'activateDragDrop' : function(e) { |
1133 | 1103 | e.preventDefault(); |
1134 | | - |
| 1104 | + |
1135 | 1105 | // Set up draggability. |
1136 | 1106 | var thread = $j(this).closest('.lqt_thread'); |
1137 | 1107 | var threadID = thread.find('.lqt-post-wrapper').data('thread-id'); |
1138 | 1108 | var scrollOffset; |
1139 | | - |
| 1109 | + |
1140 | 1110 | $j('html,body').each( |
1141 | 1111 | function() { |
1142 | 1112 | if ( $j(this).attr('scrollTop') ) |
1143 | 1113 | scrollOffset = $j(this).attr('scrollTop'); |
1144 | 1114 | } ); |
1145 | | - |
| 1115 | + |
1146 | 1116 | scrollOffset = scrollOffset - thread.offset().top; |
1147 | | - |
| 1117 | + |
1148 | 1118 | var helperFunc; |
1149 | 1119 | if ( thread.hasClass( 'lqt-thread-topmost' ) ) { |
1150 | 1120 | var header = $j('#lqt-header-'+threadID); |
— | — | @@ -1158,7 +1128,7 @@ |
1159 | 1129 | return helper; |
1160 | 1130 | }; |
1161 | 1131 | } |
1162 | | - |
| 1132 | + |
1163 | 1133 | var draggableOptions = |
1164 | 1134 | { |
1165 | 1135 | 'axis' : 'y', |
— | — | @@ -1167,10 +1137,10 @@ |
1168 | 1138 | 'helper' : helperFunc |
1169 | 1139 | }; |
1170 | 1140 | thread.draggable( draggableOptions ); |
1171 | | - |
| 1141 | + |
1172 | 1142 | // Kill all existing drop zones |
1173 | 1143 | $j('.lqt-drop-zone').remove(); |
1174 | | - |
| 1144 | + |
1175 | 1145 | // Set up some dropping targets. Add one before the first thread, after every |
1176 | 1146 | // other thread, and as a subthread of every post. |
1177 | 1147 | var createDropZone = function( ) { |
— | — | @@ -1178,42 +1148,40 @@ |
1179 | 1149 | element.text( wgLqtMessages['lqt-drag-drop-zone'] ); |
1180 | 1150 | return element; |
1181 | 1151 | }; |
1182 | | - |
| 1152 | + |
1183 | 1153 | // First drop zone |
1184 | 1154 | var firstDropZone = createDropZone(); |
1185 | 1155 | firstDropZone.data( 'sortkey', 'now' ); |
1186 | 1156 | firstDropZone.data( 'parent', 'top' ); |
1187 | | - var firstThread = $j('.lqt-thread-topmost.lqt-thread-first'); |
1188 | | - var firstThreadID = firstThread.find('.lqt-post-wrapper').data('thread-id'); |
1189 | | - var firstHeading = $j('#lqt-header-'+firstThreadID); |
1190 | | - firstHeading.before(firstDropZone); |
1191 | | - |
| 1157 | + var firstThread = $j('.lqt-thread-topmost:first'); |
| 1158 | + firstThread.before(firstDropZone); |
| 1159 | + |
1192 | 1160 | // Now one after every thread |
1193 | 1161 | $j('.lqt-thread-topmost').each( function() { |
1194 | 1162 | var sortkeySelector = 'input[name=lqt-thread-sortkey]'; |
1195 | 1163 | var sortkeyField = $j(this).contents().filter(sortkeySelector); |
1196 | 1164 | var sortkey = parseInt(sortkeyField.val()); |
1197 | | - |
| 1165 | + |
1198 | 1166 | var dropZone = createDropZone(); |
1199 | 1167 | dropZone.data( 'sortkey', sortkey - 1 ); |
1200 | 1168 | dropZone.data( 'parent', 'top' ); |
1201 | 1169 | $j(this).after(dropZone); |
1202 | 1170 | } ); |
1203 | | - |
| 1171 | + |
1204 | 1172 | // Now one underneath every thread |
1205 | | - $j('.lqt_thread').each( function() { |
| 1173 | + $j('.lqt_thread').not(thread).each( function() { |
1206 | 1174 | var thread = $j(this); |
1207 | 1175 | var repliesElement = liquidThreads.getRepliesElement( thread ); |
1208 | 1176 | var dropZone = createDropZone(); |
1209 | 1177 | var threadId = thread.data('thread-id'); |
1210 | | - |
| 1178 | + |
1211 | 1179 | dropZone.data( 'sortkey', 'now' ); |
1212 | 1180 | dropZone.data( 'parent', threadId ); |
1213 | | - |
| 1181 | + |
1214 | 1182 | repliesElement.contents().filter('.lqt-replies-finish').before(dropZone); |
1215 | | - |
| 1183 | + |
1216 | 1184 | } ); |
1217 | | - |
| 1185 | + |
1218 | 1186 | var droppableOptions = |
1219 | 1187 | { |
1220 | 1188 | 'activeClass' : 'lqt-drop-zone-active', |
— | — | @@ -1221,24 +1189,24 @@ |
1222 | 1190 | 'drop' : liquidThreads.completeDragDrop, |
1223 | 1191 | 'tolerance' : 'intersect' |
1224 | 1192 | }; |
1225 | | - |
| 1193 | + |
1226 | 1194 | $j('.lqt-drop-zone').droppable( droppableOptions ); |
1227 | | - |
| 1195 | + |
1228 | 1196 | scrollOffset = scrollOffset + thread.offset().top; |
1229 | | - |
| 1197 | + |
1230 | 1198 | // Reset scroll position |
1231 | 1199 | $j('html,body').attr( 'scrollTop', scrollOffset ); |
1232 | 1200 | }, |
1233 | | - |
| 1201 | + |
1234 | 1202 | 'completeDragDrop' : function( e, ui ) { |
1235 | 1203 | var thread = $j(ui.draggable); |
1236 | | - |
| 1204 | + |
1237 | 1205 | // Determine parameters |
1238 | 1206 | var params = { |
1239 | 1207 | 'sortkey' : $j(this).data('sortkey'), |
1240 | 1208 | 'parent' : $j(this).data('parent') |
1241 | 1209 | }; |
1242 | | - |
| 1210 | + |
1243 | 1211 | // Figure out an insertion point |
1244 | 1212 | if ( $j(this).prev().length ) { |
1245 | 1213 | params.insertAfter = $j(this).prev(); |
— | — | @@ -1247,76 +1215,80 @@ |
1248 | 1216 | } else { |
1249 | 1217 | params.insertUnder = $j(this).parent(); |
1250 | 1218 | } |
1251 | | - |
| 1219 | + |
1252 | 1220 | // Kill the helper. |
1253 | 1221 | ui.helper.remove(); |
1254 | | - |
| 1222 | + |
1255 | 1223 | setTimeout( function() { thread.draggable('destroy'); }, 1 ); |
1256 | | - |
| 1224 | + |
1257 | 1225 | // Remove drop points and schedule removal of empty replies elements. |
1258 | 1226 | var emptyChecks = []; |
1259 | 1227 | $j('.lqt-drop-zone').each( function() { |
1260 | 1228 | var repliesHolder = $j(this).closest('.lqt-thread-replies'); |
1261 | | - |
| 1229 | + |
1262 | 1230 | $j(this).remove(); |
1263 | | - |
| 1231 | + |
1264 | 1232 | if (repliesHolder.length) { |
1265 | 1233 | liquidThreads.checkEmptyReplies( repliesHolder, 'hide' ); |
1266 | 1234 | emptyChecks = $j.merge( emptyChecks, repliesHolder ); |
1267 | 1235 | } |
1268 | 1236 | } ); |
1269 | | - |
| 1237 | + |
1270 | 1238 | params.emptyChecks = emptyChecks; |
1271 | | - |
| 1239 | + |
1272 | 1240 | // Now, let's do our updates |
1273 | 1241 | liquidThreads.confirmDragDrop( thread, params ); |
1274 | 1242 | }, |
1275 | | - |
| 1243 | + |
1276 | 1244 | 'confirmDragDrop' : function( thread, params ) { |
1277 | 1245 | var confirmDialog = $j('<div class="lqt-drag-confirm" />'); |
1278 | | - |
| 1246 | + |
1279 | 1247 | // Add an intro |
1280 | 1248 | var intro = $j('<p/>').text( wgLqtMessages['lqt-drag-confirm'] ); |
1281 | 1249 | confirmDialog.append( intro ); |
1282 | | - |
| 1250 | + |
1283 | 1251 | // Summarize changes to be made |
1284 | 1252 | var actionSummary = $j('<ul/>'); |
1285 | | - |
| 1253 | + |
1286 | 1254 | var addAction = function(msg) { |
1287 | 1255 | var li = $j('<li/>'); |
1288 | 1256 | li.text( wgLqtMessages[msg] ); |
1289 | 1257 | actionSummary.append(li); |
1290 | 1258 | }; |
1291 | | - |
| 1259 | + |
1292 | 1260 | var bump = (params.sortkey == 'now'); |
1293 | 1261 | var topLevel = (params.parent == 'top'); |
1294 | 1262 | var wasTopLevel = thread.hasClass( 'lqt-thread-topmost' ); |
1295 | | - |
| 1263 | + |
1296 | 1264 | if ( params.sortkey == 'now' && wasTopLevel && topLevel ) { |
1297 | 1265 | addAction( 'lqt-drag-bump' ); |
1298 | 1266 | } else if ( topLevel && params.sortkey != 'now' ) { |
1299 | 1267 | addAction( 'lqt-drag-setsortkey' ); |
1300 | 1268 | } |
1301 | | - |
| 1269 | + |
1302 | 1270 | if ( !wasTopLevel && topLevel ) { |
1303 | 1271 | addAction( 'lqt-drag-split' ); |
1304 | 1272 | } else if ( !topLevel ) { |
1305 | 1273 | addAction( 'lqt-drag-reparent' ); |
1306 | 1274 | } |
1307 | | - |
| 1275 | + |
1308 | 1276 | confirmDialog.append(actionSummary); |
1309 | | - |
| 1277 | + |
1310 | 1278 | // Summary prompt |
1311 | | - var summaryPrompt = $j('<p/>').text( wgLqtMessages['lqt-drag-reason'] ); |
| 1279 | + var summaryWrapper = $j('<p/>'); |
| 1280 | + var summaryPrompt = $j('<label for="reason" />').text( wgLqtMessages['lqt-drag-reason'] ); |
1312 | 1281 | var summaryField = $j('<input type="text" size="45"/>'); |
1313 | | - summaryField.addClass( 'lqt-drag-confirm-reason' ).attr('name', 'reason'); |
1314 | | - summaryPrompt.append( summaryField ); |
1315 | | - confirmDialog.append( summaryPrompt ); |
1316 | | - |
| 1282 | + summaryField.addClass( 'lqt-drag-confirm-reason' ) |
| 1283 | + .attr( 'name', 'reason' ) |
| 1284 | + .attr( 'id', 'reason' ); |
| 1285 | + summaryWrapper.append( summaryPrompt ); |
| 1286 | + summaryWrapper.append( summaryField ); |
| 1287 | + confirmDialog.append( summaryWrapper ); |
| 1288 | + |
1317 | 1289 | if ( typeof params.reason != 'undefined' ) { |
1318 | 1290 | summaryField.val(params.reason); |
1319 | 1291 | } |
1320 | | - |
| 1292 | + |
1321 | 1293 | // New subject prompt, if appropriate |
1322 | 1294 | if ( !wasTopLevel && topLevel ) { |
1323 | 1295 | var subjectPrompt = $j('<p/>').text( wgLqtMessages['lqt-drag-subject'] ); |
— | — | @@ -1326,10 +1298,10 @@ |
1327 | 1299 | subjectPrompt.append( subjectField ); |
1328 | 1300 | confirmDialog.append( subjectPrompt ); |
1329 | 1301 | } |
1330 | | - |
| 1302 | + |
1331 | 1303 | // Now dialogify it. |
1332 | 1304 | $j('body').append(confirmDialog); |
1333 | | - |
| 1305 | + |
1334 | 1306 | var spinner; |
1335 | 1307 | var successCallback = function() { |
1336 | 1308 | confirmDialog.dialog('close'); |
— | — | @@ -1337,130 +1309,103 @@ |
1338 | 1310 | spinner.remove(); |
1339 | 1311 | liquidThreads.reloadTOC(); |
1340 | 1312 | }; |
1341 | | - |
| 1313 | + |
1342 | 1314 | var buttonLabel = wgLqtMessages['lqt-drag-save'] |
1343 | 1315 | var buttons = {}; |
1344 | 1316 | buttons[buttonLabel] = |
1345 | 1317 | function() { |
1346 | 1318 | // Load data |
1347 | 1319 | params.reason = $j(this).find('input[name=reason]').val(); |
1348 | | - |
| 1320 | + |
1349 | 1321 | if ( !wasTopLevel && topLevel ) { |
1350 | 1322 | params.subject = |
1351 | 1323 | $j(this).find('input[name=subject]').val(); |
1352 | 1324 | } |
1353 | | - |
| 1325 | + |
1354 | 1326 | // Add spinners |
1355 | 1327 | spinner = $j('<div class="mw-ajax-loader" />'); |
1356 | 1328 | thread.before(spinner) |
1357 | | - |
| 1329 | + |
1358 | 1330 | if ( typeof params.insertAfter != 'undefined' ) { |
1359 | 1331 | params.insertAfter.after(spinner); |
1360 | 1332 | } |
1361 | | - |
| 1333 | + |
1362 | 1334 | $j(this).dialog('close'); |
1363 | | - |
| 1335 | + |
1364 | 1336 | liquidThreads.submitDragDrop( thread, params, |
1365 | 1337 | successCallback ); |
1366 | 1338 | }; |
1367 | | - confirmDialog.dialog( { 'AutoOpen' : true, 'buttons' : buttons, |
1368 | | - 'modal' : true } ); |
| 1339 | + confirmDialog.dialog( { 'title': wgLqtMessages['lqt-drag-title'], |
| 1340 | + 'buttons' : buttons, 'modal' : true, 'width': 550 } ); |
1369 | 1341 | }, |
1370 | | - |
| 1342 | + |
1371 | 1343 | 'submitDragDrop' : function( thread, params, callback ) { |
1372 | 1344 | var newSortkey = params.sortkey; |
1373 | 1345 | var newParent = params.parent; |
1374 | 1346 | var threadId = thread.find('.lqt-post-wrapper').data('thread-id'); |
1375 | | - |
| 1347 | + |
1376 | 1348 | var bump = (params.sortkey == 'now'); |
1377 | 1349 | var topLevel = (newParent == 'top'); |
1378 | 1350 | var wasTopLevel = thread.hasClass( 'lqt-thread-topmost' ); |
1379 | | - |
| 1351 | + |
1380 | 1352 | var doEmptyChecks = function() { |
1381 | 1353 | $j.each( params.emptyChecks, function( k, element ) { |
1382 | 1354 | liquidThreads.checkEmptyReplies( $j(element) ); |
1383 | 1355 | } ); |
1384 | 1356 | }; |
1385 | | - |
| 1357 | + |
1386 | 1358 | var doneCallback = |
1387 | 1359 | function(data) { |
1388 | 1360 | // TODO error handling |
1389 | 1361 | var result; |
1390 | 1362 | result = 'success'; |
1391 | | - |
| 1363 | + |
1392 | 1364 | if (typeof data == 'undefined' || !data || |
1393 | 1365 | typeof data.threadaction == 'undefined' ) { |
1394 | 1366 | result = 'failure'; |
1395 | 1367 | } |
1396 | | - |
| 1368 | + |
1397 | 1369 | if (typeof data.error != 'undefined') { |
1398 | 1370 | result = data.error.code+': '+data.error.description; |
1399 | 1371 | } |
1400 | | - |
| 1372 | + |
1401 | 1373 | if (result != 'success') { |
1402 | 1374 | alert( "Error: "+result ); |
1403 | 1375 | doEmptyChecks(); |
1404 | 1376 | return; |
1405 | 1377 | } |
1406 | | - |
| 1378 | + |
1407 | 1379 | var payload; |
1408 | 1380 | if ( typeof data.threadaction.thread != 'undefined' ) { |
1409 | 1381 | payload = data.threadaction.thread; |
1410 | 1382 | } else if (typeof data.threadaction[0] != 'undefined') { |
1411 | 1383 | payload = data.threadaction[0]; |
1412 | 1384 | } |
1413 | | - |
| 1385 | + |
1414 | 1386 | var oldParent = undefined; |
1415 | 1387 | if (!wasTopLevel) { |
1416 | 1388 | oldParent = thread.closest('.lqt-thread-topmost'); |
1417 | 1389 | } |
1418 | | - |
| 1390 | + |
1419 | 1391 | // Do the actual physical movement |
1420 | 1392 | var threadId = thread.find('.lqt-post-wrapper') |
1421 | 1393 | .data('thread-id'); |
1422 | | - var topmost = thread.hasClass('lqt-thread-topmost'); |
1423 | 1394 | |
1424 | | - if ( topmost ) { |
1425 | | - var heading = $j('#lqt-header-'+threadId); |
1426 | | - } |
1427 | | - |
1428 | 1395 | // Assorted ways of returning a thread to its proper place. |
1429 | | - if ( typeof params.insertAfter != 'undefined' ) { |
1430 | | - // Move the heading |
1431 | | - if ( topmost ) { |
1432 | | - heading.remove(); |
1433 | | - params.insertAfter.after(heading); |
1434 | | - thread.remove(); |
1435 | | - heading.after( thread ); |
1436 | | - } else { |
1437 | | - thread.remove(); |
1438 | | - params.insertAfter.after(thread); |
1439 | | - } |
| 1396 | + if ( typeof params.insertAfter != 'undefined' ) { |
| 1397 | + thread.remove(); |
| 1398 | + params.insertAfter.after(thread); |
1440 | 1399 | } else if ( typeof params.insertBefore != 'undefined' ) { |
1441 | | - if ( topmost ) { |
1442 | | - heading.remove(); |
1443 | | - params.insertBefore.before(heading); |
1444 | | - thread.remove(); |
1445 | | - heading.after( thread ); |
1446 | | - } else { |
1447 | | - thread.remove(); |
1448 | | - params.insertBefore.before( thread ); |
1449 | | - } |
| 1400 | + thread.remove(); |
| 1401 | + params.insertBefore.before( thread ); |
1450 | 1402 | } else if ( typeof params.insertUnder != 'undefined' ) { |
1451 | | - if ( topmost ) { |
1452 | | - heading.remove(); |
1453 | | - params.insertUnder.prepend(heading); |
1454 | | - thread.remove(); |
1455 | | - heading.after(thread); |
1456 | | - } else { |
1457 | | - thread.remove(); |
1458 | | - params.insertUnder.prepend(thread); |
1459 | | - } |
| 1403 | + thread.remove(); |
| 1404 | + params.insertUnder.prepend(thread); |
1460 | 1405 | } |
1461 | | - |
| 1406 | + |
1462 | 1407 | thread.data('thread-id', threadId); |
1463 | 1408 | thread.find('.lqt-post-wrapper').data('thread-id', threadId); |
1464 | | - |
| 1409 | + |
1465 | 1410 | if ( typeof payload['new-sortkey'] |
1466 | 1411 | != 'undefined') { |
1467 | 1412 | newSortKey = payload['new-sortkey']; |
— | — | @@ -1469,36 +1414,36 @@ |
1470 | 1415 | } else { |
1471 | 1416 | // Force an update on the top-level thread |
1472 | 1417 | var reloadThread = thread; |
1473 | | - |
| 1418 | + |
1474 | 1419 | if ( ! topLevel && typeof payload['new-ancestor-id'] |
1475 | 1420 | != 'undefined' ) { |
1476 | 1421 | var ancestorId = payload['new-ancestor-id']; |
1477 | 1422 | reloadThread = |
1478 | 1423 | $j('#lqt_thread_id_'+ancestorId); |
1479 | 1424 | } |
1480 | | - |
| 1425 | + |
1481 | 1426 | liquidThreads.doReloadThread( reloadThread ); |
1482 | 1427 | } |
1483 | | - |
| 1428 | + |
1484 | 1429 | // Kill the heading, if there isn't one. |
1485 | | - if ( !topLevel && wasTopLevel && heading.length ) { |
1486 | | - heading.remove(); |
| 1430 | + if ( !topLevel && wasTopLevel ) { |
| 1431 | + thread.find('h2.lqt_header').remove(); |
1487 | 1432 | } |
1488 | | - |
| 1433 | + |
1489 | 1434 | if ( !wasTopLevel && typeof oldParent != 'undefined' ) { |
1490 | 1435 | liquidThreads.doReloadThread( oldParent ); |
1491 | 1436 | } |
1492 | | - |
| 1437 | + |
1493 | 1438 | // Call callback |
1494 | 1439 | if ( typeof callback == 'function' ) { |
1495 | 1440 | callback(); |
1496 | 1441 | } |
1497 | | - |
| 1442 | + |
1498 | 1443 | doEmptyChecks(); |
1499 | 1444 | } |
1500 | | - |
| 1445 | + |
1501 | 1446 | if ( !topLevel || !wasTopLevel ) { |
1502 | | - |
| 1447 | + |
1503 | 1448 | // Is it a split or a merge |
1504 | 1449 | var apiRequest = |
1505 | 1450 | { |
— | — | @@ -1507,7 +1452,7 @@ |
1508 | 1453 | 'format' : 'json', |
1509 | 1454 | 'reason' : params.reason |
1510 | 1455 | } |
1511 | | - |
| 1456 | + |
1512 | 1457 | if (topLevel) { |
1513 | 1458 | apiRequest.threadaction = 'split'; |
1514 | 1459 | apiRequest.subject = params.subject; |
— | — | @@ -1515,14 +1460,14 @@ |
1516 | 1461 | apiRequest.threadaction = 'merge'; |
1517 | 1462 | apiRequest.newparent = newParent; |
1518 | 1463 | } |
1519 | | - |
| 1464 | + |
1520 | 1465 | if ( newSortkey != 'none' ) { |
1521 | 1466 | apiRequest.sortkey = newSortkey; |
1522 | 1467 | } |
1523 | | - |
| 1468 | + |
1524 | 1469 | liquidThreads.apiRequest( apiRequest, doneCallback ); |
1525 | | - |
1526 | | - |
| 1470 | + |
| 1471 | + |
1527 | 1472 | } else if (newSortkey != 'none' ) { |
1528 | 1473 | var apiRequest = |
1529 | 1474 | { |
— | — | @@ -1533,39 +1478,39 @@ |
1534 | 1479 | 'format' : 'json', |
1535 | 1480 | 'reason' : params.reason |
1536 | 1481 | }; |
1537 | | - |
| 1482 | + |
1538 | 1483 | liquidThreads.apiRequest( apiRequest, doneCallback ); |
1539 | 1484 | } |
1540 | 1485 | }, |
1541 | | - |
| 1486 | + |
1542 | 1487 | 'handleEditSignature' : function(e) { |
1543 | 1488 | e.preventDefault(); |
1544 | | - |
| 1489 | + |
1545 | 1490 | var container = $j(this).parent(); |
1546 | | - |
| 1491 | + |
1547 | 1492 | container.find('.lqt-signature-preview').hide(); |
1548 | 1493 | container.find('input[name=wpLqtSignature]').show(); |
1549 | 1494 | $j(this).hide(); |
1550 | | - |
| 1495 | + |
1551 | 1496 | // Add a save button |
1552 | 1497 | var saveButton = $j('<a href="#"/>'); |
1553 | 1498 | saveButton.text( wgLqtMessages['lqt-preview-signature'] ); |
1554 | 1499 | saveButton.click( liquidThreads.handlePreviewSignature ); |
1555 | | - |
| 1500 | + |
1556 | 1501 | container.find('input[name=wpLqtSignature]').after(saveButton); |
1557 | 1502 | }, |
1558 | | - |
| 1503 | + |
1559 | 1504 | 'handlePreviewSignature' : function(e) { |
1560 | 1505 | e.preventDefault(); |
1561 | | - |
| 1506 | + |
1562 | 1507 | var container = $j(this).parent(); |
1563 | | - |
| 1508 | + |
1564 | 1509 | var spinner = $j('<span class="mw-small-spinner"/>'); |
1565 | 1510 | $j(this).replaceWith(spinner); |
1566 | 1511 | |
1567 | 1512 | var textbox = container.find('input[name=wpLqtSignature]'); |
1568 | 1513 | var preview = container.find('.lqt-signature-preview'); |
1569 | | - |
| 1514 | + |
1570 | 1515 | textbox.hide(); |
1571 | 1516 | var text = textbox.val(); |
1572 | 1517 | |
— | — | @@ -1576,15 +1521,15 @@ |
1577 | 1522 | 'pst' : '1', |
1578 | 1523 | 'prop' : 'text' |
1579 | 1524 | }; |
1580 | | - |
| 1525 | + |
1581 | 1526 | liquidThreads.apiRequest( function() { return apiReq; }, |
1582 | 1527 | function(data) { |
1583 | 1528 | var html = $j(data.parse.text['*'].trim()); |
1584 | | - |
| 1529 | + |
1585 | 1530 | if (html.length == 2) { // Not 1, because of the NewPP report |
1586 | 1531 | html = html.contents(); |
1587 | 1532 | } |
1588 | | - |
| 1533 | + |
1589 | 1534 | preview.empty().append(html); |
1590 | 1535 | preview.show(); |
1591 | 1536 | spinner.remove(); |
— | — | @@ -1595,50 +1540,51 @@ |
1596 | 1541 | |
1597 | 1542 | $j(document).ready( function() { |
1598 | 1543 | // One-time setup for the full page |
1599 | | - |
| 1544 | + |
1600 | 1545 | // Update the new thread link |
1601 | 1546 | var newThreadLink = $j('.lqt_start_discussion a'); |
1602 | 1547 | newThreadLink = newThreadLink.add( $j('li#ca-addsection a') ); |
1603 | | - |
| 1548 | + |
1604 | 1549 | if (newThreadLink) { |
1605 | 1550 | newThreadLink.click( liquidThreads.handleNewLink ); |
1606 | 1551 | } |
1607 | 1552 | |
1608 | 1553 | // Find all threads, and do the appropriate setup for each of them |
1609 | | - |
| 1554 | + |
1610 | 1555 | var threadContainers = $j('div.lqt-post-wrapper'); |
1611 | | - |
| 1556 | + |
1612 | 1557 | threadContainers.each( function(i) { |
1613 | 1558 | liquidThreads.setupThread( this ); |
1614 | 1559 | } ); |
1615 | | - |
| 1560 | + |
1616 | 1561 | // Live bind for unwatch/watch stuff. |
1617 | 1562 | $j('.lqt-command-watch').live( 'click', liquidThreads.asyncWatch ); |
1618 | 1563 | $j('.lqt-command-unwatch').live( 'click', liquidThreads.asyncWatch ); |
1619 | | - |
| 1564 | + |
1620 | 1565 | // Live bind for link window |
1621 | 1566 | $j('.lqt-command-link').live( 'click', liquidThreads.showThreadLinkWindow ); |
1622 | | - |
| 1567 | + |
1623 | 1568 | // Live bind for summary links |
1624 | 1569 | $j('.lqt-summary-link').live( 'click', liquidThreads.showSummaryLinkWindow ); |
1625 | | - |
| 1570 | + |
1626 | 1571 | // For "show replies" |
1627 | 1572 | $j('a.lqt-show-replies').live( 'click', liquidThreads.showReplies ); |
1628 | | - |
| 1573 | + |
1629 | 1574 | // "Show more posts" link |
1630 | 1575 | $j('a.lqt-show-more-posts').live( 'click', liquidThreads.showMore ); |
1631 | | - |
| 1576 | + |
1632 | 1577 | // Edit link handler |
1633 | 1578 | $j('.lqt-command-edit > a').live( 'click', liquidThreads.handleEditLink ); |
1634 | | - |
| 1579 | + |
1635 | 1580 | // Save handlers |
1636 | 1581 | $j('#wpSave').live( 'click', liquidThreads.handleAJAXSave ); |
1637 | 1582 | $j('#wpTextbox1').live( 'keyup', liquidThreads.onTextboxKeyUp ); |
| 1583 | + $j('#wpPreview').die('click'); |
1638 | 1584 | $j('#wpPreview').live('click', liquidThreads.doLivePreview ); |
1639 | | - |
| 1585 | + |
1640 | 1586 | // Hide menus when a click happens outside them |
1641 | 1587 | $j(document).click( liquidThreads.handleDocumentClick ); |
1642 | | - |
| 1588 | + |
1643 | 1589 | // Set up periodic update checking |
1644 | 1590 | setInterval( liquidThreads.checkForUpdates, 60000 ); |
1645 | 1591 | } ); |
Property changes on: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/js/lqt.toolbar.js |
___________________________________________________________________ |
Added: svn:eol-style |
1646 | 1592 | + native |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/i18n/Lqt.i18n.php |
— | — | @@ -271,6 +271,7 @@ |
272 | 272 | 'lqt-drag-setsortkey' => "Adjust post's position on the page", |
273 | 273 | 'lqt-drag-bump' => 'Move post to top of discussion page', |
274 | 274 | 'lqt-drag-save' => 'Confirm', |
| 275 | + 'lqt-drag-title' => 'Confirm drag', |
275 | 276 | 'lqt-drag-reason' => 'Reason:', |
276 | 277 | 'lqt-drag-subject' => 'Subject for new thread:', |
277 | 278 | 'lqt-edit-signature' => '(edit signature)', |
— | — | @@ -1680,6 +1681,7 @@ |
1681 | 1682 | 'lqt-drag-setsortkey' => 'Устанавіць пазыцыю паведамленьня на старонцы', |
1682 | 1683 | 'lqt-drag-bump' => 'Перанесьці паведамленьне ўверх старонкі абмеркаваньня', |
1683 | 1684 | 'lqt-drag-save' => 'Пацьвердзіць', |
| 1685 | + 'lqt-drag-title' => 'Пацьвердзіць перанос', |
1684 | 1686 | 'lqt-drag-reason' => 'Прычына:', |
1685 | 1687 | 'lqt-drag-subject' => 'Тэма новай галіны:', |
1686 | 1688 | 'lqt-edit-signature' => '(рэдагаваць подпіс)', |
— | — | @@ -1979,6 +1981,7 @@ |
1980 | 1982 | 'lqt_subject' => 'বিষয়:', |
1981 | 1983 | 'lqt_noreason' => 'কোনো কারণ দেওয়া হয়নি।', |
1982 | 1984 | 'lqt_summary_notice_link' => 'একটি সারাংশ লিখুন', |
| 1985 | + 'lqt_summary_label' => 'থ্রেড সারাংশ:', |
1983 | 1986 | 'lqt_summary_subtitle' => '"$1" এর সারাংশ', |
1984 | 1987 | 'lqt_nosuchthread_title' => 'এমন কোনো থ্রেড নাই', |
1985 | 1988 | 'lqt_move_torename_edit' => 'এটি সম্পাদনা করুন', |
— | — | @@ -1988,6 +1991,7 @@ |
1989 | 1992 | 'lqt_delete_undeleting' => "'''$1''' পুনরুদ্ধার।", |
1990 | 1993 | 'lqt_delete_undeletethread' => 'থ্রেড পুনরুদ্ধার', |
1991 | 1994 | 'lqt_delete_partof' => "এই থ্রেডটি '''$1''' এর একটি অংশ।", |
| 1995 | + 'lqt_delete_deletethread' => 'থ্রেড এবং উত্তরসমূহ অপসারণ', |
1992 | 1996 | 'lqt_delete_deleted' => 'থ্রেড অপসারণ করা হয়েছে।', |
1993 | 1997 | 'lqt_delete_undeleted' => 'থ্রেড পুনরুদ্ধার করা হয়েছে।', |
1994 | 1998 | 'lqt_delete_return' => '$1 এ ফিরে যান।', |
— | — | @@ -2036,6 +2040,7 @@ |
2037 | 2041 | 'lqt-movethread' => 'স্থানান্তর', |
2038 | 2042 | 'lqt-menu-trigger' => 'আরও', |
2039 | 2043 | 'lqt-newmessages-from' => '$1 হতে', |
| 2044 | + 'lqt-hot-topics' => 'অতি আলোচিত বিষয়সমূহ', |
2040 | 2045 | 'lqt-add-reply' => 'উত্তর যোগ করুন', |
2041 | 2046 | 'right-lqt-split' => 'থ্রেড পৃথক', |
2042 | 2047 | 'right-lqt-merge' => 'থ্রেড একত্রীকরণ', |
— | — | @@ -2064,6 +2069,11 @@ |
2065 | 2070 | 'lqt-change-subject' => 'বিষয় পরিবর্তন', |
2066 | 2071 | 'lqt-save-subject' => 'সংরক্ষণ', |
2067 | 2072 | 'lqt-cancel-subject-edit' => 'বাতিল', |
| 2073 | + 'lqt-drag-save' => 'নিশ্চিত করো', |
| 2074 | + 'lqt-drag-reason' => 'কারণ:', |
| 2075 | + 'lqt-drag-subject' => 'নতুন থ্রেডের জন্য বিষয়:', |
| 2076 | + 'lqt-edit-signature' => '(স্বাক্ষর সম্পাদনা)', |
| 2077 | + 'lqt-preview-signature' => '(প্রাকদর্শন)', |
2068 | 2078 | 'lqt-feed-title-all' => '{{SITENAME}} — নতুন পোষ্ট', |
2069 | 2079 | 'lqt-feed-title-new-threads' => '{{SITENAME}} — নতুন থ্রেড', |
2070 | 2080 | 'lqt-feed-title-new-threads-from' => '{{SITENAME}} — $1 হতে নতুন থ্রেড', |
— | — | @@ -2079,6 +2089,7 @@ |
2080 | 2090 | 'lqt-talkpage-history-tab' => 'শীর্ষচরণ', |
2081 | 2091 | 'restriction-reply' => 'উত্তর পোষ্ট করুন', |
2082 | 2092 | 'restriction-newthread' => 'নতুন থ্রেড পোষ্ট করুন', |
| 2093 | + 'lqt-reply-subpage' => 'উত্তর', |
2083 | 2094 | ); |
2084 | 2095 | |
2085 | 2096 | /** Breton (Brezhoneg) |
— | — | @@ -2346,7 +2357,7 @@ |
2347 | 2358 | 'restriction-newthread' => 'Ouzhpennañ neudennadoù kaozeal nevez', |
2348 | 2359 | 'lqt-protected-reply-thread' => "Ne c'helloc'h ket postañ en neudennad-mañ dre ma 'z eo bet gwarezet a-enep ar gemennadennoù nevez.", |
2349 | 2360 | 'lqt-protected-reply-talkpage' => "Ne c'helloc'h ket postañ en neudennad-mañ dre ma 'z eo bet gwarezet an neudennad a-enep ar respontoù.", |
2350 | | - 'lqt-protected-newthread' => "Ne c'helloc'h ket postañ neudennadoù nevez er bajenn kaozeal-mañ dre ma 'z eo bet gwarezhet a-enep an neudennadoù nevez.", |
| 2361 | + 'lqt-protected-newthread' => "Ne c'hellit ket postañ neudennadoù nevez er bajenn kaozeal-mañ dre ma 'z eo bet gwarezet a-enep an neudennadoù nevez.", |
2351 | 2362 | 'lqt-edit-bump' => 'Adgweredekaat an neudennad-mañ', |
2352 | 2363 | 'lqt-edit-bump-tooltip' => 'Kas an neudennad-mañ e laez ar bajenn gaozeal', |
2353 | 2364 | 'lqt-historicalrevision-error' => "An adweladenn ho peus dibabet a zo fall, dre-se ne c'hell ket bezañ diskouezet.", |
— | — | @@ -3189,6 +3200,7 @@ |
3190 | 3201 | * @author Goran Maric |
3191 | 3202 | * @author Imre |
3192 | 3203 | * @author JakobVoss |
| 3204 | + * @author Kghbln |
3193 | 3205 | * @author McDutchie |
3194 | 3206 | * @author Merlissimo |
3195 | 3207 | * @author Metalhead64 |
— | — | @@ -3202,7 +3214,7 @@ |
3203 | 3215 | * @author Umherirrender |
3204 | 3216 | */ |
3205 | 3217 | $messages['de'] = array( |
3206 | | - 'lqt-desc' => 'Verwendung von Themen auf Diskussionsseiten', |
| 3218 | + 'lqt-desc' => 'Realisiert Themenstränge auf Diskussionsseiten', |
3207 | 3219 | 'lqt_movethread' => 'Verschiebe Thema auf eine andere Seite', |
3208 | 3220 | 'lqt_deletethread' => 'Lösche oder stelle Thema wieder her', |
3209 | 3221 | 'lqt_contents_title' => 'Diskussionsthemen', |
— | — | @@ -3433,6 +3445,7 @@ |
3434 | 3446 | 'lqt-drag-setsortkey' => 'Position des Beitrags auf der Seite festlegen', |
3435 | 3447 | 'lqt-drag-bump' => 'Beitrag an den Seitenanfang verschieben', |
3436 | 3448 | 'lqt-drag-save' => 'Bestätigen', |
| 3449 | + 'lqt-drag-title' => 'Ziehen bestätigen', |
3437 | 3450 | 'lqt-drag-reason' => 'Grund:', |
3438 | 3451 | 'lqt-drag-subject' => 'Betreff für den neuen Diskussionsstrang:', |
3439 | 3452 | 'lqt-edit-signature' => '(Unterschrift bearbeiten)', |
— | — | @@ -4017,6 +4030,7 @@ |
4018 | 4031 | 'lqt-drag-setsortkey' => 'Poziciju powěsći na boku korigěrowaś', |
4019 | 4032 | 'lqt-drag-bump' => 'Powěsć na zachopjeńk diskusijnego boka pśesunuś', |
4020 | 4033 | 'lqt-drag-save' => 'Wobkšuśiś', |
| 4034 | + 'lqt-drag-title' => 'Śěgnjenje wobkšuśiś', |
4021 | 4035 | 'lqt-drag-reason' => 'Pśicyna:', |
4022 | 4036 | 'lqt-drag-subject' => 'Nadpismo za nowu nitku:', |
4023 | 4037 | 'lqt-edit-signature' => '(pódpis wobźěłaś)', |
— | — | @@ -4056,6 +4070,8 @@ |
4057 | 4071 | 'lqt_delete' => 'Tutui', |
4058 | 4072 | 'lqt_move_move' => 'Ɖɔli eƒe nɔƒe', |
4059 | 4073 | 'lqt_delete_return' => 'Gbugbɔ yi $1.', |
| 4074 | + 'lqt-movethread' => 'Ɖɔli eƒe nɔƒe', |
| 4075 | + 'lqt-search-button' => 'Dii', |
4060 | 4076 | 'lqt_newmessages' => 'Du yeyewo', |
4061 | 4077 | ); |
4062 | 4078 | |
— | — | @@ -4764,6 +4780,7 @@ |
4765 | 4781 | 'lqt-drag-setsortkey' => 'Ajustar la posición del mensaje en la página', |
4766 | 4782 | 'lqt-drag-bump' => 'Subir el mensaje al primer lugar de la página de discusión', |
4767 | 4783 | 'lqt-drag-save' => 'Confirmar', |
| 4784 | + 'lqt-drag-title' => 'Confirmar arrastre', |
4768 | 4785 | 'lqt-drag-reason' => 'Razón:', |
4769 | 4786 | 'lqt-drag-subject' => 'Asunto para el nuevo hilo de discusión:', |
4770 | 4787 | 'lqt-edit-signature' => '(editar firma)', |
— | — | @@ -4869,6 +4886,7 @@ |
4870 | 4887 | 'lqt_nosuchrevision' => 'Lõime sellist redaktsiooni pole.', |
4871 | 4888 | 'lqt_nosuchthread' => 'Määratud lõime pole.', |
4872 | 4889 | 'lqt_nosuchthread_title' => 'Lõime ei leidu', |
| 4890 | + 'lqt_threadrequired' => 'Pead internetiaadressis lõime määrama.', |
4873 | 4891 | 'lqt_move_movingthread' => 'Lõime $1 teisaldamine. |
4874 | 4892 | See lõim on osa leheküljest $2.', |
4875 | 4893 | 'lqt_move_torename' => "Lõime ümbernimetamiseks $1 ja muuda väli 'Teema'.", |
— | — | @@ -5035,6 +5053,7 @@ |
5036 | 5054 | 'lqt-protected-newthread' => 'Sellele aruteluleheküljele ei saa uusi lõimi postitada, sest see on uute lõimede eest kaitstud.', |
5037 | 5055 | 'lqt-edit-bump' => 'Too lõim ette', |
5038 | 5056 | 'lqt-edit-bump-tooltip' => 'Liiguta see lõim arutelulehekülje algusesse', |
| 5057 | + 'lqt-historicalrevision-error' => 'Sinu valitud redaktsioon rikutud ja seda ei saa vaadata.', |
5039 | 5058 | 'lqt-reply-subpage' => 'vasta', |
5040 | 5059 | ); |
5041 | 5060 | |
— | — | @@ -5044,13 +5063,16 @@ |
5045 | 5064 | * @author Kobazulo |
5046 | 5065 | */ |
5047 | 5066 | $messages['eu'] = array( |
| 5067 | + 'lqt_movethread' => 'Mintzagaia beste orrialde batera mugitu', |
5048 | 5068 | 'lqt_contents_title' => 'Edukiak', |
5049 | 5069 | 'lqt_toc_thread_title' => 'Eztabaidaren izenburua', |
5050 | 5070 | 'lqt_toc_thread_author' => 'Nork hasi duen', |
| 5071 | + 'lqt_toc_thread_replycount' => 'Erantzunak', |
5051 | 5072 | 'lqt_toc_thread_modified' => 'Azken aldaketa', |
5052 | 5073 | 'lqt_add_header' => 'Goiburua gehitu', |
5053 | 5074 | 'lqt_new_thread' => 'Eztabaida berria hasi', |
5054 | 5075 | 'lqt_reply' => 'Erantzun', |
| 5076 | + 'lqt-parent' => 'Gurasoa', |
5055 | 5077 | 'lqt_delete' => 'Ezabatu', |
5056 | 5078 | 'lqt_undelete' => 'Berreskuratu', |
5057 | 5079 | 'lqt_permalink' => 'Lotu', |
— | — | @@ -5058,12 +5080,18 @@ |
5059 | 5081 | 'lqt_newer' => '← berriagoa', |
5060 | 5082 | 'lqt_older' => 'zaharragoa →', |
5061 | 5083 | 'lqt-history-title' => 'Eztabaidaren historia', |
| 5084 | + 'lqt_hist_summary_changed' => 'Laburpena aldatua', |
| 5085 | + 'lqt_hist_thread_created' => 'Mintzagai berria sortua', |
5062 | 5086 | 'lqt_hist_deleted' => 'Ezabatua', |
5063 | 5087 | 'lqt_hist_undeleted' => 'Ezabatu gabea', |
5064 | 5088 | 'lqt_hist_moved_talkpage' => 'Mugitua', |
| 5089 | + 'lqt_hist_edited_subject_corrupt' => 'Gaia aldatua', |
| 5090 | + 'lqt_youhavenewmessages' => '[[$1|Mezu berriak]] dituzu.', |
5065 | 5091 | 'lqt_protectedfromreply_link' => 'babestua', |
5066 | 5092 | 'lqt_subject' => 'Gaia:', |
5067 | 5093 | 'lqt_noreason' => 'Arrazoirik eman gabe.', |
| 5094 | + 'lqt_summary_notice_link' => 'laburpena idatzi', |
| 5095 | + 'lqt_summary_label' => 'Mintzagaiaren laburpena:', |
5068 | 5096 | 'lqt_move_movingthread' => '$1 mugitzen. |
5069 | 5097 | Eztabaida hau $2-(e)ko zati da.', |
5070 | 5098 | 'lqt_move_torename_edit' => 'editatu', |
— | — | @@ -5071,21 +5099,29 @@ |
5072 | 5100 | 'lqt_move_noreason' => 'Ez da arrazoirik zehaztu.', |
5073 | 5101 | 'lqt_delete_return' => '$1-(e)ra itzuli.', |
5074 | 5102 | 'lqt_delete_return_link' => 'eztabaida orria', |
| 5103 | + 'lqt_header_warning_big' => '$1 editatzen ari zara.', |
| 5104 | + 'lqt_header_warning_new_discussion' => 'Eztabaida berria hasi', |
5075 | 5105 | 'lqt_sorting_order' => 'Sailkapenerako irizpidea:', |
5076 | 5106 | 'lqt_sort_newest_changes' => 'azken aldaketa lehendabizi', |
| 5107 | + 'lqt_sort_newest_threads' => 'mintzagai berrienak lehenik', |
| 5108 | + 'lqt_sort_oldest_threads' => 'mintzagai zaharrenak lehenik', |
5077 | 5109 | 'lqt-title' => 'Izenburua', |
5078 | 5110 | 'lqt-summary' => 'Laburpena', |
5079 | 5111 | 'lqt-older' => 'zaharrago', |
5080 | 5112 | 'lqt-newer' => 'berriago', |
5081 | 5113 | 'lqt-read-message' => 'Irakurrita moduan adierazi', |
| 5114 | + 'lqt-read-all' => 'Markatu irakurrita gisa', |
| 5115 | + 'lqt-count-marked-read' => '{{PLURAL:$1|mezu bat|$1 mezu}} markatuak irakurrita gisa.', |
5082 | 5116 | 'lqt-email-undo' => 'Desegin', |
5083 | 5117 | 'lqt-no-new-messages' => 'Ez dago zuretzako mezu berririk.', |
5084 | 5118 | 'lqt-new-messages' => '✒ Zuretzako mezu berriak daude.', |
| 5119 | + 'lqt-newmessages-context' => 'Mintzagai osoa', |
5085 | 5120 | 'lqt-thread-created' => 'Sortua', |
5086 | 5121 | 'lqt-history-time' => 'Ordua', |
5087 | 5122 | 'lqt-history-user' => 'Erabiltzailea', |
5088 | 5123 | 'lqt-history-action' => 'Jarduera', |
5089 | 5124 | 'lqt-history-comment' => 'Iruzkina', |
| 5125 | + 'lqt-history-thread' => 'Mintzagaia', |
5090 | 5126 | 'lqt-header-actions' => 'Ekintzak', |
5091 | 5127 | 'lqt_summarize_link' => 'Laburtu', |
5092 | 5128 | 'lqt-thread-split-thread' => 'Eztabaida:', |
— | — | @@ -5093,12 +5129,18 @@ |
5094 | 5130 | 'lqt-movethread' => 'Mugitu', |
5095 | 5131 | 'lqt-menu-trigger' => 'Gehiago', |
5096 | 5132 | 'lqt-hot-topics' => 'Gai garrantzitsuak', |
| 5133 | + 'lqt-add-reply' => 'Erantzuna gehitu', |
5097 | 5134 | 'lqt-merge-submit' => 'Merge', |
| 5135 | + 'lqt-enotif-subject-reply' => '{{SITENAME}} eztabaida - Erantzuna: $1', |
| 5136 | + 'lqt-enotif-subject-newthread' => '{{SITENAME}} eztabaida - Mintzagai berria: $1', |
5098 | 5137 | 'lqt-quote' => 'Aipu', |
5099 | 5138 | 'lqt-search-button' => 'Bilatu', |
5100 | 5139 | 'searchprofile-threads' => 'Eztabaidak', |
5101 | 5140 | 'lqt-ajax-update-link' => 'Eguneratu', |
| 5141 | + 'lqt-thread-show-replies' => 'Erakutsi {{PLURAL:$1|erantzun bat|$1 erantzun}}', |
5102 | 5142 | 'lqt-thread-link-url' => 'URL lotura:', |
| 5143 | + 'lqt-thread-link-title' => 'Wikitestu lotura:', |
| 5144 | + 'lqt-change-subject' => 'Gaia aldatua', |
5103 | 5145 | 'lqt-save-subject' => 'Gorde', |
5104 | 5146 | 'lqt-cancel-subject-edit' => 'Utzi', |
5105 | 5147 | 'lqt-drag-save' => 'Baieztatu', |
— | — | @@ -5109,7 +5151,11 @@ |
5110 | 5152 | 'lqt-feed-title-all-from' => '{{SITENAME}} — Mezu beriak $1- (r)engandik', |
5111 | 5153 | 'lqt-feed-title-new-threads' => '{{SITENAME}} — Eztabaida berriak', |
5112 | 5154 | 'lqt-feed-title-new-threads-from' => '{{SITENAME}} — Eztabaida berriak $1 - (r)engandik', |
| 5155 | + 'lqt-feed-title-replies' => '{{SITENAME}} — Erantzunak', |
| 5156 | + 'lqt-newmessages-n' => 'Mezu berriak ($1)', |
5113 | 5157 | 'lqt_newmessages' => 'Mezu berriak', |
| 5158 | + 'lqt_newmessages-title' => 'Mezu berriak', |
| 5159 | + 'lqt-newpost-summary' => 'Mintzagai berria: $1', |
5114 | 5160 | 'lqt-talkpage-history-tab' => 'Goiburua', |
5115 | 5161 | 'lqt-reply-subpage' => 'erantzun', |
5116 | 5162 | ); |
— | — | @@ -5266,9 +5312,9 @@ |
5267 | 5313 | 'lqt-date-info' => 'Tämä linkki ei ole käytössä koska sinulla on näkyvissä ketjut kaikilta ajankohdilta.', |
5268 | 5314 | 'lqt-newmessages-context' => 'Koko viestiketju', |
5269 | 5315 | 'lqt-thread-created' => 'Luotu', |
5270 | | - 'lqt-history-time' => 'Aika', |
| 5316 | + 'lqt-history-time' => 'Päiväys', |
5271 | 5317 | 'lqt-history-user' => 'Käyttäjä', |
5272 | | - 'lqt-history-action' => 'Aktiivisuus', |
| 5318 | + 'lqt-history-action' => 'Toiminto', |
5273 | 5319 | 'lqt-history-comment' => 'Kommentti', |
5274 | 5320 | 'lqt-history-thread' => 'Ketju', |
5275 | 5321 | 'lqt-thread-edited-author' => 'Aloittajan muokkaama.<br /> |
— | — | @@ -5315,7 +5361,7 @@ |
5316 | 5362 | 'lqt-preference-notify-talk' => 'Lähetä sähköpostia viestiketjun vastauksista, joita tarkkailen', |
5317 | 5363 | 'lqt-preference-watch-threads' => 'Tarkkaile viestiketjuja, jotka olen luonnut tai joihin olen vastannut', |
5318 | 5364 | 'prefs-lqt' => 'Viestiketjut', |
5319 | | - 'lqt-preference-display-depth' => 'Enimmäissyvyys vastauksia näytettäväksi:', |
| 5365 | + 'lqt-preference-display-depth' => 'Sisäkkäisiä vastauksia oletusnäkymässä:', |
5320 | 5366 | 'lqt-preference-display-count' => 'Enimmäismäärä vastauksia näytettäväksi:', |
5321 | 5367 | 'lqt-preference-custom-signatures' => 'Näytä käyttäjien mukautetut allekirjoitukset', |
5322 | 5368 | 'lqt-enotif-subject-reply' => '{{SITENAME}} – Vastaus keskusteluun $1', |
— | — | @@ -5643,6 +5689,7 @@ |
5644 | 5690 | 'lqt-drag-setsortkey' => 'Modifier la position du message dans la page', |
5645 | 5691 | 'lqt-drag-bump' => 'Déplacer le message vers le haut de la page de discussion', |
5646 | 5692 | 'lqt-drag-save' => 'Confirmer', |
| 5693 | + 'lqt-drag-title' => 'Confirmer le glissement', |
5647 | 5694 | 'lqt-drag-reason' => 'Motif :', |
5648 | 5695 | 'lqt-drag-subject' => 'Sujet du nouveau fil de discussion', |
5649 | 5696 | 'lqt-edit-signature' => '(modifier la signature)', |
— | — | @@ -5667,7 +5714,7 @@ |
5668 | 5715 | 'restriction-newthread' => 'Poster des nouveaux fils de discussion', |
5669 | 5716 | 'lqt-protected-reply-thread' => 'Vous ne pouvez pas poster dans ce fil de discussion car il a été protégé contre les nouveaux messages.', |
5670 | 5717 | 'lqt-protected-reply-talkpage' => 'Vous ne pouvez pas poster dans ce fil car cette page de discussion a été protégée contre les réponses à ses fils.', |
5671 | | - 'lqt-protected-newthread' => 'Vous ne pouvez pas poster des nouveaux fils dans cette page de discussion car elle a été protégée contre les nouveaux fils.', |
| 5718 | + 'lqt-protected-newthread' => 'Vous ne pouvez pas poster de nouveaux fils dans cette page de discussion car elle a été protégée contre les nouveaux fils.', |
5672 | 5719 | 'lqt-edit-bump' => 'Réactiver ce fil', |
5673 | 5720 | 'lqt-edit-bump-tooltip' => 'Déplacer ce fil en haut de la page de discussion.', |
5674 | 5721 | 'lqt-historicalrevision-error' => 'La révision que vous avez sélectionné est corrompue et ne peut pas être affichée.', |
— | — | @@ -6250,6 +6297,7 @@ |
6251 | 6298 | 'lqt-drag-setsortkey' => 'Axustar a posición da mensaxe na páxina', |
6252 | 6299 | 'lqt-drag-bump' => 'Mover a mensaxe ao comezo da páxina de conversa', |
6253 | 6300 | 'lqt-drag-save' => 'Confirmar', |
| 6301 | + 'lqt-drag-title' => 'Confirmar o arrastre', |
6254 | 6302 | 'lqt-drag-reason' => 'Motivo:', |
6255 | 6303 | 'lqt-drag-subject' => 'Asunto para o novo fío:', |
6256 | 6304 | 'lqt-edit-signature' => '(editar a sinatura)', |
— | — | @@ -7338,6 +7386,7 @@ |
7339 | 7387 | 'lqt-drag-setsortkey' => 'Poziciju powěsće na stronje skorigować', |
7340 | 7388 | 'lqt-drag-bump' => 'Powěsć na spočatk diskusijneje strony přesunyć', |
7341 | 7389 | 'lqt-drag-save' => 'Wobkrućić', |
| 7390 | + 'lqt-drag-title' => 'Ćehnjenje wobkrućić', |
7342 | 7391 | 'lqt-drag-reason' => 'Přičina:', |
7343 | 7392 | 'lqt-drag-subject' => 'Nadpismo za nowu nitku:', |
7344 | 7393 | 'lqt-edit-signature' => '(podpis wobdźěłać)', |
— | — | @@ -7817,7 +7866,7 @@ |
7818 | 7867 | 'lqt-preference-watch-threads' => 'Observar filos que io crea o al quales io responde', |
7819 | 7868 | 'prefs-lqt' => 'Discussion in filos', |
7820 | 7869 | 'lqt-preference-display-depth' => 'Profunditate maximal de responsas a monstrar:', |
7821 | | - 'lqt-preference-display-count' => 'Numero maximal de responsas a monstrar:', |
| 7870 | + 'lqt-preference-display-count' => 'Numero maxime de responsas a monstrar:', |
7822 | 7871 | 'lqt-preference-custom-signatures' => 'Monstrar signaturas personalisate de usatores', |
7823 | 7872 | 'lqt-enotif-subject-reply' => 'Discussion {{SITENAME}} - Responsa: $1', |
7824 | 7873 | 'lqt-enotif-subject-newthread' => 'Discussion {{SITENAME}} - Nove filo: $1', |
— | — | @@ -7863,6 +7912,7 @@ |
7864 | 7913 | 'lqt-drag-setsortkey' => 'Adjustar le position del message in le pagina', |
7865 | 7914 | 'lqt-drag-bump' => 'Displaciar le message verso le alto del pagina', |
7866 | 7915 | 'lqt-drag-save' => 'Confirmar', |
| 7916 | + 'lqt-drag-title' => 'Confirmar displaciamento', |
7867 | 7917 | 'lqt-drag-reason' => 'Motivo:', |
7868 | 7918 | 'lqt-drag-subject' => 'Subjecto del nove filo:', |
7869 | 7919 | 'lqt-edit-signature' => '(modificar signatura)', |
— | — | @@ -7918,6 +7968,7 @@ |
7919 | 7969 | * Konflik dengan awalan interwiki atau nama ruang nama.', |
7920 | 7970 | 'lqt_empty_subject' => 'Anda harus memasukkan subjek.', |
7921 | 7971 | 'lqt_reply' => 'Balas', |
| 7972 | + 'lqt-parent' => 'Induk', |
7922 | 7973 | 'lqt_delete' => 'Hapus', |
7923 | 7974 | 'lqt_undelete' => 'Batalkan penghapusan', |
7924 | 7975 | 'lqt_permalink' => 'Pranala', |
— | — | @@ -7974,7 +8025,7 @@ |
7975 | 8026 | 'lqt_summary_notice' => 'Tidak ada perubahan pada diskusi ini selama paling tidak $2 {{PLURAL:$2|hari|hari}} |
7976 | 8027 | Jika telah berakhir, Anda mungkin ingin untuk $1.', |
7977 | 8028 | 'lqt_summary_notice_link' => 'tulis ringkasan', |
7978 | | - 'lqt_summary_label' => 'Topik ini telah diringkas sebagai berikut:', |
| 8029 | + 'lqt_summary_label' => 'Ringkasan topik:', |
7979 | 8030 | 'lqt_summary_subtitle' => 'Ringkasan dari $1.', |
7980 | 8031 | 'lqt_nosuchrevision' => 'Tidak ada revisi seperti itu pada topik ini.', |
7981 | 8032 | 'lqt_nosuchthread' => 'Topik yang Anda cari tidak ada.', |
— | — | @@ -8040,8 +8091,10 @@ |
8041 | 8092 | 'lqt-history-action' => 'Aktivitas', |
8042 | 8093 | 'lqt-history-comment' => 'Komentar', |
8043 | 8094 | 'lqt-history-thread' => 'Utas', |
8044 | | - 'lqt-thread-edited-author' => 'Disunting oleh penulis pertama', |
8045 | | - 'lqt-thread-edited-others' => 'Disunting oleh pengguna lainnya', |
| 8095 | + 'lqt-thread-edited-author' => 'Disunting oleh penulis.<br /> |
| 8096 | +Suntingan terakhir: $1', |
| 8097 | + 'lqt-thread-edited-others' => 'Disunting oleh {{PLURAL:$2|pengguna lain|$2 pengguna}}.<br /> |
| 8098 | +Suntingan terakhir: $1', |
8046 | 8099 | 'lqt-header-actions' => 'Tindakan', |
8047 | 8100 | 'lqt_summarize_link' => 'Ringkasan', |
8048 | 8101 | 'lqt-summarize-intro' => 'Silakan meringkas utas di bawah ini pada kotak suntingan. |
— | — | @@ -8064,8 +8117,8 @@ |
8065 | 8118 | 'lqt-newmessages-from' => 'Dari $1', |
8066 | 8119 | 'lqt-hot-topics' => 'Topik hangat', |
8067 | 8120 | 'lqt-add-reply' => 'Tambahkan balasan', |
8068 | | - 'lqt_rc_new_discussion' => 'Diskusi baru "$1" pada $2. • $3 menulis:', |
8069 | | - 'lqt_rc_new_reply' => 'Membalas ke "$1" di $2 • $3 menulis:', |
| 8121 | + 'lqt_rc_new_discussion' => 'mengirimkan topik baru, "$1"', |
| 8122 | + 'lqt_rc_new_reply' => 'mengirimkan balasan ke "$1"', |
8070 | 8123 | 'right-lqt-split' => 'Pisahkan utas', |
8071 | 8124 | 'right-lqt-merge' => 'Gabungkan utas', |
8072 | 8125 | 'lqt-thread-merge' => 'Gabung ke utas lain', |
— | — | @@ -8078,6 +8131,11 @@ |
8079 | 8132 | 'lqt-log-name' => 'Log diskusi bertingkat', |
8080 | 8133 | 'lqt-log-header' => 'Log ini menjelaskan seluruh tindakan yang dilakukan pada topik diskusi.', |
8081 | 8134 | 'lqt-log-action-move' => 'memindahkan [[$1]] dari [[$2]] ke [[$3]].', |
| 8135 | + 'lqt-log-action-split' => 'memisahkan [[$1]] dari bawah [[$3]], dengan subyek baru "$2"', |
| 8136 | + 'lqt-log-action-merge-across' => 'memindahkan [[$1]] dari bawah [[$2]] ke bawah [[$3]]', |
| 8137 | + 'lqt-log-action-merge-down' => 'menggabungkan [[$1]] ke bawah [[$3]]', |
| 8138 | + 'lqt-log-action-subjectedit' => 'mengubah subyek [[$1]] dari "$2" ke "$3"', |
| 8139 | + 'lqt-log-action-resort' => 'mengubah aturan urutan [[$1]]. Mengganti kunci urut dari $2 ke $3', |
8082 | 8140 | 'lqt-preference-notify-talk' => 'Kirimkan saya surel jika ada balasan pada topik yang saya pantau', |
8083 | 8141 | 'lqt-preference-watch-threads' => 'Pantau utas yang saya buat atau balas', |
8084 | 8142 | 'prefs-lqt' => 'Diskusi berutas', |
— | — | @@ -8197,6 +8255,8 @@ |
8198 | 8256 | 'lqt-history-comment' => 'Komento', |
8199 | 8257 | 'lqt-newmessages-from' => 'De $1', |
8200 | 8258 | 'lqt-save-subject' => 'Registragar', |
| 8259 | + 'lqt-drag-save' => 'Konfirmar', |
| 8260 | + 'lqt-drag-reason' => 'Motivo:', |
8201 | 8261 | 'lqt-newmessages-n' => 'Nova mesaji ($1)', |
8202 | 8262 | 'lqt_newmessages' => 'Nova mesaji', |
8203 | 8263 | 'lqt_newmessages-title' => 'Nova mesaji', |
— | — | @@ -8264,6 +8324,8 @@ |
8265 | 8325 | 'lqt-movethread' => 'Færa', |
8266 | 8326 | 'lqt-menu-trigger' => 'Meira', |
8267 | 8327 | 'lqt-newmessages-from' => 'Á $1', |
| 8328 | + 'lqt_rc_new_discussion' => 'bjó til þráðinn „$1“', |
| 8329 | + 'lqt_rc_new_reply' => 'svaraði „$1“', |
8268 | 8330 | 'lqt-search-label' => 'Leitarorð:', |
8269 | 8331 | 'lqt-search-button' => 'Leita', |
8270 | 8332 | 'searchprofile-threads' => 'Spjöll', |
— | — | @@ -8935,6 +8997,7 @@ |
8936 | 8998 | ეს ტორი არის $2-ის ნაწილი.', |
8937 | 8999 | 'lqt_move_torename' => "ამ ტოტის სახელის შესაცვლელად, $1 და შეცვალეთ 'სათაური' ველი.", |
8938 | 9000 | 'lqt_move_torename_edit' => 'მისი რედაქტირება', |
| 9001 | + 'lqt_move_destinationtitle' => 'განხილვის გვერდის სათაური:', |
8939 | 9002 | 'lqt_move_move' => 'გადატანა', |
8940 | 9003 | 'lqt_move_nodestination' => 'თქვენ უნდა მიუთითოთ დანიშნულების ადგილი.', |
8941 | 9004 | 'lqt_move_samedestination' => 'ტოტი უკვე არის ამ გვერდზე!', |
— | — | @@ -9199,6 +9262,7 @@ |
9200 | 9263 | ); |
9201 | 9264 | |
9202 | 9265 | /** Korean (한국어) |
| 9266 | + * @author Albamhandae |
9203 | 9267 | * @author FriedC |
9204 | 9268 | * @author Klutzy |
9205 | 9269 | * @author Kwj2772 |
— | — | @@ -9302,7 +9366,7 @@ |
9303 | 9367 | 'lqt_delete_deletethread' => '스레드와 답글을 삭제하기', |
9304 | 9368 | 'lqt_delete_deleted' => '스레드가 삭제되었습니다.', |
9305 | 9369 | 'lqt_delete_undeleted' => '스레드가 복구되었습니다.', |
9306 | | - 'lqt_delete_return' => '$1로 돌아갑니다.', |
| 9370 | + 'lqt_delete_return' => '$1(으)로 돌아갑니다.', |
9307 | 9371 | 'lqt_delete_return_link' => '토론 문서', |
9308 | 9372 | 'lqt_delete_unallowed' => '당신은 스레드를 삭제할 수 없습니다.', |
9309 | 9373 | 'lqt_delete_show_checkbox' => '삭제된 스레드를 보기', |
— | — | @@ -9993,6 +10057,7 @@ |
9994 | 10058 | 'lqt-drag-setsortkey' => "D'Positioun vum Message op der Säit änneren", |
9995 | 10059 | 'lqt-drag-bump' => "De Message uewen op d'Diskussiounssäit réckelen", |
9996 | 10060 | 'lqt-drag-save' => 'Confirméieren', |
| 10061 | + 'lqt-drag-title' => 'Réckele confirméieren', |
9997 | 10062 | 'lqt-drag-reason' => 'Grond:', |
9998 | 10063 | 'lqt-drag-subject' => 'Sujet fir déi nei Rubrik:', |
9999 | 10064 | 'lqt-edit-signature' => '(Ënnerschrëft änneren)', |
— | — | @@ -10053,8 +10118,19 @@ |
10054 | 10119 | /** Lithuanian (Lietuvių) |
10055 | 10120 | * @author Pėstininkas |
10056 | 10121 | * @author Tomasdd |
| 10122 | + * @author Vpovilaitis |
10057 | 10123 | */ |
10058 | 10124 | $messages['lt'] = array( |
| 10125 | + 'lqt-desc' => 'Pridėti diskusijų temas į aptarimų puslapius', |
| 10126 | + 'lqt_movethread' => 'Perkelti temą į kitą puslapį', |
| 10127 | + 'lqt_deletethread' => 'Ištrinti arba atstatyti temą', |
| 10128 | + 'lqt_contents_title' => 'Turinys', |
| 10129 | + 'lqt_toc_thread_title' => 'Temos antraštė', |
| 10130 | + 'lqt_toc_thread_author' => 'Pradėjo', |
| 10131 | + 'lqt_toc_thread_replycount' => 'Atsakymai', |
| 10132 | + 'lqt_toc_thread_modified' => 'Paskutinis pakeitimas', |
| 10133 | + 'lqt_add_header' => 'Pridėti antraštę', |
| 10134 | + 'lqt_new_thread' => 'Pradėti naują diskusiją', |
10059 | 10135 | 'lqt_delete' => 'Ištrinti', |
10060 | 10136 | 'lqt-no-new-messages' => 'Jūs negavote naujų žinučių.', |
10061 | 10137 | 'lqt_newmessages' => 'Naujos žinutės', |
— | — | @@ -10156,7 +10232,7 @@ |
10157 | 10233 | 'lqt_subject' => 'Тема:', |
10158 | 10234 | 'lqt_noreason' => 'Нема наведено причина.', |
10159 | 10235 | 'lqt_move_placeholder' => 'Оваа нишка е показател кој означува дека нишката $1 била преместена од оваа страница. |
10160 | | -Преместувањето го извришил корисникот $2 на $3 во $4. Нишката сега се наоѓа на $5.', |
| 10236 | +Преместувањето го извршил корисникот $2 на $3 во $4 ч. Нишката сега се наоѓа на $5.', |
10161 | 10237 | 'lqt_thread_deleted_for_sysops' => "Оваа нишка е '''избришана''' и е видлива само за администратори.", |
10162 | 10238 | 'lqt_thread_deleted' => 'Оваа ниншка била избришана.', |
10163 | 10239 | 'lqt_summary_notice' => 'Овој разговор не е изменет барем $2 {{PLURAL:$2|ден|дена}}. |
— | — | @@ -10322,6 +10398,7 @@ |
10323 | 10399 | 'lqt-drag-setsortkey' => 'Прилагоди ја позицијата на пораката во страницата', |
10324 | 10400 | 'lqt-drag-bump' => 'Качи ја пораката најгоре на страницата', |
10325 | 10401 | 'lqt-drag-save' => 'Потврди', |
| 10402 | + 'lqt-drag-title' => 'Потврди повлекување', |
10326 | 10403 | 'lqt-drag-reason' => 'Причина:', |
10327 | 10404 | 'lqt-drag-subject' => 'Наслов на новата нишка:', |
10328 | 10405 | 'lqt-edit-signature' => '(уреди потпис)', |
— | — | @@ -10592,6 +10669,7 @@ |
10593 | 10670 | 'lqt-drag-setsortkey' => 'പ്രസിദ്ധപ്പെടുത്തലിന്റെ സ്ഥാനം താളിൽ ക്രമീകരിക്കുക', |
10594 | 10671 | 'lqt-drag-bump' => 'സംവാദം താളിന്റെ മുകളിലേയ്ക്ക് പ്രസിദ്ധപ്പെടുത്തൽ മാറ്റുക', |
10595 | 10672 | 'lqt-drag-save' => 'സ്ഥിരീകരിക്കുക', |
| 10673 | + 'lqt-drag-title' => 'വലിച്ചിടൽ സ്ഥിരീകരിക്കുക', |
10596 | 10674 | 'lqt-drag-reason' => 'കാരണം:', |
10597 | 10675 | 'lqt-drag-subject' => 'പുതിയ ചരടിന്റെ വിഷയം:', |
10598 | 10676 | 'lqt-edit-signature' => '(ഒപ്പ് തിരുത്തുക)', |
— | — | @@ -11047,6 +11125,7 @@ |
11048 | 11126 | 'lqt-drag-setsortkey' => 'Positie van bericht op de pagina aanpassen', |
11049 | 11127 | 'lqt-drag-bump' => 'Bovenaan de overlegpagina plaatsen', |
11050 | 11128 | 'lqt-drag-save' => 'Bevestigen', |
| 11129 | + 'lqt-drag-title' => 'Slepen bevestigen', |
11051 | 11130 | 'lqt-drag-reason' => 'Reden:', |
11052 | 11131 | 'lqt-drag-subject' => 'Onderwerp:', |
11053 | 11132 | 'lqt-edit-signature' => '(ondertekening bewerken)', |
— | — | @@ -11473,7 +11552,7 @@ |
11474 | 11553 | 'lqt_summarize_link' => 'Lag sammendrag', |
11475 | 11554 | 'lqt-summarize-intro' => 'Du kan oppsummere denne tråden i redigeringsboksen. |
11476 | 11555 | Du kan bruke all wikitekst i oppsummeringen din. |
11477 | | -Når du er ferdig, trykk "{{int:savearticle}}".', |
| 11556 | +Når du er ferdig, trykk «{{int:savearticle}}».', |
11478 | 11557 | 'lqt-thread-split' => 'Del opp til en ny tråd', |
11479 | 11558 | 'lqt-split-success' => 'Du har delt opp tråden $1.', |
11480 | 11559 | 'lqt_split_thread' => 'Del en tråd i to', |
— | — | @@ -11551,16 +11630,17 @@ |
11552 | 11631 | 'lqt-save-subject-failed' => 'Følgende feil oppsto ved endring av emnet på tråden: $1', |
11553 | 11632 | 'lqt-ajax-invalid-subject' => 'Emnet du oppga var ugyldig, sannsynligvis fordi det var for langt.', |
11554 | 11633 | 'lqt-ajax-no-subject' => 'Du må spesifisere et emne.', |
11555 | | - 'lqt-save-subject-error-unknown' => 'En ukjent feil oppsto mens man forsøkte å sette emne på denne tråden. Forsøk igjen ved å trykke på "rediger" på toppen av innlegget.', |
| 11634 | + 'lqt-save-subject-error-unknown' => 'En ukjent feil oppsto mens man forsøkte å sette emne på denne tråden. Forsøk igjen ved å trykke på «rediger» på toppen av innlegget.', |
11556 | 11635 | 'lqt-cancel-subject-edit' => 'Avbryt', |
11557 | 11636 | 'lqt-drag-activate' => 'Dra til ny plassering', |
11558 | 11637 | 'lqt-drag-drop-zone' => 'Slipp her', |
11559 | | - 'lqt-drag-confirm' => 'For å gjøre disse handlingene, fyll inn en grunn og trykk "Bekreft".', |
| 11638 | + 'lqt-drag-confirm' => 'For å gjøre disse handlingene, fyll inn en grunn og trykk «Bekreft».', |
11560 | 11639 | 'lqt-drag-reparent' => 'Flytt posten til under en ny foresatt.', |
11561 | 11640 | 'lqt-drag-split' => 'Flytt innlegg til sin egen tråd', |
11562 | 11641 | 'lqt-drag-setsortkey' => 'Juster postens posisjon på siden', |
11563 | 11642 | 'lqt-drag-bump' => 'Flytt innlegg til toppen av diskusjonssiden', |
11564 | 11643 | 'lqt-drag-save' => 'Bekreft', |
| 11644 | + 'lqt-drag-title' => 'Bekreft draget', |
11565 | 11645 | 'lqt-drag-reason' => 'Årsak:', |
11566 | 11646 | 'lqt-drag-subject' => 'Emne for ny tråd:', |
11567 | 11647 | 'lqt-edit-signature' => '(endre signatur)', |
— | — | @@ -11867,6 +11947,7 @@ |
11868 | 11948 | $messages['pdc'] = array( |
11869 | 11949 | 'lqt_delete' => 'Lösche', |
11870 | 11950 | 'lqt_discussion_link' => 'Gschwetz', |
| 11951 | + 'lqt_protectedfromreply_link' => 'geschitzt', |
11871 | 11952 | 'lqt_move_move' => 'Ziehe', |
11872 | 11953 | 'lqt_delete_return' => 'Zerick zu $1.', |
11873 | 11954 | 'lqt-title' => 'Titel', |
— | — | @@ -12402,6 +12483,7 @@ |
12403 | 12484 | 'lqt-drag-setsortkey' => 'Rangé la posission dël mëssagi ant la pàgina', |
12404 | 12485 | 'lqt-drag-bump' => 'Tramudé ël mëssagi an cò dla pàgina ëd discussion', |
12405 | 12486 | 'lqt-drag-save' => 'Conferma', |
| 12487 | + 'lqt-drag-title' => 'Conferma la còpia', |
12406 | 12488 | 'lqt-drag-reason' => 'Rason:', |
12407 | 12489 | 'lqt-drag-subject' => 'Soget ëd la neuva discussion:', |
12408 | 12490 | 'lqt-edit-signature' => '(modifiché la firma)', |
— | — | @@ -12438,12 +12520,15 @@ |
12439 | 12521 | */ |
12440 | 12522 | $messages['ps'] = array( |
12441 | 12523 | 'lqt_contents_title' => 'مينځپانګه', |
| 12524 | + 'lqt_toc_thread_replycount' => 'ځوابونه', |
12442 | 12525 | 'lqt_reply' => 'ځوابول', |
12443 | 12526 | 'lqt_delete' => 'ړنګول', |
12444 | 12527 | 'lqt_undelete' => 'ناړنګول', |
| 12528 | + 'lqt_discussion_link' => 'خبرې اترې', |
12445 | 12529 | 'lqt_from_talk' => 'د $1 لخوا', |
12446 | 12530 | 'lqt_newer' => '← تر دې نوی', |
12447 | 12531 | 'lqt_older' => 'تر دې زوړ →', |
| 12532 | + 'lqt_hist_reply_created' => '[[$1|نوی ځواب]] جوړ شو', |
12448 | 12533 | 'lqt_hist_deleted' => 'ړنګ شو', |
12449 | 12534 | 'lqt_hist_undeleted' => 'ناړنګ شو', |
12450 | 12535 | 'lqt_youhavenewmessages' => 'تاسې [[$1|نوي پيغامونه]] لری.', |
— | — | @@ -12453,6 +12538,7 @@ |
12454 | 12539 | 'lqt_move_torename_edit' => 'دا سمول', |
12455 | 12540 | 'lqt_move_move' => 'لېږدول', |
12456 | 12541 | 'lqt_move_noreason' => 'هېڅ سبب نه دی ورکړ شوی.', |
| 12542 | + 'lqt_delete_return_link' => 'د خبرو اترو مخ', |
12457 | 12543 | 'lqt-title' => 'سرليک', |
12458 | 12544 | 'lqt-summary' => 'لنډيز', |
12459 | 12545 | 'lqt-email-undo' => 'ناکړل', |
— | — | @@ -12462,14 +12548,22 @@ |
12463 | 12549 | 'lqt-history-comment' => 'تبصره', |
12464 | 12550 | 'lqt-movethread' => 'لېږدول', |
12465 | 12551 | 'lqt-menu-trigger' => 'نور', |
| 12552 | + 'lqt-add-reply' => 'يو ځواب ورګډول', |
| 12553 | + 'lqt-enotif-subject-reply' => 'د {{SITENAME}} خبرې اترې - ځوابول: $1', |
12466 | 12554 | 'lqt-search-button' => 'پلټل', |
| 12555 | + 'searchprofile-threads' => 'خبرې اترې', |
12467 | 12556 | 'lqt-ajax-update-link' => 'اوسمهالول', |
| 12557 | + 'lqt-thread-show-replies' => '$1 {{PLURAL:$1|ځواب|ځوابونه}} ښکاره کول', |
| 12558 | + 'lqt-thread-show-more' => 'نور ځوابونه ښکاره کول', |
12468 | 12559 | 'lqt-save-subject' => 'خوندي کول', |
12469 | 12560 | 'lqt-cancel-subject-edit' => 'ناګارل', |
12470 | 12561 | 'lqt-drag-reason' => 'سبب:', |
| 12562 | + 'lqt-feed-title-replies' => '{{SITENAME}} — ځوابونه', |
12471 | 12563 | 'lqt-newmessages-n' => 'نوي پيغامونه ($1)', |
12472 | 12564 | 'lqt_newmessages' => 'نوي پيغامونه', |
12473 | 12565 | 'lqt_newmessages-title' => 'نوي پيغامونه', |
| 12566 | + 'lqt-reply-summary' => '[[$2|$1]] ته ځواب وييل', |
| 12567 | + 'lqt-talkpage-history-title' => 'د خبرو اترو د مخ پېښليک', |
12474 | 12568 | 'lqt-reply-subpage' => 'ځوابول', |
12475 | 12569 | ); |
12476 | 12570 | |
— | — | @@ -12715,6 +12809,7 @@ |
12716 | 12810 | 'lqt-drag-setsortkey' => 'Ajustar posição da mensagem na página', |
12717 | 12811 | 'lqt-drag-bump' => 'Mover o tópico para o topo da página', |
12718 | 12812 | 'lqt-drag-save' => 'Confirmar', |
| 12813 | + 'lqt-drag-title' => 'Confirmar arrastamento', |
12719 | 12814 | 'lqt-drag-reason' => 'Motivo:', |
12720 | 12815 | 'lqt-drag-subject' => 'Assunto do tópico novo:', |
12721 | 12816 | 'lqt-edit-signature' => '(editar assinatura)', |
— | — | @@ -12987,6 +13082,7 @@ |
12988 | 13083 | 'lqt-drag-setsortkey' => 'Ajustar posição da mensagem na página', |
12989 | 13084 | 'lqt-drag-bump' => 'Mover o tópico para o topo da página', |
12990 | 13085 | 'lqt-drag-save' => 'Confirmar', |
| 13086 | + 'lqt-drag-title' => 'Confirmar arraste', |
12991 | 13087 | 'lqt-drag-reason' => 'Motivo:', |
12992 | 13088 | 'lqt-drag-subject' => 'Assunto do tópico novo:', |
12993 | 13089 | 'lqt-edit-signature' => '(editar assinatura)', |
— | — | @@ -13040,10 +13136,10 @@ |
13041 | 13137 | 'lqt_movethread' => 'Mutați thread la o altă pagină', |
13042 | 13138 | 'lqt_deletethread' => 'Şterge sau nu șterge thread', |
13043 | 13139 | 'lqt_contents_title' => 'Cuprins', |
13044 | | - 'lqt_toc_thread_title' => 'Titlu thread', |
| 13140 | + 'lqt_toc_thread_title' => 'Titlu discuție', |
13045 | 13141 | 'lqt_toc_thread_author' => 'Început de', |
13046 | 13142 | 'lqt_toc_thread_replycount' => 'Răspunsuri', |
13047 | | - 'lqt_toc_thread_modified' => 'Ultima dată modificat', |
| 13143 | + 'lqt_toc_thread_modified' => 'Ultima modificare', |
13048 | 13144 | 'lqt_add_header' => 'Adaugă antet', |
13049 | 13145 | 'lqt_new_thread' => 'Începe o nouă discuție', |
13050 | 13146 | 'lqt_invalid_subject' => 'Subiectul care l-ați introdus este invalid. |
— | — | @@ -13055,12 +13151,12 @@ |
13056 | 13152 | 'lqt_delete' => 'Şterge', |
13057 | 13153 | 'lqt_undelete' => 'Recuperare', |
13058 | 13154 | 'lqt_permalink' => 'Legătură către', |
13059 | | - 'lqt_fragment' => 'Fragment a unei $1 de la $2', |
| 13155 | + 'lqt_fragment' => 'Fragment dintr-o $1 de la $2', |
13060 | 13156 | 'lqt_discussion_link' => 'discuție', |
13061 | | - 'lqt_from_talk' => 'de la $1', |
| 13157 | + 'lqt_from_talk' => 'De la $1', |
13062 | 13158 | 'lqt_newer' => '← mai noi', |
13063 | 13159 | 'lqt_older' => 'mai vechi →', |
13064 | | - 'lqt-history-title' => 'Istoric thread', |
| 13160 | + 'lqt-history-title' => 'Istoric discuție', |
13065 | 13161 | 'lqt_hist_comment_edited' => 'Text comentariu [$2 modificat]', |
13066 | 13162 | 'lqt_hist_summary_changed' => 'Rezumat schimbat', |
13067 | 13163 | 'lqt_hist_reply_created' => '[[$1|Răspuns nou]] creat', |
— | — | @@ -13112,7 +13208,7 @@ |
13113 | 13209 | 'lqt_move_torename' => "Pentru a redenumi acest thread, $1 și schimbați câmpul 'Subiect'.", |
13114 | 13210 | 'lqt_move_torename_edit' => 'modificare', |
13115 | 13211 | 'lqt_move_destinationtitle' => 'Titlul paginii de destinație - discuție:', |
13116 | | - 'lqt_move_move' => 'Mutare', |
| 13212 | + 'lqt_move_move' => 'Redenumește', |
13117 | 13213 | 'lqt_move_nodestination' => 'Trebuie să specificați o destinație.', |
13118 | 13214 | 'lqt_move_thread_bad_destination' => 'Destinația de discuție nu este o pagină de discuție.', |
13119 | 13215 | 'lqt_move_samedestination' => 'Threadul este deja pe această pagină !', |
— | — | @@ -13169,7 +13265,7 @@ |
13170 | 13266 | 'lqt-no-threads' => 'Încă nu există discuții pe această pagină.', |
13171 | 13267 | 'lqt-delete-parent-deleted' => 'Discuția părinte a fost ștearsă ($1)', |
13172 | 13268 | 'lqt-movethread' => 'Mutare', |
13173 | | - 'lqt-menu-trigger' => 'Mai mult', |
| 13269 | + 'lqt-menu-trigger' => 'Adiț.', |
13174 | 13270 | 'lqt-newmessages-from' => 'De la $1', |
13175 | 13271 | 'lqt-hot-topics' => 'Subiecte calde', |
13176 | 13272 | 'lqt-add-reply' => 'Adaugă un răspuns', |
— | — | @@ -13255,6 +13351,7 @@ |
13256 | 13352 | * Vè in conflitte cu le prefisse inderuicchi o 'u nome de le namespace.", |
13257 | 13353 | 'lqt_empty_subject' => "Tu à mettere 'nu suggette.", |
13258 | 13354 | 'lqt_reply' => 'Respunne', |
| 13355 | + 'lqt-parent' => 'Attane', |
13259 | 13356 | 'lqt_delete' => 'Scangille', |
13260 | 13357 | 'lqt_undelete' => 'Repristine', |
13261 | 13358 | 'lqt_permalink' => 'Apponde a', |
— | — | @@ -13472,6 +13569,7 @@ |
13473 | 13570 | 'lqt-drag-setsortkey' => "conziglie 'a posizione d'u messagge jndr'à pàgene", |
13474 | 13571 | 'lqt-drag-bump' => "Spuèste 'u messagge a l'inizie d'a pàgene de le 'ngazzaminde", |
13475 | 13572 | 'lqt-drag-save' => 'Conferme', |
| 13573 | + 'lqt-drag-title' => "Conferme 'u trascinamende", |
13476 | 13574 | 'lqt-drag-reason' => 'Mutive:', |
13477 | 13575 | 'lqt-drag-subject' => "Suggette pe l'argomende nuève:", |
13478 | 13576 | 'lqt-edit-signature' => "(cange 'a firme)", |
— | — | @@ -13509,6 +13607,7 @@ |
13510 | 13608 | * @author Kaganer |
13511 | 13609 | * @author Kv75 |
13512 | 13610 | * @author Lockal |
| 13611 | + * @author MaxSem |
13513 | 13612 | * @author McDutchie |
13514 | 13613 | * @author Mormegil |
13515 | 13614 | * @author VasilievVV |
— | — | @@ -13580,8 +13679,8 @@ |
13581 | 13680 | 'lqt_protectedfromreply_link' => 'защищена', |
13582 | 13681 | 'lqt_subject' => 'Заголовок:', |
13583 | 13682 | 'lqt_noreason' => 'Не указана причина.', |
13584 | | - 'lqt_move_placeholder' => 'Эта заглушка ветки показывает, что ветка $1 была перемещена с этой страницы. |
13585 | | -Перемещение произведено участником $2 $3 в $4. Теперь ветку можно найти как $5.', |
| 13683 | + 'lqt_move_placeholder' => 'Ветка $1 была перемещена с этой страницы в $5. |
| 13684 | +Перемещение произведено участником $2 $3 в $4.', |
13586 | 13685 | 'lqt_thread_deleted_for_sysops' => "Эта ветка была '''удалена''' и видна только администраторам.", |
13587 | 13686 | 'lqt_thread_deleted' => 'Эта ветка была удалена.', |
13588 | 13687 | 'lqt_summary_notice' => 'Это обсуждение не изменялось как минимум $2 {{PLURAL:$2|день|дня|дней}}. |
— | — | @@ -13746,6 +13845,7 @@ |
13747 | 13846 | 'lqt-drag-setsortkey' => 'Изменить расположение записи на странице', |
13748 | 13847 | 'lqt-drag-bump' => 'Переместить запись в начало страницы обсуждения', |
13749 | 13848 | 'lqt-drag-save' => 'Подтвердить', |
| 13849 | + 'lqt-drag-title' => 'Подтвердить перетаскивание', |
13750 | 13850 | 'lqt-drag-reason' => 'Причина:', |
13751 | 13851 | 'lqt-drag-subject' => 'Тема для новой ветки:', |
13752 | 13852 | 'lqt-edit-signature' => '(править подпись)', |
— | — | @@ -13781,6 +13881,9 @@ |
13782 | 13882 | * @author Gazeb |
13783 | 13883 | */ |
13784 | 13884 | $messages['rue'] = array( |
| 13885 | + 'lqt-newmessages-n' => 'Новы повідомлїня $1', |
| 13886 | + 'lqt_newmessages' => 'Новы повідомлїня', |
| 13887 | + 'lqt_newmessages-title' => 'Новы повідомлїня', |
13785 | 13888 | 'lqt-reply-subpage' => 'одповісти', |
13786 | 13889 | ); |
13787 | 13890 | |
— | — | @@ -14444,6 +14547,7 @@ |
14445 | 14548 | 'lqt_youhavenewmessages' => 'Имате [[$1|нових порука]].', |
14446 | 14549 | 'lqt_protectedfromreply_link' => 'заштићено', |
14447 | 14550 | 'lqt_subject' => 'Наслов:', |
| 14551 | + 'lqt_noreason' => 'Није дат разлог.', |
14448 | 14552 | 'lqt_summary_notice_link' => 'напишите сажетак', |
14449 | 14553 | 'lqt_summary_label' => 'Сажетак теме:', |
14450 | 14554 | 'lqt_summary_subtitle' => 'Сажетак за "$1"', |
— | — | @@ -14556,6 +14660,8 @@ |
14557 | 14661 | 'lqt_newmessages' => 'Нове поруке', |
14558 | 14662 | 'lqt_newmessages-title' => 'Нове поруке', |
14559 | 14663 | 'lqt-newpost-summary' => 'Нова тема: $1', |
| 14664 | + 'lqt-reply-summary' => 'Одговор на [[$2|$1]]', |
| 14665 | + 'lqt-talkpage-history-title' => 'Историја стране за разговор', |
14560 | 14666 | 'lqt-talkpage-history-subtitle' => 'За $1', |
14561 | 14667 | 'lqt-talkpage-history-tab' => 'Заглавље', |
14562 | 14668 | 'restriction-reply' => 'Слање одговора', |
— | — | @@ -14631,6 +14737,7 @@ |
14632 | 14738 | 'lqt_youhavenewmessages' => 'Imate [[$1|novih poruka]].', |
14633 | 14739 | 'lqt_protectedfromreply_link' => 'zaštićeno', |
14634 | 14740 | 'lqt_subject' => 'Naslov:', |
| 14741 | + 'lqt_noreason' => 'Nije dat razlog.', |
14635 | 14742 | 'lqt_summary_notice_link' => 'napišite sažetak', |
14636 | 14743 | 'lqt_summary_label' => 'Sažetak teme:', |
14637 | 14744 | 'lqt_summary_subtitle' => 'Sažetak za "$1"', |
— | — | @@ -14743,6 +14850,8 @@ |
14744 | 14851 | 'lqt_newmessages' => 'Nove poruke', |
14745 | 14852 | 'lqt_newmessages-title' => 'Nove poruke', |
14746 | 14853 | 'lqt-newpost-summary' => 'Nova tema: $1', |
| 14854 | + 'lqt-reply-summary' => 'Odgovor na [[$2|$1]]', |
| 14855 | + 'lqt-talkpage-history-title' => 'Istorija strane za razgovor', |
14747 | 14856 | 'lqt-talkpage-history-subtitle' => 'Za $1', |
14748 | 14857 | 'lqt-talkpage-history-tab' => 'Zaglavlje', |
14749 | 14858 | 'restriction-reply' => 'Slanje odgovora', |
— | — | @@ -15962,11 +16071,11 @@ |
15963 | 16072 | * @author Vito Genovese |
15964 | 16073 | */ |
15965 | 16074 | $messages['tr'] = array( |
15966 | | - 'lqt-desc' => 'Mesaj sayfalarına düğümlenen tartışmalar ekler', |
15967 | | - 'lqt_movethread' => 'Düğümü başka bir sayfaya taşı', |
15968 | | - 'lqt_deletethread' => 'Düğümü sil ya da silmeyi geri al', |
| 16075 | + 'lqt-desc' => 'Tartışma sayfalarına diziler halinde tartışmalar ekler', |
| 16076 | + 'lqt_movethread' => 'İleti dizisini başka bir sayfaya taşı', |
| 16077 | + 'lqt_deletethread' => 'İleti dizini sil ya da silmeyi geri al', |
15969 | 16078 | 'lqt_contents_title' => 'İçindekiler', |
15970 | | - 'lqt_toc_thread_title' => 'Düğüm başlığı', |
| 16079 | + 'lqt_toc_thread_title' => 'İleti dizisi başlığı', |
15971 | 16080 | 'lqt_toc_thread_author' => 'Başlatan', |
15972 | 16081 | 'lqt_toc_thread_replycount' => 'Cevaplar', |
15973 | 16082 | 'lqt_toc_thread_modified' => 'Son değiştiren', |
— | — | @@ -15978,7 +16087,7 @@ |
15979 | 16088 | * Vikilerarası bağlantılar ya da ad alanlarıyla çakışma olabilir.', |
15980 | 16089 | 'lqt_empty_subject' => 'Bir konu girmelisiniz.', |
15981 | 16090 | 'lqt_reply' => 'Cevap ver', |
15982 | | - 'lqt-parent' => 'Üst düğüm', |
| 16091 | + 'lqt-parent' => 'Üst dizi', |
15983 | 16092 | 'lqt_delete' => 'Sil', |
15984 | 16093 | 'lqt_undelete' => 'Geri al', |
15985 | 16094 | 'lqt_permalink' => 'Bağlantı ver', |
— | — | @@ -15987,83 +16096,83 @@ |
15988 | 16097 | 'lqt_from_talk' => '$1 sayfasından', |
15989 | 16098 | 'lqt_newer' => '← daha yeni', |
15990 | 16099 | 'lqt_older' => 'daha eski →', |
15991 | | - 'lqt-history-title' => 'Düğüm geçmişi', |
| 16100 | + 'lqt-history-title' => 'İleti dizisi geçmişi', |
15992 | 16101 | 'lqt_hist_comment_edited' => 'Yorum metni [$2 değiştirildi]', |
15993 | 16102 | 'lqt_hist_summary_changed' => 'Özet değiştirildi', |
15994 | 16103 | 'lqt_hist_reply_created' => '[[$1|Yeni yanıt]] oluşturuldu', |
15995 | | - 'lqt_hist_thread_created' => 'Yeni düğüm oluşturuldu', |
| 16104 | + 'lqt_hist_thread_created' => 'Yeni ileti dizisi oluşturuldu', |
15996 | 16105 | 'lqt_hist_deleted' => 'Silindi', |
15997 | 16106 | 'lqt_hist_undeleted' => 'Silinmesi geri alındı', |
15998 | 16107 | 'lqt_hist_moved_talkpage' => 'Taşındı', |
15999 | 16108 | 'lqt_hist_listing_subtitle' => 'Geçmiş listesi görüntüleniyor', |
16000 | | - 'lqt_hist_view_whole_thread' => 'Tüm düğüm için geçmişi gör', |
16001 | | - 'lqt_hist_no_revisions_error' => 'Bu düğümün hiç geçmiş revizyonu yok.', |
| 16109 | + 'lqt_hist_view_whole_thread' => 'Tüm ileti dizisi için geçmişi gör', |
| 16110 | + 'lqt_hist_no_revisions_error' => 'Bu ileti dizisinin hiç geçmiş revizyonu yok.', |
16002 | 16111 | 'lqt_hist_past_last_page_error' => 'Mevcut geçmiş sayfası sayısının çok ötesindesiniz.', |
16003 | 16112 | 'lqt_hist_tooltip_newer_disabled' => 'Bu bağlantı devre dışı bırakıldı çünkü ilk sayfadasınız.', |
16004 | 16113 | 'lqt_hist_tooltip_older_disabled' => 'Bu bağlantı devre dışı bırakıldı çünkü son sayfadasınız.', |
16005 | | - 'lqt_hist_split' => 'Cevabı yeni bir düğüme ayır', |
| 16114 | + 'lqt_hist_split' => 'Cevabı yeni bir ileti dizisine ayır', |
16006 | 16115 | 'lqt_hist_edited_subject' => 'Konuyu $2 iken $3 olarak değiştirdi', |
16007 | 16116 | 'lqt_hist_edited_subject_corrupt' => 'Konuyu değiştirdi', |
16008 | | - 'lqt_hist_merged_from' => '[[$1|Cevap]] başka bir düğüme taşındı', |
16009 | | - 'lqt_hist_merged_to' => '[[$1|Cevap]] başka bir düğümden taşındı', |
16010 | | - 'lqt_hist_split_from' => 'Yeni bir düğüme ayır', |
| 16117 | + 'lqt_hist_merged_from' => '[[$1|Cevap]] başka bir ileti dizisine taşındı', |
| 16118 | + 'lqt_hist_merged_to' => '[[$1|Cevap]] başka bir ileti dizisinden taşındı', |
| 16119 | + 'lqt_hist_split_from' => 'Yeni bir ileti dizisine ayır', |
16011 | 16120 | 'lqt_hist_root_blanked' => 'Yorum metni kaldırıldı', |
16012 | 16121 | 'lqt_hist_adjusted_sortkey' => 'Ayarlanmış konu konumu', |
16013 | 16122 | 'lqt_revision_as_of' => '$2 $3 itibariyle olan revizyon.', |
16014 | | - 'lqt_change_new_thread' => 'Bu düğümün ilk revizyonu.', |
| 16123 | + 'lqt_change_new_thread' => 'Bu ileti dizisinin ilk revizyonu.', |
16015 | 16124 | 'lqt_change_reply_created' => '[$1 Vurgulanan yorum] bu revizyonda oluşturuldu.', |
16016 | 16125 | 'lqt_change_edited_root' => '[$1 Vurgulanan yorum] bu revizyonda değiştirildi.', |
16017 | | - 'lqt_change_edited_summary' => 'Düğümün özeti değiştirildi', |
16018 | | - 'lqt_change_deleted' => '[$1 Bu düğüm] ya da üst düğümü silinmiş', |
| 16126 | + 'lqt_change_edited_summary' => 'İleti dizisinin özeti değiştirildi', |
| 16127 | + 'lqt_change_deleted' => '[$1 Bu ileti dizisi] ya da bu ileti dizisinin üst dizisi silinmiş', |
16019 | 16128 | 'lqt_change_undeleted' => '[$1 Vurgulanan gönderinin] silinmesi geri alındı', |
16020 | | - 'lqt_change_moved' => '[$1 Bu düğüm] başka bir tartışma sayfasına taşındı', |
16021 | | - 'lqt_change_split' => '[$1 Bu düğüm] başka bir düğümden ayrıldı', |
16022 | | - 'lqt_change_edited_subject' => 'Bu düğümün konusu "$2" iken "$3" olarak değiştirildi', |
16023 | | - 'lqt_change_merged_from' => 'Bu düğüme gelen bir [$1 cevap] başka bir düğüme taşındı', |
16024 | | - 'lqt_change_merged_to' => '[$1 Vurgulanan cevap] başka bir düğümden taşındı', |
16025 | | - 'lqt_change_split_from' => 'Bu düğümün bir [$1 altdüğümü] kendi düğümüne ayrıldı', |
| 16129 | + 'lqt_change_moved' => '[$1 Bu ileti dizisi] başka bir tartışma sayfasına taşındı', |
| 16130 | + 'lqt_change_split' => '[$1 Bu ileti dizisi] başka bir ileti dizisinden ayrıldı', |
| 16131 | + 'lqt_change_edited_subject' => 'Bu ileti dizisinin konusu "$2" iken "$3" olarak değiştirildi', |
| 16132 | + 'lqt_change_merged_from' => 'Bu ileti dizisine gelen bir [$1 cevap] başka bir diziye taşındı', |
| 16133 | + 'lqt_change_merged_to' => '[$1 Vurgulanan cevap] başka bir ileti dizisinden taşındı', |
| 16134 | + 'lqt_change_split_from' => 'Bu ileti dizisinin bir [$1 altdizisi] kendi dizisine ayrıldı', |
16026 | 16135 | 'lqt_change_root_blanked' => '[$1 Bir yorumun] metni çıkarıldı.', |
16027 | 16136 | 'lqt_youhavenewmessages' => '[[$1|yeni mesajınız]] var.', |
16028 | | - 'lqt_protectedfromreply' => 'Bu düğüm cevaplanmaya karşı $1.', |
| 16137 | + 'lqt_protectedfromreply' => 'Bu ileti dizisi cevaplanmaya karşı $1.', |
16029 | 16138 | 'lqt_protectedfromreply_link' => 'koruma altında', |
16030 | 16139 | 'lqt_subject' => 'Konu:', |
16031 | 16140 | 'lqt_noreason' => 'Sebep belirtilmemiş.', |
16032 | | - 'lqt_move_placeholder' => 'Bu düğüm, bir düğümün, $1, bu sayfadan başka bir tartışma sayfasına çıkarıldığını belirten bir yertutucudur. |
16033 | | -Bu taşıma $3 $4 tarihinde $2 tarafından yapılmıştır. Düğüm şu anda $5 adresinde bulunuyor.', |
16034 | | - 'lqt_thread_deleted_for_sysops' => "Bu düğüm '''silinmiş''' ve sadece yöneticiler tarafından görülebilir.", |
16035 | | - 'lqt_thread_deleted' => 'Bu düğüm silinmiş.', |
| 16141 | + 'lqt_move_placeholder' => 'Bu ileti dizisi, bir ileti dizisinin, $1, bu sayfadan başka bir tartışma sayfasına çıkarıldığını belirten bir yertutucudur. |
| 16142 | +Bu taşıma $3 $4 tarihinde $2 tarafından yapılmıştır. İleti dizisi şu anda $5 adresinde bulunuyor.', |
| 16143 | + 'lqt_thread_deleted_for_sysops' => "Bu ileti dizisi '''silinmiş''' ve sadece yöneticiler tarafından görülebilir.", |
| 16144 | + 'lqt_thread_deleted' => 'Bu ileti dizisi silinmiş.', |
16036 | 16145 | 'lqt_summary_notice' => 'Bu tartışmada en az $2 {{PLURAL:$2|gündür|gündür}} hiçbir değişiklik yok. |
16037 | 16146 | Eğer sonlandıysa, $1 isteyebilirsiniz.', |
16038 | 16147 | 'lqt_summary_notice_link' => 'bir özet yazmak', |
16039 | | - 'lqt_summary_label' => 'Düğüm özeti:', |
| 16148 | + 'lqt_summary_label' => 'İleti dizisinin özeti:', |
16040 | 16149 | 'lqt_summary_subtitle' => '"$1" için özet', |
16041 | | - 'lqt_nosuchrevision' => 'Bu düğümün böyle bir revizyonu yok', |
16042 | | - 'lqt_nosuchthread' => 'Belirttiğiniz düğüm mevcut değil.', |
16043 | | - 'lqt_nosuchthread_title' => 'Böyle bir düğüm yok', |
16044 | | - 'lqt_threadrequired' => 'URLde bir düğüm belirtmelisiniz.', |
| 16150 | + 'lqt_nosuchrevision' => 'Bu ileti dizisinin böyle bir revizyonu yok', |
| 16151 | + 'lqt_nosuchthread' => 'Belirttiğiniz ileti dizisi mevcut değil.', |
| 16152 | + 'lqt_nosuchthread_title' => 'Böyle bir ileti dizisi yok', |
| 16153 | + 'lqt_threadrequired' => 'URLde bir ileti dizisi belirtmelisiniz.', |
16045 | 16154 | 'lqt_move_movingthread' => "$1 taşınıyor. |
16046 | | -Bu düğüm $2'nin parçası.", |
16047 | | - 'lqt_move_torename' => "Bu düğümü yeniden adlandırmak için, $1 ve 'Konu' alanının değiştirin.", |
| 16155 | +Bu ileti dizisi $2'nin parçası.", |
| 16156 | + 'lqt_move_torename' => "Bu ileti dizisini yeniden adlandırmak için, 'Konu' alanını düzenleyerek sayfayı $1.", |
16048 | 16157 | 'lqt_move_torename_edit' => 'değiştirin', |
16049 | 16158 | 'lqt_move_destinationtitle' => 'Hedef tartışma sayfası başlığı:', |
16050 | 16159 | 'lqt_move_move' => 'Taşı', |
16051 | 16160 | 'lqt_move_nodestination' => 'Bir hedef belirtmelisiniz.', |
16052 | 16161 | 'lqt_move_thread_bad_destination' => 'Hedef sayfası bir tartışma sayfası değil.', |
16053 | | - 'lqt_move_samedestination' => 'Düğüm zaten bu sayfada!', |
| 16162 | + 'lqt_move_samedestination' => 'İleti dizisi zaten bu sayfada!', |
16054 | 16163 | 'lqt_move_noreason' => 'Sebep belirtilmemiş.', |
16055 | | - 'lqt_move_success' => 'Düğüm $1 e taşındı.', |
| 16164 | + 'lqt_move_success' => 'İleti dizisi $1 e taşındı.', |
16056 | 16165 | 'lqt_delete_undeleting' => "'''$1''' silinmesi geri alınıyor.", |
16057 | | - 'lqt_delete_undeletethread' => 'Düğümün silinmesini geri al', |
16058 | | - 'lqt_delete_partof' => "Bu düğüm '''$1''' düğümünün bir parçası.", |
| 16166 | + 'lqt_delete_undeletethread' => 'İleti dizisinin silinmesini geri al', |
| 16167 | + 'lqt_delete_partof' => "Bu ileti dizisi '''$1''' dizisinin bir parçası.", |
16059 | 16168 | 'lqt_delete_deleting' => "'''$1''' ve '''tüm cevaplar''' siliniyor.", |
16060 | | - 'lqt_delete_deletethread' => 'Düğümü ve cevapları sil', |
16061 | | - 'lqt_delete_deleted' => 'Düğüm silindi.', |
16062 | | - 'lqt_delete_undeleted' => 'Düğümün silinmesi geri alındı.', |
| 16169 | + 'lqt_delete_deletethread' => 'İleti dizisini ve cevapları sil', |
| 16170 | + 'lqt_delete_deleted' => 'İleti dizisi silindi.', |
| 16171 | + 'lqt_delete_undeleted' => 'İleti dizisinin silinmesi geri alındı.', |
16063 | 16172 | 'lqt_delete_return' => '$1 sayfasına dön.', |
16064 | 16173 | 'lqt_delete_return_link' => 'tartışma sayfası', |
16065 | | - 'lqt_delete_unallowed' => 'Düğümleri silmeye izniniz yok.', |
16066 | | - 'lqt_delete_show_checkbox' => 'Silinen düğümleri göster', |
16067 | | - 'lqt_talkpage_autocreate_summary' => 'Tartışma sayfası ilk düğüm gönderilince otomatik oluşturuldu.', |
| 16174 | + 'lqt_delete_unallowed' => 'İleti dizilerini silmeye izniniz yok.', |
| 16175 | + 'lqt_delete_show_checkbox' => 'Silinen ileti dizilerini göster', |
| 16176 | + 'lqt_talkpage_autocreate_summary' => 'Tartışma sayfası ilk ileti dizisi gönderilince otomatik oluşturuldu.', |
16068 | 16177 | 'lqt_header_warning_big' => 'Bir $1 değiştiriyorsunuz.', |
16069 | 16178 | 'lqt_header_warning_after_big' => 'Başlıklar duyurular ve önsözler içindir. |
16070 | 16179 | $2 isteyebilirsiniz.', |
— | — | @@ -16071,96 +16180,96 @@ |
16072 | 16181 | 'lqt_header_warning_new_discussion' => 'Yeni bir tartışma başlatmak', |
16073 | 16182 | 'lqt_sorting_order' => 'Sıralama düzeni:', |
16074 | 16183 | 'lqt_sort_newest_changes' => 'önce son değiştirilen', |
16075 | | - 'lqt_sort_newest_threads' => 'önce en yeni düğümler', |
16076 | | - 'lqt_sort_oldest_threads' => 'önce en eski düğümler', |
| 16184 | + 'lqt_sort_newest_threads' => 'önce en yeni ileti dizileri', |
| 16185 | + 'lqt_sort_oldest_threads' => 'önce en eski ileti dizileri', |
16077 | 16186 | 'lqt-title' => 'Başlık', |
16078 | 16187 | 'lqt-summary' => 'Özet', |
16079 | 16188 | 'lqt-older' => 'daha eski', |
16080 | 16189 | 'lqt-newer' => 'daha yeni', |
16081 | | - 'lqt-searching' => 'Düğümler aranıyor', |
| 16190 | + 'lqt-searching' => 'İleti dizileri aranıyor', |
16082 | 16191 | 'lqt-read-message' => 'Okunmuş olarak işaretle', |
16083 | | - 'lqt-read-message-tooltip' => 'Yeni mesajlardan bu düğümü çıkar. |
| 16192 | + 'lqt-read-message-tooltip' => 'Yeni mesajlardan bu ileti dizisini çıkar. |
16084 | 16193 | Orijinal tartışma sayfasında hala görünür olacaktır.', |
16085 | 16194 | 'lqt-read-all' => 'Hepsini okunmuş olarak işaretle', |
16086 | | - 'lqt-read-all-tooltip' => 'Yeni mesajlardan tüm düğümleri çıkar. |
| 16195 | + 'lqt-read-all-tooltip' => 'Yeni mesajlardan tüm ileti dizilerini çıkar. |
16087 | 16196 | Orijinal tartışma sayfasında hala görünür olacaklardır. |
16088 | 16197 | Bu operasyon gerialınabilirdir.', |
16089 | | - 'lqt-marked-read' => "'''$1''' düğümü okunmuş olarak işaretlendi.", |
| 16198 | + 'lqt-marked-read' => "'''$1''' ileti dizisi okunmuş olarak işaretlendi.", |
16090 | 16199 | 'lqt-count-marked-read' => '$1 {{PLURAL:$1|mesaj|mesaj}} okunmuş olarak işaretlendi.', |
16091 | 16200 | 'lqt-email-undo' => 'Geri al', |
16092 | 16201 | 'lqt-messages-sent' => 'Size gönderilen mesajlar:', |
16093 | 16202 | 'lqt-other-messages' => 'Diğer tartışma sayfalarındaki mesajlar:', |
16094 | 16203 | 'lqt-no-new-messages' => 'Sizin için yeni bir mesaj yok.', |
16095 | 16204 | 'lqt-new-messages' => '✒ Yeni mesajlarınız var.', |
16096 | | - 'lqt-email-info-undo' => 'Daha önce attığınız düğümü geri getir.', |
16097 | | - 'lqt-date-info' => 'Bu bağlantı devre dışı bırakıldı çünkü tüm tarihlerden düğümleri görüntülüyorsunuz.', |
16098 | | - 'lqt-newmessages-context' => 'Tam düğüm', |
| 16205 | + 'lqt-email-info-undo' => 'Daha önce attığınız ileti dizisini geri getir.', |
| 16206 | + 'lqt-date-info' => 'Bu bağlantı devre dışı bırakıldı çünkü tüm tarihlerden ileti dizilerini görüntülüyorsunuz.', |
| 16207 | + 'lqt-newmessages-context' => 'Tam ileti dizisi', |
16099 | 16208 | 'lqt-thread-created' => 'Oluşturuldu', |
16100 | 16209 | 'lqt-history-time' => 'Zaman', |
16101 | 16210 | 'lqt-history-user' => 'Kullanıcı', |
16102 | 16211 | 'lqt-history-action' => 'Eylem', |
16103 | 16212 | 'lqt-history-comment' => 'Yorum', |
16104 | | - 'lqt-history-thread' => 'Düğüm', |
| 16213 | + 'lqt-history-thread' => 'İleti dizisi', |
16105 | 16214 | 'lqt-thread-edited-author' => 'Yazar tarafından değiştirildi.<br /> |
16106 | 16215 | Son değişiklik: $1', |
16107 | 16216 | 'lqt-thread-edited-others' => '{{PLURAL:$2|Başka bir kullanıcı|Başka $2 kullanıcı}} tarafından değiştirildi.<br /> |
16108 | 16217 | Son değişiklik: $1', |
16109 | 16218 | 'lqt-header-actions' => 'Eylemler', |
16110 | 16219 | 'lqt_summarize_link' => 'Özetle', |
16111 | | - 'lqt-summarize-intro' => 'Lütfen aşağıdaki düğümü, değiştirme kutusunda özetleyin. |
| 16220 | + 'lqt-summarize-intro' => 'Lütfen aşağıdaki ileti dizisini, değiştirme kutusunda özetleyin. |
16112 | 16221 | Özetinizde herhangi bir vikimetnini kullanabilirsiniz. |
16113 | 16222 | Bitirdiğinizde "{{int:savearticle}}"e tıklayın.', |
16114 | | - 'lqt-thread-split' => 'Yeni düğüme ayır', |
16115 | | - 'lqt-split-success' => '$1 düğümünü başarıyla ayırdınız.', |
16116 | | - 'lqt_split_thread' => 'Bir düğümü ayır', |
16117 | | - 'lqt-thread-split-subject' => 'Yeni düğüm konusu:', |
16118 | | - 'lqt-thread-split-thread' => 'Düğüm:', |
| 16223 | + 'lqt-thread-split' => 'Yeni ileti dizisine ayır', |
| 16224 | + 'lqt-split-success' => '$1 ileti dizisini başarıyla ayırdınız.', |
| 16225 | + 'lqt_split_thread' => 'Bir ileti dizisini ayır', |
| 16226 | + 'lqt-thread-split-subject' => 'Yeni ileti dizisinin konusu:', |
| 16227 | + 'lqt-thread-split-thread' => 'İleti dizisi:', |
16119 | 16228 | 'lqt-split-submit' => 'Ayır', |
16120 | 16229 | 'lqt_split_badsubject' => 'Girdiğiniz konu geçersiz.', |
16121 | | - 'lqt-no-threads' => 'Bu sayfada henüz düğüm yok.', |
16122 | | - 'lqt-delete-parent-warning' => 'Bu cevaba sahip yüksek-seviyeli bir düğüm. |
| 16230 | + 'lqt-no-threads' => 'Bu sayfada henüz ileti dizisi yok.', |
| 16231 | + 'lqt-delete-parent-warning' => 'Bu ileti dizisi cevapları bulunan bir üst dizi. |
16123 | 16232 | Cevaplar da otomatik olarak silinecektir. |
16124 | | -Bundan kaçınmak için, cevapları düğümü silmeden önce düğümden ayırın.', |
16125 | | - 'lqt-delete-parent-deleted' => 'Ana düğüm silindi ($1)', |
16126 | | - 'lqt-delete-replies-done' => 'Bu düğüme olan tüm cevaplar da silindi.', |
| 16233 | +Bundan kaçınmak için, cevapları ileti dizisini silmeden önce diziden ayırın.', |
| 16234 | + 'lqt-delete-parent-deleted' => 'Ana ileti dizisi silindi ($1)', |
| 16235 | + 'lqt-delete-replies-done' => 'Bu ileti dizisine yazılmış tüm cevaplar da silindi.', |
16127 | 16236 | 'lqt-movethread' => 'Taşı', |
16128 | | - 'lqt-menu-trigger' => 'Daha fazla', |
| 16237 | + 'lqt-menu-trigger' => 'Diğer', |
16129 | 16238 | 'lqt-newmessages-from' => 'Gönderen $1', |
16130 | 16239 | 'lqt-hot-topics' => 'Taze başlıklar', |
16131 | 16240 | 'lqt-add-reply' => 'Bir cevap ekle', |
16132 | | - 'lqt_rc_new_discussion' => 'yeni bir düğüm gönderdi, "$1"', |
16133 | | - 'lqt_rc_new_reply' => '"$1" düğümüne yeni bir cevap yazdı', |
16134 | | - 'right-lqt-split' => 'Düğümleri ayır', |
16135 | | - 'right-lqt-merge' => 'Düğümleri birleştir', |
16136 | | - 'lqt-thread-merge' => 'Diğer bir düğüme birleştir', |
16137 | | - 'lqt-thread-merge-to' => 'Bu düğüme birleştir', |
16138 | | - 'lqt_merge_thread' => 'Düğümü birleştir', |
16139 | | - 'lqt-thread-merge-source' => 'Kaynak düğüm:', |
16140 | | - 'lqt-thread-merge-dest' => 'Hedef düğüm:', |
| 16241 | + 'lqt_rc_new_discussion' => 'yeni bir ileti dizisi gönderdi, "$1"', |
| 16242 | + 'lqt_rc_new_reply' => '"$1" ileti dizisine yeni bir cevap yazdı', |
| 16243 | + 'right-lqt-split' => 'İleti dizilerini ayır', |
| 16244 | + 'right-lqt-merge' => 'İleti dizilerini birleştir', |
| 16245 | + 'lqt-thread-merge' => 'Diğer bir ileti dizisine birleştir', |
| 16246 | + 'lqt-thread-merge-to' => 'Bu ileti dizisine birleştir', |
| 16247 | + 'lqt_merge_thread' => 'İleti dizisini birleştir', |
| 16248 | + 'lqt-thread-merge-source' => 'Kaynak dizi:', |
| 16249 | + 'lqt-thread-merge-dest' => 'Hedef dizi:', |
16141 | 16250 | 'lqt-merge-submit' => 'Birleştir', |
16142 | | - 'lqt-merge-success' => '$1 düğümünü başarıyla $2 düğümünün altına birleştirdiniz.', |
16143 | | - 'lqt-log-name' => 'Düğümlenmiş tartışma günlüğü', |
16144 | | - 'lqt-log-header' => 'Bu günlük tartışma düğümlerinde alınan eylemleri detaylandırır.', |
16145 | | - 'lqt-log-action-move' => '[[$1]] düğümünü [[$2]] sayfasından [[$3]] sayfasına taşıdı.', |
16146 | | - 'lqt-log-action-split' => '[[$1]] düğümünü [[$3]] düğümünün altından ayırdı, yeni konu: "$2"', |
16147 | | - 'lqt-log-action-merge-across' => '[[$1]] düğümünü [[$2]] düğümünün altından [[$3]] düğümünün altına taşıdı', |
16148 | | - 'lqt-log-action-merge-down' => '[[$1]] düğümünü [[$3]] düğümünün altına birleştirdi', |
16149 | | - 'lqt-log-action-subjectedit' => '[[$1]] düğümünün konusunu "$2" iken "$3" olarak değiştirdi', |
16150 | | - 'lqt-log-action-resort' => '[[$1]] düğümünün sıralama düzenini değiştirdi. Sıralama anahtarı $2 iken $3 olarak değiştirildi.', |
16151 | | - 'lqt-preference-notify-talk' => 'İzlediğim bir düğüme cevap geldiğinde bana e-posta gönder', |
16152 | | - 'lqt-preference-watch-threads' => 'Oluşturduğum ya da cevap verdiğim düğümleri izle', |
16153 | | - 'prefs-lqt' => 'Düğümlü tartışma', |
| 16251 | + 'lqt-merge-success' => '$1 ileti dizisini başarıyla $2 ileti dizisinin altına birleştirdiniz.', |
| 16252 | + 'lqt-log-name' => 'Dizi haline getirilmiş tartışma günlüğü', |
| 16253 | + 'lqt-log-header' => 'Bu günlük tartışma dizilerinde alınan eylemleri detaylandırır.', |
| 16254 | + 'lqt-log-action-move' => '[[$1]] ileti dizisini [[$2]] sayfasından [[$3]] sayfasına taşıdı.', |
| 16255 | + 'lqt-log-action-split' => '[[$1]] iletiti dizisini [[$3]] ileti dizisinin altından ayırdı, yeni konu: "$2"', |
| 16256 | + 'lqt-log-action-merge-across' => '[[$1]] ileti dizisini [[$2]] ileti dizisinin altından [[$3]] ileti dizisinin altına taşıdı', |
| 16257 | + 'lqt-log-action-merge-down' => '[[$1]] ileti dizisini [[$3]] ileti dizisinin altına birleştirdi', |
| 16258 | + 'lqt-log-action-subjectedit' => '[[$1]] ileti dizisinin konusunu "$2" iken "$3" olarak değiştirdi', |
| 16259 | + 'lqt-log-action-resort' => '[[$1]] ileti dizisinin sıralama düzenini değiştirdi. Sıralama anahtarı $2 iken $3 olarak değiştirildi.', |
| 16260 | + 'lqt-preference-notify-talk' => 'İzlediğim bir ileti dizisine cevap geldiğinde bana e-posta gönder', |
| 16261 | + 'lqt-preference-watch-threads' => 'Oluşturduğum ya da cevap verdiğim ileti dizilerini izle', |
| 16262 | + 'prefs-lqt' => 'Dizileştirilmiş tartışma', |
16154 | 16263 | 'lqt-preference-display-depth' => 'Gösterilecek azami cevap derinliği:', |
16155 | 16264 | 'lqt-preference-display-count' => 'Gösterilecek azami cevap sayısı:', |
16156 | 16265 | 'lqt-preference-custom-signatures' => 'Özel kullanıcı imzalarını göster', |
16157 | 16266 | 'lqt-enotif-subject-reply' => '{{SITENAME}} tartışması - Cevap: $1', |
16158 | | - 'lqt-enotif-subject-newthread' => '{{SITENAME}} tartışması - Yeni düğüm: $1', |
| 16267 | + 'lqt-enotif-subject-newthread' => '{{SITENAME}} tartışması - Yeni ileti dizisi: $1', |
16159 | 16268 | 'lqt-enotif-newthread' => "Merhaba $1, |
16160 | | -Bu {{SITENAME}} sitesinden bir bildirimdir: $5 sayfasında '$2' adlı yeni bir düğüm, $3 $4 tarihinde oluşturuldu. |
| 16269 | +Bu {{SITENAME}} sitesinden bir bildirimdir: $5 sayfasında '$2' adlı yeni bir ileti dizisi, $3 $4 tarihinde oluşturuldu. |
16161 | 16270 | |
16162 | 16271 | Bunu <$6> adresinde görebilirsin.", |
16163 | 16272 | 'lqt-enotif-reply' => "Merhaba $1, |
16164 | | -Bu {{SITENAME}} sitesinden bir bildirimdir: $5 sayfasında '$2' düğümüne yeni bir cevap $3 $4 tarihinde oluşturuldu. |
| 16273 | +Bu {{SITENAME}} sitesinden bir bildirimdir: $5 sayfasında '$2' ileti dizisine yeni bir cevap $3 $4 tarihinde oluşturuldu. |
16165 | 16274 | |
16166 | 16275 | Bunu <$6> adresinde görebilirsin.", |
16167 | 16276 | 'lqt-quote-intro' => '$2 $3 tarihinde, [[User:$1|$1]] yazdı:', |
— | — | @@ -16169,23 +16278,23 @@ |
16170 | 16279 | 'lqt-search-label' => 'Arama terimleri:', |
16171 | 16280 | 'lqt-search-button' => 'Ara', |
16172 | 16281 | 'searchprofile-threads' => 'Tartışmalar', |
16173 | | - 'searchprofile-threads-tooltip' => 'Düğümlü tartışmaları ve tartışma sayfalarını ara', |
16174 | | - 'lqt-ajax-updated' => 'Bu düğüme yeni gönderiler var.', |
| 16282 | + 'searchprofile-threads-tooltip' => 'Dizileştirilmiş tartışmaları ve tartışma sayfalarını ara', |
| 16283 | + 'lqt-ajax-updated' => 'Bu ileti dizinde yeni gönderiler var.', |
16175 | 16284 | 'lqt-ajax-update-link' => 'Güncelle', |
16176 | | - 'lqt-thread-show-replies' => '$1 cevap göster', |
| 16285 | + 'lqt-thread-show-replies' => '$1 cevabı göster', |
16177 | 16286 | 'lqt-thread-show-more' => 'Daha fazla cevap göster', |
16178 | 16287 | 'lqt-thread-link-url' => 'Bağlantı URLsi:', |
16179 | 16288 | 'lqt-thread-link-title' => 'Vikimetin bağlantısı:', |
16180 | 16289 | 'lqt-thread-link-copy' => 'Panoya kopyala', |
16181 | | - 'lqt-sign-not-necessary' => 'Gönderinizi dört tilda ile imzalamanıza gerek yoktur. |
| 16290 | + 'lqt-sign-not-necessary' => 'Gönderinizi dört tilde ile imzalamanıza gerek yoktur. |
16182 | 16291 | İmza otomatik olarak görünecektir.', |
16183 | | - 'lqt-marked-as-read-placeholder' => 'Düğüm $1 okunmuş olarak işaretlendi.', |
| 16292 | + 'lqt-marked-as-read-placeholder' => '$1 ileti dizisi okunmuş olarak işaretlendi.', |
16184 | 16293 | 'lqt-change-subject' => 'Konuyu değiştir', |
16185 | 16294 | 'lqt-save-subject' => 'Kaydet', |
16186 | | - 'lqt-save-subject-failed' => 'Bu düğümün başlığını değiştirmeye çalışırken şu hata oluştu: $1', |
| 16295 | + 'lqt-save-subject-failed' => 'Bu ileti dizisinin başlığını değiştirmeye çalışırken şu hata oluştu: $1', |
16187 | 16296 | 'lqt-ajax-invalid-subject' => 'Belirttiğiniz konu geçersiz, muhtemelen çok uzun olduğu için.', |
16188 | 16297 | 'lqt-ajax-no-subject' => 'Bir konu belirtmelisiniz.', |
16189 | | - 'lqt-save-subject-error-unknown' => 'Bu düğümün konusunu ayarlamaya çalışırken bilinmeyen bir hata oluştu. Lütfen bunu en üst gönderide "değiştir"e tıklayarak yapmaya deneyin.', |
| 16298 | + 'lqt-save-subject-error-unknown' => 'Bu ileti dizisinin konusunu ayarlamaya çalışırken bilinmeyen bir hata oluştu. Lütfen bunu en üst gönderide "değiştir"e tıklayarak yapmaya deneyin.', |
16190 | 16299 | 'lqt-cancel-subject-edit' => 'İptal', |
16191 | 16300 | 'lqt-drag-activate' => 'Yeni yere sürükle', |
16192 | 16301 | 'lqt-drag-drop-zone' => 'Buraya bırak', |
— | — | @@ -16201,27 +16310,27 @@ |
16202 | 16311 | 'lqt-preview-signature' => '(ön izleme)', |
16203 | 16312 | 'lqt-feed-title-all' => '{{SITENAME}} — Yeni gönderiler', |
16204 | 16313 | 'lqt-feed-title-all-from' => '{{SITENAME}} — $1 sayfaları için yeni gönderiler', |
16205 | | - 'lqt-feed-title-new-threads' => '{{SITENAME}} — Yeni düğümler', |
16206 | | - 'lqt-feed-title-new-threads-from' => '{{SITENAME}} — $1 sayfaları için yeni düğümler', |
| 16314 | + 'lqt-feed-title-new-threads' => '{{SITENAME}} — Yeni ileti dizileri', |
| 16315 | + 'lqt-feed-title-new-threads-from' => '{{SITENAME}} — $1 sayfaları için yeni ileti dizileri', |
16207 | 16316 | 'lqt-feed-title-replies' => '{{SITENAME}} — Cevaplar', |
16208 | 16317 | 'lqt-feed-title-replies-from' => '{{SITENAME}} — $1 sayfaları için cevaplar', |
16209 | | - 'lqt-feed-new-thread-intro' => '$1 sayfasında yeni düğüm $2 tarafından gönderildi', |
16210 | | - 'lqt-feed-reply-intro' => '$3 düğümüne cevap ($1 sayfasında) $2 tarafından gönderildi', |
| 16318 | + 'lqt-feed-new-thread-intro' => '$1 sayfasına $2 tarafından yeni bir ileti dizisi gönderildi', |
| 16319 | + 'lqt-feed-reply-intro' => '$3 ileti dizisine cevap ($1 sayfasında) $2 tarafından gönderildi', |
16211 | 16320 | 'lqt-newmessages-n' => 'Yeni mesaj ($1)', |
16212 | 16321 | 'lqt_newmessages' => 'Yeni iletiler', |
16213 | 16322 | 'lqt_newmessages-title' => 'Yeni mesaj', |
16214 | | - 'lqt-newpost-summary' => 'Yeni düğüm: $1', |
16215 | | - 'lqt-reply-summary' => '[[$2|$1]] düğümüne cevap ver', |
| 16323 | + 'lqt-newpost-summary' => 'Yeni ileti dizisi: $1', |
| 16324 | + 'lqt-reply-summary' => '[[$2|$1]] ileti dizisine cevap ver', |
16216 | 16325 | 'lqt-talkpage-history-title' => 'Tartışma sayfası geçmişi', |
16217 | 16326 | 'lqt-talkpage-history-subtitle' => '$1 için', |
16218 | 16327 | 'lqt-talkpage-history-tab' => 'Başlık', |
16219 | 16328 | 'restriction-reply' => 'Cevap gönder', |
16220 | | - 'restriction-newthread' => 'Yeni mesaj dizisi postala', |
| 16329 | + 'restriction-newthread' => 'Yeni ileti dizisi postala', |
16221 | 16330 | 'lqt-protected-reply-thread' => 'Bu diziye mesaj ekleyemezsiniz, zira yeni gönderilere karşı korumaya alınmış.', |
16222 | 16331 | 'lqt-protected-reply-talkpage' => 'Bu diziye mesaj ekleyemezsiniz, zira bu tartışma sayfası mesaj dizilerine cevap yazılmaması için korumaya alınmış durumda.', |
16223 | 16332 | 'lqt-protected-newthread' => 'Bu tartışma sayfasına yeni mesaj dizileri ekleyemezsiniz, zira yeni mesaj dizisi eklemelerine karşı korumaya alınmış durumda.', |
16224 | | - 'lqt-edit-bump' => 'Bu düğümü çarp', |
16225 | | - 'lqt-edit-bump-tooltip' => 'Bu düğümü, tartışma sayfasının en üstüne taşı', |
| 16333 | + 'lqt-edit-bump' => 'Bu ilet dizisini içindekiler listesinde üste taşı', |
| 16334 | + 'lqt-edit-bump-tooltip' => 'Bu ileti dizisini, tartışma sayfasının en üstüne taşı', |
16226 | 16335 | 'lqt-historicalrevision-error' => 'Seçtiğiniz revizyon bozuk, ve görüntülenemez.', |
16227 | 16336 | 'lqt-reply-subpage' => 'cevap', |
16228 | 16337 | ); |
— | — | @@ -17044,6 +17153,7 @@ |
17045 | 17154 | 'lqt-drag-setsortkey' => 'Điều chỉnh vị trí của bài trên trang', |
17046 | 17155 | 'lqt-drag-bump' => 'Di chuyển bài lên đầu trang thảo luận', |
17047 | 17156 | 'lqt-drag-save' => 'Xác nhận', |
| 17157 | + 'lqt-drag-title' => 'Xác nhận kéo', |
17048 | 17158 | 'lqt-drag-reason' => 'Lý do:', |
17049 | 17159 | 'lqt-drag-subject' => 'Chủ đề cho luồng mới:', |
17050 | 17160 | 'lqt-edit-signature' => '(sửa chữ ký)', |
— | — | @@ -17086,6 +17196,12 @@ |
17087 | 17197 | 'lqt_newmessages' => 'Nuns Nulik', |
17088 | 17198 | ); |
17089 | 17199 | |
| 17200 | +/** Wu (吴语) */ |
| 17201 | +$messages['wuu'] = array( |
| 17202 | + 'lqt-cancel-subject-edit' => '取消', |
| 17203 | + 'lqt-drag-reason' => '理由:', |
| 17204 | +); |
| 17205 | + |
17090 | 17206 | /** Kalmyk (Хальмг) |
17091 | 17207 | * @author Huuchin |
17092 | 17208 | */ |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/LqtFunctions.php |
— | — | @@ -38,8 +38,6 @@ |
39 | 39 | } |
40 | 40 | |
41 | 41 | function lqtSetupParserFunctions( &$parser ) { |
42 | | - global $wgLiquidThreadsAllowUserControl; |
43 | | - |
44 | 42 | $parser->setFunctionHook( |
45 | 43 | 'useliquidthreads', |
46 | 44 | array( 'LqtParserFunctions', 'useLiquidThreads' ) |
Index: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha/compat/HTMLForm.php |
— | — | @@ -89,8 +89,6 @@ |
90 | 90 | } |
91 | 91 | |
92 | 92 | function show() { |
93 | | - $html = ''; |
94 | | - |
95 | 93 | self::addJS(); |
96 | 94 | |
97 | 95 | // Load data from the request. |
— | — | @@ -541,8 +539,6 @@ |
542 | 540 | return wfMsgExt( 'htmlform-int-invalid', 'parse' ); |
543 | 541 | } |
544 | 542 | |
545 | | - $in_range = true; |
546 | | - |
547 | 543 | if ( isset( $this->mParams['min'] ) ) { |
548 | 544 | $min = $this->mParams['min']; |
549 | 545 | if ( $min > $value ) |
Property changes on: branches/wmf/1.16wmf4/extensions/LiquidThreads_alpha |
___________________________________________________________________ |
Modified: svn:mergeinfo |
550 | 546 | Merged /trunk/extensions/LiquidThreads:r68807-70084 |