r73472 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r73471‎ | r73472 | r73473 >
Date:19:18, 21 September 2010
Author:catrope
Status:deferred
Tags:
Comment:
1.16wmf4: Copy ArticleAssessmentPilot and SimpleSurvey extensions from trunk
Modified paths:
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot (added) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.hooks.php (replaced) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.php (replaced) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images (added) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/jquery-ui-1.7.2.css (added) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/ArticleAssessment.js (replaced) (history)
  • /branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jui.combined.min.js (added) (history)
  • /branches/wmf/1.16wmf4/extensions/SimpleSurvey (added) (history)
  • /branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.php (replaced) (history)
  • /branches/wmf/1.16wmf4/extensions/SimpleSurvey/SpecialSimpleSurvey.php (replaced) (history)

Diff [purge]

Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.sql
@@ -0,0 +1,49 @@
 2+-- Store mapping of i18n key of "rating" to an ID
 3+CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/article_assessment_ratings (
 4+ -- Rating Id
 5+ aar_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
 6+ -- Text (i18n key) for rating description
 7+ aar_rating varchar(255) binary NOT NULL
 8+) /*$wgDBTableOptions*/;
 9+
 10+-- Default article assessment ratings for the pilot
 11+INSERT INTO /*$wgDBprefix*/article_assessment_ratings (aar_rating) VALUES
 12+('articleassessment-rating-wellsourced'), ('articleassessment-rating-neutrality'),
 13+('articleassessment-rating-completeness'), ('articleassessment-rating-readability');
 14+
 15+-- Store article assessments (user rating per revision)
 16+CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/article_assessment (
 17+ -- Foreign key to page.page_id
 18+ aa_page_id integer unsigned NOT NULL,
 19+ -- User Id (0 if anon)
 20+ aa_user_id integer NOT NULL,
 21+ -- Username or IP address
 22+ aa_user_text varchar(255) binary NOT NULL,
 23+ -- Unique token for anonymous users (to facilitate ratings from multiple users on the same IP)
 24+ aa_user_anon_token binary(32) DEFAULT '',
 25+ -- Foreign key to revision.rev_id
 26+ aa_revision integer unsigned NOT NULL,
 27+ -- MW Timestamp
 28+ aa_timestamp binary(14) NOT NULL DEFAULT '',
 29+ -- Foreign key to article_assessment_ratings.aar_rating
 30+ aa_rating_id int unsigned NOT NULL,
 31+ -- Value of the rating (0 is "unrated", else 1-5)
 32+ aa_rating_value int unsigned NOT NULL,
 33+ -- 1 vote per user per revision
 34+ PRIMARY KEY (aa_revision, aa_user_text, aa_rating_id, aa_user_anon_token)
 35+) /*$wgDBTableOptions*/;
 36+CREATE INDEX /*i*/aa_user_page_revision ON /*_*/article_assessment (aa_user_id, aa_page_id, aa_revision);
 37+
 38+-- Aggregate rating table for a page
 39+CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/article_assessment_pages (
 40+ -- Foreign key to page.page_id
 41+ aap_page_id integer unsigned NOT NULL,
 42+ -- Foreign key to article_assessment_ratings.aar_rating
 43+ aap_rating_id integer unsigned NOT NULL,
 44+ -- Sum (total) of all the ratings for this article revision
 45+ aap_total integer unsigned NOT NULL,
 46+ -- Number of ratings
 47+ aap_count integer unsigned NOT NULL,
 48+ -- One rating row per page
 49+ PRIMARY KEY (aap_page_id, aap_rating_id)
 50+) /*$wgDBTableOptions*/;
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.sql
___________________________________________________________________
Added: svn:eol-style
151 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.i18n.php
@@ -0,0 +1,835 @@
 2+<?php
 3+$messages = array();
 4+
 5+/** English
 6+ * @author Nimish Gautam
 7+ * @author Sam Reed
 8+ * @author Brandon Harris
 9+ */
 10+$messages['en'] = array(
 11+ 'articleassessment' => 'Article assessment',
 12+ 'articleassessment-desc' => 'Article assessment (pilot version)',
 13+ 'articleassessment-yourfeedback' => 'Your feedback',
 14+ 'articleassessment-pleaserate' => 'Please take a moment to rate this page below.',
 15+ 'articleassessment-submit' => 'Submit',
 16+ 'articleassessment-rating-wellsourced' => 'Well-Sourced:',
 17+ 'articleassessment-rating-neutrality' => 'Neutral:',
 18+ 'articleassessment-rating-completeness' => 'Complete:',
 19+ 'articleassessment-rating-readability' => 'Readable:',
 20+ 'articleassessment-rating-wellsourced-tooltip' => 'Do you feel this page has sufficient citations and that those citations come from trustworthy sources?',
 21+ 'articleassessment-rating-neutrality-tooltip' => 'Do you feel that this page shows a fair representation of all perspectives on the issue?',
 22+ 'articleassessment-rating-completeness-tooltip' => 'Do you feel that this page covers the essential topic areas that it should?',
 23+ 'articleassessment-rating-readability-tooltip' => 'Do you feel that this page is well-organized and well written?',
 24+ 'articleassessment-articlerating' => 'Page rating',
 25+ 'articleassessment-error' => 'An error has occurred.
 26+Please try again later.',
 27+ 'articleassessment-thanks' => 'Thanks! Your ratings have been saved.',
 28+ 'articleassessment-featurefeedback' => 'Give us <span class="feedbacklink">feedback</span> about this feature.',
 29+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|rating|ratings}})',
 30+ 'articleassessment-stalemessage-norevisioncount' => "This page has been ''revised'' since you last reviewed it.
 31+You may wish to rate it again.",
 32+ 'articleassessment-results-show' => '(Results hidden. <span class="showlink">Show</span> them.)',
 33+ 'articleassessment-results-hide' => '(<span class="hidelink">Hide results</span>)',
 34+ 'articleassessment-survey-question-whyrated' => 'Please let us know why you rated this page today (check all that apply):',
 35+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'I wanted to contribute to the overall rating of the page',
 36+ 'articleassessment-survey-answer-whyrated-development' => 'I hope that my rating would positively affect the development of the page',
 37+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'I wanted to contribute to {{SITENAME}}',
 38+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'I like sharing my opinion',
 39+ 'articleassessment-survey-answer-whyrated-didntrate' => "I didn't provide ratings today, but wanted to give feedback on the feature",
 40+ 'articleassessment-survey-answer-whyrated-other' => 'Other',
 41+ 'articleassessment-survey-question-useful' => 'Do you believe the ratings provided are useful and clear?',
 42+ 'articleassessment-survey-question-useful-iffalse' => 'Why?',
 43+ 'articleassessment-survey-question-expert' => 'Do you consider yourself an expert in the field this page covers?',
 44+ 'articleassessment-survey-question-expert-iftrue' => 'Can you describe your expertise?',
 45+ 'articleassessment-survey-question-comments' => 'Do you have any additional comments?',
 46+ 'articleassessment-survey-submit' => 'Submit',
 47+ 'articleassessment-survey-title' => 'Please answer a few questions',
 48+ 'articleassessment-survey-thanks' => 'Thanks for filling out the survey.',
 49+);
 50+
 51+/** Message documentation (Message documentation)
 52+ * @author Brandon Harris
 53+ * @author EugeneZelenko
 54+ * @author Sam Reed
 55+ */
 56+$messages['qqq'] = array(
 57+ 'articleassessment' => 'The title of the feature. It is about reader feedback.
 58+
 59+Please visit http://prototype.wikimedia.org/articleassess/Main_Page for a prototype installation.',
 60+ 'articleassessment-desc' => '{{desc}}',
 61+ 'articleassessment-yourfeedback' => 'This is a box or section header. It indicates that the contents of the box are personal to the user.',
 62+ 'articleassessment-pleaserate' => 'This is a call to action for the user to provide their ratings about the page.',
 63+ 'articleassessment-submit' => '{{Identical|Submit}}',
 64+ 'articleassessment-rating-wellsourced' => 'This is a rating metric label. The metric is for measuring how researched the article is.',
 65+ 'articleassessment-rating-neutrality' => "This is a rating metric label. The metric is for measuring an article's NPOV.",
 66+ 'articleassessment-rating-completeness' => 'This is a rating metric label. The metric is for measuring how comprehensive the article is.',
 67+ 'articleassessment-rating-readability' => 'This is a rating metric label. The metric is for measuring how well written the article is.',
 68+ 'articleassessment-rating-wellsourced-tooltip' => 'This is a tool tip that is designed to explain what the "well-sourced" metric means.',
 69+ 'articleassessment-rating-neutrality-tooltip' => 'This is a tool tip that is designed to explain what the "neutrality" metric means.',
 70+ 'articleassessment-rating-completeness-tooltip' => 'This is a tool tip that is designed to explain what the "completeness" metric means.',
 71+ 'articleassessment-rating-readability-tooltip' => 'This is a tool tip that is designed to explain what the "readability" metric means.',
 72+ 'articleassessment-articlerating' => 'This is a box or section header. It indicates that the contents of the box are the average ratings for the article.',
 73+ 'articleassessment-error' => 'A generic error message to display on any error.',
 74+ 'articleassessment-thanks' => 'The message to display when the user has successfully submitted a rating.',
 75+ 'articleassessment-featurefeedback' => 'This is a call to action link for users to provide feedback about the feature. It takes them to a survey.',
 76+ 'articleassessment-noratings' => 'This indicates the number of ratings that the article has received.
 77+Note that PLURAL does not currently work in this message but defaults to the zero; it will work properly in the near future, so keep the calls in.',
 78+ 'articleassessment-stalemessage-norevisioncount' => 'This is a message shown to the user when their ratings are "stale" and does NOT include the number of revisions. This is an ambiguous reason, and allows for us to have complicated staleness patterns. This is the preferred message.',
 79+ 'articleassessment-results-show' => 'This is an explanatory control that, when clicked, will display hidden aggregate ratings.
 80+The span tag gets rewritten in JavaScript to become a link.',
 81+ 'articleassessment-results-hide' => 'This is a control that, when clicked, will hide the aggregate ratings.
 82+The span tag gets rewritten in JavaScript to become a link.',
 83+ 'articleassessment-survey-question-whyrated' => 'This is a question in the survey with checkboxes for the answers. The user can check multiple answers.',
 84+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 85+ 'articleassessment-survey-answer-whyrated-development' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 86+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 87+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 88+ 'articleassessment-survey-answer-whyrated-didntrate' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 89+ 'articleassessment-survey-answer-whyrated-other' => 'This is a possible answer for the "Why did you rate this article today?" survey question. The user can check this to fill out an answer that wasn\'t provided as a checkbox.
 90+{{Identical|Other}}',
 91+ 'articleassessment-survey-question-useful' => 'This is a question in the survey with "yes" and "no" (prefswitch-survey-true and prefswitch-survey-false) as possible answers.',
 92+ 'articleassessment-survey-question-useful-iffalse' => 'This question appears when the user checks "no" for the "Do you believe the ratings provided are useful and clear?" question. The user can enter their answer in a text box.',
 93+ 'articleassessment-survey-question-expert' => 'This is a possible answer for the "Why did you rate this article today?" survey question.',
 94+ 'articleassessment-survey-question-expert-iftrue' => 'This question appears when the user checks "no" for the "Do you consider yourself an expert?" question. The user can enter their answer in a text box.',
 95+ 'articleassessment-survey-question-comments' => 'This is a question in the survey with a text box that the user can enter their answer in.',
 96+ 'articleassessment-survey-submit' => 'This is the caption for the button that submits the survey.
 97+{{Identical|Submit}}',
 98+ 'articleassessment-survey-title' => 'This text appears in the title bar of the survey dialog.',
 99+ 'articleassessment-survey-thanks' => 'This text appears when the user has successfully submitted the survey.',
 100+);
 101+
 102+/** Afrikaans (Afrikaans)
 103+ * @author Naudefj
 104+ */
 105+$messages['af'] = array(
 106+ 'articleassessment-yourfeedback' => 'U terugvoer',
 107+ 'articleassessment-submit' => 'Dien in',
 108+ 'articleassessment-rating-wellsourced' => 'Goed van bronne voorsien:',
 109+ 'articleassessment-rating-neutrality' => 'Neutraal:',
 110+ 'articleassessment-rating-completeness' => 'Volledig:',
 111+ 'articleassessment-rating-readability' => 'Leesbaar:',
 112+ 'articleassessment-articlerating' => 'Artikel gradering',
 113+ 'articleassessment-results-show' => '(Resultate versteek. <span class="showlink">Wys</span> hulle.)',
 114+ 'articleassessment-results-hide' => '(<span class="hidelink">Versteek resultate</span>)',
 115+);
 116+
 117+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 118+ * @author EugeneZelenko
 119+ * @author Jim-by
 120+ */
 121+$messages['be-tarask'] = array(
 122+ 'articleassessment' => 'Адзнака артыкулаў',
 123+ 'articleassessment-desc' => 'Адзнака артыкулаў (пачатковая вэрсія)',
 124+ 'articleassessment-yourfeedback' => 'Ваш водгук',
 125+ 'articleassessment-pleaserate' => 'Калі ласка, знайдзіце час, каб адзначыць старонку ўнізе.',
 126+ 'articleassessment-submit' => 'Даслаць',
 127+ 'articleassessment-rating-wellsourced' => 'Спасылкі на крыніцы:',
 128+ 'articleassessment-rating-neutrality' => 'Нэўтральнасьць:',
 129+ 'articleassessment-rating-completeness' => 'Скончанасьць:',
 130+ 'articleassessment-rating-readability' => 'Лёгкасьць чытаньня:',
 131+ 'articleassessment-rating-wellsourced-tooltip' => 'Вы лічыце, што гэты артыкул мае дастаткова цытатаў, і яны спасылаюцца на крыніцы, якія заслугоўваюць даверу?',
 132+ 'articleassessment-rating-neutrality-tooltip' => 'Вы лічыце, што на гэтай старонцы адлюстраваныя усе пункты гледжаньня на пытаньне?',
 133+ 'articleassessment-rating-completeness-tooltip' => 'Вы лічыце, што гэтая старонка раскрывае асноўныя пытаньні тэмы як сьлед?',
 134+ 'articleassessment-rating-readability-tooltip' => 'Вы лічыце, што гэтая старонка добра арганізаваная і добра напісаная?',
 135+ 'articleassessment-articlerating' => 'Адзнака старонкі',
 136+ 'articleassessment-error' => 'Узьнікла памылка.
 137+Калі ласка, паспрабуйце потым.',
 138+ 'articleassessment-thanks' => 'Дзякуй! Вашая адзнака была захаваная.',
 139+ 'articleassessment-featurefeedback' => 'Паведаміце нам <span class="feedbacklink">Вашае меркаваньне</span> пра гэтую магчымасьць.',
 140+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|адзнака|адзнакі|адзнакаў}})',
 141+ 'articleassessment-stalemessage-norevisioncount' => "Гэтая старонка была ''рэдагаваная'' пасьля Вашага апошняга рэцэнзаваная.
 142+Верагодна, Вы жадаеце адзначыць яе яшчэ раз.",
 143+ 'articleassessment-results-show' => '(Вынікі схаваныя. <span class="showlink">Паказаць</span> іх.)',
 144+ 'articleassessment-results-hide' => '(<span class="hidelink">Схаваць вынікі</span>)',
 145+ 'articleassessment-survey-question-whyrated' => 'Калі ласка, паведаміце нам, чаму Вы адзначылі сёньня гэтую старонку (пазначце ўсе падыходзячыя варыянты):',
 146+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Я жадаю зрабіць унёсак у агульную адзнаку старонкі',
 147+ 'articleassessment-survey-answer-whyrated-development' => 'Я спадзяюся, што мая адзнака пазытыўна паўплывае на разьвіцьцё старонкі',
 148+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Я жадаю садзейнічаць разьвіцьцю {{GRAMMAR:родны|{{SITENAME}}}}',
 149+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Я жадаю падзяліцца маім пунктам гледжаньня',
 150+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Я не адзначыў сёньня, але хацеў даць водгук пра гэтую магчымасьць',
 151+ 'articleassessment-survey-answer-whyrated-other' => 'Іншае',
 152+ 'articleassessment-survey-question-useful' => 'Вы верыце, што пададзеныя адзнакі карысныя і зразумелыя?',
 153+ 'articleassessment-survey-question-useful-iffalse' => 'Чаму?',
 154+ 'articleassessment-survey-question-expert' => 'Вы лічыце сябе экспэртам у галіне, якая датычыцца тэма гэтай старонцы?',
 155+ 'articleassessment-survey-question-expert-iftrue' => 'Вы можаце апісаць узровень Вашых ведаў?',
 156+ 'articleassessment-survey-question-comments' => 'Вы маеце якія-небудзь дадатковыя камэнтары?',
 157+ 'articleassessment-survey-submit' => 'Даслаць',
 158+ 'articleassessment-survey-title' => 'Калі ласка, адкажыце на некалькі пытаньняў',
 159+ 'articleassessment-survey-thanks' => 'Дзякуй за адказы на пытаньні.',
 160+);
 161+
 162+/** Breton (Brezhoneg)
 163+ * @author Gwendal
 164+ */
 165+$messages['br'] = array(
 166+ 'articleassessment-submit' => 'Kas',
 167+ 'articleassessment-rating-neutrality' => 'Diberzh :',
 168+ 'articleassessment-rating-completeness' => 'Graet :',
 169+ 'articleassessment-rating-readability' => 'Lennus :',
 170+ 'articleassessment-articlerating' => 'Priziadenn ar bajenn',
 171+ 'articleassessment-thanks' => 'Trugarez! Ho priziadenn zo bet enrollet.',
 172+ 'articleassessment-survey-answer-whyrated-other' => 'All',
 173+ 'articleassessment-survey-question-useful-iffalse' => 'Perak ?',
 174+ 'articleassessment-survey-submit' => 'Kas',
 175+);
 176+
 177+/** Bosnian (Bosanski)
 178+ * @author CERminator
 179+ */
 180+$messages['bs'] = array(
 181+ 'articleassessment-yourfeedback' => 'Vaše povratne informacije',
 182+ 'articleassessment-submit' => 'Pošalji',
 183+ 'articleassessment-rating-wellsourced' => 'Dobro referencirano:',
 184+ 'articleassessment-rating-neutrality' => 'Neutralnost:',
 185+ 'articleassessment-rating-completeness' => 'Završenost:',
 186+ 'articleassessment-rating-readability' => 'Čitljivost:',
 187+ 'articleassessment-articlerating' => 'Rejting stranice',
 188+ 'articleassessment-error' => 'Desila se greška.
 189+Molimo pokušajte kasnije.',
 190+ 'articleassessment-thanks' => 'Hvala! Vaše ocjene su sačuvane.',
 191+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|ocjena|ocjene|ocjena}})',
 192+ 'articleassessment-results-show' => '(Rezultati sakriveni. <span class="showlink">Prikaži</span> ih.)',
 193+ 'articleassessment-results-hide' => '(<span class="hidelink">Sakrij rezultate</span>)',
 194+ 'articleassessment-survey-answer-whyrated-other' => 'Ostalo',
 195+ 'articleassessment-survey-question-useful-iffalse' => 'Zašto?',
 196+ 'articleassessment-survey-submit' => 'Pošalji',
 197+);
 198+
 199+/** German (Deutsch)
 200+ * @author Kghbln
 201+ */
 202+$messages['de'] = array(
 203+ 'articleassessment' => 'Artikeleinschätzung',
 204+ 'articleassessment-desc' => 'Ermöglicht die Einschätzung von Artikeln (Pilotversion)',
 205+ 'articleassessment-yourfeedback' => 'Deine Rückmeldung',
 206+ 'articleassessment-pleaserate' => 'Bitte nehme dir kurz Zeit diesen Artikel unten auf dieser Seite einzuschätzen.',
 207+ 'articleassessment-submit' => 'Speichern',
 208+ 'articleassessment-rating-wellsourced' => 'Gut belegt:',
 209+ 'articleassessment-rating-neutrality' => 'Neutral:',
 210+ 'articleassessment-rating-completeness' => 'Vollständig:',
 211+ 'articleassessment-rating-readability' => 'Verständlich:',
 212+ 'articleassessment-rating-wellsourced-tooltip' => 'Hast du den Eindruck, dass dieser Artikel über genügend Quellenangaben verfügt und diese zudem aus vertrauenswürdigen Quellen stammen?',
 213+ 'articleassessment-rating-neutrality-tooltip' => 'Hast du den Eindruck, dass dieser Artikel eine ausgewogene Darstellung aller mit dessen Inhalt verbundenen Aspekte enthält?',
 214+ 'articleassessment-rating-completeness-tooltip' => 'Hast du den Eindruck, dass dieser Artikel alle wichtigen Aspekte enthält, die mit dessen Inhalt zusammenhängen?',
 215+ 'articleassessment-rating-readability-tooltip' => 'Hast du den Eindruck, dass dieser Artikel gut strukturiert sowie geschrieben wurde?',
 216+ 'articleassessment-articlerating' => 'Einschätzung des Artikels',
 217+ 'articleassessment-error' => 'Ein Fehler ist aufgetreten.
 218+Bitte versuche es später erneut.',
 219+ 'articleassessment-thanks' => 'Vielen Dank! Deine Einschätzung wurde gespeichert.',
 220+ 'articleassessment-featurefeedback' => 'Gebe uns bitte eine <span class="feedbacklink">Rückmeldung</span> zu dieser Funktion zur Einschätzung eines Artikels.',
 221+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|Einschätzung|Einschätzungen}})',
 222+ 'articleassessment-stalemessage-norevisioncount' => "Dieser Artikel wurde seit deiner letzten Einschätzung ''bearbeitet''.
 223+Vielleicht möchtest du ihn erneut einschätzen.",
 224+ 'articleassessment-results-show' => '(Ergebnisse sind ausgeblendet. <span class="showlink">Einblenden</span>.)',
 225+ 'articleassessment-results-hide' => '(<span class="hidelink">Ergebnisse ausblenden</span>)',
 226+ 'articleassessment-survey-question-whyrated' => 'Bitte lasse uns wissen, warum du diesen Artikel heute eingeschätzt hast (Zutreffendes bitte ankreuzen):',
 227+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Ich wollte mich an der Einschätzung des Artikels beteiligen',
 228+ 'articleassessment-survey-answer-whyrated-development' => 'Ich hoffe, dass meine Einschätzung die künftige Entwicklung des Artikels positiv beeinflusst',
 229+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Ich wollte mich hier ({{SITENAME}}) beteiligen',
 230+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Ich teile meine Einschätzung gerne mit',
 231+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Ich habe heute keine Einschätzung vorgenommen, wollte allerdings eine Rückmeldung zu dieser Funktion zur Einschätzung des Artikels geben',
 232+ 'articleassessment-survey-answer-whyrated-other' => 'Anderes',
 233+ 'articleassessment-survey-question-useful' => 'Glaubst du, dass die abgegebenen Einschätzungen nützlich und verständlich sind?',
 234+ 'articleassessment-survey-question-useful-iffalse' => 'Warum?',
 235+ 'articleassessment-survey-question-expert' => 'Hältst du dich für kompetent auf dem Gebiet, mit dem sich der Inhalt dieses Artikels beschäftigt?',
 236+ 'articleassessment-survey-question-expert-iftrue' => 'Kannst du deine Sachkenntnisse beschreiben?',
 237+ 'articleassessment-survey-question-comments' => 'Hast du noch weitere Anmerkungen?',
 238+ 'articleassessment-survey-submit' => 'Speichern',
 239+ 'articleassessment-survey-title' => 'Bitte beantworte uns ein paar Fragen',
 240+ 'articleassessment-survey-thanks' => 'Vielen Dank für deine Rückmeldung.',
 241+);
 242+
 243+/** French (Français)
 244+ * @author Crochet.david
 245+ * @author Peter17
 246+ */
 247+$messages['fr'] = array(
 248+ 'articleassessment' => 'Évaluation d’article',
 249+ 'articleassessment-desc' => 'Évaluation d’article (version pilote)',
 250+ 'articleassessment-yourfeedback' => 'Votre retour',
 251+ 'articleassessment-pleaserate' => 'Veuillez prendre un moment pour évaluer cette page ci-dessous.',
 252+ 'articleassessment-submit' => 'Soumettre',
 253+ 'articleassessment-rating-wellsourced' => 'Bien sourcé :',
 254+ 'articleassessment-rating-neutrality' => 'Neutre :',
 255+ 'articleassessment-rating-completeness' => 'Complet :',
 256+ 'articleassessment-rating-readability' => 'Lisible :',
 257+ 'articleassessment-rating-wellsourced-tooltip' => 'Pensez-vous que cette page a suffisamment de citations et que celles-ci proviennent de sources dignes de confiance.',
 258+ 'articleassessment-rating-neutrality-tooltip' => 'Pensez-vous que cette page fournit une présentation équitable de toutes les perspectives du sujet traité ?',
 259+ 'articleassessment-rating-completeness-tooltip' => 'Pensez-vous que cette page couvre les thèmes essentiels du sujet ?',
 260+ 'articleassessment-rating-readability-tooltip' => 'Pensez-vous que cette page soit bien organisée et bien écrite ?',
 261+ 'articleassessment-articlerating' => 'Évaluation de la page',
 262+ 'articleassessment-error' => 'Une erreur est survenue.
 263+Veuillez ré-essayer plus tard.',
 264+ 'articleassessment-thanks' => 'Merci ! Votre évaluation a été enregistrée.',
 265+ 'articleassessment-featurefeedback' => 'Donnez-nous vos <span class="feedbacklink">commentaires</span> sur cette fonctionnalité.',
 266+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|évaluation|évaluations}})',
 267+ 'articleassessment-stalemessage-norevisioncount' => 'Cette page a été révisée depuis que vous l’avez évaluée.
 268+Vous pourriez vouloir l’évaluer à nouveau.',
 269+ 'articleassessment-results-show' => '(Résultats masqués. <span class="showlink">Les afficher.</span>)',
 270+ 'articleassessment-results-hide' => '(<span class="hidelink">Masquer les résultats</span>)',
 271+ 'articleassessment-survey-question-whyrated' => 'Veuillez nous indiquer pourquoi vous avez évalué cette page aujourd’hui (cochez tout ce qui s’applique) :',
 272+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Je voulais contribuer à l’évaluation globale de la page',
 273+ 'articleassessment-survey-answer-whyrated-development' => 'J’espère que mon évaluation aura une incidence positive sur le développement de la page',
 274+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Je voulais contribuer à {{SITENAME}}',
 275+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'J’aime partager mon opinion',
 276+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Je n’ai pas évalué la page, mais je voulais donner un retour sur cette fonctionnalité',
 277+ 'articleassessment-survey-answer-whyrated-other' => 'Autre',
 278+ 'articleassessment-survey-question-useful' => 'Pensez-vous que les évaluations fournies soient utiles et claires ?',
 279+ 'articleassessment-survey-question-useful-iffalse' => 'Pourquoi ?',
 280+ 'articleassessment-survey-question-expert' => 'Vous considérez-vous comme un expert dans le domaine couvert par cette page ?',
 281+ 'articleassessment-survey-question-expert-iftrue' => 'Pouvez-vous décrire votre expertise ?',
 282+ 'articleassessment-survey-question-comments' => 'Avez-vous d’autres commentaires ?',
 283+ 'articleassessment-survey-submit' => 'Soumettre',
 284+ 'articleassessment-survey-title' => 'Veuillez répondre à quelques questions',
 285+ 'articleassessment-survey-thanks' => 'Merci d’avoir rempli le questionnaire.',
 286+);
 287+
 288+/** Galician (Galego)
 289+ * @author Toliño
 290+ */
 291+$messages['gl'] = array(
 292+ 'articleassessment' => 'Avaliación do artigo',
 293+ 'articleassessment-desc' => 'Versión piloto da avaliación dos artigos',
 294+ 'articleassessment-yourfeedback' => 'Os seus comentarios',
 295+ 'articleassessment-pleaserate' => 'Por favor, tome uns intres para avaliar esta páxina.',
 296+ 'articleassessment-submit' => 'Enviar',
 297+ 'articleassessment-rating-wellsourced' => 'Ben documentado:',
 298+ 'articleassessment-rating-neutrality' => 'Neutral:',
 299+ 'articleassessment-rating-completeness' => 'Completo:',
 300+ 'articleassessment-rating-readability' => 'Lexible:',
 301+ 'articleassessment-rating-wellsourced-tooltip' => 'Cre que esta páxina ten citas suficientes e que estas son de fontes fiables?',
 302+ 'articleassessment-rating-neutrality-tooltip' => 'Cre que esta páxina mostra unha representación xusta de todas as perspectivas do tema?',
 303+ 'articleassessment-rating-completeness-tooltip' => 'Cre que esta páxina aborda as áreas esenciais do tema que debería?',
 304+ 'articleassessment-rating-readability-tooltip' => 'Cre que esta páxina está ben organizada e escrita?',
 305+ 'articleassessment-articlerating' => 'Avaliación do artigo',
 306+ 'articleassessment-error' => 'Houbo un erro.
 307+Inténteo de novo máis tarde.',
 308+ 'articleassessment-thanks' => 'Grazas! Gardáronse as súas valoracións.',
 309+ 'articleassessment-featurefeedback' => 'Déanos <span class="feedbacklink">a súa opinión</span> sobre esta característica.',
 310+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|avaliación|avaliacións}})',
 311+ 'articleassessment-stalemessage-norevisioncount' => "Alguén fixo unha ''revisión'' da páxina desde a súa última visita.
 312+Quizais queira avaliala novamente.",
 313+ 'articleassessment-results-show' => '(Resultados agochados. <span class="showlink">Mostralos</span>.)',
 314+ 'articleassessment-results-hide' => '(<span class="hidelink">Agochar os resultados</span>)',
 315+ 'articleassessment-survey-question-whyrated' => 'Díganos por que valorou esta páxina (marque todas as opcións que cumpran):',
 316+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Quería colaborar na valoración da páxina',
 317+ 'articleassessment-survey-answer-whyrated-development' => 'Agardo que a miña valoración afecte positivamente ao desenvolvemento da páxina',
 318+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Quería colaborar con {{SITENAME}}',
 319+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Gústame dar a miña opinión',
 320+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Non dei ningunha valoración, só quería deixar os meus comentarios sobre a característica',
 321+ 'articleassessment-survey-answer-whyrated-other' => 'Outra',
 322+ 'articleassessment-survey-question-useful' => 'Cre que as valoracións dadas son útiles e claras?',
 323+ 'articleassessment-survey-question-useful-iffalse' => 'Por que?',
 324+ 'articleassessment-survey-question-expert' => 'Considérase un experto no campo que abrangue esta páxina?',
 325+ 'articleassessment-survey-question-expert-iftrue' => 'Pode describir a súa experiencia?',
 326+ 'articleassessment-survey-question-comments' => 'Ten algún comentario adicional?',
 327+ 'articleassessment-survey-submit' => 'Enviar',
 328+ 'articleassessment-survey-title' => 'Responda algunhas preguntas',
 329+ 'articleassessment-survey-thanks' => 'Grazas por encher a enquisa.',
 330+);
 331+
 332+/** Interlingua (Interlingua)
 333+ * @author McDutchie
 334+ */
 335+$messages['ia'] = array(
 336+ 'articleassessment' => 'Evalutation de articulos',
 337+ 'articleassessment-desc' => 'Evalutation de articulos (version pilota)',
 338+ 'articleassessment-yourfeedback' => 'Tu opinion',
 339+ 'articleassessment-pleaserate' => 'Per favor prende un momento pro evalutar iste pagina hic infra.',
 340+ 'articleassessment-submit' => 'Submitter',
 341+ 'articleassessment-rating-wellsourced' => 'Ben referentiate:',
 342+ 'articleassessment-rating-neutrality' => 'Neutral:',
 343+ 'articleassessment-rating-completeness' => 'Complete:',
 344+ 'articleassessment-rating-readability' => 'Legibile:',
 345+ 'articleassessment-rating-wellsourced-tooltip' => 'Pensa tu que iste articulo ha sufficiente citationes e que iste citationes refere a fontes digne de fide?',
 346+ 'articleassessment-rating-neutrality-tooltip' => 'Pensa tu que iste articulo monstra un representation juste de tote le perspectivas super le question?',
 347+ 'articleassessment-rating-completeness-tooltip' => 'Pensa tu que iste articulo coperi le themas essential que illo deberea coperir?',
 348+ 'articleassessment-rating-readability-tooltip' => 'Pensa tu que iste articulo es ben organisate e ben scribite?',
 349+ 'articleassessment-articlerating' => 'Evalutation del articulo',
 350+ 'articleassessment-error' => 'Un error ha occurrite.
 351+Per favor reproba plus tarde.',
 352+ 'articleassessment-thanks' => 'Gratias! Tu evalutation ha essite salveguardate.',
 353+ 'articleassessment-featurefeedback' => 'Da nos [[Special:Article Assessment Feedback|tu opinion]] super iste functionalitate.',
 354+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|evalutation|evalutationes}})',
 355+ 'articleassessment-stalemessage-norevisioncount' => "Iste articulo ha essite ''re-elaborate'' post tu ultime evalutation.
 356+Es recommendate que tu lo re-evaluta.",
 357+ 'articleassessment-results-show' => '(Resultatos celate. <span class="showlink">Revelar</span> los.)',
 358+ 'articleassessment-results-hide' => '(<span class="hidelink">Celar resultatos</span>)',
 359+ 'articleassessment-survey-question-whyrated' => 'Per favor dice nos proque tu ha evalutate iste pagina hodie (marca tote le optiones applicabile):',
 360+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Io voleva contribuer al evalutation general del pagina',
 361+ 'articleassessment-survey-answer-whyrated-development' => 'Io spera que mi evalutation ha un effecto positive sur le disveloppamento del pagina',
 362+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Io voleva contribuer a {{SITENAME}}',
 363+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Me place condivider mi opinion',
 364+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Io non dava un evalutation hodie, ma io voleva dar mi opinion super le functionalitate',
 365+ 'articleassessment-survey-answer-whyrated-other' => 'Altere',
 366+ 'articleassessment-survey-question-useful' => 'Crede tu que le evalutationes providite es utile e clar?',
 367+ 'articleassessment-survey-question-useful-iffalse' => 'Proque?',
 368+ 'articleassessment-survey-question-expert' => 'Esque tu te considera un experto in le campo que iste pagina coperi?',
 369+ 'articleassessment-survey-question-expert-iftrue' => 'Pote tu describer tu expertise?',
 370+ 'articleassessment-survey-question-comments' => 'Ha tu additional commentos?',
 371+ 'articleassessment-survey-submit' => 'Submitter',
 372+ 'articleassessment-survey-title' => 'Per favor responde a alcun questiones',
 373+ 'articleassessment-survey-thanks' => 'Gratias pro completar le questionario.',
 374+);
 375+
 376+/** Japanese (日本語)
 377+ * @author Marine-Blue
 378+ * @author Yanajin66
 379+ * @author 青子守歌
 380+ */
 381+$messages['ja'] = array(
 382+ 'articleassessment' => '記事の評価',
 383+ 'articleassessment-desc' => '記事の評価(パイロット版)',
 384+ 'articleassessment-yourfeedback' => 'あなたのフィードバック',
 385+ 'articleassessment-pleaserate' => 'このページの評価を算出していますので、少しお待ちください。',
 386+ 'articleassessment-submit' => '送信',
 387+ 'articleassessment-rating-wellsourced' => '良くソース化できたもの:',
 388+ 'articleassessment-rating-neutrality' => '中立的なもの:',
 389+ 'articleassessment-rating-completeness' => '完了:',
 390+ 'articleassessment-rating-readability' => '読み込み可能なもの:',
 391+ 'articleassessment-rating-wellsourced-tooltip' => 'あなたはこの記事が十分な引用を含んでいて、それらの引用は信憑性のあるソースからのものだと感じますか?',
 392+ 'articleassessment-rating-neutrality-tooltip' => 'あなたはこの記事が問題点における全ての見解の中で公正な表現だと感じますか?',
 393+ 'articleassessment-rating-completeness-tooltip' => 'あなたはこの記事が不可欠な話題の領域をカバーしていると感じますか?',
 394+ 'articleassessment-rating-readability-tooltip' => 'あなたはこの記事が良く整理され、良く書かれていると感じますか?',
 395+ 'articleassessment-articlerating' => '記事の評価',
 396+ 'articleassessment-error' => 'エラーが発生しました。
 397+後でもう一度試みてください。',
 398+ 'articleassessment-thanks' => 'ありがとうございます!あなたの評価は保存されました。',
 399+ 'articleassessment-featurefeedback' => 'この機能について<span class="feedbacklink">フォードバック</span>をお願いします。',
 400+ 'articleassessment-noratings' => '$1($2の{{PLURAL:$2|評価}})',
 401+ 'articleassessment-stalemessage-norevisioncount' => "この記事はあなたが最後にレビューしてから、''修正''されました。
 402+再度レビューしたほうが良いかもしれません。",
 403+ 'articleassessment-results-show' => '(結果は隠されています。<span class="showlink">表示</span>する。)',
 404+ 'articleassessment-results-hide' => '(<span class="hidelink">結果を隠す</span>)',
 405+ 'articleassessment-survey-question-whyrated' => '今日、なぜあなたがこのページを評価したか我々に教えてください(適用するすべてにチェックを入れてください):',
 406+ 'articleassessment-survey-answer-whyrated-contribute-rating' => '私はページの全ての評価に貢献したいです',
 407+ 'articleassessment-survey-answer-whyrated-development' => '私は自分の評価が積極的にこのページの開発に影響を与えることを希望している',
 408+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => '私は{{サイト名}}に貢献したい',
 409+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'I like sharing my opinion',
 410+ 'articleassessment-survey-answer-whyrated-didntrate' => '私は今日はレーティングを提供しなかったが、この機能に関するフィードバックを提供したかった',
 411+ 'articleassessment-survey-answer-whyrated-other' => 'その他',
 412+ 'articleassessment-survey-question-useful' => 'あなたはこれらの評価が有用で明確だと信じていますか?',
 413+ 'articleassessment-survey-question-useful-iffalse' => 'なぜですか?',
 414+ 'articleassessment-survey-question-expert' => 'あなたは自分自身がこのページが扱う領域の専門家だと思いますか?',
 415+ 'articleassessment-survey-question-expert-iftrue' => 'あなたは専門知識を述べることができますか?',
 416+ 'articleassessment-survey-question-comments' => 'あなたには追加すべきコメントがありますか?',
 417+ 'articleassessment-survey-submit' => '送信',
 418+ 'articleassessment-survey-title' => '質問に少し答えてください',
 419+ 'articleassessment-survey-thanks' => '調査に記入していただき、ありがとうございます。',
 420+);
 421+
 422+/** Luxembourgish (Lëtzebuergesch)
 423+ * @author Robby
 424+ */
 425+$messages['lb'] = array(
 426+ 'articleassessment' => 'Artikelaschätzung',
 427+ 'articleassessment-desc' => 'Artikelaschätzung Pilotversioun',
 428+ 'articleassessment-yourfeedback' => 'Äre Feedback',
 429+ 'articleassessment-pleaserate' => 'Huelt Iech w.e.g. een Ament fir déi Säit hei drënner ze bewäerten.',
 430+ 'articleassessment-submit' => 'Späicheren',
 431+ 'articleassessment-rating-wellsourced' => 'Gudd dokumentéiert:',
 432+ 'articleassessment-rating-neutrality' => 'Neutral:',
 433+ 'articleassessment-rating-completeness' => 'Komplett:',
 434+ 'articleassessment-rating-readability' => 'Verständlech:',
 435+ 'articleassessment-rating-wellsourced-tooltip' => 'Hutt Dir den Androck datt dës Säit genuch Zitater huet an datt dës Zitater aus vertrauenswierdege Quelle kommen?',
 436+ 'articleassessment-rating-neutrality-tooltip' => 'Hutt Dir den Androck datt dës Säit eng ausgeglache Presentatioun vun alle Perspektive vun dësem Thema weist?',
 437+ 'articleassessment-rating-completeness-tooltip' => 'Hutt dir den Androck datt dës Säit déi wesentlech Aspekter vun dësem Sujet behandelt déi solle beliicht ginn?',
 438+ 'articleassessment-rating-readability-tooltip' => 'Hutt Dir den Androck datt dës Säit gutt organiséiert a gutt geschriwwen ass?',
 439+ 'articleassessment-articlerating' => 'Bewäertung vum Artikel',
 440+ 'articleassessment-error' => 'Et ass e Feeler geschitt.
 441+Probéiert w.e.g. méi spéit nach emol.',
 442+ 'articleassessment-thanks' => 'Merci! Är Bewäertung gouf gespäichert.',
 443+ 'articleassessment-featurefeedback' => 'Gitt eis Äre [[Special:Article Assessment Feedback|Feedback]] vun dëser Fonctioun.',
 444+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|Bewäertung|Bewäertungen}})',
 445+ 'articleassessment-stalemessage-norevisioncount' => "Dësen Artikel gouf zënter datt Dir e fir d'lescht nogekuckt hutt ''verännert''.
 446+Et kéint sinn datt dir en nei bewäerte wëllt.",
 447+ 'articleassessment-results-show' => '(D\'Resultater si verstopp. Resultater <span class="showlink">weisen</span>.)',
 448+ 'articleassessment-results-hide' => '(<span class="hidelink">Resultater verstoppen</span>)',
 449+ 'articleassessment-survey-question-whyrated' => 'Sot eis w.e.g. firwat datt Dir dës säit bewäert hutt (klickt alles u wat zoutrëfft):',
 450+ 'articleassessment-survey-answer-whyrated-other' => 'Anerer',
 451+ 'articleassessment-survey-question-useful-iffalse' => 'Firwat?',
 452+ 'articleassessment-survey-title' => 'Beäntwert w.e.g. e puer Froen',
 453+);
 454+
 455+/** Macedonian (Македонски)
 456+ * @author Bjankuloski06
 457+ */
 458+$messages['mk'] = array(
 459+ 'articleassessment' => 'Оценување на статија',
 460+ 'articleassessment-desc' => 'Пилотна верзија на Оценување на статија',
 461+ 'articleassessment-yourfeedback' => 'Ваше мислење',
 462+ 'articleassessment-pleaserate' => 'Одвојте момент за да ја оцените страницава подолу',
 463+ 'articleassessment-submit' => 'Поднеси',
 464+ 'articleassessment-rating-wellsourced' => 'Доволно извори:',
 465+ 'articleassessment-rating-neutrality' => 'Неутрална:',
 466+ 'articleassessment-rating-completeness' => 'Исцрпна:',
 467+ 'articleassessment-rating-readability' => 'Читлива:',
 468+ 'articleassessment-rating-wellsourced-tooltip' => 'Дали сметате дека статијава има доволно наводи и дека се преземени од доверливи извори?',
 469+ 'articleassessment-rating-neutrality-tooltip' => 'Дали сметате дека статијава на праведен начин ги застапува сите гледишта на оваа проблематика?',
 470+ 'articleassessment-rating-completeness-tooltip' => 'Дали сметате дека статијава ги обработува најважните основни теми што треба да се обработат?',
 471+ 'articleassessment-rating-readability-tooltip' => 'Дали сметате дека статијава е добро организирана и убаво напишана?',
 472+ 'articleassessment-articlerating' => 'Оценки за статијата',
 473+ 'articleassessment-error' => 'Се појави грешка.
 474+Обидете се подоцна.',
 475+ 'articleassessment-thanks' => 'Ви благодариме! Вашите оценки се зачувани.',
 476+ 'articleassessment-featurefeedback' => 'Дајте ваше <span class="feedbacklink">мислење</span> за оваа функција.',
 477+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|оценка|оценки}})',
 478+ 'articleassessment-stalemessage-norevisioncount' => "Статијава е ''преработена'' од последниот преглеед наваму.
 479+Ви предлагаме да ја преоцените.",
 480+ 'articleassessment-results-show' => '(Резултатите се скриени. <span class="showlink">Прикажи</span> ги.)',
 481+ 'articleassessment-results-hide' => '(<span class="hidelink">Сокриј резултати</span>)',
 482+ 'articleassessment-survey-question-whyrated' => 'Кажете ни зошто ја оценивте страницава денес (штиклирајте ги сите релевантни одговори)',
 483+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Сакав да придонесам кон севкупната оцена на страницата',
 484+ 'articleassessment-survey-answer-whyrated-development' => 'Се надевам дека мојата оценка ќе влијае позитивно на развојот на страницата',
 485+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Сакав да придонесам кон {{SITENAME}}',
 486+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Сакам да го искажувам моето мислење',
 487+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Не оценував денес, туку сакав да искажам мое мислење за функцијата',
 488+ 'articleassessment-survey-answer-whyrated-other' => 'Друго',
 489+ 'articleassessment-survey-question-useful' => 'Дали сметате дека дадените оценки се полезни и јасни?',
 490+ 'articleassessment-survey-question-useful-iffalse' => 'Зошто?',
 491+ 'articleassessment-survey-question-expert' => 'Дали се сметате за стручњак во тематиката што се обработува на страницава?',
 492+ 'articleassessment-survey-question-expert-iftrue' => 'Можете ли да ги опишете вашите стручни познавања?',
 493+ 'articleassessment-survey-question-comments' => 'Имате некои други забелешки?',
 494+ 'articleassessment-survey-submit' => 'Поднеси',
 495+ 'articleassessment-survey-title' => 'Ве молиме одговорете на неколку прашања',
 496+ 'articleassessment-survey-thanks' => 'Ви благодариме што ја пополнивте анкетата.',
 497+);
 498+
 499+/** Dutch (Nederlands)
 500+ * @author Siebrand
 501+ */
 502+$messages['nl'] = array(
 503+ 'articleassessment' => 'Paginabeoordeling',
 504+ 'articleassessment-desc' => 'Paginabeoordeling (testversie)',
 505+ 'articleassessment-yourfeedback' => 'Uw terugkoppeling',
 506+ 'articleassessment-pleaserate' => 'Geef alstublieft een beoordeling van deze pagina.',
 507+ 'articleassessment-submit' => 'Opslaan',
 508+ 'articleassessment-rating-wellsourced' => 'Goed van bronnen voorzien:',
 509+ 'articleassessment-rating-neutrality' => 'Neutraal:',
 510+ 'articleassessment-rating-completeness' => 'Compleet:',
 511+ 'articleassessment-rating-readability' => 'Leesbaar:',
 512+ 'articleassessment-rating-wellsourced-tooltip' => 'Vindt u dat deze pagina voldoende bronvermeldingen heeft en dat de bronvermeldingen betrouwbaar zijn?',
 513+ 'articleassessment-rating-neutrality-tooltip' => 'Vindt u dat deze pagina een eerlijke weergave is van alle invalshoeken voor dit onderwerp?',
 514+ 'articleassessment-rating-completeness-tooltip' => 'Vindt u dat deze pagina de essentie van dit onderwerp bestrijkt?',
 515+ 'articleassessment-rating-readability-tooltip' => 'Vindt u dat deze pagina een correcte opbouw heeft een goed is geschreven?',
 516+ 'articleassessment-articlerating' => 'Paginawaardering',
 517+ 'articleassessment-error' => 'Er is een fout opgetreden.
 518+Probeer het later opnieuw.',
 519+ 'articleassessment-thanks' => 'Bedankt!
 520+Uw beoordeling is opgeslagen.',
 521+ 'articleassessment-featurefeedback' => 'Geef ons [[Special:ArticleAssessmentFeedback|terugkoppeling]] over deze functie.',
 522+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|beoordeling|beoordelingen}})',
 523+ 'articleassessment-stalemessage-norevisioncount' => "Deze pagina is ''aangepast'' sinds uw beoordeling.
 524+Wilt u de pagina opnieuw beoordelen?",
 525+ 'articleassessment-results-show' => '(<span class="showlink">resultaten weergeven</span>)',
 526+ 'articleassessment-results-hide' => '(<span class="hidelink">resultaten verbergen</span>)',
 527+ 'articleassessment-survey-question-whyrated' => 'Laat ons weten waarom u deze pagina vandaag hebt beoordeeld (kies alle redenen die van toepassing zijn):',
 528+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Ik wil bijdragen aan de beoordelingen van de pagina',
 529+ 'articleassessment-survey-answer-whyrated-development' => 'Ik hoop dat mijn beoordeling een positief effect heeft op de ontwikkeling van de pagina',
 530+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Ik wilde bijdragen aan {{SITENAME}}',
 531+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Ik vind het fijn om mijn mening te delen',
 532+ 'articleassessment-survey-answer-whyrated-didntrate' => "Ik heb vandaag geen pagina's beoordeeld, maar in de toekomst wil ik wel terugkoppeling geven",
 533+ 'articleassessment-survey-answer-whyrated-other' => 'Anders',
 534+ 'articleassessment-survey-question-useful' => 'Vindt u dat de beoordelingen bruikbaar en duidelijk zijn?',
 535+ 'articleassessment-survey-question-useful-iffalse' => 'Waarom?',
 536+ 'articleassessment-survey-question-expert' => 'Vindt u zichzelf een expert in de materie waarover deze pagina gaat?',
 537+ 'articleassessment-survey-question-expert-iftrue' => 'Kunt u uw expertise beschrijven?',
 538+ 'articleassessment-survey-question-comments' => 'Hebt u nog opmerkingen?',
 539+ 'articleassessment-survey-submit' => 'Opslaan',
 540+ 'articleassessment-survey-title' => 'Beantwoord alstublieft een paar vragen',
 541+ 'articleassessment-survey-thanks' => 'Bedankt voor het beantwoorden van de vragen.',
 542+);
 543+
 544+/** Polish (Polski)
 545+ * @author Sp5uhe
 546+ */
 547+$messages['pl'] = array(
 548+ 'articleassessment' => 'Ocena artykułu',
 549+ 'articleassessment-desc' => 'Ocena artykułu (wersja pilotażowa)',
 550+ 'articleassessment-yourfeedback' => 'Twoja opinia',
 551+ 'articleassessment-pleaserate' => 'Poświeć chwilę, aby ocenić poniższą stronę.',
 552+ 'articleassessment-submit' => 'Zapisz',
 553+ 'articleassessment-rating-wellsourced' => 'Dobre źródła',
 554+ 'articleassessment-rating-neutrality' => 'Neutralny punkt widzenia',
 555+ 'articleassessment-rating-completeness' => 'Wyczerpanie tematu',
 556+ 'articleassessment-rating-readability' => 'Zrozumiałość',
 557+ 'articleassessment-rating-wellsourced-tooltip' => 'Czy uważasz, że strona ma wystarczającą liczbę odnośników i że odnoszą się one do wiarygodnych źródeł?',
 558+ 'articleassessment-rating-neutrality-tooltip' => 'Czy uważasz, że strona prezentuje wszystkie punkty widzenia na to zagadnienie?',
 559+ 'articleassessment-rating-completeness-tooltip' => 'Czy uważasz, że strona porusza wszystkie istotne aspekty, które powinna?',
 560+ 'articleassessment-rating-readability-tooltip' => 'Czy uważasz, że strona jest poprawnie sformatowana oraz zrozumiale napisana?',
 561+ 'articleassessment-articlerating' => 'Ocena strony',
 562+ 'articleassessment-error' => 'Wystąpił błąd.
 563+Spróbuj ponownie później.',
 564+ 'articleassessment-thanks' => 'Wystawiona przez Ciebie ocena została zapisana.',
 565+ 'articleassessment-featurefeedback' => '<span class="feedbacklink">Napisz do autorów</span> co myślisz o tym rozszerzeniu.',
 566+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|ocena|oceny|ocen}})',
 567+ 'articleassessment-stalemessage-norevisioncount' => "Strona została ''zmieniona'' od czasu, gdy ją oceniałeś.
 568+Możesz ocenić ją ponownie.",
 569+ 'articleassessment-results-show' => '(Wyniki ukryte. <span class="showlink">Pokaż</span> je.)',
 570+ 'articleassessment-results-hide' => '(<span class="hidelink">Ukryj wyniki</span>)',
 571+ 'articleassessment-survey-question-whyrated' => 'Dlaczego oceniłeś dziś tę stronę (zaznacz wszystkie pasujące):',
 572+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Chciałem mieć wpływ na ogólną ocenę strony',
 573+ 'articleassessment-survey-answer-whyrated-development' => 'Mam nadzieję, że moja ocena pozytywnie wpłynie na rozwój strony',
 574+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Chciałem mieć swój wkład w rozwój {{GRAMMAR:D.lp|{{SITENAME}}}}',
 575+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Lubię dzielić się swoją opinią',
 576+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Nie oceniałem dziś, ale chcę podzielić się swoją opinią na temat tego rozszerzenia',
 577+ 'articleassessment-survey-answer-whyrated-other' => 'Inny powód',
 578+ 'articleassessment-survey-question-useful' => 'Czy uważasz, że taka metoda oceniania jest użyteczna i czytelna?',
 579+ 'articleassessment-survey-question-useful-iffalse' => 'Dlaczego?',
 580+ 'articleassessment-survey-question-expert' => 'Czy uważasz się za eksperta w tematyce, którą porusza ta strona?',
 581+ 'articleassessment-survey-question-expert-iftrue' => 'Czy możesz opisać swój poziom wiedzy?',
 582+ 'articleassessment-survey-question-comments' => 'Czy masz jakieś dodatkowe uwagi?',
 583+ 'articleassessment-survey-submit' => 'Zapisz',
 584+ 'articleassessment-survey-title' => 'Proszę udzielić odpowiedzi na kilka pytań',
 585+ 'articleassessment-survey-thanks' => 'Dziękujemy za wypełnienie ankiety.',
 586+);
 587+
 588+/** Piedmontese (Piemontèis)
 589+ * @author Dragonòt
 590+ */
 591+$messages['pms'] = array(
 592+ 'articleassessment' => "Valutassion ëd j'artìcoj",
 593+ 'articleassessment-desc' => "Vërsion pilòta dla valutassion ëd j'artìcoj",
 594+ 'articleassessment-yourfeedback' => 'Tò artorn',
 595+ 'articleassessment-pleaserate' => 'Për piasì pija un moment për valuté sta pàgina sota.',
 596+ 'articleassessment-submit' => 'Spediss',
 597+ 'articleassessment-rating-wellsourced' => 'Bon-e-Sorgiss:',
 598+ 'articleassessment-rating-neutrality' => 'Neutral:',
 599+ 'articleassessment-rating-completeness' => 'Completa:',
 600+ 'articleassessment-rating-readability' => 'Lesìbil:',
 601+ 'articleassessment-rating-wellsourced-tooltip' => "Pensës-to che sto artìcol a l'abia basta citassion e che ste citassion a rivo da sorziss sigure?",
 602+ 'articleassessment-rating-neutrality-tooltip' => 'Pensës-to che sto artìcol a mosta na giusta rapresentassion ëd tute le prospetive ant sua edission?',
 603+ 'articleassessment-rating-completeness-tooltip' => "Pensës-to che sto artìcol a coata le aire essensial ëd l'argoment com a dovrìa?",
 604+ 'articleassessment-rating-readability-tooltip' => 'Pensës-to che sto artìcol a sia bin-organisà e bin scrivù?',
 605+ 'articleassessment-articlerating' => "Valutassion ëd l'artìcol",
 606+ 'articleassessment-error' => "Un eror a l'é capità.
 607+Për piasì preuva torna pi tard.",
 608+ 'articleassessment-thanks' => 'Mersì! Toe valutassion a son ëstàite salvà.',
 609+ 'articleassessment-featurefeedback' => 'Dane <span class="feedbacklink">artorn</span> a propòsit dë sta funsion.',
 610+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|valutassion|valutassion}})',
 611+ 'articleassessment-stalemessage-norevisioncount' => "Sto artìcol a l'é stàit ''revisionà'' da quand ch'it l'has revisionalo.
 612+It podrìe vorejlo revaluté.",
 613+ 'articleassessment-results-show' => '(Arzultà stërmà. <span class="showlink">Mostlo</span>.)',
 614+ 'articleassessment-results-hide' => '(<span class="hidelink">Stërma arzultà</span>)',
 615+ 'articleassessment-survey-question-whyrated' => "Për piasì fane savèj përchè it l'has valutà sta pàgina ancheuj (signa tut lòn ch'a centra):",
 616+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'I veui contribuì a la valutassin antera dla pàgina',
 617+ 'articleassessment-survey-answer-whyrated-development' => 'I sper che mia valutassion a peussa toché positivament ël dësvilup ëd la pàgina',
 618+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'I veui contribuì a {{SITENAME}}',
 619+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Am pias condivide mia opinion',
 620+ 'articleassessment-survey-answer-whyrated-didntrate' => "I l'heu pa dàit valutassion ancheuj, ma i veui dé d'artorn an sla funsion",
 621+ 'articleassessment-survey-answer-whyrated-other' => 'Àutr',
 622+ 'articleassessment-survey-question-useful' => 'Chërdës-to che le valutassion dàite a sio ùtij e ciàire?',
 623+ 'articleassessment-survey-question-useful-iffalse' => 'Përchè?',
 624+ 'articleassessment-survey-question-expert' => "Considërës-to ti midem n'espert ant ël camp che sta pàgina a coata?",
 625+ 'articleassessment-survey-question-expert-iftrue' => 'Peuss-to descrive toa esperiensa?',
 626+ 'articleassessment-survey-question-comments' => "L'has-to quaich coment adissionaj?",
 627+ 'articleassessment-survey-submit' => 'Spediss',
 628+ 'articleassessment-survey-title' => 'Për piasì arspond a quaich custion',
 629+ 'articleassessment-survey-thanks' => 'Mersì për avej vempì ël questionari.',
 630+);
 631+
 632+/** Portuguese (Português)
 633+ * @author Giro720
 634+ * @author Hamilton Abreu
 635+ * @author Waldir
 636+ */
 637+$messages['pt'] = array(
 638+ 'articleassessment' => 'Avaliação do artigo',
 639+ 'articleassessment-desc' => 'Avaliação do artigo (versão de testes)',
 640+ 'articleassessment-yourfeedback' => 'Os seus comentários',
 641+ 'articleassessment-pleaserate' => 'Dedique um momento a avaliar esta página abaixo, por favor.',
 642+ 'articleassessment-submit' => 'Enviar',
 643+ 'articleassessment-rating-wellsourced' => 'Bem referenciado:',
 644+ 'articleassessment-rating-neutrality' => 'Neutro:',
 645+ 'articleassessment-rating-completeness' => 'Completo:',
 646+ 'articleassessment-rating-readability' => 'Fácil de ler:',
 647+ 'articleassessment-rating-wellsourced-tooltip' => 'Considera que esta página tem citações suficientes e que essas citações provêm de fontes fiáveis?',
 648+ 'articleassessment-rating-neutrality-tooltip' => 'Acha que esta página representa, de forma equilibrada, todos os pontos de vista sobre o assunto?',
 649+ 'articleassessment-rating-completeness-tooltip' => 'Considera que esta página aborda os temas essenciais que deviam ser cobertos?',
 650+ 'articleassessment-rating-readability-tooltip' => 'Acha que esta página está bem organizada e bem escrita?',
 651+ 'articleassessment-articlerating' => 'Avaliação da página',
 652+ 'articleassessment-error' => 'Ocorreu um erro.
 653+Tente novamente mais tarde, por favor.',
 654+ 'articleassessment-thanks' => 'Obrigado! As suas avaliações foram gravadas.',
 655+ 'articleassessment-featurefeedback' => 'Envie-nos os seus <span class="feedbacklink">comentários</span> sobre esta funcionalidade.',
 656+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|avaliação|avaliações}})',
 657+ 'articleassessment-stalemessage-norevisioncount' => "Esta página foi ''alterada'' desde a sua última revisão.
 658+Talvez queira voltar a avaliá-la.",
 659+ 'articleassessment-results-show' => '(Resultados ocultados. <span class="showlink">Mostrá-los</span>.)',
 660+ 'articleassessment-results-hide' => '(<span class="hidelink">Ocultar os resultados</span>)',
 661+ 'articleassessment-survey-question-whyrated' => 'Diga-nos porque é que classificou esta página hoje (marque todas as opções verdadeiras):',
 662+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Queria contribuir para a classificação global da página',
 663+ 'articleassessment-survey-answer-whyrated-development' => 'Espero que a minha classificação afecte positivamente o desenvolvimento da página',
 664+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Queria colaborar com a {{SITENAME}}',
 665+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Gosto de dar a minha opinião',
 666+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Hoje não classifiquei páginas, mas queria deixar o meu comentário sobre a funcionalidade',
 667+ 'articleassessment-survey-answer-whyrated-other' => 'Outra',
 668+ 'articleassessment-survey-question-useful' => 'Acredita que as classificações dadas são úteis e claras?',
 669+ 'articleassessment-survey-question-useful-iffalse' => 'Porquê?',
 670+ 'articleassessment-survey-question-expert' => 'Considera-se um perito na área descrita nesta página?',
 671+ 'articleassessment-survey-question-expert-iftrue' => 'Pode descrever a sua experiência?',
 672+ 'articleassessment-survey-question-comments' => 'Tem mais comentários?',
 673+ 'articleassessment-survey-submit' => 'Enviar',
 674+ 'articleassessment-survey-title' => 'Por favor, responda a algumas perguntas',
 675+ 'articleassessment-survey-thanks' => 'Obrigado por preencher o inquérito.',
 676+);
 677+
 678+/** Brazilian Portuguese (Português do Brasil)
 679+ * @author Giro720
 680+ */
 681+$messages['pt-br'] = array(
 682+ 'articleassessment' => 'Avaliação do artigo',
 683+ 'articleassessment-desc' => 'Avaliação do artigo (versão de testes)',
 684+ 'articleassessment-yourfeedback' => 'Os seus comentários',
 685+ 'articleassessment-pleaserate' => 'Dedique um momento para avaliar esta página abaixo, por favor.',
 686+ 'articleassessment-submit' => 'Enviar',
 687+ 'articleassessment-rating-wellsourced' => 'Bem referenciado:',
 688+ 'articleassessment-rating-neutrality' => 'Neutro:',
 689+ 'articleassessment-rating-completeness' => 'Completo:',
 690+ 'articleassessment-rating-readability' => 'Fácil de ler:',
 691+ 'articleassessment-rating-wellsourced-tooltip' => 'Você considera que esta página tem citações suficientes e que essas citações provêm de fontes fiáveis?',
 692+ 'articleassessment-rating-neutrality-tooltip' => 'Você acha que esta página representa, de forma equilibrada, todos os pontos de vista sobre o assunto?',
 693+ 'articleassessment-rating-completeness-tooltip' => 'Você considera que esta página aborda os temas essenciais que deviam ser cobertos?',
 694+ 'articleassessment-rating-readability-tooltip' => 'Você acha que esta página está bem organizada e bem escrita?',
 695+ 'articleassessment-articlerating' => 'Avaliação da página',
 696+ 'articleassessment-error' => 'Ocorreu um erro.
 697+Por favor, tente novamente mais tarde.',
 698+ 'articleassessment-thanks' => 'Obrigado! As suas avaliações foram salvas.',
 699+ 'articleassessment-featurefeedback' => 'Envie-nos os seus <span class="feedbacklink">comentários</span> sobre esta funcionalidade.',
 700+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL:$2|avaliação|avaliações}})',
 701+ 'articleassessment-stalemessage-norevisioncount' => "Esta página foi ''alterada'' desde a sua última revisão.
 702+Talvez queira voltar a avaliá-la.",
 703+ 'articleassessment-results-show' => '(Resultados ocultados. <span class="showlink">Mostrá-los</span>.)',
 704+ 'articleassessment-results-hide' => '(<span class="hidelink">Ocultar os resultados</span>)',
 705+ 'articleassessment-survey-question-whyrated' => 'Diga-nos porque é que classificou esta página hoje, por favor (marque todas as opções as quais se aplicam):',
 706+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Eu queria contribuir para a classificação global da página',
 707+ 'articleassessment-survey-answer-whyrated-development' => 'Eu espero que a minha classificação afete positivamente o desenvolvimento da página',
 708+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Eu queria colaborar com a {{SITENAME}}',
 709+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Eu gosto de dar a minha opinião',
 710+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Hoje não classifiquei páginas, mas queria deixar o meu comentário sobre a funcionalidade',
 711+ 'articleassessment-survey-answer-whyrated-other' => 'Outra',
 712+ 'articleassessment-survey-question-useful' => 'Você acredita que as classificações dadas são úteis e claras?',
 713+ 'articleassessment-survey-question-useful-iffalse' => 'Por quê?',
 714+ 'articleassessment-survey-question-expert' => "Você se considera um ''expert'' na área descrita nesta página?",
 715+ 'articleassessment-survey-question-expert-iftrue' => 'Você pode descrever a sua experiência?',
 716+ 'articleassessment-survey-question-comments' => 'Você tem mais algum comentário?',
 717+ 'articleassessment-survey-submit' => 'Enviar',
 718+ 'articleassessment-survey-title' => 'Por favor, responda a algumas perguntas',
 719+ 'articleassessment-survey-thanks' => 'Obrigado por preencher o questionário.',
 720+);
 721+
 722+/** Russian (Русский)
 723+ * @author MaxSem
 724+ * @author Александр Сигачёв
 725+ * @author Сrower
 726+ */
 727+$messages['ru'] = array(
 728+ 'articleassessment' => 'Оценка статьи',
 729+ 'articleassessment-desc' => 'Оценка статьи (экспериментальный вариант)',
 730+ 'articleassessment-yourfeedback' => 'Ваш отзыв',
 731+ 'articleassessment-pleaserate' => 'Пожалуйста, уделите минуту, чтобы оценить статью ниже.',
 732+ 'articleassessment-submit' => 'Сохранить',
 733+ 'articleassessment-rating-wellsourced' => 'Из хорошего источника:',
 734+ 'articleassessment-rating-neutrality' => 'Нейтральная:',
 735+ 'articleassessment-rating-completeness' => 'Завершённая:',
 736+ 'articleassessment-rating-readability' => 'Читаемая:',
 737+ 'articleassessment-rating-wellsourced-tooltip' => 'Считаете ли Вы, что на этой странице достаточно цитат и что они взяты из достоверных источников?',
 738+ 'articleassessment-rating-neutrality-tooltip' => 'Считаете ли Вы, что эта страница объективно отражает все точки зрения по этому вопросу?',
 739+ 'articleassessment-rating-completeness-tooltip' => 'Считаете ли Вы, что эта страница в достаточной мере расскрывает основные вопросы темы.',
 740+ 'articleassessment-rating-readability-tooltip' => 'Считаете ли Вы, что эта страница хорошо организована и хорошо написана?',
 741+ 'articleassessment-articlerating' => 'Рейтинг страницы',
 742+ 'articleassessment-error' => 'Произошла ошибка.
 743+Пожалуйста, повторите попытку позже.',
 744+ 'articleassessment-thanks' => 'Спасибо! Ваши оценки сохранены.',
 745+ 'articleassessment-featurefeedback' => 'Сообщите [[Special:ArticleAssessmentFeedback|Ваше мнение]] об этой функции.',
 746+ 'articleassessment-noratings' => '$1 ($2 {{PLURAL: $ 2 | оценка | оценки}})',
 747+ 'articleassessment-stalemessage-norevisioncount' => 'Эта страница редактировалась после Вашего просмотра.
 748+Вы можете оценить её еще раз.',
 749+ 'articleassessment-results-show' => '(Результаты скрыты. <span class="showlink">Показать</span> их).',
 750+ 'articleassessment-results-hide' => '(<span class="hidelink">Скрыть результаты</span>)',
 751+ 'articleassessment-survey-question-whyrated' => 'Пожалуйста, дайте нам знать, почему вы сегодня дали оценку этой странице (отметьте все подходящие варианты):',
 752+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Я хотел повлиять на итоговый рейтинг этой страницы',
 753+ 'articleassessment-survey-answer-whyrated-development' => 'Я надеюсь, что моя оценка положительно повлияет на развитие этой странице',
 754+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Я хочу содействовать развитию {{GRAMMAR:genitive|{{SITENAME}}}}',
 755+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Мне нравится делиться своим мнением',
 756+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Я не поставил сегодня оценку, но хочу оставить отзыв о данной функции',
 757+ 'articleassessment-survey-answer-whyrated-other' => 'Иное',
 758+ 'articleassessment-survey-question-useful' => 'Считаете ли вы, что проставленные оценки являются полезными и понятными?',
 759+ 'articleassessment-survey-question-useful-iffalse' => 'Почему?',
 760+ 'articleassessment-survey-question-expert' => 'Считаете ли вы себя специалистом в области, к которой относится тема этой страницы?',
 761+ 'articleassessment-survey-question-expert-iftrue' => 'Можете ли вы привести экспертную оценку?',
 762+ 'articleassessment-survey-question-comments' => 'Есть ли у вас какие-либо дополнительные замечания?',
 763+ 'articleassessment-survey-submit' => 'Отправить',
 764+ 'articleassessment-survey-title' => 'Пожалуйста, ответьте на несколько вопросов',
 765+ 'articleassessment-survey-thanks' => 'Спасибо за участие в опросе.',
 766+);
 767+
 768+/** Tagalog (Tagalog)
 769+ * @author AnakngAraw
 770+ */
 771+$messages['tl'] = array(
 772+ 'articleassessment' => 'Pagsusuri ng lathalain',
 773+ 'articleassessment-desc' => 'Pagsusuri ng lathalain (paunang bersyon)',
 774+ 'articleassessment-yourfeedback' => 'Ang iyong puna',
 775+ 'articleassessment-pleaserate' => 'Mangyaring maglaan ng isang sanali upang antasan ang pahinang nasa ibaba.',
 776+ 'articleassessment-submit' => 'Ipadala',
 777+ 'articleassessment-rating-wellsourced' => 'Sapat at tumpak ang mga pinagkunan',
 778+ 'articleassessment-rating-neutrality' => 'Walang pinapanigan:',
 779+ 'articleassessment-rating-completeness' => 'Kumpleto:',
 780+ 'articleassessment-rating-readability' => 'Nababasa:',
 781+ 'articleassessment-rating-wellsourced-tooltip' => 'Sa tingin mo ba ang pahinang ito ay may sapat ng mga pagbanggit at ang mga pagbanggit na ito ay nagbuhat sa mapagkakatiwalaang mga pinagkunan?',
 782+ 'articleassessment-rating-neutrality-tooltip' => 'Sa tingin mo ba ang pahinang ito ay nagpapakita ng isang patas na kinatawan ng lahat ng mga pananaw hinggil sa paksa?',
 783+ 'articleassessment-rating-completeness-tooltip' => 'Sa tingin mo ba ang pahinang ito ay sumasaklaw sa nararapat na mahahalagang mga lugar ng paksa?',
 784+ 'articleassessment-rating-readability-tooltip' => 'Sa tingin mo ba ang pahinang ito ay talagang maayos at mabuti ang pagkakasulat?',
 785+ 'articleassessment-articlerating' => 'Pagkakaantas ng pahina',
 786+ 'articleassessment-error' => 'Naganap ang isang kamalian.
 787+Subukan uli mamaya.',
 788+ 'articleassessment-thanks' => 'Salamat! Nasagip na ang iyong mga pag-aantas.',
 789+ 'articleassessment-featurefeedback' => 'Bigyan kami ng <span class="feedbacklink">puna</span> hinggil sa tampok na ito.',
 790+ 'articleassessment-noratings' => ' $1 ($2 {{PLURAL:$2|pag-aantas|mga pag-aantas}})',
 791+ 'articleassessment-stalemessage-norevisioncount' => "''Nabago'' ang pahinang ito magmula noong huli mong pagsuri nito.
 792+Maaari mo itong antasang muli.",
 793+ 'articleassessment-results-show' => '(Nakatago ang mga resulta. <span class="showlink">Ipakita</span> ang mga ito.)',
 794+ 'articleassessment-results-hide' => '(<span class="hidelink">Itago ang mga resulta</span>)',
 795+ 'articleassessment-survey-question-whyrated' => 'Mangyari sabihin sa amin kung bakit mo inantasan ng ganito ang pahinang ito ngayon (lagyan ng tsek ang lahat ng maaari):',
 796+ 'articleassessment-survey-answer-whyrated-contribute-rating' => 'Nais kong umambag sa pangkalahatang kaantasan ng pahina',
 797+ 'articleassessment-survey-answer-whyrated-development' => 'Umaasa ako na ang aking pag-aantas ay positibong makakaapekto sa pagpapaunlad ng pahina',
 798+ 'articleassessment-survey-answer-whyrated-contribute-wiki' => 'Nais kong makapag-ambag sa {{SITENAME}}',
 799+ 'articleassessment-survey-answer-whyrated-sharing-opinion' => 'Nais ko ang pagpapamahagi ng aking opinyon',
 800+ 'articleassessment-survey-answer-whyrated-didntrate' => 'Hindi ako nagbigay ng pag-aantas ngayon, subalit nais kong magbigay ng puna sa hinaharap',
 801+ 'articleassessment-survey-answer-whyrated-other' => 'Iba pa',
 802+ 'articleassessment-survey-question-useful' => 'Naniniwala ka ba na ang mga pag-aantas na ibinigay ay magagamit at malinaw?',
 803+ 'articleassessment-survey-question-useful-iffalse' => 'Bakit?',
 804+ 'articleassessment-survey-question-expert' => 'Itinuturing mo ba ang sarili mo bilang isang dalubhasa sa larangang sakop ng pahinang ito?',
 805+ 'articleassessment-survey-question-expert-iftrue' => 'Maaari mo bang ilarawan ang iyong kadalubhasaan?',
 806+ 'articleassessment-survey-question-comments' => 'Mayroon ka pa bang karagdagang mga puna?',
 807+ 'articleassessment-survey-submit' => 'Ipasa',
 808+ 'articleassessment-survey-title' => 'Pakisagot ang ilang mga katanungan',
 809+ 'articleassessment-survey-thanks' => 'Salamat sa pagsagot sa mga pagtatanong.',
 810+);
 811+
 812+/** Vietnamese (Tiếng Việt)
 813+ * @author Minh Nguyen
 814+ */
 815+$messages['vi'] = array(
 816+ 'articleassessment-pleaserate' => 'Xin hãy dành một chút thì giờ để đánh giá trang này ở dưới:',
 817+ 'articleassessment-submit' => 'Đánh giá',
 818+ 'articleassessment-rating-wellsourced' => 'Đầy đủ nguồn:',
 819+ 'articleassessment-rating-neutrality' => 'Trung lập:',
 820+ 'articleassessment-rating-completeness' => 'Đầy đủ:',
 821+ 'articleassessment-rating-readability' => 'Dễ đọc:',
 822+ 'articleassessment-rating-wellsourced-tooltip' => 'Bạn có cảm thấy rằng bày này chú thích nguồn gốc đầy đủ và đáng tin các nguồn?',
 823+ 'articleassessment-rating-neutrality-tooltip' => 'Bạn có cảm thấy rằng bài này đại diện công bằng cho tất cả các quan điểm về các vấn đề?',
 824+ 'articleassessment-rating-completeness-tooltip' => 'Bạn có cảm thấy rằng bài này bao gồm các đề tài cần thiết?',
 825+ 'articleassessment-rating-readability-tooltip' => 'Bạn có cảm thấy rằng bài này được sắp xếp đàng hoàng có văn bản hay?',
 826+ 'articleassessment-articlerating' => 'Đánh giá bài',
 827+ 'articleassessment-error' => 'Đã gặp lỗi.
 828+Xin hãy thử lại sau.',
 829+ 'articleassessment-thanks' => 'Cám ơn! Đánh giá của bạn đã được lưu.',
 830+ 'articleassessment-noratings' => '$1 ($2 đánh giá)',
 831+ 'articleassessment-stalemessage-norevisioncount' => "Bài này đã được ''chỉnh sửa'' sau lần cuối bạn xem xét nó.
 832+Bạn có thể muốn đánh giá nó một lần nữa.",
 833+ 'articleassessment-results-show' => '(Các kết quả được ẩn. <span class="showlink">Hiện</span> kết quả.)',
 834+ 'articleassessment-results-hide' => '(<span class="hidelink">Ẩn kết quả</span>)',
 835+);
 836+
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.i18n.php
___________________________________________________________________
Added: svn:eol-style
1837 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_bg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_bg.gif
___________________________________________________________________
Added: svn:mime-type
2838 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/stars.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/stars.gif
___________________________________________________________________
Added: svn:mime-type
3839 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_disabled_bg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_disabled_bg.gif
___________________________________________________________________
Added: svn:mime-type
4840 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/jquery.ui.stars.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/jquery.ui.stars.gif
___________________________________________________________________
Added: svn:mime-type
5841 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/question.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/question.gif
___________________________________________________________________
Added: svn:mime-type
6842 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/question-hover.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/question-hover.gif
___________________________________________________________________
Added: svn:mime-type
7843 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_bar.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/rating_bar.gif
___________________________________________________________________
Added: svn:mime-type
8844 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/tipsy.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/tipsy.gif
___________________________________________________________________
Added: svn:mime-type
9845 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/arrow.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/images/arrow.gif
___________________________________________________________________
Added: svn:mime-type
10846 + application/octet-stream
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.php
@@ -0,0 +1,89 @@
 2+<?php
 3+
 4+// If the number of page revisions (since users last rating) is greater than this
 5+// then consider the last rating "stale"
 6+$wgArticleAssessmentStaleCount = 5;
 7+
 8+// Array of the "ratings" id's to store. Allows it to be a bit more dynamic
 9+$wgArticleAssessmentRatings = array( 1, 2, 3, 4 );
 10+
 11+// Which category the pages must belong to have the rating widget added (with _ in text)
 12+// Extension is "disabled" if this field is an empty string (as per default configuration)
 13+$wgArticleAssessmentCategory = '';
 14+
 15+// Path to jQuery UI
 16+$wgArticleAssessmentJUIPath = null; // Defaults to "$wgExtensionAssetsPath/ArticleAssessmentPilot/js/jui.combined.min.js"
 17+
 18+// Set to false if jQuery UI's CSS is already included through other means
 19+$wgArticleAssessmentNeedJUICSS = true;
 20+
 21+// Auto-load files
 22+$dir = dirname( __FILE__ ) . '/';
 23+$wgAutoloadClasses['ApiQueryArticleAssessment'] = $dir . 'api/ApiQueryArticleAssessment.php';
 24+$wgAutoloadClasses['ApiArticleAssessment'] = $dir . 'api/ApiArticleAssessment.php';
 25+$wgAutoloadClasses['ArticleAssessmentPilotHooks'] = $dir . 'ArticleAssessmentPilot.hooks.php';
 26+
 27+// Schema and tables
 28+$wgHooks['LoadExtensionSchemaUpdates'][] = 'ArticleAssessmentPilotHooks::schema';
 29+$wgHooks['ParserTestTables'][] = 'ArticleAssessmentPilotHooks::parserTestTables';
 30+
 31+// Hooks
 32+$wgHooks['BeforePageDisplay'][] = 'ArticleAssessmentPilotHooks::addResources';
 33+$wgHooks['MakeGlobalVariablesScript'][] = 'ArticleAssessmentPilotHooks::addVariables';
 34+
 35+// API modules
 36+$wgAPIListModules['articleassessment'] = 'ApiQueryArticleAssessment';
 37+$wgAPIModules['articleassessment'] = 'ApiArticleAssessment';
 38+
 39+// i18n and aliases
 40+// Adds Internationalized Messages
 41+$wgExtensionMessagesFiles['ArticleAssessmentPilot'] = $dir . 'ArticleAssessmentPilot.i18n.php';
 42+
 43+// Credits
 44+$wgExtensionCredits['other'][] = array(
 45+ 'path' => __FILE__,
 46+ 'name' => 'Article Assessment Pilot',
 47+ 'author' => array( 'Nimish Gautam', 'Sam Reed', 'Adam Miller' ),
 48+ 'version' => '0.1.0',
 49+ 'descriptionmsg' => 'articleassessment-desc',
 50+ 'url' => 'http://www.mediawiki.org/wiki/Extension:ArticleAssessmentPilot'
 51+);
 52+
 53+// Survey setup
 54+// This is totally a hack, but it's easy and had to be done fast
 55+require_once( $dir . '../SimpleSurvey/SimpleSurvey.php' );
 56+
 57+// Would ordinarily call this articleassessment but survey names are 16 chars max
 58+$wgPrefSwitchSurveys['articlerating'] = array(
 59+ 'updatable' => false,
 60+ 'submit-msg' => 'articleassessment-survey-submit',
 61+ 'questions' => array(
 62+ 'whyrated' => array(
 63+ 'question' => 'articleassessment-survey-question-whyrated',
 64+ 'type' => 'checks',
 65+ 'answers' => array(
 66+ 'contribute-rating' => 'articleassessment-survey-answer-whyrated-contribute-rating',
 67+ 'development' => 'articleassessment-survey-answer-whyrated-development',
 68+ 'contribute-wiki' => 'articleassessment-survey-answer-whyrated-contribute-wiki',
 69+ 'sharing-opinion' => 'articleassessment-survey-answer-whyrated-sharing-opinion',
 70+ 'didntrate' => 'articleassessment-survey-answer-whyrated-didntrate',
 71+ ),
 72+ 'other' => 'articleassessment-survey-answer-whyrated-other',
 73+ ),
 74+ 'useful' => array(
 75+ 'question' => 'articleassessment-survey-question-useful',
 76+ 'type' => 'boolean',
 77+ 'iffalse' => 'articleassessment-survey-question-useful-iffalse',
 78+ ),
 79+ 'expert' => array(
 80+ 'question' => 'articleassessment-survey-question-expert',
 81+ 'type' => 'boolean',
 82+ 'iftrue' => 'articleassessment-survey-question-expert-iftrue',
 83+ ),
 84+ 'comments' => array(
 85+ 'question' => 'articleassessment-survey-question-comments',
 86+ 'type' => 'text',
 87+ ),
 88+ ),
 89+);
 90+$wgValidSurveys[] = 'articlerating';
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.php
___________________________________________________________________
Added: svn:eol-style
191 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/ArticleAssessment.css
@@ -0,0 +1,236 @@
 2+/*!
 3+ * jQuery UI Stars v3.0.1
 4+ * http://plugins.jquery.com/project/Star_Rating_widget
 5+ *
 6+ * Copyright (c) 2010 Marek "Orkan" Zajac (orkans@gmail.com)
 7+ * Dual licensed under the MIT and GPL licenses.
 8+ * http://docs.jquery.com/License
 9+ *
 10+ * $Rev: 164 $
 11+ * $Date:: 2010-05-01 #$
 12+ * $Build: 35 (2010-05-01)
 13+ *
 14+ */
 15+.article-assessment-wrapper {
 16+ min-width: 1036px;
 17+}
 18+.article-assessment-wrapper .ui-stars-star {
 19+ float: left;
 20+ display: block;
 21+ overflow: hidden;
 22+ text-indent: -999em;
 23+ cursor: pointer;
 24+ padding-right: 4px;
 25+}
 26+.article-assessment-wrapper .ui-stars-star a {
 27+ width: 21px;
 28+ height: 21px;
 29+ line-height: 0;
 30+ display: block;
 31+ background: url(../images/stars.gif) no-repeat 0 0;
 32+}
 33+.article-assessment-wrapper .ui-stars-star a {
 34+ background-position: 0 0px;
 35+}
 36+
 37+.article-assessment-wrapper .ui-stars-star-on a {
 38+ background-position: 0 -21px;
 39+}
 40+.article-assessment-wrapper .ui-stars-star-rated a {
 41+ background-position: 0 -42px;
 42+}
 43+.article-assessment-wrapper .ui-stars-star-stale a {
 44+ background-position: 0 -63px;
 45+}
 46+.article-assessment-wrapper .ui-stars-star-hover a {
 47+ background-position: 0 -21px;
 48+}
 49+.article-assessment-wrapper .ui-stars-star-disabled,
 50+.article-assessment-wrapper .ui-stars-star-disabled a {
 51+ cursor: default !important;
 52+}
 53+.article-assessment-wrapper .ui-stars-cancel {
 54+ display: none;
 55+}
 56+/* End ui-stars styles */
 57+
 58+/* Tipsy Styles */
 59+.tipsy { padding: 5px 5px 10px; font-size: 12px; position: absolute; z-index: 100000; overflow: visible; }
 60+.tipsy-inner { padding: 5px 8px 4px 8px; background-color: #d6f3ff; color: black; border: 1px solid #5dc9f4; max-width: 300px; text-align: left; }
 61+.tipsy-arrow { position: absolute; background: url( '../images/arrow.gif' ) no-repeat top left; width: 13px; height: 13px; }
 62+.tipsy-se .tipsy-arrow { bottom: -2px; right: 10px; background-position: 0% 100%; }
 63+
 64+/* End Tipsy styles */
 65+.article-assessment-wrapper #article-assessment-rate,
 66+.article-assessment-wrapper #article-assessment-ratings {
 67+ background: #f7f7f7;
 68+ float: left;
 69+}
 70+.article-assessment-wrapper #article-assessment-ratings {
 71+ width: 320px;
 72+}
 73+.article-assessment-wrapper #article-assessment-rate {
 74+ width: 650px;
 75+ margin-right: 10px;
 76+}
 77+.article-assessment-wrapper legend {
 78+ font-weight: bold;
 79+}
 80+.article-assessment-wrapper .field-wrapper {
 81+ float: left;
 82+ width: 270px;
 83+ padding-right: 28px;
 84+}
 85+.article-assessment-wrapper .rating-field {
 86+ float: right;
 87+ width: 125px;
 88+ line-height: 24px;
 89+ padding-right: 5px;
 90+}
 91+.article-assessment-wrapper .rating-field-label{
 92+ float: left;
 93+ font-weight: bold;
 94+ line-height: 24px;
 95+}
 96+.article-assessment-wrapper .rating-field-label {
 97+ margin-right: 10px;
 98+}
 99+.article-assessment-wrapper .rating-field-hint {
 100+ width: 11px;
 101+ height: 24px;
 102+ display: block;
 103+ float: right;
 104+ background: url(../images/question.gif) 0 50% no-repeat;
 105+}
 106+.article-assessment-wrapper .rating-field-hint:hover {
 107+ background: url(../images/question-hover.gif) 0 50% no-repeat;
 108+}
 109+
 110+.article-assessment-wrapper .article-assessment-flash {
 111+ float: left;
 112+ font-size: 11px;
 113+ padding: 1px 5px;
 114+ width: 560px;
 115+ text-align: left;
 116+ display: block;
 117+}
 118+.article-assessment-wrapper .article-assessment-stale-msg {
 119+ background: #d6f3ff;
 120+ border: 2px solid #5dc9f4;
 121+}
 122+.article-assessment-wrapper .article-assessment-success-msg {
 123+ background: #e8e8e8;
 124+ border: 2px solid #006505;
 125+}
 126+.article-assessment-wrapper .article-assessment-error-msg {
 127+ background: #e8e8e8;
 128+ border: 2px solid #a91100;
 129+}
 130+.article-assessment-wrapper .article-assessment-rating-field-name {
 131+ float: left;
 132+ width: 110px;
 133+ font-weight: bold;
 134+ font-size: 11px;
 135+}
 136+.article-assessment-wrapper .article-assessment-rating-field-value-wrapper {
 137+ background: url( ../images/rating_bg.gif ) 0 0 no-repeat;
 138+ width: 120px;
 139+ height: 13px;
 140+ display: block;
 141+ float: left;
 142+ padding: 2px;
 143+ text-indent: -9999px;
 144+ margin-top: 4px;
 145+}
 146+.article-assessment-wrapper .article-assessment-rate-instructions,
 147+.article-assessment-wrapper .article-assessment-rate-feedback,
 148+.article-assessment-wrapper .article-assessment-show-ratings,
 149+.article-assessment-wrapper .article-assessment-hide-ratings {
 150+ font-size: 11px;
 151+ font-style: italic;
 152+}
 153+.article-assessment-wrapper .article-assessment-rate-instructions {
 154+ float: left;
 155+}
 156+.article-assessment-wrapper .article-assessment-rate-feedback {
 157+ float: right;
 158+}
 159+.article-assessment-wrapper .article-assessment-rating-field-value-wrapper .article-assessment-rating-field-value {
 160+ background: url( ../images/rating_bar.gif ) 0 0 no-repeat;
 161+ height: 9px;
 162+ float: right;
 163+ display: block;
 164+}
 165+.article-assessment-wrapper .article-assessment-rating-fields {
 166+ margin: 8px 0;
 167+}
 168+.article-assessment-wrapper .article-assessment-rating-fields .field-wrapper {
 169+ margin-bottom: 5px;
 170+}
 171+.article-assessment-rating-count {
 172+ font-size: 11px;
 173+ margin-left: 5px;
 174+ float: left;
 175+}
 176+.article-assessment-submit input {
 177+ margin: 2px 0;
 178+ float: right;
 179+}
 180+.article-assessment-wrapper .article-assessment-ratings-disabled .article-assessment-rating-field-value-wrapper {
 181+ background: url( ../images/rating_disabled_bg.gif ) 0 0 no-repeat;
 182+}
 183+.article-assessment-wrapper .article-assessment-ratings-disabled .article-assessment-rating-field-value {
 184+ display: none;
 185+}
 186+.article-assessment-wrapper .article-assessment-ratings-disabled .article-assessment-rating-count {
 187+ display: none;
 188+}
 189+.article-assessment-wrapper .article-assessment-ratings-disabled .article-assessment-rating-field-name {
 190+ color: #9f9f9f;
 191+}
 192+/* Self Clearing Floats */
 193+.article-assessment-wrapper .article-assessment-information:after,
 194+.article-assessment-wrapper .field-wrapper:after,
 195+.article-assessment-wrapper .article-assessment-rating-fields:after,
 196+.article-assessment-rating:after,
 197+.article-assessment-wrapper .article-assessment-submit:after,
 198+.article-assessment-wrapper .rating-fields:after {
 199+ content: ".";
 200+ display: block;
 201+ height: 0;
 202+ clear: both;
 203+ visibility: hidden;
 204+}
 205+.article-assessment-wrapper .field-wrapper,
 206+.article-assessment-wrapper .article-assessment-information,
 207+.article-assessment-wrapper .article-assessment-rating-fields,
 208+.article-assessment-rating,
 209+.article-assessment-wrapper .article-assessment-submit,
 210+.article-assessment-wrapper .rating-fields {
 211+ display: inline-block;
 212+}
 213+* html .article-assessment-wrapper .field-wrapper,
 214+* html .article-assessment-wrapper .article-assessment-information,
 215+* html .article-assessment-wrapper .article-assessment-rating-fields,
 216+* html .article-assessment-rating,
 217+* html .article-assessment-wrapper .article-assessment-submit,
 218+* html .article-assessment-wrapper .rating-fields {
 219+ height: 1%;
 220+}
 221+.article-assessment-wrapper .field-wrapper,
 222+.article-assessment-wrapper .article-assessment-information,
 223+.article-assessment-wrapper .article-assessment-rating-fields,
 224+.article-assessment-rating,
 225+.article-assessment-wrapper .article-assessment-submit,
 226+.article-assessment-wrapper .rating-fields {
 227+ display: block;
 228+}
 229+
 230+#article-assessment-dialog.loading {
 231+ display: block;
 232+ height: 24px;
 233+ width: 24px;
 234+ background: url( ../images/loading.gif ) center no-repeat;
 235+ text-indent: -9999px;
 236+ margin: 0 auto;
 237+}
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/ArticleAssessment.css
___________________________________________________________________
Added: svn:eol-style
1238 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/jquery-ui-1.7.2.css
@@ -0,0 +1,406 @@
 2+/*
 3+* jQuery UI CSS Framework
 4+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 5+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
 6+*/
 7+
 8+/* Layout helpers
 9+----------------------------------*/
 10+.ui-helper-hidden { display: none; }
 11+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
 12+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
 13+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
 14+.ui-helper-clearfix { display: inline-block; }
 15+/* required comment for clearfix to work in Opera \*/
 16+* html .ui-helper-clearfix { height:1%; }
 17+.ui-helper-clearfix { display:block; }
 18+/* end clearfix */
 19+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
 20+
 21+
 22+/* Interaction Cues
 23+----------------------------------*/
 24+.ui-state-disabled { cursor: default !important; }
 25+
 26+
 27+/* Icons
 28+----------------------------------*/
 29+
 30+/* states and images */
 31+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
 32+
 33+
 34+/* Misc visuals
 35+----------------------------------*/
 36+
 37+/* Overlays */
 38+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
 39+
 40+
 41+
 42+/*
 43+* jQuery UI CSS Framework
 44+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 45+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
 46+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=sans-serif&fwDefault=normal&fsDefault=1em&cornerRadius=0&bgColorHeader=e2eef6&bgTextureHeader=04_highlight_hard.png&bgImgOpacityHeader=100&borderColorHeader=c0c0c0&fcHeader=333333&iconColorHeader=333333&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=100&borderColorContent=c0c0c0&fcContent=000000&iconColorContent=000000&bgColorDefault=e2eef6&bgTextureDefault=04_highlight_hard.png&bgImgOpacityDefault=100&borderColorDefault=c0c0c0&fcDefault=333333&iconColorDefault=333333&bgColorHover=ffffff&bgTextureHover=04_highlight_hard.png&bgImgOpacityHover=100&borderColorHover=c0c0c0&fcHover=333333&iconColorHover=333333&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=100&borderColorActive=c0c0c0&fcActive=333333&iconColorActive=333333&bgColorHighlight=fbf9ee&bgTextureHighlight=04_highlight_hard.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=05_inset_soft.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=000000&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=75&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
 47+*/
 48+
 49+
 50+/* Component containers
 51+----------------------------------*/
 52+.ui-widget { font-family: sans-serif; font-size: 0.9em; }
 53+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: sans-serif; font-size: 1em; }
 54+.ui-widget-content { border: 1px solid #c0c0c0; background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; color: #000000; }
 55+.ui-widget-content a { color: #000000; }
 56+.ui-widget-header { border-bottom: 1px solid #c0c0c0; line-height: 1em; background: #e2eef6 url(images/ui-bg_highlight-hard_100_e2eef6_1x100.png) 50% 50% repeat-x; color: #333333; font-weight: bold; }
 57+.ui-widget-header a { color: #333333; }
 58+
 59+/* Interaction states
 60+----------------------------------*/
 61+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #c0c0c0; background: #e2eef6 url(images/ui-bg_highlight-hard_100_e2eef6_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #333333; outline: none; }
 62+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #333333; text-decoration: none; outline: none; }
 63+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #c0c0c0; background: #ffffff url(images/ui-bg_highlight-hard_100_ffffff_1x100.png) 50% 50% repeat-x; font-weight: normal; color: #333333; outline: none; }
 64+.ui-state-hover a, .ui-state-hover a:hover { color: #333333; text-decoration: none; outline: none; }
 65+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #c0c0c0; background: #ffffff url(images/ui-bg_flat_100_ffffff_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #333333; outline: none; }
 66+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #333333; outline: none; text-decoration: none; }
 67+
 68+/* Interaction Cues
 69+----------------------------------*/
 70+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_highlight-hard_55_fbf9ee_1x100.png) 50% top repeat-x; color: #363636; }
 71+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
 72+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_inset-soft_95_fef1ec_1x100.png) 50% bottom repeat-x; color: #cd0a0a; }
 73+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
 74+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
 75+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
 76+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
 77+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
 78+
 79+/* Icons
 80+----------------------------------*/
 81+
 82+/* states and images */
 83+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_000000_256x240.png); }
 84+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_000000_256x240.png); }
 85+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
 86+.ui-state-default .ui-icon { background-image: url(images/ui-icons_333333_256x240.png); }
 87+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
 88+.ui-state-active .ui-icon {background-image: url(images/ui-icons_333333_256x240.png); }
 89+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
 90+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
 91+
 92+/* positioning */
 93+.ui-icon-carat-1-n { background-position: 0 0; }
 94+.ui-icon-carat-1-ne { background-position: -16px 0; }
 95+.ui-icon-carat-1-e { background-position: -32px 0; }
 96+.ui-icon-carat-1-se { background-position: -48px 0; }
 97+.ui-icon-carat-1-s { background-position: -64px 0; }
 98+.ui-icon-carat-1-sw { background-position: -80px 0; }
 99+.ui-icon-carat-1-w { background-position: -96px 0; }
 100+.ui-icon-carat-1-nw { background-position: -112px 0; }
 101+.ui-icon-carat-2-n-s { background-position: -128px 0; }
 102+.ui-icon-carat-2-e-w { background-position: -144px 0; }
 103+.ui-icon-triangle-1-n { background-position: 0 -16px; }
 104+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
 105+.ui-icon-triangle-1-e { background-position: -32px -16px; }
 106+.ui-icon-triangle-1-se { background-position: -48px -16px; }
 107+.ui-icon-triangle-1-s { background-position: -64px -16px; }
 108+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
 109+.ui-icon-triangle-1-w { background-position: -96px -16px; }
 110+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
 111+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
 112+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
 113+.ui-icon-arrow-1-n { background-position: 0 -32px; }
 114+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
 115+.ui-icon-arrow-1-e { background-position: -32px -32px; }
 116+.ui-icon-arrow-1-se { background-position: -48px -32px; }
 117+.ui-icon-arrow-1-s { background-position: -64px -32px; }
 118+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
 119+.ui-icon-arrow-1-w { background-position: -96px -32px; }
 120+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
 121+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
 122+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
 123+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
 124+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
 125+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
 126+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
 127+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
 128+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
 129+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
 130+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
 131+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
 132+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
 133+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
 134+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
 135+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
 136+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
 137+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
 138+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
 139+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
 140+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
 141+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
 142+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
 143+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
 144+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
 145+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
 146+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
 147+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
 148+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
 149+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
 150+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
 151+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
 152+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
 153+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
 154+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
 155+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
 156+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
 157+.ui-icon-arrow-4 { background-position: 0 -80px; }
 158+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
 159+.ui-icon-extlink { background-position: -32px -80px; }
 160+.ui-icon-newwin { background-position: -48px -80px; }
 161+.ui-icon-refresh { background-position: -64px -80px; }
 162+.ui-icon-shuffle { background-position: -80px -80px; }
 163+.ui-icon-transfer-e-w { background-position: -96px -80px; }
 164+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
 165+.ui-icon-folder-collapsed { background-position: 0 -96px; }
 166+.ui-icon-folder-open { background-position: -16px -96px; }
 167+.ui-icon-document { background-position: -32px -96px; }
 168+.ui-icon-document-b { background-position: -48px -96px; }
 169+.ui-icon-note { background-position: -64px -96px; }
 170+.ui-icon-mail-closed { background-position: -80px -96px; }
 171+.ui-icon-mail-open { background-position: -96px -96px; }
 172+.ui-icon-suitcase { background-position: -112px -96px; }
 173+.ui-icon-comment { background-position: -128px -96px; }
 174+.ui-icon-person { background-position: -144px -96px; }
 175+.ui-icon-print { background-position: -160px -96px; }
 176+.ui-icon-trash { background-position: -176px -96px; }
 177+.ui-icon-locked { background-position: -192px -96px; }
 178+.ui-icon-unlocked { background-position: -208px -96px; }
 179+.ui-icon-bookmark { background-position: -224px -96px; }
 180+.ui-icon-tag { background-position: -240px -96px; }
 181+.ui-icon-home { background-position: 0 -112px; }
 182+.ui-icon-flag { background-position: -16px -112px; }
 183+.ui-icon-calendar { background-position: -32px -112px; }
 184+.ui-icon-cart { background-position: -48px -112px; }
 185+.ui-icon-pencil { background-position: -64px -112px; }
 186+.ui-icon-clock { background-position: -80px -112px; }
 187+.ui-icon-disk { background-position: -96px -112px; }
 188+.ui-icon-calculator { background-position: -112px -112px; }
 189+.ui-icon-zoomin { background-position: -128px -112px; }
 190+.ui-icon-zoomout { background-position: -144px -112px; }
 191+.ui-icon-search { background-position: -160px -112px; }
 192+.ui-icon-wrench { background-position: -176px -112px; }
 193+.ui-icon-gear { background-position: -192px -112px; }
 194+.ui-icon-heart { background-position: -208px -112px; }
 195+.ui-icon-star { background-position: -224px -112px; }
 196+.ui-icon-link { background-position: -240px -112px; }
 197+.ui-icon-cancel { background-position: 0 -128px; }
 198+.ui-icon-plus { background-position: -16px -128px; }
 199+.ui-icon-plusthick { background-position: -32px -128px; }
 200+.ui-icon-minus { background-position: -48px -128px; }
 201+.ui-icon-minusthick { background-position: -64px -128px; }
 202+.ui-icon-close { background-position: -80px -128px; }
 203+.ui-icon-closethick { background-position: -96px -128px; }
 204+.ui-icon-key { background-position: -112px -128px; }
 205+.ui-icon-lightbulb { background-position: -128px -128px; }
 206+.ui-icon-scissors { background-position: -144px -128px; }
 207+.ui-icon-clipboard { background-position: -160px -128px; }
 208+.ui-icon-copy { background-position: -176px -128px; }
 209+.ui-icon-contact { background-position: -192px -128px; }
 210+.ui-icon-image { background-position: -208px -128px; }
 211+.ui-icon-video { background-position: -224px -128px; }
 212+.ui-icon-script { background-position: -240px -128px; }
 213+.ui-icon-alert { background-position: 0 -144px; }
 214+.ui-icon-info { background-position: -16px -144px; }
 215+.ui-icon-notice { background-position: -32px -144px; }
 216+.ui-icon-help { background-position: -48px -144px; }
 217+.ui-icon-check { background-position: -64px -144px; }
 218+.ui-icon-bullet { background-position: -80px -144px; }
 219+.ui-icon-radio-off { background-position: -96px -144px; }
 220+.ui-icon-radio-on { background-position: -112px -144px; }
 221+.ui-icon-pin-w { background-position: -128px -144px; }
 222+.ui-icon-pin-s { background-position: -144px -144px; }
 223+.ui-icon-play { background-position: 0 -160px; }
 224+.ui-icon-pause { background-position: -16px -160px; }
 225+.ui-icon-seek-next { background-position: -32px -160px; }
 226+.ui-icon-seek-prev { background-position: -48px -160px; }
 227+.ui-icon-seek-end { background-position: -64px -160px; }
 228+.ui-icon-seek-first { background-position: -80px -160px; }
 229+.ui-icon-stop { background-position: -96px -160px; }
 230+.ui-icon-eject { background-position: -112px -160px; }
 231+.ui-icon-volume-off { background-position: -128px -160px; }
 232+.ui-icon-volume-on { background-position: -144px -160px; }
 233+.ui-icon-power { background-position: 0 -176px; }
 234+.ui-icon-signal-diag { background-position: -16px -176px; }
 235+.ui-icon-signal { background-position: -32px -176px; }
 236+.ui-icon-battery-0 { background-position: -48px -176px; }
 237+.ui-icon-battery-1 { background-position: -64px -176px; }
 238+.ui-icon-battery-2 { background-position: -80px -176px; }
 239+.ui-icon-battery-3 { background-position: -96px -176px; }
 240+.ui-icon-circle-plus { background-position: 0 -192px; }
 241+.ui-icon-circle-minus { background-position: -16px -192px; }
 242+.ui-icon-circle-close { background-position: -32px -192px; }
 243+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
 244+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
 245+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
 246+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
 247+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
 248+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
 249+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
 250+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
 251+.ui-icon-circle-zoomin { background-position: -176px -192px; }
 252+.ui-icon-circle-zoomout { background-position: -192px -192px; }
 253+.ui-icon-circle-check { background-position: -208px -192px; }
 254+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
 255+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
 256+.ui-icon-circlesmall-close { background-position: -32px -208px; }
 257+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
 258+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
 259+.ui-icon-squaresmall-close { background-position: -80px -208px; }
 260+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
 261+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
 262+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
 263+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
 264+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
 265+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 266+
 267+
 268+/* Misc visuals
 269+----------------------------------*/
 270+
 271+/* Corner radius */
 272+.ui-corner-tl { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; }
 273+.ui-corner-tr { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; }
 274+.ui-corner-bl { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; }
 275+.ui-corner-br { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; }
 276+.ui-corner-top { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; }
 277+.ui-corner-bottom { -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; }
 278+.ui-corner-right { -moz-border-radius-topright: 0; -webkit-border-top-right-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; }
 279+.ui-corner-left { -moz-border-radius-topleft: 0; -webkit-border-top-left-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; }
 280+.ui-corner-all { -moz-border-radius: 0; -webkit-border-radius: 0; }
 281+
 282+/* Overlays */
 283+.ui-widget-overlay { background: #000000 url(images/ui-bg_flat_0_000000_40x100.png) 50% 50% repeat-x; opacity: .75;filter:Alpha(Opacity=75); }
 284+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #000000 url(images/ui-bg_flat_0_000000_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
 285+----------------------------------*/
 286+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
 287+.ui-accordion .ui-accordion-li-fix { display: inline; }
 288+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
 289+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
 290+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
 291+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
 292+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
 293+----------------------------------*/
 294+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
 295+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
 296+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
 297+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
 298+.ui-datepicker .ui-datepicker-prev { left:2px; }
 299+.ui-datepicker .ui-datepicker-next { right:2px; }
 300+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
 301+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
 302+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
 303+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
 304+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
 305+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
 306+.ui-datepicker select.ui-datepicker-month,
 307+.ui-datepicker select.ui-datepicker-year { width: 49%;}
 308+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
 309+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
 310+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
 311+.ui-datepicker td { border: 0; padding: 1px; }
 312+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
 313+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
 314+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
 315+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
 316+
 317+/* with multiple calendars */
 318+.ui-datepicker.ui-datepicker-multi { width:auto; }
 319+.ui-datepicker-multi .ui-datepicker-group { float:left; }
 320+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
 321+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
 322+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
 323+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
 324+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
 325+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
 326+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
 327+.ui-datepicker-row-break { clear:both; width:100%; }
 328+
 329+/* RTL support */
 330+.ui-datepicker-rtl { direction: rtl; }
 331+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
 332+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
 333+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
 334+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
 335+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
 336+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
 337+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
 338+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
 339+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 340+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 341+
 342+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
 343+.ui-datepicker-cover {
 344+ display: none; /*sorry for IE5*/
 345+ display/**/: block; /*sorry for IE5*/
 346+ position: absolute; /*must have*/
 347+ z-index: -1; /*must have*/
 348+ filter: mask(); /*must have*/
 349+ top: -4px; /*must have*/
 350+ left: -4px; /*must have*/
 351+ width: 200px; /*must have*/
 352+ height: 200px; /*must have*/
 353+}/* Dialog
 354+----------------------------------*/
 355+.ui-dialog { position: relative; padding: 0; width: 300px; }
 356+.ui-dialog .ui-dialog-titlebar { padding: .75em; position: relative; }
 357+.ui-dialog .ui-dialog-title { float: left; margin: 0; }
 358+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .75em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
 359+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
 360+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
 361+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
 362+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
 363+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
 364+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
 365+.ui-draggable .ui-dialog-titlebar { cursor: move; }
 366+/* Progressbar
 367+----------------------------------*/
 368+.ui-progressbar { height:2em; text-align: left; }
 369+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
 370+----------------------------------*/
 371+.ui-resizable { position: relative;}
 372+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
 373+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
 374+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
 375+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
 376+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
 377+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
 378+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
 379+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
 380+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
 381+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
 382+----------------------------------*/
 383+.ui-slider { position: relative; text-align: left; }
 384+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
 385+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
 386+
 387+.ui-slider-horizontal { height: .8em; }
 388+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
 389+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
 390+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
 391+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
 392+
 393+.ui-slider-vertical { width: .8em; height: 100px; }
 394+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
 395+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
 396+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
 397+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
 398+----------------------------------*/
 399+.ui-tabs { padding: .2em; zoom: 1; }
 400+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
 401+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
 402+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
 403+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
 404+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
 405+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
 406+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
 407+.ui-tabs .ui-tabs-hide { display: none !important; }
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/jquery-ui-1.7.2.css
___________________________________________________________________
Added: svn:eol-style
1408 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png
___________________________________________________________________
Added: svn:mime-type
2409 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_2e83ff_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_2e83ff_256x240.png
___________________________________________________________________
Added: svn:mime-type
3410 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_000000_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_000000_256x240.png
___________________________________________________________________
Added: svn:mime-type
4411 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_333333_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_333333_256x240.png
___________________________________________________________________
Added: svn:mime-type
5412 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_100_ffffff_1x100.png
___________________________________________________________________
Added: svn:mime-type
6413 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_flat_0_000000_40x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_flat_0_000000_40x100.png
___________________________________________________________________
Added: svn:mime-type
7414 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_flat_100_ffffff_40x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_flat_100_ffffff_40x100.png
___________________________________________________________________
Added: svn:mime-type
8415 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_55_fbf9ee_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_55_fbf9ee_1x100.png
___________________________________________________________________
Added: svn:mime-type
9416 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_cd0a0a_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-icons_cd0a0a_256x240.png
___________________________________________________________________
Added: svn:mime-type
10417 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_100_e2eef6_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/css/images/ui-bg_highlight-hard_100_e2eef6_1x100.png
___________________________________________________________________
Added: svn:mime-type
11418 + image/png
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.hooks.php
@@ -0,0 +1,162 @@
 2+<?php
 3+
 4+/**
 5+ * Hooks for ArticleAssessmentPilot
 6+ *
 7+ * @file
 8+ * @ingroup Extensions
 9+ */
 10+class ArticleAssessmentPilotHooks {
 11+ private static $styleFiles = array(
 12+ array( 'src' => 'css/ArticleAssessment.css', 'version' => 1 ),
 13+ );
 14+
 15+ private static $scriptFiles = array(
 16+ array( 'src' => 'js/ArticleAssessment.js', 'version' => 2 ),
 17+ array( 'src' => 'js/jquery.cookie.js', 'version' => 1 ),
 18+ array( 'src' => 'js/jquery.tipsy.js', 'version' => 1 ),
 19+ array( 'src' => 'js/jquery.stars.js', 'version' => 1 ),
 20+ );
 21+
 22+ private static $messages = array();
 23+ private static $scripts = array();
 24+
 25+ /* Static Functions */
 26+ public static function schema() {
 27+ global $wgExtNewTables;
 28+
 29+ $wgExtNewTables[] = array(
 30+ 'article_assessment',
 31+ dirname( __FILE__ ) . '/ArticleAssessmentPilot.sql'
 32+ );
 33+
 34+ return true;
 35+ }
 36+
 37+ public static function addVariables( &$vars ) {
 38+ global $wgArticleAssessmentJUIPath, $wgExtensionAssetsPath;
 39+ $vars['wgArticleAssessmentJUIPath'] = $wgArticleAssessmentJUIPath ? $wgArticleAssessmentJUIPath :
 40+ "$wgExtensionAssetsPath/ArticleAssessmentPilot/js/jui.combined.min.js";
 41+ return true;
 42+ }
 43+
 44+ /**
 45+ * Make sure the tables exist for parser tests
 46+ * @param $tables
 47+ * @return bool
 48+ */
 49+ public static function parserTestTables( &$tables ) {
 50+ $tables[] = 'article_assessment';
 51+ $tables[] = 'article_assessment_pages';
 52+ $tables[] = 'article_assessment_ratings';
 53+ return true;
 54+ }
 55+
 56+ public static function addResources( $out ) {
 57+
 58+ $title = $out->getTitle();
 59+
 60+ // Chances are we only want to be rating Mainspace, right?
 61+ if ( $title->getNamespace() !== NS_MAIN ) {
 62+ return true;
 63+ }
 64+
 65+ global $wgRequest;
 66+
 67+ // Only show for view actions.
 68+ if ( $wgRequest->getVal( 'action' ) !== null && $wgRequest->getVal( 'action' ) !== 'view' ) {
 69+ return true;
 70+ }
 71+
 72+ global $wgArticleAssessmentCategory;
 73+
 74+ // check if this page should have the form
 75+ if ( $wgArticleAssessmentCategory === ''
 76+ || !self::isInCategory( $title->getArticleId(), $wgArticleAssessmentCategory ) ) {
 77+ return true;
 78+ }
 79+
 80+ global $wgExtensionAssetsPath;
 81+
 82+ foreach ( self::$scriptFiles as $script ) {
 83+ $out->addScriptFile( $wgExtensionAssetsPath .
 84+ "/ArticleAssessmentPilot/{$script['src']}", $script['version']
 85+ );
 86+ }
 87+
 88+ global $wgArticleAssessmentNeedJUICSS;
 89+ if ( $wgArticleAssessmentNeedJUICSS ) {
 90+ self::$styleFiles[] = array( 'src' => 'css/jquery-ui-1.7.2.css', 'version' => '1.7.2y' );
 91+ }
 92+ foreach ( self::$styleFiles as $style ) {
 93+ $out->addExtensionStyle( $wgExtensionAssetsPath .
 94+ "/ArticleAssessmentPilot/{$style['src']}?{$style['version']}"
 95+ );
 96+ }
 97+
 98+ // Transforms messages into javascript object members
 99+ self::$messages = array(
 100+ 'articleassessment',
 101+ 'articleassessment-desc',
 102+ 'articleassessment-yourfeedback',
 103+ 'articleassessment-pleaserate',
 104+ 'articleassessment-submit',
 105+ 'articleassessment-rating-wellsourced',
 106+ 'articleassessment-rating-neutrality',
 107+ 'articleassessment-rating-completeness',
 108+ 'articleassessment-rating-readability',
 109+ 'articleassessment-rating-wellsourced-tooltip',
 110+ 'articleassessment-rating-neutrality-tooltip',
 111+ 'articleassessment-rating-completeness-tooltip',
 112+ 'articleassessment-rating-readability-tooltip',
 113+ 'articleassessment-error',
 114+ 'articleassessment-thanks',
 115+ 'articleassessment-articlerating',
 116+ 'articleassessment-featurefeedback',
 117+ 'articleassessment-noratings',
 118+ 'articleassessment-stalemessage-revisioncount',
 119+ 'articleassessment-stalemessage-norevisioncount',
 120+ 'articleassessment-results-show',
 121+ 'articleassessment-results-hide',
 122+ 'articleassessment-survey-title',
 123+ 'articleassessment-survey-thanks',
 124+ );
 125+
 126+ foreach ( self::$messages as $i => $message ) {
 127+ // TODO: Not parsing or even preprocessing the messages would be more efficient,
 128+ // but we can't do that until we have such nice things as JS-side {{PLURAL}}
 129+ // Should be OK for now in a limited deployment scenario
 130+ $escapedMessageValue = Xml::escapeJsString( wfMsgExt( $message, array( 'parseinline' ) ) );
 131+ $escapedMessageKey = Xml::escapeJsString( $message );
 132+ self::$messages[$i] =
 133+ "'{$escapedMessageKey}':'{$escapedMessageValue}'";
 134+ }
 135+ // Add javascript to document
 136+ if ( count( self::$messages ) > 0 ) {
 137+ $out->addScript( Html::inlineScript(
 138+ '$j.ArticleAssessment.fn.addMessages({' . implode( ',', self::$messages ) . '});'
 139+ ) );
 140+ }
 141+
 142+ return true;
 143+ }
 144+
 145+ /**
 146+ * Returns whether an article is in the specified category
 147+ *
 148+ * @param $articleId Integer: Article ID
 149+ * @param $category String: The category name (without Category: prefix, with underscores)
 150+ *
 151+ * @return bool
 152+ */
 153+ private static function isInCategory( $articleId, $category ) {
 154+ $dbr = wfGetDB( DB_SLAVE );
 155+ return (bool)$dbr->selectRow( 'categorylinks', '1',
 156+ array(
 157+ 'cl_from' => $articleId,
 158+ 'cl_to' => $category,
 159+ ),
 160+ __METHOD__
 161+ );
 162+ }
 163+}
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/ArticleAssessmentPilot.hooks.php
___________________________________________________________________
Added: svn:eol-style
1164 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/api/ApiQueryArticleAssessment.php
@@ -0,0 +1,171 @@
 2+<?php
 3+class ApiQueryArticleAssessment extends ApiQueryBase {
 4+ public function __construct( $query, $moduleName ) {
 5+ parent::__construct( $query, $moduleName, 'aa' );
 6+ }
 7+
 8+ public function execute() {
 9+ global $wgArticleAssessmentRatings;
 10+ $params = $this->extractRequestParams();
 11+
 12+ $result = $this->getResult();
 13+
 14+ $this->addTables( array( 'article_assessment_pages', 'article_assessment_ratings' ) );
 15+
 16+ $this->addFields( array( 'aap_page_id', 'aap_total', 'aap_count', 'aap_rating_id', 'aar_rating' ) );
 17+
 18+ $this->addJoinConds( array(
 19+ 'article_assessment_ratings' => array( 'LEFT JOIN', array(
 20+ 'aar_id=aap_rating_id',
 21+ 'aap_rating_id' => $wgArticleAssessmentRatings,
 22+ )
 23+ ),
 24+ ) );
 25+
 26+ $this->addWhereFld( 'aap_page_id', $params['pageid'] );
 27+
 28+ if ( $params['userrating'] ) {
 29+ global $wgUser;
 30+
 31+ $leftJoinConds = array(
 32+ 'aa_page_id=aap_page_id',
 33+ 'aa_rating_id=aap_rating_id',
 34+ 'aa_user_id=' . $wgUser->getId() );
 35+
 36+ if ( $wgUser->isAnon() ) {
 37+ if ( !isset( $params['anontoken'] ) ) {
 38+ $this->dieUsageMsg( array( 'missingparam', 'anontoken' ) );
 39+ } elseif ( strlen( $params['anontoken'] ) != 32 ) {
 40+ $this->dieUsage( 'The anontoken is not 32 characters', 'invalidtoken' );
 41+ }
 42+
 43+ $leftJoinConds['aa_user_anon_token'] = $params['anontoken'];
 44+ }
 45+
 46+ $this->addTables( 'article_assessment' );
 47+ $this->addJoinConds( array(
 48+ 'article_assessment' => array( 'LEFT JOIN', $leftJoinConds ),
 49+ )
 50+ );
 51+
 52+ $this->addFields( array( 'aa_rating_value', 'aa_revision' ) );
 53+
 54+ $this->addOption( 'ORDER BY', 'aa_revision DESC' );
 55+ }
 56+
 57+ $this->addOption( 'LIMIT', count( $wgArticleAssessmentRatings ) );
 58+
 59+ $res = $this->select( __METHOD__ );
 60+
 61+ $ratings = array();
 62+
 63+ $userRatedArticle = false;
 64+
 65+ foreach ( $res as $row ) {
 66+ $pageId = $row->aap_page_id;
 67+
 68+ if ( !isset( $ratings[$pageId] ) ) {
 69+ $page = array(
 70+ 'pageid' => $pageId,
 71+ );
 72+
 73+ if ( $params['userrating'] ) {
 74+ $page['revid'] = $row->aa_revision;
 75+ }
 76+
 77+ $ratings[$pageId] = $page;
 78+ }
 79+
 80+ $thisRow = array(
 81+ 'ratingid' => $row->aap_rating_id,
 82+ 'ratingdesc' => $row->aar_rating,
 83+ 'total' => $row->aap_total,
 84+ 'count' => $row->aap_count,
 85+ );
 86+
 87+ if ( $params['userrating'] && !is_null( $row->aa_rating_value ) ) {
 88+ $thisRow['userrating'] = $row->aa_rating_value;
 89+
 90+ $userRatedArticle = true;
 91+ }
 92+
 93+ $ratings[$pageId]['ratings'][] = $thisRow;
 94+ }
 95+
 96+ //Only can actually be "stale" if the user has rated the article before
 97+ if ( $params['userrating'] && $userRatedArticle ) {
 98+ $dbr = wfGetDb( DB_SLAVE );
 99+
 100+ global $wgArticleAssessmentStaleCount;
 101+
 102+ $res = $dbr->select(
 103+ 'revision',
 104+ 'rev_id',
 105+ array(
 106+ 'rev_page' => $params['pageid'],
 107+ 'rev_id > ' . $ratings[$pageId]['revid']
 108+ ),
 109+ __METHOD__,
 110+ array ( 'LIMIT', $wgArticleAssessmentStaleCount + 1 )
 111+ );
 112+
 113+ if ( $res && $dbr->numRows( $res ) > $wgArticleAssessmentStaleCount ) {
 114+ //it's stale!
 115+ $ratings[$params['pageid']]['stale'] = '';
 116+ }
 117+ }
 118+
 119+ foreach ( $ratings as $rat ) {
 120+ $result->setIndexedTagName( $rat['ratings'], 'r' );
 121+ $result->addValue( array( 'query', $this->getModuleName() ), null, $rat );
 122+ }
 123+
 124+ $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'aa' );
 125+ }
 126+
 127+ public function getAllowedParams() {
 128+ return array(
 129+ 'pageid' => array(
 130+ ApiBase::PARAM_REQUIRED => true,
 131+ ApiBase::PARAM_ISMULTI => false,
 132+ ApiBase::PARAM_TYPE => 'integer',
 133+ ),
 134+ 'userrating' => false,
 135+ 'anontoken' => null,
 136+ );
 137+ }
 138+
 139+ public function getParamDescription() {
 140+ return array(
 141+ 'pageid' => 'Page ID to get assessments for',
 142+ 'userrating' => "Whether to get the current user's ratings for the specific rev/article",
 143+ 'anontoken' => 'Token for anonymous users',
 144+ );
 145+ }
 146+
 147+ public function getDescription() {
 148+ return array(
 149+ 'List all article assessments'
 150+ );
 151+ }
 152+
 153+ public function getPossibleErrors() {
 154+ return array_merge( parent::getPossibleErrors(), array(
 155+ array( 'missingparam', 'anontoken' ),
 156+ array( 'code' => 'invalidtoken', 'info' => 'The anontoken is not 32 characters' ),
 157+ )
 158+ );
 159+ }
 160+
 161+ protected function getExamples() {
 162+ return array(
 163+ 'api.php?action=query&list=articleassessment',
 164+ 'api.php?action=query&list=articleassessment&aapageid=1',
 165+ 'api.php?action=query&list=articleassessment&aapageid=1&aauserrating',
 166+ );
 167+ }
 168+
 169+ public function getVersion() {
 170+ return __CLASS__ . ': $Id$';
 171+ }
 172+}
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/api/ApiQueryArticleAssessment.php
___________________________________________________________________
Added: svn:keywords
1173 + Id
Added: svn:eol-style
2174 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/api/ApiArticleAssessment.php
@@ -0,0 +1,237 @@
 2+<?php
 3+class ApiArticleAssessment extends ApiBase {
 4+ public function __construct( $query, $moduleName ) {
 5+ parent::__construct( $query, $moduleName, '' );
 6+ }
 7+
 8+ public function execute() {
 9+ global $wgUser, $wgArticleAssessmentRatings;
 10+ $params = $this->extractRequestParams();
 11+
 12+ $token = array();
 13+ if ( $wgUser->isAnon() ) {
 14+ if ( !isset( $params['anontoken'] ) ) {
 15+ $this->dieUsageMsg( array( 'missingparam', 'anontoken' ) );
 16+ } elseif ( strlen( $params['anontoken'] ) != 32 ) {
 17+ $this->dieUsage( 'The anontoken is not 32 characters', 'invalidtoken' );
 18+ }
 19+
 20+ $token['aa_user_anon_token'] = $params['anontoken'];
 21+ }
 22+
 23+ $dbr = wfGetDB( DB_SLAVE );
 24+
 25+ // Query the latest ratings by this user for this page,
 26+ // possibly for an older revision
 27+ $res = $dbr->select(
 28+ 'article_assessment',
 29+ array( 'aa_rating_id', 'aa_rating_value', 'aa_revision' ),
 30+ array_merge(
 31+ array(
 32+ 'aa_user_id' => $wgUser->getId(),
 33+ 'aa_user_text' => $wgUser->getName(),
 34+ 'aa_page_id' => $params['pageid'],
 35+ 'aa_rating_id' => $wgArticleAssessmentRatings,
 36+ ),
 37+ $token
 38+ ),
 39+ __METHOD__,
 40+ array(
 41+ 'ORDER BY' => 'aa_revision DESC',
 42+ 'LIMIT' => count( $wgArticleAssessmentRatings ),
 43+ )
 44+ );
 45+
 46+ $lastRatings = array();
 47+
 48+ foreach ( $res as $row ) {
 49+ $lastRatings[$row->aa_rating_id] = $row->aa_rating_value;
 50+ }
 51+
 52+ $pageId = $params['pageid'];
 53+ $revisionId = $params['revid'];
 54+
 55+ foreach( $wgArticleAssessmentRatings as $rating ) {
 56+ $lastRating = false;
 57+ if ( isset( $lastRatings[$rating] ) ) {
 58+ $lastRating = $lastRatings[$rating];
 59+ }
 60+
 61+ $thisRating = false;
 62+ if ( isset( $params["r{$rating}"] ) ) {
 63+ $thisRating = $params["r{$rating}"];
 64+ }
 65+
 66+ $this->insertPageRating( $pageId, $rating, ( $thisRating - $lastRating ),
 67+ ( $lastRating === false && $thisRating !== false )
 68+ );
 69+
 70+ $this->insertUserRatings( $pageId, $revisionId, $wgUser, $token, $rating, $thisRating );
 71+ }
 72+
 73+ $r = array( 'result' => 'Success' );
 74+ $this->getResult()->addValue( null, $this->getModuleName(), $r );
 75+ }
 76+
 77+ /**
 78+ * Inserts (or Updates, where appropriate) the aggregate page rating
 79+ *
 80+ * @param $pageId Integer: Page Id
 81+ * @param $ratingId Integer: Rating Id
 82+ * @param $updateAddition Integer: Difference between user's last rating (if applicable)
 83+ * @param $newRating Boolean: Whether this is a new rating (for update, whether this increases the count)
 84+ */
 85+ private function insertPageRating( $pageId, $ratingId, $updateAddition, $newRating ) {
 86+ $dbw = wfGetDB( DB_MASTER );
 87+
 88+ $dbw->insert(
 89+ 'article_assessment_pages',
 90+ array(
 91+ 'aap_page_id' => $pageId,
 92+ 'aap_total' => 0,
 93+ 'aap_count' => 0,
 94+ 'aap_rating_id' => $ratingId,
 95+ ),
 96+ __METHOD__,
 97+ array( 'IGNORE' )
 98+ );
 99+
 100+ $dbw->update(
 101+ 'article_assessment_pages',
 102+ array(
 103+ 'aap_total = aap_total + ' . $updateAddition,
 104+ 'aap_count = aap_count + ' . ( $newRating ? 1 : 0 ),
 105+ ),
 106+ array(
 107+ 'aap_page_id' => $pageId,
 108+ 'aap_rating_id' => $ratingId,
 109+ ),
 110+ __METHOD__
 111+ );
 112+ }
 113+
 114+ /**
 115+ * Inserts (or Updates, where appropriate) the users ratings for a specific revision
 116+ *
 117+ * @param $pageId Integer: Page Id
 118+ * @param $revisionId Integer: Revision Id
 119+ * @param $user User: Current User object
 120+ * @param $token Array: Token if necessary
 121+ * @param $ratingId Integer: Rating Id
 122+ * @param $ratingValue Integer: Value of the Rating
 123+ */
 124+ private function insertUserRatings( $pageId, $revisionId, $user, $token, $ratingId, $ratingValue ) {
 125+ $dbw = wfGetDB( DB_MASTER );
 126+
 127+ $timestamp = $dbw->timestamp();
 128+
 129+ $dbw->insert(
 130+ 'article_assessment',
 131+ array_merge(
 132+ array(
 133+ 'aa_page_id' => $pageId,
 134+ 'aa_user_id' => $user->getId(),
 135+ 'aa_user_text' => $user->getName(),
 136+ 'aa_revision' => $revisionId,
 137+ 'aa_timestamp' => $timestamp,
 138+ 'aa_rating_id' => $ratingId,
 139+ 'aa_rating_value' => $ratingValue,
 140+ ),
 141+ $token
 142+ ),
 143+ __METHOD__,
 144+ array( 'IGNORE' )
 145+ );
 146+
 147+ if ( !$dbw->affectedRows() ) {
 148+ $dbw->update(
 149+ 'article_assessment',
 150+ array(
 151+ 'aa_timestamp' => $timestamp,
 152+ 'aa_rating_value' => $ratingValue,
 153+ ),
 154+ array_merge(
 155+ array(
 156+ 'aa_page_id' => $pageId,
 157+ 'aa_user_text' => $user->getName(),
 158+ 'aa_revision' => $revisionId,
 159+ 'aa_rating_id' => $ratingId,
 160+ ),
 161+ $token
 162+ ),
 163+ __METHOD__
 164+ );
 165+ }
 166+ }
 167+
 168+ public function getAllowedParams() {
 169+ global $wgArticleAssessmentRatings;
 170+ $ret = array(
 171+ 'pageid' => array(
 172+ ApiBase::PARAM_TYPE => 'integer',
 173+ ApiBase::PARAM_REQUIRED => true,
 174+ ApiBase::PARAM_ISMULTI => false,
 175+ ),
 176+ 'revid' => array(
 177+ ApiBase::PARAM_TYPE => 'integer',
 178+ ApiBase::PARAM_REQUIRED => true,
 179+ ApiBase::PARAM_ISMULTI => false,
 180+ ),
 181+ 'anontoken' => null,
 182+ );
 183+
 184+ foreach( $wgArticleAssessmentRatings as $rating ) {
 185+ $ret["r{$rating}"] = array(
 186+ ApiBase::PARAM_TYPE => 'integer',
 187+ ApiBase::PARAM_DFLT => 0,
 188+ ApiBase::PARAM_MIN => 0,
 189+ ApiBase::PARAM_MAX => 5,
 190+ );
 191+ }
 192+ return $ret;
 193+ }
 194+
 195+ public function getParamDescription() {
 196+ global $wgArticleAssessmentRatings;
 197+ $ret = array(
 198+ 'pageid' => 'Page ID to submit assessment for',
 199+ 'revid' => 'Revision ID to submit assessment for',
 200+ 'anontoken' => 'Token for anonymous users',
 201+ );
 202+ foreach( $wgArticleAssessmentRatings as $rating ) {
 203+ $ret["r{$rating}"] = "Rating {$rating}";
 204+ }
 205+ return $ret;
 206+ }
 207+
 208+ public function getDescription() {
 209+ return array(
 210+ 'Submit article assessments'
 211+ );
 212+ }
 213+
 214+ public function mustBePosted() {
 215+ return true;
 216+ }
 217+
 218+ public function isWriteMode() {
 219+ return true;
 220+ }
 221+
 222+ public function getPossibleErrors() {
 223+ return array_merge( parent::getPossibleErrors(), array(
 224+ array( 'missingparam', 'anontoken' ),
 225+ array( 'code' => 'invalidtoken', 'info' => 'The anontoken is not 32 characters' ),
 226+ ) );
 227+ }
 228+
 229+ protected function getExamples() {
 230+ return array(
 231+ 'api.php?action=articleassessment'
 232+ );
 233+ }
 234+
 235+ public function getVersion() {
 236+ return __CLASS__ . ': $Id$';
 237+ }
 238+}
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/api/ApiArticleAssessment.php
___________________________________________________________________
Added: svn:keywords
1239 + Id
Added: svn:eol-style
2240 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.tipsy.js
@@ -0,0 +1,202 @@
 2+// tipsy, facebook style tooltips for jquery
 3+// version 1.0.0a
 4+// (c) 2008-2010 jason frame [jason@onehackoranother.com]
 5+// released under the MIT license
 6+
 7+(function($) {
 8+
 9+ function Tipsy(element, options) {
 10+ this.$element = $(element);
 11+ this.options = options;
 12+ this.enabled = true;
 13+ this.fixTitle();
 14+ }
 15+
 16+ Tipsy.prototype = {
 17+ show: function() {
 18+ var title = this.getTitle();
 19+ if (title && this.enabled) {
 20+ var $tip = this.tip();
 21+
 22+ $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title);
 23+ $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity
 24+ $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).appendTo(document.body);
 25+
 26+ var pos = $.extend({}, this.$element.offset(), {
 27+ width: this.$element[0].offsetWidth,
 28+ height: this.$element[0].offsetHeight
 29+ });
 30+
 31+ var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight;
 32+ var gravity = (typeof this.options.gravity == 'function')
 33+ ? this.options.gravity.call(this.$element[0])
 34+ : this.options.gravity;
 35+
 36+ var tp;
 37+ switch (gravity.charAt(0)) {
 38+ case 'n':
 39+ tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
 40+ break;
 41+ case 's':
 42+ tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2};
 43+ break;
 44+ case 'e':
 45+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset};
 46+ break;
 47+ case 'w':
 48+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset};
 49+ break;
 50+ }
 51+
 52+ if (gravity.length == 2) {
 53+ if (gravity.charAt(1) == 'w') {
 54+ tp.left = pos.left + pos.width / 2 - 15;
 55+ } else {
 56+ tp.left = pos.left + pos.width / 2 - actualWidth + 15;
 57+ }
 58+ }
 59+
 60+ $tip.css(tp).addClass('tipsy-' + gravity);
 61+
 62+ if (this.options.fade) {
 63+ $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity});
 64+ } else {
 65+ $tip.css({visibility: 'visible', opacity: this.options.opacity});
 66+ }
 67+ }
 68+ },
 69+
 70+ hide: function() {
 71+ if (this.options.fade) {
 72+ this.tip().stop().fadeOut(function() { $(this).remove(); });
 73+ } else {
 74+ this.tip().remove();
 75+ }
 76+ },
 77+
 78+ fixTitle: function() {
 79+ var $e = this.$element;
 80+ if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') {
 81+ $e.attr('original-title', $e.attr('title') || '').removeAttr('title');
 82+ }
 83+ },
 84+
 85+ getTitle: function() {
 86+ var title, $e = this.$element, o = this.options;
 87+ this.fixTitle();
 88+ var title, o = this.options;
 89+ if (typeof o.title == 'string') {
 90+ title = $e.attr(o.title == 'title' ? 'original-title' : o.title);
 91+ } else if (typeof o.title == 'function') {
 92+ title = o.title.call($e[0]);
 93+ }
 94+ title = ('' + title).replace(/(^\s*|\s*$)/, "");
 95+ return title || o.fallback;
 96+ },
 97+
 98+ tip: function() {
 99+ if (!this.$tip) {
 100+ this.$tip = $('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>');
 101+ }
 102+ return this.$tip;
 103+ },
 104+
 105+ validate: function() {
 106+ if (!this.$element[0].parentNode) {
 107+ this.hide();
 108+ this.$element = null;
 109+ this.options = null;
 110+ }
 111+ },
 112+
 113+ enable: function() { this.enabled = true; },
 114+ disable: function() { this.enabled = false; },
 115+ toggleEnabled: function() { this.enabled = !this.enabled; }
 116+ };
 117+
 118+ $.fn.tipsy = function(options) {
 119+
 120+ if (options === true) {
 121+ return this.data('tipsy');
 122+ } else if (typeof options == 'string') {
 123+ var tipsy = this.data('tipsy');
 124+ if (tipsy) tipsy[options]();
 125+ return this;
 126+ }
 127+
 128+ options = $.extend({}, $.fn.tipsy.defaults, options);
 129+
 130+ function get(ele) {
 131+ var tipsy = $.data(ele, 'tipsy');
 132+ if (!tipsy) {
 133+ tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));
 134+ $.data(ele, 'tipsy', tipsy);
 135+ }
 136+ return tipsy;
 137+ }
 138+
 139+ function enter() {
 140+ var tipsy = get(this);
 141+ tipsy.hoverState = 'in';
 142+ if (options.delayIn == 0) {
 143+ tipsy.show();
 144+ } else {
 145+ tipsy.fixTitle();
 146+ setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn);
 147+ }
 148+ };
 149+
 150+ function leave() {
 151+ var tipsy = get(this);
 152+ tipsy.hoverState = 'out';
 153+ if (options.delayOut == 0) {
 154+ tipsy.hide();
 155+ } else {
 156+ setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut);
 157+ }
 158+ };
 159+
 160+ if (!options.live) this.each(function() { get(this); });
 161+
 162+ if (options.trigger != 'manual') {
 163+ var binder = options.live ? 'live' : 'bind',
 164+ eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus',
 165+ eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur';
 166+ this[binder](eventIn, enter)[binder](eventOut, leave);
 167+ }
 168+
 169+ return this;
 170+
 171+ };
 172+
 173+ $.fn.tipsy.defaults = {
 174+ delayIn: 0,
 175+ delayOut: 0,
 176+ fade: false,
 177+ fallback: '',
 178+ gravity: 'n',
 179+ html: false,
 180+ live: false,
 181+ offset: 0,
 182+ opacity: 0.8,
 183+ title: 'title',
 184+ trigger: 'hover'
 185+ };
 186+
 187+ // Overwrite this method to provide options on a per-element basis.
 188+ // For example, you could store the gravity in a 'tipsy-gravity' attribute:
 189+ // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });
 190+ // (remember - do not modify 'options' in place!)
 191+ $.fn.tipsy.elementOptions = function(ele, options) {
 192+ return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;
 193+ };
 194+
 195+ $.fn.tipsy.autoNS = function() {
 196+ return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n';
 197+ };
 198+
 199+ $.fn.tipsy.autoWE = function() {
 200+ return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w';
 201+ };
 202+
 203+})(jQuery);
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.tipsy.js
___________________________________________________________________
Added: svn:eol-style
1204 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.cookie.js
@@ -0,0 +1,97 @@
 2+/**
 3+ * Cookie plugin
 4+ *
 5+ * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 6+ * Dual licensed under the MIT and GPL licenses:
 7+ * http://www.opensource.org/licenses/mit-license.php
 8+ * http://www.gnu.org/licenses/gpl.html
 9+ *
 10+ */
 11+
 12+/**
 13+ * Create a cookie with the given name and value and other optional parameters.
 14+ *
 15+ * @example $.cookie('the_cookie', 'the_value');
 16+ * @desc Set the value of a cookie.
 17+ * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 18+ * @desc Create a cookie with all available options.
 19+ * @example $.cookie('the_cookie', 'the_value');
 20+ * @desc Create a session cookie.
 21+ * @example $.cookie('the_cookie', null);
 22+ * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 23+ * used when the cookie was set.
 24+ *
 25+ * @param String name The name of the cookie.
 26+ * @param String value The value of the cookie.
 27+ * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 28+ * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 29+ * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 30+ * If set to null or omitted, the cookie will be a session cookie and will not be retained
 31+ * when the the browser exits.
 32+ * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 33+ * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 34+ * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 35+ * require a secure protocol (like HTTPS).
 36+ * @type undefined
 37+ *
 38+ * @name $.cookie
 39+ * @cat Plugins/Cookie
 40+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
 41+ */
 42+
 43+/**
 44+ * Get the value of a cookie with the given name.
 45+ *
 46+ * @example $.cookie('the_cookie');
 47+ * @desc Get the value of a cookie.
 48+ *
 49+ * @param String name The name of the cookie.
 50+ * @return The value of the cookie.
 51+ * @type String
 52+ *
 53+ * @name $.cookie
 54+ * @cat Plugins/Cookie
 55+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
 56+ */
 57+jQuery.cookie = function(name, value, options) {
 58+ if (typeof value != 'undefined') { // name and value given, set cookie
 59+ options = options || {};
 60+ if (value === null) {
 61+ value = '';
 62+ options.expires = -1;
 63+ }
 64+ var expires = '';
 65+ if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
 66+ var date;
 67+ if (typeof options.expires == 'number') {
 68+ date = new Date();
 69+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
 70+ } else {
 71+ date = options.expires;
 72+ }
 73+ expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
 74+ }
 75+ // CAUTION: Needed to parenthesize options.path and options.domain
 76+ // in the following expressions, otherwise they evaluate to undefined
 77+ // in the packed version for some reason...
 78+ var path = options.path ? '; path=' + (options.path) : '';
 79+ var domain = options.domain ? '; domain=' + (options.domain) : '';
 80+ var secure = options.secure ? '; secure' : '';
 81+ document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
 82+ } else { // only name given, get cookie
 83+ var cookieValue = null;
 84+ if (document.cookie && document.cookie != '') {
 85+ var cookies = document.cookie.split(';');
 86+ for (var i = 0; i < cookies.length; i++) {
 87+ var cookie = jQuery.trim(cookies[i]);
 88+ // Does this cookie string begin with the name we want?
 89+ if (cookie.substring(0, name.length + 1) == (name + '=')) {
 90+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
 91+ break;
 92+ }
 93+ }
 94+ }
 95+ return cookieValue;
 96+ }
 97+};
 98+
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.cookie.js
___________________________________________________________________
Added: svn:eol-style
199 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jui.combined.min.js
@@ -0,0 +1,345 @@
 2+;jQuery.ui||(function($){var _remove=$.fn.remove,isFF2=$.browser.mozilla&&(parseFloat($.browser.version)<1.9);$.ui={version:"1.7.1",plugin:{add:function(module,option,set){var proto=$.ui[module].prototype;for(var i in set){proto.plugins[i]=proto.plugins[i]||[];proto.plugins[i].push([option,set[i]]);}},call:function(instance,name,args){var set=instance.plugins[name];if(!set||!instance.element[0].parentNode){return;}
 3+for(var i=0;i<set.length;i++){if(instance.options[set[i][0]]){set[i][1].apply(instance.element,args);}}}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b);},hasScroll:function(el,a){if($(el).css('overflow')=='hidden'){return false;}
 4+var scroll=(a&&a=='left')?'scrollLeft':'scrollTop',has=false;if(el[scroll]>0){return true;}
 5+el[scroll]=1;has=(el[scroll]>0);el[scroll]=0;return has;},isOverAxis:function(x,reference,size){return(x>reference)&&(x<(reference+size));},isOver:function(y,x,top,left,height,width){return $.ui.isOverAxis(y,top,height)&&$.ui.isOverAxis(x,left,width);},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(isFF2){var attr=$.attr,removeAttr=$.fn.removeAttr,ariaNS="http://www.w3.org/2005/07/aaa",ariaState=/^aria-/,ariaRole=/^wairole:/;$.attr=function(elem,name,value){var set=value!==undefined;return(name=='role'?(set?attr.call(this,elem,name,"wairole:"+value):(attr.apply(this,arguments)||"").replace(ariaRole,"")):(ariaState.test(name)?(set?elem.setAttributeNS(ariaNS,name.replace(ariaState,"aaa:"),value):attr.call(this,elem,name.replace(ariaState,"aaa:"))):attr.apply(this,arguments)));};$.fn.removeAttr=function(name){return(ariaState.test(name)?this.each(function(){this.removeAttributeNS(ariaNS,name.replace(ariaState,""));}):removeAttr.call(this,name));};}
 6+$.fn.extend({remove:function(){$("*",this).add(this).each(function(){$(this).triggerHandler("remove");});return _remove.apply(this,arguments);},enableSelection:function(){return this.attr('unselectable','off').css('MozUserSelect','').unbind('selectstart.ui');},disableSelection:function(){return this.attr('unselectable','on').css('MozUserSelect','none').bind('selectstart.ui',function(){return false;});},scrollParent:function(){var scrollParent;if(($.browser.msie&&(/(static|relative)/).test(this.css('position')))||(/absolute/).test(this.css('position'))){scrollParent=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test($.curCSS(this,'position',1))&&(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}else{scrollParent=this.parents().filter(function(){return(/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));}).eq(0);}
 7+return(/fixed/).test(this.css('position'))||!scrollParent.length?$(document):scrollParent;}});$.extend($.expr[':'],{data:function(elem,i,match){return!!$.data(elem,match[3]);},focusable:function(element){var nodeName=element.nodeName.toLowerCase(),tabIndex=$.attr(element,'tabindex');return(/input|select|textarea|button|object/.test(nodeName)?!element.disabled:'a'==nodeName||'area'==nodeName?element.href||!isNaN(tabIndex):!isNaN(tabIndex))&&!$(element)['area'==nodeName?'parents':'closest'](':hidden').length;},tabbable:function(element){var tabIndex=$.attr(element,'tabindex');return(isNaN(tabIndex)||tabIndex>=0)&&$(element).is(':focusable');}});function getter(namespace,plugin,method,args){function getMethods(type){var methods=$[namespace][plugin][type]||[];return(typeof methods=='string'?methods.split(/,?\s+/):methods);}
 8+var methods=getMethods('getter');if(args.length==1&&typeof args[0]=='string'){methods=methods.concat(getMethods('getterSetter'));}
 9+return($.inArray(method,methods)!=-1);}
 10+$.widget=function(name,prototype){var namespace=name.split(".")[0];name=name.split(".")[1];$.fn[name]=function(options){var isMethodCall=(typeof options=='string'),args=Array.prototype.slice.call(arguments,1);if(isMethodCall&&options.substring(0,1)=='_'){return this;}
 11+if(isMethodCall&&getter(namespace,name,options,args)){var instance=$.data(this[0],name);return(instance?instance[options].apply(instance,args):undefined);}
 12+return this.each(function(){var instance=$.data(this,name);(!instance&&!isMethodCall&&$.data(this,name,new $[namespace][name](this,options))._init());(instance&&isMethodCall&&$.isFunction(instance[options])&&instance[options].apply(instance,args));});};$[namespace]=$[namespace]||{};$[namespace][name]=function(element,options){var self=this;this.namespace=namespace;this.widgetName=name;this.widgetEventPrefix=$[namespace][name].eventPrefix||name;this.widgetBaseClass=namespace+'-'+name;this.options=$.extend({},$.widget.defaults,$[namespace][name].defaults,$.metadata&&$.metadata.get(element)[name],options);this.element=$(element).bind('setData.'+name,function(event,key,value){if(event.target==element){return self._setData(key,value);}}).bind('getData.'+name,function(event,key){if(event.target==element){return self._getData(key);}}).bind('remove',function(){return self.destroy();});};$[namespace][name].prototype=$.extend({},$.widget.prototype,prototype);$[namespace][name].getterSetter='option';};$.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+'-disabled'+' '+this.namespace+'-state-disabled').removeAttr('aria-disabled');},option:function(key,value){var options=key,self=this;if(typeof key=="string"){if(value===undefined){return this._getData(key);}
 13+options={};options[key]=value;}
 14+$.each(options,function(key,value){self._setData(key,value);});},_getData:function(key){return this.options[key];},_setData:function(key,value){this.options[key]=value;if(key=='disabled'){this.element
 15+[value?'addClass':'removeClass'](this.widgetBaseClass+'-disabled'+' '+
 16+this.namespace+'-state-disabled').attr("aria-disabled",value);}},enable:function(){this._setData('disabled',false);},disable:function(){this._setData('disabled',true);},_trigger:function(type,event,data){var callback=this.options[type],eventName=(type==this.widgetEventPrefix?type:this.widgetEventPrefix+type);event=$.Event(event);event.type=eventName;if(event.originalEvent){for(var i=$.event.props.length,prop;i;){prop=$.event.props[--i];event[prop]=event.originalEvent[prop];}}
 17+this.element.trigger(event,data);return!($.isFunction(callback)&&callback.call(this.element[0],event,data)===false||event.isDefaultPrevented());}};$.widget.defaults={disabled:false};$.ui.mouse={_mouseInit:function(){var self=this;this.element.bind('mousedown.'+this.widgetName,function(event){return self._mouseDown(event);}).bind('click.'+this.widgetName,function(event){if(self._preventClickEvent){self._preventClickEvent=false;event.stopImmediatePropagation();return false;}});if($.browser.msie){this._mouseUnselectable=this.element.attr('unselectable');this.element.attr('unselectable','on');}
 18+this.started=false;},_mouseDestroy:function(){this.element.unbind('.'+this.widgetName);($.browser.msie&&this.element.attr('unselectable',this._mouseUnselectable));},_mouseDown:function(event){event.originalEvent=event.originalEvent||{};if(event.originalEvent.mouseHandled){return;}
 19+(this._mouseStarted&&this._mouseUp(event));this._mouseDownEvent=event;var self=this,btnIsLeft=(event.which==1),elIsCancel=(typeof this.options.cancel=="string"?$(event.target).parents().add(event.target).filter(this.options.cancel).length:false);if(!btnIsLeft||elIsCancel||!this._mouseCapture(event)){return true;}
 20+this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){self.mouseDelayMet=true;},this.options.delay);}
 21+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(event)!==false);if(!this._mouseStarted){event.preventDefault();return true;}}
 22+this._mouseMoveDelegate=function(event){return self._mouseMove(event);};this._mouseUpDelegate=function(event){return self._mouseUp(event);};$(document).bind('mousemove.'+this.widgetName,this._mouseMoveDelegate).bind('mouseup.'+this.widgetName,this._mouseUpDelegate);($.browser.safari||event.preventDefault());event.originalEvent.mouseHandled=true;return true;},_mouseMove:function(event){if($.browser.msie&&!event.button){return this._mouseUp(event);}
 23+if(this._mouseStarted){this._mouseDrag(event);return event.preventDefault();}
 24+if(this._mouseDistanceMet(event)&&this._mouseDelayMet(event)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,event)!==false);(this._mouseStarted?this._mouseDrag(event):this._mouseUp(event));}
 25+return!this._mouseStarted;},_mouseUp:function(event){$(document).unbind('mousemove.'+this.widgetName,this._mouseMoveDelegate).unbind('mouseup.'+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(event.target==this._mouseDownEvent.target);this._mouseStop(event);}
 26+return false;},_mouseDistanceMet:function(event){return(Math.max(Math.abs(this._mouseDownEvent.pageX-event.pageX),Math.abs(this._mouseDownEvent.pageY-event.pageY))>=this.options.distance);},_mouseDelayMet:function(event){return this.mouseDelayMet;},_mouseStart:function(event){},_mouseDrag:function(event){},_mouseStop:function(event){},_mouseCapture:function(event){return true;}};$.ui.mouse.defaults={cancel:null,distance:1,delay:0};})(jQuery);(function($){$.extend($.ui,{datepicker:{version:"1.7.1"}});var PROP_NAME='datepicker';function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId='ui-datepicker-div';this._inlineClass='ui-datepicker-inline';this._appendClass='ui-datepicker-append';this._triggerClass='ui-datepicker-trigger';this._dialogClass='ui-datepicker-dialog';this._disableClass='ui-datepicker-disabled';this._unselectableClass='ui-datepicker-unselectable';this._currentClass='ui-datepicker-current-day';this._dayOverClass='ui-datepicker-days-cell-over';this.regional=[];this.regional['']={closeText:'Done',prevText:'Prev',nextText:'Next',currentText:'Today',monthNames:['January','February','March','April','May','June','July','August','September','October','November','December'],monthNamesShort:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],dayNames:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],dayNamesShort:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],dayNamesMin:['Su','Mo','Tu','We','Th','Fr','Sa'],dateFormat:'mm/dd/yy',firstDay:0,isRTL:false};this._defaults={showOn:'focus',showAnim:'show',showOptions:{},defaultDate:null,appendText:'',buttonText:'...',buttonImage:'',buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:'-10:+10',showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:'+10',minDate:null,maxDate:null,duration:'normal',beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:'',altFormat:'',constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional['']);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');}
 27+$.extend(Datepicker.prototype,{markerClassName:'hasDatepicker',log:function(){if(this.debug)
 28+console.log.apply('',arguments);},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this;},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute('date:'+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue);}catch(err){inlineSettings[attrName]=attrValue;}}}
 29+var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=='div'||nodeName=='span');if(!target.id)
 30+target.id='dp'+(++this.uuid);var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=='input'){this._connectDatepicker(target,inst);}else if(inline){this._inlineDatepicker(target,inst);}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,'\\\\$1');return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};},_connectDatepicker:function(target,inst){var input=$(target);inst.trigger=$([]);if(input.hasClass(this.markerClassName))
 31+return;var appendText=this._get(inst,'appendText');var isRTL=this._get(inst,'isRTL');if(appendText)
 32+input[isRTL?'before':'after']('<span class="'+this._appendClass+'">'+appendText+'</span>');var showOn=this._get(inst,'showOn');if(showOn=='focus'||showOn=='both')
 33+input.focus(this._showDatepicker);if(showOn=='button'||showOn=='both'){var buttonText=this._get(inst,'buttonText');var buttonImage=this._get(inst,'buttonImage');inst.trigger=$(this._get(inst,'buttonImageOnly')?$('<img/>').addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==''?buttonText:$('<img/>').attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?'before':'after'](inst.trigger);inst.trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target)
 34+$.datepicker._hideDatepicker();else
 35+$.datepicker._showDatepicker(target);return false;});}
 36+input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName))
 37+return;divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value;}).bind("getData.datepicker",function(event,key){return this._get(inst,key);});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst);},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id='dp'+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$('body').append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst);}
 38+extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY];}
 39+this._dialogInput.css('left',this._pos[0]+'px').css('top',this._pos[1]+'px');inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI)
 40+$.blockUI(this.dpDiv);$.data(this._dialogInput[0],PROP_NAME,inst);return this;},_destroyDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
 41+var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=='input'){inst.trigger.remove();$target.siblings('.'+this._appendClass).remove().end().removeClass(this.markerClassName).unbind('focus',this._showDatepicker).unbind('keydown',this._doKeyDown).unbind('keypress',this._doKeyPress);}else if(nodeName=='div'||nodeName=='span')
 42+$target.removeClass(this.markerClassName).empty();},_enableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
 43+var nodeName=target.nodeName.toLowerCase();if(nodeName=='input'){target.disabled=false;inst.trigger.filter("button").each(function(){this.disabled=false;}).end().filter("img").css({opacity:'1.0',cursor:''});}
 44+else if(nodeName=='div'||nodeName=='span'){var inline=$target.children('.'+this._inlineClass);inline.children().removeClass('ui-state-disabled');}
 45+this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});},_disableDatepicker:function(target){var $target=$(target);var inst=$.data(target,PROP_NAME);if(!$target.hasClass(this.markerClassName)){return;}
 46+var nodeName=target.nodeName.toLowerCase();if(nodeName=='input'){target.disabled=true;inst.trigger.filter("button").each(function(){this.disabled=true;}).end().filter("img").css({opacity:'0.5',cursor:'default'});}
 47+else if(nodeName=='div'||nodeName=='span'){var inline=$target.children('.'+this._inlineClass);inline.children().addClass('ui-state-disabled');}
 48+this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value);});this._disabledInputs[this._disabledInputs.length]=target;},_isDisabledDatepicker:function(target){if(!target){return false;}
 49+for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target)
 50+return true;}
 51+return false;},_getInst:function(target){try{return $.data(target,PROP_NAME);}
 52+catch(err){throw'Missing instance data for this datepicker';}},_optionDatepicker:function(target,name,value){var settings=name||{};if(typeof name=='string'){settings={};settings[name]=value;}
 53+var inst=this._getInst(target);if(inst){if(this._curInst==inst){this._hideDatepicker(null);}
 54+extendRemove(inst.settings,settings);var date=new Date();extendRemove(inst,{rangeStart:null,endDay:null,endMonth:null,endYear:null,selectedDay:date.getDate(),selectedMonth:date.getMonth(),selectedYear:date.getFullYear(),currentDay:date.getDate(),currentMonth:date.getMonth(),currentYear:date.getFullYear(),drawMonth:date.getMonth(),drawYear:date.getFullYear()});this._updateDatepicker(inst);}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value);},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst);}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst);}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline)
 55+this._setDateFromField(inst);return(inst?this._getDate(inst):null);},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is('.ui-datepicker-rtl');inst._keyEvent=true;if($.datepicker._datepickerShowing)
 56+switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,'');break;case 13:var sel=$('td.'+$.datepicker._dayOverClass+', td.'+$.datepicker._currentClass,inst.dpDiv);if(sel[0])
 57+$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0]);else
 58+$.datepicker._hideDatepicker(null,$.datepicker._get(inst,'duration'));return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,'duration'));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,'stepBigMonths'):-$.datepicker._get(inst,'stepMonths')),'M');break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,'stepBigMonths'):+$.datepicker._get(inst,'stepMonths')),'M');break;case 35:if(event.ctrlKey||event.metaKey)$.datepicker._clearDate(event.target);handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey)$.datepicker._gotoToday(event.target);handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,(isRTL?+1:-1),'D');handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey)$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,'stepBigMonths'):-$.datepicker._get(inst,'stepMonths')),'M');break;case 38:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,-7,'D');handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,(isRTL?-1:+1),'D');handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey)$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,'stepBigMonths'):+$.datepicker._get(inst,'stepMonths')),'M');break;case 40:if(event.ctrlKey||event.metaKey)$.datepicker._adjustDate(event.target,+7,'D');handled=event.ctrlKey||event.metaKey;break;default:handled=false;}
 59+else if(event.keyCode==36&&event.ctrlKey)
 60+$.datepicker._showDatepicker(this);else{handled=false;}
 61+if(handled){event.preventDefault();event.stopPropagation();}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,'constrainInput')){var chars=$.datepicker._possibleChars($.datepicker._get(inst,'dateFormat'));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<' '||!chars||chars.indexOf(chr)>-1);}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!='input')
 62+input=$('input',input.parentNode)[0];if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input)
 63+return;var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,'beforeShow');extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,'');$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog)
 64+input.value='';if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight;}
 65+var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css('position')=='fixed';return!isFixed;});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop;}
 66+var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:'absolute',display:'block',top:'-1000px'});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?'static':(isFixed?'fixed':'absolute')),display:'none',left:offset.left+'px',top:offset.top+'px'});if(!inst.inline){var showAnim=$.datepicker._get(inst,'showAnim')||'show';var duration=$.datepicker._get(inst,'duration');var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7)
 67+$('iframe.ui-datepicker-cover').css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4});};if($.effects&&$.effects[showAnim])
 68+inst.dpDiv.show(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else
 69+inst.dpDiv[showAnim](duration,postProcess);if(duration=='')
 70+postProcess();if(inst.input[0].type!='hidden')
 71+inst.input[0].focus();$.datepicker._curInst=inst;}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find('iframe.ui-datepicker-cover').css({width:dims.width,height:dims.height}).end().find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a').bind('mouseout',function(){$(this).removeClass('ui-state-hover');if(this.className.indexOf('ui-datepicker-prev')!=-1)$(this).removeClass('ui-datepicker-prev-hover');if(this.className.indexOf('ui-datepicker-next')!=-1)$(this).removeClass('ui-datepicker-next-hover');}).bind('mouseover',function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');$(this).addClass('ui-state-hover');if(this.className.indexOf('ui-datepicker-prev')!=-1)$(this).addClass('ui-datepicker-prev-hover');if(this.className.indexOf('ui-datepicker-next')!=-1)$(this).addClass('ui-datepicker-next-hover');}}).end().find('.'+this._dayOverClass+' a').trigger('mouseover').end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass('ui-datepicker-multi-'+cols).css('width',(width*cols)+'em');}else{inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');}
 72+inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?'add':'remove')+'Class']('ui-datepicker-multi');inst.dpDiv[(this._get(inst,'isRTL')?'add':'remove')+'Class']('ui-datepicker-rtl');if(inst.input&&inst.input[0].type!='hidden'&&inst==$.datepicker._curInst)
 73+$(inst.input[0]).focus();},_checkOffset:function(inst,offset,isFixed){var dpWidth=inst.dpDiv.outerWidth();var dpHeight=inst.dpDiv.outerHeight();var inputWidth=inst.input?inst.input.outerWidth():0;var inputHeight=inst.input?inst.input.outerHeight():0;var viewWidth=(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)+$(document).scrollLeft();var viewHeight=(window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight)+$(document).scrollTop();offset.left-=(this._get(inst,'isRTL')?(dpWidth-inputWidth):0);offset.left-=(isFixed&&offset.left==inst.input.offset().left)?$(document).scrollLeft():0;offset.top-=(isFixed&&offset.top==(inst.input.offset().top+inputHeight))?$(document).scrollTop():0;offset.left-=(offset.left+dpWidth>viewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0;offset.top-=(offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(offset.top+dpHeight+inputHeight*2-viewHeight):0;return offset;},_findPos:function(obj){while(obj&&(obj.type=='hidden'||obj.nodeType!=1)){obj=obj.nextSibling;}
 74+var position=$(obj).offset();return[position.left,position.top];},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME)))
 75+return;if(inst.stayOpen)
 76+this._selectDate('#'+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,'duration'));var showAnim=this._get(inst,'showAnim');var postProcess=function(){$.datepicker._tidyDialog(inst);};if(duration!=''&&$.effects&&$.effects[showAnim])
 77+inst.dpDiv.hide(showAnim,$.datepicker._get(inst,'showOptions'),duration,postProcess);else
 78+inst.dpDiv[(duration==''?'hide':(showAnim=='slideDown'?'slideUp':(showAnim=='fadeIn'?'fadeOut':'hide')))](duration,postProcess);if(duration=='')
 79+this._tidyDialog(inst);var onClose=this._get(inst,'onClose');if(onClose)
 80+onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():''),inst]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:'absolute',left:'0',top:'-100px'});if($.blockUI){$.unblockUI();$('body').append(this.dpDiv);}}
 81+this._inDialog=false;}
 82+this._curInst=null;},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');},_checkExternalClick:function(event){if(!$.datepicker._curInst)
 83+return;var $target=$(event.target);if(($target.parents('#'+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI))
 84+$.datepicker._hideDatepicker(null,'');},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return;}
 85+this._adjustInstDate(inst,offset+
 86+(period=='M'?this._get(inst,'showCurrentAtPos'):0),period);this._updateDatepicker(inst);},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,'gotoCurrent')&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear;}
 87+else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();}
 88+this._notifyChange(inst);this._adjustDate(target);},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst['selected'+(period=='M'?'Month':'Year')]=inst['draw'+(period=='M'?'Month':'Year')]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target);},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie)
 89+inst.input[0].focus();inst._selectingMonthYear=!inst._selectingMonthYear;},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return;}
 90+var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$('a',td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null;}
 91+this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst);}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,'');},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input)
 92+inst.input.val(dateStr);this._updateAlternate(inst);var onSelect=this._get(inst,'onSelect');if(onSelect)
 93+onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst]);else if(inst.input)
 94+inst.input.trigger('change');if(inst.inline)
 95+this._updateDatepicker(inst);else if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,'duration'));this._lastInput=inst.input[0];if(typeof(inst.input[0])!='object')
 96+inst.input[0].focus();this._lastInput=null;}},_updateAlternate:function(inst){var altField=this._get(inst,'altField');if(altField){var altFormat=this._get(inst,'altFormat')||this._get(inst,'dateFormat');var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr);});}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),''];},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate);}else if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1;}}
 97+return Math.floor(((checkDate-firstMon)/86400000)/7)+1;},parseDate:function(format,value,settings){if(format==null||value==null)
 98+throw'Invalid arguments';value=(typeof value=='object'?value.toString():value+'');if(value=='')
 99+return null;var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches)
 100+iFormat++;return matches;};var getNumber=function(match){lookAhead(match);var origSize=(match=='@'?14:(match=='y'?4:(match=='o'?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>='0'&&value.charAt(iValue)<='9'){num=num*10+parseInt(value.charAt(iValue++),10);size--;}
 101+if(size==origSize)
 102+throw'Missing number at position '+iValue;return num;};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++)
 103+size=Math.max(size,names[j].length);var name='';var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++)
 104+if(name==names[i])
 105+return i+1;size--;}
 106+throw'Unknown name at position '+iInit;};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat))
 107+throw'Unexpected literal at position '+iValue;iValue++;};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal)
 108+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
 109+literal=false;else
 110+checkLiteral();else
 111+switch(format.charAt(iFormat)){case'd':day=getNumber('d');break;case'D':getName('D',dayNamesShort,dayNames);break;case'o':doy=getNumber('o');break;case'm':month=getNumber('m');break;case'M':month=getName('M',monthNamesShort,monthNames);break;case'y':year=getNumber('y');break;case'@':var date=new Date(getNumber('@'));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'"))
 112+checkLiteral();else
 113+literal=true;break;default:checkLiteral();}}
 114+if(year==-1)
 115+year=new Date().getFullYear();else if(year<100)
 116+year+=new Date().getFullYear()-new Date().getFullYear()%100+
 117+(year<=shortYearCutoff?0:-100);if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim)
 118+break;month++;day-=dim;}while(true);}
 119+var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day)
 120+throw'Invalid date';return date;},ATOM:'yy-mm-dd',COOKIE:'D, dd M yy',ISO_8601:'yy-mm-dd',RFC_822:'D, d M y',RFC_850:'DD, dd-M-y',RFC_1036:'D, d M y',RFC_1123:'D, d M yy',RFC_2822:'D, d M yy',RSS:'D, d M y',TIMESTAMP:'@',W3C:'yy-mm-dd',formatDate:function(format,date,settings){if(!date)
 121+return'';var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches)
 122+iFormat++;return matches;};var formatNumber=function(match,value,len){var num=''+value;if(lookAhead(match))
 123+while(num.length<len)
 124+num='0'+num;return num;};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value]);};var output='';var literal=false;if(date)
 125+for(var iFormat=0;iFormat<format.length;iFormat++){if(literal)
 126+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
 127+literal=false;else
 128+output+=format.charAt(iFormat);else
 129+switch(format.charAt(iFormat)){case'd':output+=formatNumber('d',date.getDate(),2);break;case'D':output+=formatName('D',date.getDay(),dayNamesShort,dayNames);break;case'o':var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--)
 130+doy+=this._getDaysInMonth(date.getFullYear(),m);output+=formatNumber('o',doy,3);break;case'm':output+=formatNumber('m',date.getMonth()+1,2);break;case'M':output+=formatName('M',date.getMonth(),monthNamesShort,monthNames);break;case'y':output+=(lookAhead('y')?date.getFullYear():(date.getYear()%100<10?'0':'')+date.getYear()%100);break;case'@':output+=date.getTime();break;case"'":if(lookAhead("'"))
 131+output+="'";else
 132+literal=true;break;default:output+=format.charAt(iFormat);}}
 133+return output;},_possibleChars:function(format){var chars='';var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++)
 134+if(literal)
 135+if(format.charAt(iFormat)=="'"&&!lookAhead("'"))
 136+literal=false;else
 137+chars+=format.charAt(iFormat);else
 138+switch(format.charAt(iFormat)){case'd':case'm':case'y':case'@':chars+='0123456789';break;case'D':case'M':return null;case"'":if(lookAhead("'"))
 139+chars+="'";else
 140+literal=true;break;default:chars+=format.charAt(iFormat);}
 141+return chars;},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name];},_setDateFromField:function(inst){var dateFormat=this._get(inst,'dateFormat');var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate;}catch(event){this.log(event);date=defaultDate;}
 142+inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst);},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,'defaultDate'),new Date());var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date;},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date;};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||'d'){case'd':case'D':day+=parseInt(matches[1],10);break;case'w':case'W':day+=parseInt(matches[1],10)*7;break;case'm':case'M':month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case'y':case'Y':year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;}
 143+matches=pattern.exec(offset);}
 144+return new Date(year,month,day);};date=(date==null?defaultDate:(typeof date=='string'?offsetString(date,this._getDaysInMonth):(typeof date=='number'?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=='Invalid Date'?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0);}
 145+return this._daylightSavingAdjust(date);},_daylightSavingAdjust:function(date){if(!date)return null;date.setHours(date.getHours()>12?date.getHours()+2:0);return date;},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear)
 146+this._notifyChange(inst);this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?'':this._formatDate(inst));}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=='')?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate;},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,'isRTL');var showButtonPanel=this._get(inst,'showButtonPanel');var hideIfNoPrevNext=this._get(inst,'hideIfNoPrevNext');var navigationAsDateFormat=this._get(inst,'navigationAsDateFormat');var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,'showCurrentAtPos');var stepMonths=this._get(inst,'stepMonths');var stepBigMonths=this._get(inst,'stepBigMonths');var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--;}
 147+if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--;}}}
 148+inst.drawMonth=drawMonth;inst.drawYear=drawYear;var prevText=this._get(inst,'prevText');prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+'\', -'+stepMonths+', \'M\');"'+' title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'e':'w')+'">'+prevText+'</span></a>':(hideIfNoPrevNext?'':'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'e':'w')+'">'+prevText+'</span></a>'));var nextText=this._get(inst,'nextText');nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#'+inst.id+'\', +'+stepMonths+', \'M\');"'+' title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'w':'e')+'">'+nextText+'</span></a>':(hideIfNoPrevNext?'':'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?'w':'e')+'">'+nextText+'</span></a>'));var currentText=this._get(inst,'currentText');var gotoDate=(this._get(inst,'gotoCurrent')&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls=(!inst.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery.datepicker._hideDatepicker();">'+this._get(inst,'closeText')+'</button>':'');var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:'')+
 149+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery.datepicker._gotoToday(\'#'+inst.id+'\');"'+'>'+currentText+'</button>':'')+(isRTL?'':controls)+'</div>':'';var firstDay=parseInt(this._get(inst,'firstDay'),10);firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,'dayNames');var dayNamesShort=this._get(inst,'dayNamesShort');var dayNamesMin=this._get(inst,'dayNamesMin');var monthNames=this._get(inst,'monthNames');var monthNamesShort=this._get(inst,'monthNamesShort');var beforeShowDay=this._get(inst,'beforeShowDay');var showOtherMonths=this._get(inst,'showOtherMonths');var calculateWeek=this._get(inst,'calculateWeek')||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html='';for(var row=0;row<numMonths[0];row++){var group='';for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=' ui-corner-all';var calender='';if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+='first';cornerClass=' ui-corner-'+(isRTL?'right':'left');break;case numMonths[1]-1:calender+='last';cornerClass=' ui-corner-'+(isRTL?'left':'right');break;default:calender+='middle';cornerClass='';break;}
 150+calender+='">';}
 151+calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+
 152+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):'')+
 153+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):'')+
 154+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead>'+'<tr>';var thead='';for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+='<th'+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':'')+'>'+'<span title="'+dayNames[day]+'">'+dayNamesMin[day]+'</span></th>';}
 155+calender+=thead+'</tr></thead><tbody>';var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth)
 156+inst.selectedDay=Math.min(inst.selectedDay,daysInMonth);var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+='<tr>';var tbody='';for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,'']);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+
 157+((dow+firstDay+6)%7>=5?' ui-datepicker-week-end':'')+
 158+(otherMonth?' ui-datepicker-other-month':'')+
 159+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?' '+this._dayOverClass:'')+
 160+(unselectable?' '+this._unselectableClass+' ui-state-disabled':'')+
 161+(otherMonth&&!showOtherMonths?'':' '+daySettings[1]+
 162+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?' '+this._currentClass:'')+
 163+(printDate.getTime()==today.getTime()?' ui-datepicker-today':''))+'"'+
 164+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':'')+
 165+(unselectable?'':' onclick="DP_jQuery.datepicker._selectDay(\'#'+
 166+inst.id+'\','+drawMonth+','+drawYear+', this);return false;"')+'>'+
 167+(otherMonth?(showOtherMonths?printDate.getDate():'&#xa0;'):(unselectable?'<span class="ui-state-default">'+printDate.getDate()+'</span>':'<a class="ui-state-default'+
 168+(printDate.getTime()==today.getTime()?' ui-state-highlight':'')+
 169+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?' ui-state-active':'')+'" href="#">'+printDate.getDate()+'</a>'))+'</td>';printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate);}
 170+calender+=tbody+'</tr>';}
 171+drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++;}
 172+calender+='</tbody></table>'+(isMultiMonth?'</div>'+
 173+((numMonths[0]>0&&col==numMonths[1]-1)?'<div class="ui-datepicker-row-break"></div>':''):'');group+=calender;}
 174+html+=group;}
 175+html+=buttonPanel+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':'');inst._keyEvent=false;return html;},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,'changeMonth');var changeYear=this._get(inst,'changeYear');var showMonthAfterYear=this._get(inst,'showMonthAfterYear');var html='<div class="ui-datepicker-title">';var monthHtml='';if(secondary||!changeMonth)
 176+monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+'</span> ';else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" '+'onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+'\', this, \'M\');" '+'onclick="DP_jQuery.datepicker._clickMonthYear(\'#'+inst.id+'\');"'+'>';for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth()))
 177+monthHtml+='<option value="'+month+'"'+
 178+(month==drawMonth?' selected="selected"':'')+'>'+monthNamesShort[month]+'</option>';}
 179+monthHtml+='</select>';}
 180+if(!showMonthAfterYear)
 181+html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?'&#xa0;':'');if(secondary||!changeYear)
 182+html+='<span class="ui-datepicker-year">'+drawYear+'</span>';else{var years=this._get(inst,'yearRange').split(':');var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10;}else if(years[0].charAt(0)=='+'||years[0].charAt(0)=='-'){year=drawYear+parseInt(years[0],10);endYear=drawYear+parseInt(years[1],10);}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10);}
 183+year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" '+'onchange="DP_jQuery.datepicker._selectMonthYear(\'#'+inst.id+'\', this, \'Y\');" '+'onclick="DP_jQuery.datepicker._clickMonthYear(\'#'+inst.id+'\');"'+'>';for(;year<=endYear;year++){html+='<option value="'+year+'"'+
 184+(year==drawYear?' selected="selected"':'')+'>'+year+'</option>';}
 185+html+='</select>';}
 186+if(showMonthAfterYear)
 187+html+=(secondary||changeMonth||changeYear?'&#xa0;':'')+monthHtml;html+='</div>';return html;},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=='Y'?offset:0);var month=inst.drawMonth+(period=='M'?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+
 188+(period=='D'?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,'min',true);var maxDate=this._getMinMaxDate(inst,'max');date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=='M'||period=='Y')
 189+this._notifyChange(inst);},_notifyChange:function(inst){var onChange=this._get(inst,'onChangeMonthYear');if(onChange)
 190+onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst]);},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,'numberOfMonths');return(numMonths==null?[1,1]:(typeof numMonths=='number'?[1,numMonths]:numMonths));},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+'Date'),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date));},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate();},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay();},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0)
 191+date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()));return this._isInRange(inst,date);},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,'min');var maxDate=this._getMinMaxDate(inst,'max');return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate));},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,'shortYearCutoff');shortYearCutoff=(typeof shortYearCutoff!='string'?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,'dayNamesShort'),dayNames:this._get(inst,'dayNames'),monthNamesShort:this._get(inst,'monthNamesShort'),monthNames:this._get(inst,'monthNames')};},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear;}
 192+var date=(day?(typeof day=='object'?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,'dateFormat'),date,this._getFormatConfig(inst));}});function extendRemove(target,props){$.extend(target,props);for(var name in props)
 193+if(props[name]==null||props[name]==undefined)
 194+target[name]=props[name];return target;};function isArray(a){return(a&&(($.browser.safari&&typeof a=='object'&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))));};$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document).mousedown($.datepicker._checkExternalClick).find('body').append($.datepicker.dpDiv);$.datepicker.initialized=true;}
 195+var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=='string'&&(options=='isDisabled'||options=='getDate'))
 196+return $.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this[0]].concat(otherArgs));return this.each(function(){typeof options=='string'?$.datepicker['_'+options+'Datepicker'].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options);});};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.7.1";window.DP_jQuery=$;})(jQuery);(function($){var setDataSwitch={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},uiDialogClasses='ui-dialog '+'ui-widget '+'ui-widget-content '+'ui-corner-all ';$.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr('title');var self=this,options=this.options,title=options.title||this.originalTitle||'&nbsp;',titleId=$.ui.dialog.getTitleId(this.element),uiDialog=(this.uiDialog=$('<div/>')).appendTo(document.body).hide().addClass(uiDialogClasses+options.dialogClass).css({position:'absolute',overflow:'hidden',zIndex:options.zIndex}).attr('tabIndex',-1).css('outline',0).keydown(function(event){(options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&self.close(event));}).attr({role:'dialog','aria-labelledby':titleId}).mousedown(function(event){self.moveToTop(false,event);}),uiDialogContent=this.element.show().removeAttr('title').addClass('ui-dialog-content '+'ui-widget-content').appendTo(uiDialog),uiDialogTitlebar=(this.uiDialogTitlebar=$('<div></div>')).addClass('ui-dialog-titlebar '+'ui-widget-header '+'ui-corner-all '+'ui-helper-clearfix').prependTo(uiDialog),uiDialogTitlebarClose=$('<a href="#"/>').addClass('ui-dialog-titlebar-close '+'ui-corner-all').attr('role','button').hover(function(){uiDialogTitlebarClose.addClass('ui-state-hover');},function(){uiDialogTitlebarClose.removeClass('ui-state-hover');}).focus(function(){uiDialogTitlebarClose.addClass('ui-state-focus');}).blur(function(){uiDialogTitlebarClose.removeClass('ui-state-focus');}).mousedown(function(ev){ev.stopPropagation();}).click(function(event){self.close(event);return false;}).appendTo(uiDialogTitlebar),uiDialogTitlebarCloseText=(this.uiDialogTitlebarCloseText=$('<span/>')).addClass('ui-icon '+'ui-icon-closethick').text(options.closeText).appendTo(uiDialogTitlebarClose),uiDialogTitle=$('<span/>').addClass('ui-dialog-title').attr('id',titleId).html(title).prependTo(uiDialogTitlebar);uiDialogTitlebar.find("*").add(uiDialogTitlebar).disableSelection();(options.draggable&&$.fn.draggable&&this._makeDraggable());(options.resizable&&$.fn.resizable&&this._makeResizable());this._createButtons(options.buttons);this._isOpen=false;(options.bgiframe&&$.fn.bgiframe&&uiDialog.bgiframe());(options.autoOpen&&this.open());},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content ui-widget-content').hide().appendTo('body');this.uiDialog.remove();(this.originalTitle&&this.element.attr('title',this.originalTitle));},close:function(event){var self=this;if(false===self._trigger('beforeclose',event)){return;}
 197+(self.overlay&&self.overlay.destroy());self.uiDialog.unbind('keypress.ui-dialog');(self.options.hide?self.uiDialog.hide(self.options.hide,function(){self._trigger('close',event);}):self.uiDialog.hide()&&self._trigger('close',event));$.ui.dialog.overlay.resize();self._isOpen=false;},isOpen:function(){return this._isOpen;},moveToTop:function(force,event){if((this.options.modal&&!force)||(!this.options.stack&&!this.options.modal)){return this._trigger('focus',event);}
 198+if(this.options.zIndex>$.ui.dialog.maxZ){$.ui.dialog.maxZ=this.options.zIndex;}
 199+(this.overlay&&this.overlay.$el.css('z-index',$.ui.dialog.overlay.maxZ=++$.ui.dialog.maxZ));var saveScroll={scrollTop:this.element.attr('scrollTop'),scrollLeft:this.element.attr('scrollLeft')};this.uiDialog.css('z-index',++$.ui.dialog.maxZ);this.element.attr(saveScroll);this._trigger('focus',event);},open:function(){if(this._isOpen){return;}
 200+var options=this.options,uiDialog=this.uiDialog;this.overlay=options.modal?new $.ui.dialog.overlay(this):null;(uiDialog.next().length&&uiDialog.appendTo('body'));this._size();this._position(options.position);uiDialog.show(options.show);this.moveToTop(true);(options.modal&&uiDialog.bind('keypress.ui-dialog',function(event){if(event.keyCode!=$.ui.keyCode.TAB){return;}
 201+var tabbables=$(':tabbable',this),first=tabbables.filter(':first')[0],last=tabbables.filter(':last')[0];if(event.target==last&&!event.shiftKey){setTimeout(function(){first.focus();},1);}else if(event.target==first&&event.shiftKey){setTimeout(function(){last.focus();},1);}}));$([]).add(uiDialog.find('.ui-dialog-content :tabbable:first')).add(uiDialog.find('.ui-dialog-buttonpane :tabbable:first')).add(uiDialog).filter(':first').focus();this._trigger('open');this._isOpen=true;},_createButtons:function(buttons){var self=this,hasButtons=false,uiDialogButtonPane=$('<div></div>').addClass('ui-dialog-buttonpane '+'ui-widget-content '+'ui-helper-clearfix');this.uiDialog.find('.ui-dialog-buttonpane').remove();(typeof buttons=='object'&&buttons!==null&&$.each(buttons,function(){return!(hasButtons=true);}));if(hasButtons){$.each(buttons,function(name,fn){$('<button type="button"></button>').addClass('ui-state-default '+'ui-corner-all').text(name).click(function(){fn.apply(self.element[0],arguments);}).hover(function(){$(this).addClass('ui-state-hover');},function(){$(this).removeClass('ui-state-hover');}).focus(function(){$(this).addClass('ui-state-focus');}).blur(function(){$(this).removeClass('ui-state-focus');}).appendTo(uiDialogButtonPane);});uiDialogButtonPane.appendTo(this.uiDialog);}},_makeDraggable:function(){var self=this,options=this.options,heightBeforeDrag;this.uiDialog.draggable({cancel:'.ui-dialog-content',handle:'.ui-dialog-titlebar',containment:'document',start:function(){heightBeforeDrag=options.height;$(this).height($(this).height()).addClass("ui-dialog-dragging");(options.dragStart&&options.dragStart.apply(self.element[0],arguments));},drag:function(){(options.drag&&options.drag.apply(self.element[0],arguments));},stop:function(){$(this).removeClass("ui-dialog-dragging").height(heightBeforeDrag);(options.dragStop&&options.dragStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}});},_makeResizable:function(handles){handles=(handles===undefined?this.options.resizable:handles);var self=this,options=this.options,resizeHandles=typeof handles=='string'?handles:'n,e,s,w,se,sw,ne,nw';this.uiDialog.resizable({cancel:'.ui-dialog-content',alsoResize:this.element,maxWidth:options.maxWidth,maxHeight:options.maxHeight,minWidth:options.minWidth,minHeight:options.minHeight,start:function(){$(this).addClass("ui-dialog-resizing");(options.resizeStart&&options.resizeStart.apply(self.element[0],arguments));},resize:function(){(options.resize&&options.resize.apply(self.element[0],arguments));},handles:resizeHandles,stop:function(){$(this).removeClass("ui-dialog-resizing");options.height=$(this).height();options.width=$(this).width();(options.resizeStop&&options.resizeStop.apply(self.element[0],arguments));$.ui.dialog.overlay.resize();}}).find('.ui-resizable-se').addClass('ui-icon ui-icon-grip-diagonal-se');},_position:function(pos){var wnd=$(window),doc=$(document),pTop=doc.scrollTop(),pLeft=doc.scrollLeft(),minTop=pTop;if($.inArray(pos,['center','top','right','bottom','left'])>=0){pos=[pos=='right'||pos=='left'?pos:'center',pos=='top'||pos=='bottom'?pos:'middle'];}
 202+if(pos.constructor!=Array){pos=['center','middle'];}
 203+if(pos[0].constructor==Number){pLeft+=pos[0];}else{switch(pos[0]){case'left':pLeft+=0;break;case'right':pLeft+=wnd.width()-this.uiDialog.outerWidth();break;default:case'center':pLeft+=(wnd.width()-this.uiDialog.outerWidth())/2;}}
 204+if(pos[1].constructor==Number){pTop+=pos[1];}else{switch(pos[1]){case'top':pTop+=0;break;case'bottom':pTop+=wnd.height()-this.uiDialog.outerHeight();break;default:case'middle':pTop+=(wnd.height()-this.uiDialog.outerHeight())/2;}}
 205+pTop=Math.max(pTop,minTop);this.uiDialog.css({top:pTop,left:pLeft});},_setData:function(key,value){(setDataSwitch[key]&&this.uiDialog.data(setDataSwitch[key],value));switch(key){case"buttons":this._createButtons(value);break;case"closeText":this.uiDialogTitlebarCloseText.text(value);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(uiDialogClasses+value);break;case"draggable":(value?this._makeDraggable():this.uiDialog.draggable('destroy'));break;case"height":this.uiDialog.height(value);break;case"position":this._position(value);break;case"resizable":var uiDialog=this.uiDialog,isResizable=this.uiDialog.is(':data(resizable)');(isResizable&&!value&&uiDialog.resizable('destroy'));(isResizable&&typeof value=='string'&&uiDialog.resizable('option','handles',value));(isResizable||this._makeResizable(value));break;case"title":$(".ui-dialog-title",this.uiDialogTitlebar).html(value||'&nbsp;');break;case"width":this.uiDialog.width(value);break;}
 206+$.widget.prototype._setData.apply(this,arguments);},_size:function(){var options=this.options;this.element.css({height:0,minHeight:0,width:'auto'});var nonContentHeight=this.uiDialog.css({height:'auto',width:options.width}).height();this.element.css({minHeight:Math.max(options.minHeight-nonContentHeight,0),height:options.height=='auto'?'auto':Math.max(options.height-nonContentHeight,0)});}});$.extend($.ui.dialog,{version:"1.7.1",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:'close',dialogClass:'',draggable:true,hide:null,height:'auto',maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:'center',resizable:true,show:null,stack:true,title:'',width:300,zIndex:1000},getter:'isOpen',uuid:0,maxZ:0,getTitleId:function($el){return'ui-dialog-title-'+($el.attr('id')||++this.uuid);},overlay:function(dialog){this.$el=$.ui.dialog.overlay.create(dialog);}});$.extend($.ui.dialog.overlay,{instances:[],maxZ:0,events:$.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),function(event){return event+'.dialog-overlay';}).join(' '),create:function(dialog){if(this.instances.length===0){setTimeout(function(){$(document).bind($.ui.dialog.overlay.events,function(event){var dialogZ=$(event.target).parents('.ui-dialog').css('zIndex')||0;return(dialogZ>$.ui.dialog.overlay.maxZ);});},1);$(document).bind('keydown.dialog-overlay',function(event){(dialog.options.closeOnEscape&&event.keyCode&&event.keyCode==$.ui.keyCode.ESCAPE&&dialog.close(event));});$(window).bind('resize.dialog-overlay',$.ui.dialog.overlay.resize);}
 207+var $el=$('<div></div>').appendTo(document.body).addClass('ui-widget-overlay').css({width:this.width(),height:this.height()});(dialog.options.bgiframe&&$.fn.bgiframe&&$el.bgiframe());this.instances.push($el);return $el;},destroy:function($el){this.instances.splice($.inArray(this.instances,$el),1);if(this.instances.length===0){$([document,window]).unbind('.dialog-overlay');}
 208+$el.remove();},height:function(){if($.browser.msie&&$.browser.version<7){var scrollHeight=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var offsetHeight=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(scrollHeight<offsetHeight){return $(window).height()+'px';}else{return scrollHeight+'px';}}else{return $(document).height()+'px';}},width:function(){if($.browser.msie&&$.browser.version<7){var scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(scrollWidth<offsetWidth){return $(window).width()+'px';}else{return scrollWidth+'px';}}else{return $(document).width()+'px';}},resize:function(){var $overlays=$([]);$.each($.ui.dialog.overlay.instances,function(){$overlays=$overlays.add(this);});$overlays.css({width:0,height:0}).css({width:$.ui.dialog.overlay.width(),height:$.ui.dialog.overlay.height()});}});$.extend($.ui.dialog.overlay.prototype,{destroy:function(){$.ui.dialog.overlay.destroy(this.$el);}});})(jQuery);(function($){$.widget("ui.draggable",$.extend({},$.ui.mouse,{_init:function(){if(this.options.helper=='original'&&!(/^(?:r|a|f)/).test(this.element.css("position")))
 209+this.element[0].style.position='relative';(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit();},destroy:function(){if(!this.element.data('draggable'))return;this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable"
 210++" ui-draggable-dragging"
 211++" ui-draggable-disabled");this._mouseDestroy();},_mouseCapture:function(event){var o=this.options;if(this.helper||o.disabled||$(event.target).is('.ui-resizable-handle'))
 212+return false;this.handle=this._getHandle(event);if(!this.handle)
 213+return false;return true;},_mouseStart:function(event){var o=this.options;this.helper=this._createHelper(event);this._cacheHelperProportions();if($.ui.ddmanager)
 214+$.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};$.extend(this.offset,{click:{left:event.pageX-this.offset.left,top:event.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(event);this.originalPageX=event.pageX;this.originalPageY=event.pageY;if(o.cursorAt)
 215+this._adjustOffsetFromHelper(o.cursorAt);if(o.containment)
 216+this._setContainment();this._trigger("start",event);this._cacheHelperProportions();if($.ui.ddmanager&&!o.dropBehaviour)
 217+$.ui.ddmanager.prepareOffsets(this,event);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(event,true);return true;},_mouseDrag:function(event,noPropagation){this.position=this._generatePosition(event);this.positionAbs=this._convertPositionTo("absolute");if(!noPropagation){var ui=this._uiHash();this._trigger('drag',event,ui);this.position=ui.position;}
 218+if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+'px';if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+'px';if($.ui.ddmanager)$.ui.ddmanager.drag(this,event);return false;},_mouseStop:function(event){var dropped=false;if($.ui.ddmanager&&!this.options.dropBehaviour)
 219+dropped=$.ui.ddmanager.drop(this,event);if(this.dropped){dropped=this.dropped;this.dropped=false;}
 220+if((this.options.revert=="invalid"&&!dropped)||(this.options.revert=="valid"&&dropped)||this.options.revert===true||($.isFunction(this.options.revert)&&this.options.revert.call(this.element,dropped))){var self=this;$(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){self._trigger("stop",event);self._clear();});}else{this._trigger("stop",event);this._clear();}
 221+return false;},_getHandle:function(event){var handle=!this.options.handle||!$(this.options.handle,this.element).length?true:false;$(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==event.target)handle=true;});return handle;},_createHelper:function(event){var o=this.options;var helper=$.isFunction(o.helper)?$(o.helper.apply(this.element[0],[event])):(o.helper=='clone'?this.element.clone():this.element);if(!helper.parents('body').length)
 222+helper.appendTo((o.appendTo=='parent'?this.element[0].parentNode:o.appendTo));if(helper[0]!=this.element[0]&&!(/(fixed|absolute)/).test(helper.css("position")))
 223+helper.css("position","absolute");return helper;},_adjustOffsetFromHelper:function(obj){if(obj.left!=undefined)this.offset.click.left=obj.left+this.margins.left;if(obj.right!=undefined)this.offset.click.left=this.helperProportions.width-obj.right+this.margins.left;if(obj.top!=undefined)this.offset.click.top=obj.top+this.margins.top;if(obj.bottom!=undefined)this.offset.click.top=this.helperProportions.height-obj.bottom+this.margins.top;},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var po=this.offsetParent.offset();if(this.cssPosition=='absolute'&&this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0])){po.left+=this.scrollParent.scrollLeft();po.top+=this.scrollParent.scrollTop();}
 224+if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=='html'&&$.browser.msie))
 225+po={top:0,left:0};return{top:po.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:po.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)};},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var p=this.element.position();return{top:p.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:p.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()};}else{return{top:0,left:0};}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)};},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()};},_setContainment:function(){var o=this.options;if(o.containment=='parent')o.containment=this.helper[0].parentNode;if(o.containment=='document'||o.containment=='window')this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,$(o.containment=='document'?document:window).width()-this.helperProportions.width-this.margins.left,($(o.containment=='document'?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!(/^(document|window|parent)$/).test(o.containment)&&o.containment.constructor!=Array){var ce=$(o.containment)[0];if(!ce)return;var co=$(o.containment).offset();var over=($(ce).css("overflow")!='hidden');this.containment=[co.left+(parseInt($(ce).css("borderLeftWidth"),10)||0)+(parseInt($(ce).css("paddingLeft"),10)||0)-this.margins.left,co.top+(parseInt($(ce).css("borderTopWidth"),10)||0)+(parseInt($(ce).css("paddingTop"),10)||0)-this.margins.top,co.left+(over?Math.max(ce.scrollWidth,ce.offsetWidth):ce.offsetWidth)-(parseInt($(ce).css("borderLeftWidth"),10)||0)-(parseInt($(ce).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,co.top+(over?Math.max(ce.scrollHeight,ce.offsetHeight):ce.offsetHeight)-(parseInt($(ce).css("borderTopWidth"),10)||0)-(parseInt($(ce).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top];}else if(o.containment.constructor==Array){this.containment=o.containment;}},_convertPositionTo:function(d,pos){if(!pos)pos=this.position;var mod=d=="absolute"?1:-1;var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);return{top:(pos.top
 226++this.offset.relative.top*mod
 227++this.offset.parent.top*mod
 228+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollTop():(scrollIsRootNode?0:scroll.scrollTop()))*mod)),left:(pos.left
 229++this.offset.relative.left*mod
 230++this.offset.parent.left*mod
 231+-($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())*mod))};},_generatePosition:function(event){var o=this.options,scroll=this.cssPosition=='absolute'&&!(this.scrollParent[0]!=document&&$.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,scrollIsRootNode=(/(html|body)/i).test(scroll[0].tagName);if(this.cssPosition=='relative'&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset();}
 232+var pageX=event.pageX;var pageY=event.pageY;if(this.originalPosition){if(this.containment){if(event.pageX-this.offset.click.left<this.containment[0])pageX=this.containment[0]+this.offset.click.left;if(event.pageY-this.offset.click.top<this.containment[1])pageY=this.containment[1]+this.offset.click.top;if(event.pageX-this.offset.click.left>this.containment[2])pageX=this.containment[2]+this.offset.click.left;if(event.pageY-this.offset.click.top>this.containment[3])pageY=this.containment[3]+this.offset.click.top;}
 233+if(o.grid){var top=this.originalPageY+Math.round((pageY-this.originalPageY)/o.grid[1])*o.grid[1];pageY=this.containment?(!(top-this.offset.click.top<this.containment[1]||top-this.offset.click.top>this.containment[3])?top:(!(top-this.offset.click.top<this.containment[1])?top-o.grid[1]:top+o.grid[1])):top;var left=this.originalPageX+Math.round((pageX-this.originalPageX)/o.grid[0])*o.grid[0];pageX=this.containment?(!(left-this.offset.click.left<this.containment[0]||left-this.offset.click.left>this.containment[2])?left:(!(left-this.offset.click.left<this.containment[0])?left-o.grid[0]:left+o.grid[0])):left;}}
 234+return{top:(pageY
 235+-this.offset.click.top
 236+-this.offset.relative.top
 237+-this.offset.parent.top
 238++($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollTop():(scrollIsRootNode?0:scroll.scrollTop())))),left:(pageX
 239+-this.offset.click.left
 240+-this.offset.relative.left
 241+-this.offset.parent.left
 242++($.browser.safari&&this.cssPosition=='fixed'?0:(this.cssPosition=='fixed'?-this.scrollParent.scrollLeft():scrollIsRootNode?0:scroll.scrollLeft())))};},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval)this.helper.remove();this.helper=null;this.cancelHelperRemoval=false;},_trigger:function(type,event,ui){ui=ui||this._uiHash();$.ui.plugin.call(this,type,[event,ui]);if(type=="drag")this.positionAbs=this._convertPositionTo("absolute");return $.widget.prototype._trigger.call(this,type,event,ui);},plugins:{},_uiHash:function(event){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs};}}));$.extend($.ui.draggable,{version:"1.7.1",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});$.ui.plugin.add("draggable","connectToSortable",{start:function(event,ui){var inst=$(this).data("draggable"),o=inst.options,uiSortable=$.extend({},ui,{item:inst.element});inst.sortables=[];$(o.connectToSortable).each(function(){var sortable=$.data(this,'sortable');if(sortable&&!sortable.options.disabled){inst.sortables.push({instance:sortable,shouldRevert:sortable.options.revert});sortable._refreshItems();sortable._trigger("activate",event,uiSortable);}});},stop:function(event,ui){var inst=$(this).data("draggable"),uiSortable=$.extend({},ui,{item:inst.element});$.each(inst.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;inst.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(event);this.instance.options.helper=this.instance.options._helper;if(inst.options.helper=='original')
 243+this.instance.currentItem.css({top:'auto',left:'auto'});}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",event,uiSortable);}});},drag:function(event,ui){var inst=$(this).data("draggable"),self=this;var checkPos=function(o){var dyClick=this.offset.click.top,dxClick=this.offset.click.left;var helperTop=this.positionAbs.top,helperLeft=this.positionAbs.left;var itemHeight=o.height,itemWidth=o.width;var itemTop=o.top,itemLeft=o.left;return $.ui.isOver(helperTop+dyClick,helperLeft+dxClick,itemTop,itemLeft,itemHeight,itemWidth);};$.each(inst.sortables,function(i){this.instance.positionAbs=inst.positionAbs;this.instance.helperProportions=inst.helperProportions;this.instance.offset.click=inst.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=$(self).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return ui.helper[0];};event.target=this.instance.currentItem[0];this.instance._mouseCapture(event,true);this.instance._mouseStart(event,true,true);this.instance.offset.click.top=inst.offset.click.top;this.instance.offset.click.left=inst.offset.click.left;this.instance.offset.parent.left-=inst.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=inst.offset.parent.top-this.instance.offset.parent.top;inst._trigger("toSortable",event);inst.dropped=this.instance.element;inst.currentItem=inst.element;this.instance.fromOutside=inst;}
 244+if(this.instance.currentItem)this.instance._mouseDrag(event);}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger('out',event,this.instance._uiHash(this.instance));this.instance._mouseStop(event,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder)this.instance.placeholder.remove();inst._trigger("fromSortable",event);inst.dropped=false;}};});}});$.ui.plugin.add("draggable","cursor",{start:function(event,ui){var t=$('body'),o=$(this).data('draggable').options;if(t.css("cursor"))o._cursor=t.css("cursor");t.css("cursor",o.cursor);},stop:function(event,ui){var o=$(this).data('draggable').options;if(o._cursor)$('body').css("cursor",o._cursor);}});$.ui.plugin.add("draggable","iframeFix",{start:function(event,ui){var o=$(this).data('draggable').options;$(o.iframeFix===true?"iframe":o.iframeFix).each(function(){$('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css($(this).offset()).appendTo("body");});},stop:function(event,ui){$("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this);});}});$.ui.plugin.add("draggable","opacity",{start:function(event,ui){var t=$(ui.helper),o=$(this).data('draggable').options;if(t.css("opacity"))o._opacity=t.css("opacity");t.css('opacity',o.opacity);},stop:function(event,ui){var o=$(this).data('draggable').options;if(o._opacity)$(ui.helper).css('opacity',o._opacity);}});$.ui.plugin.add("draggable","scroll",{start:function(event,ui){var i=$(this).data("draggable");if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML')i.overflowOffset=i.scrollParent.offset();},drag:function(event,ui){var i=$(this).data("draggable"),o=i.options,scrolled=false;if(i.scrollParent[0]!=document&&i.scrollParent[0].tagName!='HTML'){if(!o.axis||o.axis!='x'){if((i.overflowOffset.top+i.scrollParent[0].offsetHeight)-event.pageY<o.scrollSensitivity)
 245+i.scrollParent[0].scrollTop=scrolled=i.scrollParent[0].scrollTop+o.scrollSpeed;else if(event.pageY-i.overflowOffset.top<o.scrollSensitivity)
 246+i.scrollParent[0].scrollTop=scrolled=i.scrollParent[0].scrollTop-o.scrollSpeed;}
 247+if(!o.axis||o.axis!='y'){if((i.overflowOffset.left+i.scrollParent[0].offsetWidth)-event.pageX<o.scrollSensitivity)
 248+i.scrollParent[0].scrollLeft=scrolled=i.scrollParent[0].scrollLeft+o.scrollSpeed;else if(event.pageX-i.overflowOffset.left<o.scrollSensitivity)
 249+i.scrollParent[0].scrollLeft=scrolled=i.scrollParent[0].scrollLeft-o.scrollSpeed;}}else{if(!o.axis||o.axis!='x'){if(event.pageY-$(document).scrollTop()<o.scrollSensitivity)
 250+scrolled=$(document).scrollTop($(document).scrollTop()-o.scrollSpeed);else if($(window).height()-(event.pageY-$(document).scrollTop())<o.scrollSensitivity)
 251+scrolled=$(document).scrollTop($(document).scrollTop()+o.scrollSpeed);}
 252+if(!o.axis||o.axis!='y'){if(event.pageX-$(document).scrollLeft()<o.scrollSensitivity)
 253+scrolled=$(document).scrollLeft($(document).scrollLeft()-o.scrollSpeed);else if($(window).width()-(event.pageX-$(document).scrollLeft())<o.scrollSensitivity)
 254+scrolled=$(document).scrollLeft($(document).scrollLeft()+o.scrollSpeed);}}
 255+if(scrolled!==false&&$.ui.ddmanager&&!o.dropBehaviour)
 256+$.ui.ddmanager.prepareOffsets(i,event);}});$.ui.plugin.add("draggable","snap",{start:function(event,ui){var i=$(this).data("draggable"),o=i.options;i.snapElements=[];$(o.snap.constructor!=String?(o.snap.items||':data(draggable)'):o.snap).each(function(){var $t=$(this);var $o=$t.offset();if(this!=i.element[0])i.snapElements.push({item:this,width:$t.outerWidth(),height:$t.outerHeight(),top:$o.top,left:$o.left});});},drag:function(event,ui){var inst=$(this).data("draggable"),o=inst.options;var d=o.snapTolerance;var x1=ui.offset.left,x2=x1+inst.helperProportions.width,y1=ui.offset.top,y2=y1+inst.helperProportions.height;for(var i=inst.snapElements.length-1;i>=0;i--){var l=inst.snapElements[i].left,r=l+inst.snapElements[i].width,t=inst.snapElements[i].top,b=t+inst.snapElements[i].height;if(!((l-d<x1&&x1<r+d&&t-d<y1&&y1<b+d)||(l-d<x1&&x1<r+d&&t-d<y2&&y2<b+d)||(l-d<x2&&x2<r+d&&t-d<y1&&y1<b+d)||(l-d<x2&&x2<r+d&&t-d<y2&&y2<b+d))){if(inst.snapElements[i].snapping)(inst.options.snap.release&&inst.options.snap.release.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})));inst.snapElements[i].snapping=false;continue;}
 257+if(o.snapMode!='inner'){var ts=Math.abs(t-y2)<=d;var bs=Math.abs(b-y1)<=d;var ls=Math.abs(l-x2)<=d;var rs=Math.abs(r-x1)<=d;if(ts)ui.position.top=inst._convertPositionTo("relative",{top:t-inst.helperProportions.height,left:0}).top-inst.margins.top;if(bs)ui.position.top=inst._convertPositionTo("relative",{top:b,left:0}).top-inst.margins.top;if(ls)ui.position.left=inst._convertPositionTo("relative",{top:0,left:l-inst.helperProportions.width}).left-inst.margins.left;if(rs)ui.position.left=inst._convertPositionTo("relative",{top:0,left:r}).left-inst.margins.left;}
 258+var first=(ts||bs||ls||rs);if(o.snapMode!='outer'){var ts=Math.abs(t-y1)<=d;var bs=Math.abs(b-y2)<=d;var ls=Math.abs(l-x1)<=d;var rs=Math.abs(r-x2)<=d;if(ts)ui.position.top=inst._convertPositionTo("relative",{top:t,left:0}).top-inst.margins.top;if(bs)ui.position.top=inst._convertPositionTo("relative",{top:b-inst.helperProportions.height,left:0}).top-inst.margins.top;if(ls)ui.position.left=inst._convertPositionTo("relative",{top:0,left:l}).left-inst.margins.left;if(rs)ui.position.left=inst._convertPositionTo("relative",{top:0,left:r-inst.helperProportions.width}).left-inst.margins.left;}
 259+if(!inst.snapElements[i].snapping&&(ts||bs||ls||rs||first))
 260+(inst.options.snap.snap&&inst.options.snap.snap.call(inst.element,event,$.extend(inst._uiHash(),{snapItem:inst.snapElements[i].item})));inst.snapElements[i].snapping=(ts||bs||ls||rs||first);};}});$.ui.plugin.add("draggable","stack",{start:function(event,ui){var o=$(this).data("draggable").options;var group=$.makeArray($(o.stack.group)).sort(function(a,b){return(parseInt($(a).css("zIndex"),10)||o.stack.min)-(parseInt($(b).css("zIndex"),10)||o.stack.min);});$(group).each(function(i){this.style.zIndex=o.stack.min+i;});this[0].style.zIndex=o.stack.min+group.length;}});$.ui.plugin.add("draggable","zIndex",{start:function(event,ui){var t=$(ui.helper),o=$(this).data("draggable").options;if(t.css("zIndex"))o._zIndex=t.css("zIndex");t.css('zIndex',o.zIndex);},stop:function(event,ui){var o=$(this).data("draggable").options;if(o._zIndex)$(ui.helper).css('zIndex',o._zIndex);}});})(jQuery);(function($){$.widget("ui.resizable",$.extend({},$.ui.mouse,{_init:function(){var self=this,o=this.options;this.element.addClass("ui-resizable");$.extend(this,{_aspectRatio:!!(o.aspectRatio),aspectRatio:o.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:o.helper||o.ghost||o.animate?o.helper||'ui-resizable-helper':null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css('position'))&&$.browser.opera)
 261+this.element.css({position:'relative',top:'auto',left:'auto'});this.element.wrap($('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css('position'),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css('top'),left:this.element.css('left')}));this.element=this.element.parent().data("resizable",this.element.data('resizable'));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css('resize');this.originalElement.css('resize','none');this._proportionallyResizeElements.push(this.originalElement.css({position:'static',zoom:1,display:'block'}));this.originalElement.css({margin:this.originalElement.css('margin')});this._proportionallyResize();}
 262+this.handles=o.handles||(!$('.ui-resizable-handle',this.element).length?"e,s,se":{n:'.ui-resizable-n',e:'.ui-resizable-e',s:'.ui-resizable-s',w:'.ui-resizable-w',se:'.ui-resizable-se',sw:'.ui-resizable-sw',ne:'.ui-resizable-ne',nw:'.ui-resizable-nw'});if(this.handles.constructor==String){if(this.handles=='all')this.handles='n,e,s,w,se,sw,ne,nw';var n=this.handles.split(",");this.handles={};for(var i=0;i<n.length;i++){var handle=$.trim(n[i]),hname='ui-resizable-'+handle;var axis=$('<div class="ui-resizable-handle '+hname+'"></div>');if(/sw|se|ne|nw/.test(handle))axis.css({zIndex:++o.zIndex});if('se'==handle){axis.addClass('ui-icon ui-icon-gripsmall-diagonal-se');};this.handles[handle]='.ui-resizable-'+handle;this.element.append(axis);}}
 263+this._renderAxis=function(target){target=target||this.element;for(var i in this.handles){if(this.handles[i].constructor==String)
 264+this.handles[i]=$(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var axis=$(this.handles[i],this.element),padWrapper=0;padWrapper=/sw|ne|nw|se|n|s/.test(i)?axis.outerHeight():axis.outerWidth();var padPos=['padding',/ne|nw|n/.test(i)?'Top':/se|sw|s/.test(i)?'Bottom':/^e$/.test(i)?'Right':'Left'].join("");target.css(padPos,padWrapper);this._proportionallyResize();}
 265+if(!$(this.handles[i]).length)
 266+continue;}};this._renderAxis(this.element);this._handles=$('.ui-resizable-handle',this.element).disableSelection();this._handles.mouseover(function(){if(!self.resizing){if(this.className)
 267+var axis=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);self.axis=axis&&axis[1]?axis[1]:'se';}});if(o.autoHide){this._handles.hide();$(this.element).addClass("ui-resizable-autohide").hover(function(){$(this).removeClass("ui-resizable-autohide");self._handles.show();},function(){if(!self.resizing){$(this).addClass("ui-resizable-autohide");self._handles.hide();}});}
 268+this._mouseInit();},destroy:function(){this._mouseDestroy();var _destroy=function(exp){$(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();};if(this.elementIsWrapper){_destroy(this.element);var wrapper=this.element;wrapper.parent().append(this.originalElement.css({position:wrapper.css('position'),width:wrapper.outerWidth(),height:wrapper.outerHeight(),top:wrapper.css('top'),left:wrapper.css('left')})).end().remove();}
 269+this.originalElement.css('resize',this.originalResizeStyle);_destroy(this.originalElement);},_mouseCapture:function(event){var handle=false;for(var i in this.handles){if($(this.handles[i])[0]==event.target)handle=true;}
 270+return this.options.disabled||!!handle;},_mouseStart:function(event){var o=this.options,iniPos=this.element.position(),el=this.element;this.resizing=true;this.documentScroll={top:$(document).scrollTop(),left:$(document).scrollLeft()};if(el.is('.ui-draggable')||(/absolute/).test(el.css('position'))){el.css({position:'absolute',top:iniPos.top,left:iniPos.left});}
 271+if($.browser.opera&&(/relative/).test(el.css('position')))
 272+el.css({position:'relative',top:'auto',left:'auto'});this._renderProxy();var curleft=num(this.helper.css('left')),curtop=num(this.helper.css('top'));if(o.containment){curleft+=$(o.containment).scrollLeft()||0;curtop+=$(o.containment).scrollTop()||0;}
 273+this.offset=this.helper.offset();this.position={left:curleft,top:curtop};this.size=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalSize=this._helper?{width:el.outerWidth(),height:el.outerHeight()}:{width:el.width(),height:el.height()};this.originalPosition={left:curleft,top:curtop};this.sizeDiff={width:el.outerWidth()-el.width(),height:el.outerHeight()-el.height()};this.originalMousePosition={left:event.pageX,top:event.pageY};this.aspectRatio=(typeof o.aspectRatio=='number')?o.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var cursor=$('.ui-resizable-'+this.axis).css('cursor');$('body').css('cursor',cursor=='auto'?this.axis+'-resize':cursor);el.addClass("ui-resizable-resizing");this._propagate("start",event);return true;},_mouseDrag:function(event){var el=this.helper,o=this.options,props={},self=this,smp=this.originalMousePosition,a=this.axis;var dx=(event.pageX-smp.left)||0,dy=(event.pageY-smp.top)||0;var trigger=this._change[a];if(!trigger)return false;var data=trigger.apply(this,[event,dx,dy]),ie6=$.browser.msie&&$.browser.version<7,csdif=this.sizeDiff;if(this._aspectRatio||event.shiftKey)
 274+data=this._updateRatio(data,event);data=this._respectSize(data,event);this._propagate("resize",event);el.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length)
 275+this._proportionallyResize();this._updateCache(data);this._trigger('resize',event,this.ui());return false;},_mouseStop:function(event){this.resizing=false;var o=this.options,self=this;if(this._helper){var pr=this._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var s={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;if(!o.animate)
 276+this.element.css($.extend(s,{top:top,left:left}));self.helper.height(self.size.height);self.helper.width(self.size.width);if(this._helper&&!o.animate)this._proportionallyResize();}
 277+$('body').css('cursor','auto');this.element.removeClass("ui-resizable-resizing");this._propagate("stop",event);if(this._helper)this.helper.remove();return false;},_updateCache:function(data){var o=this.options;this.offset=this.helper.offset();if(isNumber(data.left))this.position.left=data.left;if(isNumber(data.top))this.position.top=data.top;if(isNumber(data.height))this.size.height=data.height;if(isNumber(data.width))this.size.width=data.width;},_updateRatio:function(data,event){var o=this.options,cpos=this.position,csize=this.size,a=this.axis;if(data.height)data.width=(csize.height*this.aspectRatio);else if(data.width)data.height=(csize.width/this.aspectRatio);if(a=='sw'){data.left=cpos.left+(csize.width-data.width);data.top=null;}
 278+if(a=='nw'){data.top=cpos.top+(csize.height-data.height);data.left=cpos.left+(csize.width-data.width);}
 279+return data;},_respectSize:function(data,event){var el=this.helper,o=this.options,pRatio=this._aspectRatio||event.shiftKey,a=this.axis,ismaxw=isNumber(data.width)&&o.maxWidth&&(o.maxWidth<data.width),ismaxh=isNumber(data.height)&&o.maxHeight&&(o.maxHeight<data.height),isminw=isNumber(data.width)&&o.minWidth&&(o.minWidth>data.width),isminh=isNumber(data.height)&&o.minHeight&&(o.minHeight>data.height);if(isminw)data.width=o.minWidth;if(isminh)data.height=o.minHeight;if(ismaxw)data.width=o.maxWidth;if(ismaxh)data.height=o.maxHeight;var dw=this.originalPosition.left+this.originalSize.width,dh=this.position.top+this.size.height;var cw=/sw|nw|w/.test(a),ch=/nw|ne|n/.test(a);if(isminw&&cw)data.left=dw-o.minWidth;if(ismaxw&&cw)data.left=dw-o.maxWidth;if(isminh&&ch)data.top=dh-o.minHeight;if(ismaxh&&ch)data.top=dh-o.maxHeight;var isNotwh=!data.width&&!data.height;if(isNotwh&&!data.left&&data.top)data.top=null;else if(isNotwh&&!data.top&&data.left)data.left=null;return data;},_proportionallyResize:function(){var o=this.options;if(!this._proportionallyResizeElements.length)return;var element=this.helper||this.element;for(var i=0;i<this._proportionallyResizeElements.length;i++){var prel=this._proportionallyResizeElements[i];if(!this.borderDif){var b=[prel.css('borderTopWidth'),prel.css('borderRightWidth'),prel.css('borderBottomWidth'),prel.css('borderLeftWidth')],p=[prel.css('paddingTop'),prel.css('paddingRight'),prel.css('paddingBottom'),prel.css('paddingLeft')];this.borderDif=$.map(b,function(v,i){var border=parseInt(v,10)||0,padding=parseInt(p[i],10)||0;return border+padding;});}
 280+if($.browser.msie&&!(!($(element).is(':hidden')||$(element).parents(':hidden').length)))
 281+continue;prel.css({height:(element.height()-this.borderDif[0]-this.borderDif[2])||0,width:(element.width()-this.borderDif[1]-this.borderDif[3])||0});};},_renderProxy:function(){var el=this.element,o=this.options;this.elementOffset=el.offset();if(this._helper){this.helper=this.helper||$('<div style="overflow:hidden;"></div>');var ie6=$.browser.msie&&$.browser.version<7,ie6offset=(ie6?1:0),pxyoffset=(ie6?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+pxyoffset,height:this.element.outerHeight()+pxyoffset,position:'absolute',left:this.elementOffset.left-ie6offset+'px',top:this.elementOffset.top-ie6offset+'px',zIndex:++o.zIndex});this.helper.appendTo("body").disableSelection();}else{this.helper=this.element;}},_change:{e:function(event,dx,dy){return{width:this.originalSize.width+dx};},w:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{left:sp.left+dx,width:cs.width-dx};},n:function(event,dx,dy){var o=this.options,cs=this.originalSize,sp=this.originalPosition;return{top:sp.top+dy,height:cs.height-dy};},s:function(event,dx,dy){return{height:this.originalSize.height+dy};},se:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},sw:function(event,dx,dy){return $.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));},ne:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[event,dx,dy]));},nw:function(event,dx,dy){return $.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[event,dx,dy]));}},_propagate:function(n,event){$.ui.plugin.call(this,n,[event,this.ui()]);(n!="resize"&&this._trigger(n,event,this.ui()));},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition};}}));$.extend($.ui.resizable,{version:"1.7.1",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});$.ui.plugin.add("resizable","alsoResize",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options;_store=function(exp){$(exp).each(function(){$(this).data("resizable-alsoresize",{width:parseInt($(this).width(),10),height:parseInt($(this).height(),10),left:parseInt($(this).css('left'),10),top:parseInt($(this).css('top'),10)});});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.parentNode){if(o.alsoResize.length){o.alsoResize=o.alsoResize[0];_store(o.alsoResize);}
 282+else{$.each(o.alsoResize,function(exp,c){_store(exp);});}}else{_store(o.alsoResize);}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,os=self.originalSize,op=self.originalPosition;var delta={height:(self.size.height-os.height)||0,width:(self.size.width-os.width)||0,top:(self.position.top-op.top)||0,left:(self.position.left-op.left)||0},_alsoResize=function(exp,c){$(exp).each(function(){var el=$(this),start=$(this).data("resizable-alsoresize"),style={},css=c&&c.length?c:['width','height','top','left'];$.each(css||['width','height','top','left'],function(i,prop){var sum=(start[prop]||0)+(delta[prop]||0);if(sum&&sum>=0)
 283+style[prop]=sum||null;});if(/relative/.test(el.css('position'))&&$.browser.opera){self._revertToRelativePosition=true;el.css({position:'absolute',top:'auto',left:'auto'});}
 284+el.css(style);});};if(typeof(o.alsoResize)=='object'&&!o.alsoResize.nodeType){$.each(o.alsoResize,function(exp,c){_alsoResize(exp,c);});}else{_alsoResize(o.alsoResize);}},stop:function(event,ui){var self=$(this).data("resizable");if(self._revertToRelativePosition&&$.browser.opera){self._revertToRelativePosition=false;el.css({position:'relative'});}
 285+$(this).removeData("resizable-alsoresize-start");}});$.ui.plugin.add("resizable","animate",{stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;var pr=self._proportionallyResizeElements,ista=pr.length&&(/textarea/i).test(pr[0].nodeName),soffseth=ista&&$.ui.hasScroll(pr[0],'left')?0:self.sizeDiff.height,soffsetw=ista?0:self.sizeDiff.width;var style={width:(self.size.width-soffsetw),height:(self.size.height-soffseth)},left=(parseInt(self.element.css('left'),10)+(self.position.left-self.originalPosition.left))||null,top=(parseInt(self.element.css('top'),10)+(self.position.top-self.originalPosition.top))||null;self.element.animate($.extend(style,top&&left?{top:top,left:left}:{}),{duration:o.animateDuration,easing:o.animateEasing,step:function(){var data={width:parseInt(self.element.css('width'),10),height:parseInt(self.element.css('height'),10),top:parseInt(self.element.css('top'),10),left:parseInt(self.element.css('left'),10)};if(pr&&pr.length)$(pr[0]).css({width:data.width,height:data.height});self._updateCache(data);self._propagate("resize",event);}});}});$.ui.plugin.add("resizable","containment",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,el=self.element;var oc=o.containment,ce=(oc instanceof $)?oc.get(0):(/parent/.test(oc))?el.parent().get(0):oc;if(!ce)return;self.containerElement=$(ce);if(/document/.test(oc)||oc==document){self.containerOffset={left:0,top:0};self.containerPosition={left:0,top:0};self.parentData={element:$(document),left:0,top:0,width:$(document).width(),height:$(document).height()||document.body.parentNode.scrollHeight};}
 286+else{var element=$(ce),p=[];$(["Top","Right","Left","Bottom"]).each(function(i,name){p[i]=num(element.css("padding"+name));});self.containerOffset=element.offset();self.containerPosition=element.position();self.containerSize={height:(element.innerHeight()-p[3]),width:(element.innerWidth()-p[1])};var co=self.containerOffset,ch=self.containerSize.height,cw=self.containerSize.width,width=($.ui.hasScroll(ce,"left")?ce.scrollWidth:cw),height=($.ui.hasScroll(ce)?ce.scrollHeight:ch);self.parentData={element:ce,left:co.left,top:co.top,width:width,height:height};}},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,ps=self.containerSize,co=self.containerOffset,cs=self.size,cp=self.position,pRatio=self._aspectRatio||event.shiftKey,cop={top:0,left:0},ce=self.containerElement;if(ce[0]!=document&&(/static/).test(ce.css('position')))cop=co;if(cp.left<(self._helper?co.left:0)){self.size.width=self.size.width+(self._helper?(self.position.left-co.left):(self.position.left-cop.left));if(pRatio)self.size.height=self.size.width/o.aspectRatio;self.position.left=o.helper?co.left:0;}
 287+if(cp.top<(self._helper?co.top:0)){self.size.height=self.size.height+(self._helper?(self.position.top-co.top):self.position.top);if(pRatio)self.size.width=self.size.height*o.aspectRatio;self.position.top=self._helper?co.top:0;}
 288+self.offset.left=self.parentData.left+self.position.left;self.offset.top=self.parentData.top+self.position.top;var woset=Math.abs((self._helper?self.offset.left-cop.left:(self.offset.left-cop.left))+self.sizeDiff.width),hoset=Math.abs((self._helper?self.offset.top-cop.top:(self.offset.top-co.top))+self.sizeDiff.height);var isParent=self.containerElement.get(0)==self.element.parent().get(0),isOffsetRelative=/relative|absolute/.test(self.containerElement.css('position'));if(isParent&&isOffsetRelative)woset-=self.parentData.left;if(woset+self.size.width>=self.parentData.width){self.size.width=self.parentData.width-woset;if(pRatio)self.size.height=self.size.width/self.aspectRatio;}
 289+if(hoset+self.size.height>=self.parentData.height){self.size.height=self.parentData.height-hoset;if(pRatio)self.size.width=self.size.height*self.aspectRatio;}},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options,cp=self.position,co=self.containerOffset,cop=self.containerPosition,ce=self.containerElement;var helper=$(self.helper),ho=helper.offset(),w=helper.outerWidth()-self.sizeDiff.width,h=helper.outerHeight()-self.sizeDiff.height;if(self._helper&&!o.animate&&(/relative/).test(ce.css('position')))
 290+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});if(self._helper&&!o.animate&&(/static/).test(ce.css('position')))
 291+$(this).css({left:ho.left-cop.left-co.left,width:w,height:h});}});$.ui.plugin.add("resizable","ghost",{start:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size;self.ghost=self.originalElement.clone();self.ghost.css({opacity:.25,display:'block',position:'relative',height:cs.height,width:cs.width,margin:0,left:0,top:0}).addClass('ui-resizable-ghost').addClass(typeof o.ghost=='string'?o.ghost:'');self.ghost.appendTo(self.helper);},resize:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost)self.ghost.css({position:'relative',height:self.size.height,width:self.size.width});},stop:function(event,ui){var self=$(this).data("resizable"),o=self.options;if(self.ghost&&self.helper)self.helper.get(0).removeChild(self.ghost.get(0));}});$.ui.plugin.add("resizable","grid",{resize:function(event,ui){var self=$(this).data("resizable"),o=self.options,cs=self.size,os=self.originalSize,op=self.originalPosition,a=self.axis,ratio=o._aspectRatio||event.shiftKey;o.grid=typeof o.grid=="number"?[o.grid,o.grid]:o.grid;var ox=Math.round((cs.width-os.width)/(o.grid[0]||1))*(o.grid[0]||1),oy=Math.round((cs.height-os.height)/(o.grid[1]||1))*(o.grid[1]||1);if(/^(se|s|e)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;}
 292+else if(/^(ne)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;}
 293+else if(/^(sw)$/.test(a)){self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.left=op.left-ox;}
 294+else{self.size.width=os.width+ox;self.size.height=os.height+oy;self.position.top=op.top-oy;self.position.left=op.left-ox;}}});var num=function(v){return parseInt(v,10)||0;};var isNumber=function(value){return!isNaN(parseInt(value,10));};})(jQuery);(function($){$.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable;}
 295+this._tabify(true);},_setData:function(key,value){if(key=='selected'){if(this.options.collapsible&&value==this.options.selected){return;}
 296+this.select(value);}
 297+else{this.options[key]=value;if(key=='deselectable'){this.options.collapsible=value;}
 298+this._tabify();}},_tabId:function(a){return a.title&&a.title.replace(/\s/g,'_').replace(/[^A-Za-z0-9\-_:\.]/g,'')||this.options.idPrefix+$.data(a);},_sanitizeSelector:function(hash){return hash.replace(/:/g,'\\:');},_cookie:function(){var cookie=this.cookie||(this.cookie=this.options.cookie.name||'ui-tabs-'+$.data(this.list[0]));return $.cookie.apply(null,[cookie].concat($.makeArray(arguments)));},_ui:function(tab,panel){return{tab:tab,panel:panel,index:this.anchors.index(tab)};},_cleanup:function(){this.lis.filter('.ui-state-processing').removeClass('ui-state-processing').find('span:data(label.tabs)').each(function(){var el=$(this);el.html(el.data('label.tabs')).removeData('label.tabs');});},_tabify:function(init){this.list=this.element.children('ul:first');this.lis=$('li:has(a[href])',this.list);this.anchors=this.lis.map(function(){return $('a',this)[0];});this.panels=$([]);var self=this,o=this.options;var fragmentId=/^#.+/;this.anchors.each(function(i,a){var href=$(a).attr('href');var hrefBase=href.split('#')[0],baseEl;if(hrefBase&&(hrefBase===location.toString().split('#')[0]||(baseEl=$('base')[0])&&hrefBase===baseEl.href)){href=a.hash;a.href=href;}
 299+if(fragmentId.test(href)){self.panels=self.panels.add(self._sanitizeSelector(href));}
 300+else if(href!='#'){$.data(a,'href.tabs',href);$.data(a,'load.tabs',href.replace(/#.*$/,''));var id=self._tabId(a);a.href='#'+id;var $panel=$('#'+id);if(!$panel.length){$panel=$(o.panelTemplate).attr('id',id).addClass('ui-tabs-panel ui-widget-content ui-corner-bottom').insertAfter(self.panels[i-1]||self.list);$panel.data('destroy.tabs',true);}
 301+self.panels=self.panels.add($panel);}
 302+else{o.disabled.push(i);}});if(init){this.element.addClass('ui-tabs ui-widget ui-widget-content ui-corner-all');this.list.addClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');this.lis.addClass('ui-state-default ui-corner-top');this.panels.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom');if(o.selected===undefined){if(location.hash){this.anchors.each(function(i,a){if(a.hash==location.hash){o.selected=i;return false;}});}
 303+if(typeof o.selected!='number'&&o.cookie){o.selected=parseInt(self._cookie(),10);}
 304+if(typeof o.selected!='number'&&this.lis.filter('.ui-tabs-selected').length){o.selected=this.lis.index(this.lis.filter('.ui-tabs-selected'));}
 305+o.selected=o.selected||0;}
 306+else if(o.selected===null){o.selected=-1;}
 307+o.selected=((o.selected>=0&&this.anchors[o.selected])||o.selected<0)?o.selected:0;o.disabled=$.unique(o.disabled.concat($.map(this.lis.filter('.ui-state-disabled'),function(n,i){return self.lis.index(n);}))).sort();if($.inArray(o.selected,o.disabled)!=-1){o.disabled.splice($.inArray(o.selected,o.disabled),1);}
 308+this.panels.addClass('ui-tabs-hide');this.lis.removeClass('ui-tabs-selected ui-state-active');if(o.selected>=0&&this.anchors.length){this.panels.eq(o.selected).removeClass('ui-tabs-hide');this.lis.eq(o.selected).addClass('ui-tabs-selected ui-state-active');self.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[o.selected],self.panels[o.selected]));});this.load(o.selected);}
 309+$(window).bind('unload',function(){self.lis.add(self.anchors).unbind('.tabs');self.lis=self.anchors=self.panels=null;});}
 310+else{o.selected=this.lis.index(this.lis.filter('.ui-tabs-selected'));}
 311+this.element[o.collapsible?'addClass':'removeClass']('ui-tabs-collapsible');if(o.cookie){this._cookie(o.selected,o.cookie);}
 312+for(var i=0,li;(li=this.lis[i]);i++){$(li)[$.inArray(i,o.disabled)!=-1&&!$(li).hasClass('ui-tabs-selected')?'addClass':'removeClass']('ui-state-disabled');}
 313+if(o.cache===false){this.anchors.removeData('cache.tabs');}
 314+this.lis.add(this.anchors).unbind('.tabs');if(o.event!='mouseover'){var addState=function(state,el){if(el.is(':not(.ui-state-disabled)')){el.addClass('ui-state-'+state);}};var removeState=function(state,el){el.removeClass('ui-state-'+state);};this.lis.bind('mouseover.tabs',function(){addState('hover',$(this));});this.lis.bind('mouseout.tabs',function(){removeState('hover',$(this));});this.anchors.bind('focus.tabs',function(){addState('focus',$(this).closest('li'));});this.anchors.bind('blur.tabs',function(){removeState('focus',$(this).closest('li'));});}
 315+var hideFx,showFx;if(o.fx){if($.isArray(o.fx)){hideFx=o.fx[0];showFx=o.fx[1];}
 316+else{hideFx=showFx=o.fx;}}
 317+function resetStyle($el,fx){$el.css({display:''});if($.browser.msie&&fx.opacity){$el[0].style.removeAttribute('filter');}}
 318+var showTab=showFx?function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.hide().removeClass('ui-tabs-hide').animate(showFx,showFx.duration||'normal',function(){resetStyle($show,showFx);self._trigger('show',null,self._ui(clicked,$show[0]));});}:function(clicked,$show){$(clicked).closest('li').removeClass('ui-state-default').addClass('ui-tabs-selected ui-state-active');$show.removeClass('ui-tabs-hide');self._trigger('show',null,self._ui(clicked,$show[0]));};var hideTab=hideFx?function(clicked,$hide){$hide.animate(hideFx,hideFx.duration||'normal',function(){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');resetStyle($hide,hideFx);self.element.dequeue("tabs");});}:function(clicked,$hide,$show){self.lis.removeClass('ui-tabs-selected ui-state-active').addClass('ui-state-default');$hide.addClass('ui-tabs-hide');self.element.dequeue("tabs");};this.anchors.bind(o.event+'.tabs',function(){var el=this,$li=$(this).closest('li'),$hide=self.panels.filter(':not(.ui-tabs-hide)'),$show=$(self._sanitizeSelector(this.hash));if(($li.hasClass('ui-tabs-selected')&&!o.collapsible)||$li.hasClass('ui-state-disabled')||$li.hasClass('ui-state-processing')||self._trigger('select',null,self._ui(this,$show[0]))===false){this.blur();return false;}
 319+o.selected=self.anchors.index(this);self.abort();if(o.collapsible){if($li.hasClass('ui-tabs-selected')){o.selected=-1;if(o.cookie){self._cookie(o.selected,o.cookie);}
 320+self.element.queue("tabs",function(){hideTab(el,$hide);}).dequeue("tabs");this.blur();return false;}
 321+else if(!$hide.length){if(o.cookie){self._cookie(o.selected,o.cookie);}
 322+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));this.blur();return false;}}
 323+if(o.cookie){self._cookie(o.selected,o.cookie);}
 324+if($show.length){if($hide.length){self.element.queue("tabs",function(){hideTab(el,$hide);});}
 325+self.element.queue("tabs",function(){showTab(el,$show);});self.load(self.anchors.index(this));}
 326+else{throw'jQuery UI Tabs: Mismatching fragment identifier.';}
 327+if($.browser.msie){this.blur();}});this.anchors.bind('click.tabs',function(){return false;});},destroy:function(){var o=this.options;this.abort();this.element.unbind('.tabs').removeClass('ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible').removeData('tabs');this.list.removeClass('ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all');this.anchors.each(function(){var href=$.data(this,'href.tabs');if(href){this.href=href;}
 328+var $this=$(this).unbind('.tabs');$.each(['href','load','cache'],function(i,prefix){$this.removeData(prefix+'.tabs');});});this.lis.unbind('.tabs').add(this.panels).each(function(){if($.data(this,'destroy.tabs')){$(this).remove();}
 329+else{$(this).removeClass(['ui-state-default','ui-corner-top','ui-tabs-selected','ui-state-active','ui-state-hover','ui-state-focus','ui-state-disabled','ui-tabs-panel','ui-widget-content','ui-corner-bottom','ui-tabs-hide'].join(' '));}});if(o.cookie){this._cookie(null,o.cookie);}},add:function(url,label,index){if(index===undefined){index=this.anchors.length;}
 330+var self=this,o=this.options,$li=$(o.tabTemplate.replace(/#\{href\}/g,url).replace(/#\{label\}/g,label)),id=!url.indexOf('#')?url.replace('#',''):this._tabId($('a',$li)[0]);$li.addClass('ui-state-default ui-corner-top').data('destroy.tabs',true);var $panel=$('#'+id);if(!$panel.length){$panel=$(o.panelTemplate).attr('id',id).data('destroy.tabs',true);}
 331+$panel.addClass('ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide');if(index>=this.lis.length){$li.appendTo(this.list);$panel.appendTo(this.list[0].parentNode);}
 332+else{$li.insertBefore(this.lis[index]);$panel.insertBefore(this.panels[index]);}
 333+o.disabled=$.map(o.disabled,function(n,i){return n>=index?++n:n;});this._tabify();if(this.anchors.length==1){$li.addClass('ui-tabs-selected ui-state-active');$panel.removeClass('ui-tabs-hide');this.element.queue("tabs",function(){self._trigger('show',null,self._ui(self.anchors[0],self.panels[0]));});this.load(0);}
 334+this._trigger('add',null,this._ui(this.anchors[index],this.panels[index]));},remove:function(index){var o=this.options,$li=this.lis.eq(index).remove(),$panel=this.panels.eq(index).remove();if($li.hasClass('ui-tabs-selected')&&this.anchors.length>1){this.select(index+(index+1<this.anchors.length?1:-1));}
 335+o.disabled=$.map($.grep(o.disabled,function(n,i){return n!=index;}),function(n,i){return n>=index?--n:n;});this._tabify();this._trigger('remove',null,this._ui($li.find('a')[0],$panel[0]));},enable:function(index){var o=this.options;if($.inArray(index,o.disabled)==-1){return;}
 336+this.lis.eq(index).removeClass('ui-state-disabled');o.disabled=$.grep(o.disabled,function(n,i){return n!=index;});this._trigger('enable',null,this._ui(this.anchors[index],this.panels[index]));},disable:function(index){var self=this,o=this.options;if(index!=o.selected){this.lis.eq(index).addClass('ui-state-disabled');o.disabled.push(index);o.disabled.sort();this._trigger('disable',null,this._ui(this.anchors[index],this.panels[index]));}},select:function(index){if(typeof index=='string'){index=this.anchors.index(this.anchors.filter('[href$='+index+']'));}
 337+else if(index===null){index=-1;}
 338+if(index==-1&&this.options.collapsible){index=this.options.selected;}
 339+this.anchors.eq(index).trigger(this.options.event+'.tabs');},load:function(index){var self=this,o=this.options,a=this.anchors.eq(index)[0],url=$.data(a,'load.tabs');this.abort();if(!url||this.element.queue("tabs").length!==0&&$.data(a,'cache.tabs')){this.element.dequeue("tabs");return;}
 340+this.lis.eq(index).addClass('ui-state-processing');if(o.spinner){var span=$('span',a);span.data('label.tabs',span.html()).html(o.spinner);}
 341+this.xhr=$.ajax($.extend({},o.ajaxOptions,{url:url,success:function(r,s){$(self._sanitizeSelector(a.hash)).html(r);self._cleanup();if(o.cache){$.data(a,'cache.tabs',true);}
 342+self._trigger('load',null,self._ui(self.anchors[index],self.panels[index]));try{o.ajaxOptions.success(r,s);}
 343+catch(e){}
 344+self.element.dequeue("tabs");}}));},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr;}
 345+this._cleanup();},url:function(index,url){this.anchors.eq(index).removeData('cache.tabs').data('load.tabs',url);},length:function(){return this.anchors.length;}});$.extend($.ui.tabs,{version:'1.7.1',getter:'length',defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:'click',fx:null,idPrefix:'ui-tabs-',panelTemplate:'<div></div>',spinner:'<em>Loading&#8230;</em>',tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});$.extend($.ui.tabs.prototype,{rotation:null,rotate:function(ms,continuing){var self=this,o=this.options;var rotate=self._rotate||(self._rotate=function(e){clearTimeout(self.rotation);self.rotation=setTimeout(function(){var t=o.selected;self.select(++t<self.anchors.length?t:0);},ms);if(e){e.stopPropagation();}});var stop=self._unrotate||(self._unrotate=!continuing?function(e){if(e.clientX){self.rotate(null);}}:function(e){t=o.selected;rotate();});if(ms){this.element.bind('tabsshow',rotate);this.anchors.bind(o.event+'.tabs',stop);rotate();}
 346+else{clearTimeout(self.rotation);this.element.unbind('tabsshow',rotate);this.anchors.unbind(o.event+'.tabs',stop);delete this._rotate;delete this._unrotate;}}});})(jQuery);
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jui.combined.min.js
___________________________________________________________________
Added: svn:eol-style
1347 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/ArticleAssessment.js
@@ -0,0 +1,505 @@
 2+( function( $ ) {
 3+ $.ArticleAssessment = {
 4+ 'config': {
 5+ 'authtoken': '',
 6+ 'userID': '',
 7+ 'pageID': wgArticleId,
 8+ 'revID': wgCurRevisionId
 9+ },
 10+ 'messages': {},
 11+ 'settings': {
 12+ 'endpoint': wgScriptPath + '/api.php?',
 13+ 'fieldMessages' : [
 14+ 'wellsourced',
 15+ 'neutrality',
 16+ 'completeness',
 17+ 'readability'
 18+ ],
 19+ 'fieldHintSuffix': '-tooltip',
 20+ 'fieldPrefix': 'articleassessment-rating-',
 21+ 'fieldHTML': '<div class="field-wrapper"> \
 22+ <label class="rating-field-label"></label> \
 23+ <select class="rating-field"> \
 24+ <option value="1">1</option> \
 25+ <option value="2">2</option> \
 26+ <option value="3">3</option> \
 27+ <option value="4">4</option> \
 28+ <option value="5">5</option> \
 29+ </select> \
 30+ </div>',
 31+ 'structureHTML': '<div class="article-assessment-wrapper"> \
 32+ <form action="rate" method="post" id="article-assessment"> \
 33+ <fieldset id="article-assessment-rate"> \
 34+ <legend></legend> \
 35+ <div class="article-assessment-information"> \
 36+ <span class="article-assessment-rate-instructions"></span> \
 37+ <span class="article-assessment-rate-feedback"></span> \
 38+ </div> \
 39+ <div class="article-assessment-rating-fields"></div> \
 40+ <div class="article-assessment-submit"> \
 41+ <input type="submit" value="Submit" /> \
 42+ </div> \
 43+ </fieldset> \
 44+ <fieldset id="article-assessment-ratings"> \
 45+ <legend></legend> \
 46+ <div class="article-assessment-information"> \
 47+ <span class="article-assessment-show-ratings"></span> \
 48+ <span class="article-assessment-hide-ratings"></span> \
 49+ </div> \
 50+ </fieldset> \
 51+ </form> \
 52+ </div>',
 53+ 'ratingHTML': '<div class="article-assessment-rating"> \
 54+ <span class="article-assessment-rating-field-name"></span> \
 55+ <span class="article-assessment-rating-field-value-wrapper"> \
 56+ <span class="article-assessment-rating-field-value">0%</span> \
 57+ </span> \
 58+ <span class="article-assessment-rating-count"></span> \
 59+ </div>',
 60+ 'staleMSG': '<span class="article-assessment-stale-msg"></span>'
 61+ },
 62+
 63+ 'fn' : {
 64+ 'init': function( $$options ) {
 65+ // merge options with the config
 66+ var settings = $.extend( {}, $.ArticleAssessment.settings, $$options );
 67+ var config = $.ArticleAssessment.config;
 68+ // if this is an anon user, get a unique identifier for them
 69+ // load up the stored ratings and update the markup if the cookie exists
 70+ var userToken = $.cookie( 'mwArticleAssessmentUserToken' );
 71+ if ( typeof userToken == 'undefined' || userToken == null ) {
 72+ function randomString( string_length ) {
 73+ var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
 74+ var randomstring = '';
 75+ for ( var i = 0; i < string_length; i++ ) {
 76+ var rnum = Math.floor( Math.random() * chars.length );
 77+ randomstring += chars.substring( rnum, rnum + 1 );
 78+ }
 79+ return randomstring;
 80+ }
 81+ userToken = randomString( 32 );
 82+ $.cookie( 'mwArticleAssessmentUserToken', userToken, { 'expires': 30, 'path': '/' } );
 83+ }
 84+ if ( !wgUserName ) {
 85+ config.userID = userToken;
 86+ }
 87+ // setup our markup using the template variables in settings
 88+ var $structure = $( settings.structureHTML ),
 89+ instructions = $.ArticleAssessment.fn.getMsg( 'articleassessment-pleaserate' ),
 90+ feedback = $.ArticleAssessment.fn.getMsg( 'articleassessment-featurefeedback' ),
 91+ yourfeedback = $.ArticleAssessment.fn.getMsg( 'articleassessment-yourfeedback'),
 92+ articlerating = $.ArticleAssessment.fn.getMsg( 'articleassessment-articlerating' ),
 93+ resultshide = $.ArticleAssessment.fn.getMsg( 'articleassessment-results-hide' ),
 94+ resultsshow = $.ArticleAssessment.fn.getMsg( 'articleassessment-results-show' );
 95+ $structure
 96+ .find( '#article-assessment-rate legend' )
 97+ .text( yourfeedback )
 98+ .end()
 99+ .find( '.article-assessment-rate-instructions' )
 100+ .text( instructions )
 101+ .end()
 102+ .find( '.article-assessment-rate-feedback' )
 103+ .html( feedback )
 104+ .find( '.feedbacklink' )
 105+ .wrap( '<a href="#"></a>' )
 106+ .parent()
 107+ .click( $.ArticleAssessment.fn.showFeedback )
 108+ .end()
 109+ .end()
 110+ .end()
 111+ .find( '#article-assessment-ratings legend' )
 112+ .text( articlerating )
 113+ .end()
 114+ .find( '.article-assessment-show-ratings' )
 115+ .html( resultsshow )
 116+ .find( '.showlink' )
 117+ .wrap( '<a href="#"></a>' )
 118+ .parent()
 119+ .click( $.ArticleAssessment.fn.showRatings )
 120+ .end()
 121+ .end()
 122+ .end()
 123+ .find( '.article-assessment-hide-ratings' )
 124+ .html( resultshide )
 125+ .find ( '.hidelink' )
 126+ .wrap( '<a href="#"></a>' )
 127+ .parent()
 128+ .click( $.ArticleAssessment.fn.hideRatings )
 129+ .end()
 130+ .end()
 131+ .end();
 132+ for ( var i = 0; i < settings.fieldMessages.length; i++ ) {
 133+ var $field = $( settings.fieldHTML ),
 134+ $rating = $( settings.ratingHTML ),
 135+ label = $.ArticleAssessment.fn.getMsg( settings.fieldPrefix + settings.fieldMessages[i] ),
 136+ field = settings.fieldMessages[i],
 137+ hint = $.ArticleAssessment.fn.getMsg( settings.fieldPrefix + settings.fieldMessages[i] + settings.fieldHintSuffix ),
 138+ count = $.ArticleAssessment.fn.getMsg( 'articleassessment-noratings', [0, 0] );
 139+ // initialize the field html
 140+ $field
 141+ .attr( 'id', 'articleassessment-rate-' + field )
 142+ .find( 'label' )
 143+ .attr( 'for', 'rating_' + field )
 144+ .attr( 'original-title', hint )
 145+ .text( label )
 146+ .end()
 147+ .find( 'select' )
 148+ .attr( 'id', 'rating_' + field )
 149+ .attr( 'name', 'rating[' + field + ']' );
 150+ // initialize the rating html
 151+ $rating
 152+ .attr( 'id', 'articleassessment-rating-' + field )
 153+ .find( '.article-assessment-rating-field-name' )
 154+ .text( label )
 155+ .end()
 156+ .find( '.article-assessment-rating-count' )
 157+ .text( count );
 158+ // append the field and rating html
 159+ $structure
 160+ .find( '.article-assessment-rating-fields' )
 161+ .append( $field )
 162+ .end()
 163+ .find( '#article-assessment-ratings' )
 164+ .append( $rating );
 165+ }
 166+ // store our settings and configuration for later
 167+ $structure.find( '#article-assessment' ).data( 'articleAssessment-context', { 'settings': settings, 'config': config } );
 168+ $( '#catlinks' ).before( $structure );
 169+ // Hide the ratings initially
 170+ $.ArticleAssessment.fn.hideRatings();
 171+
 172+
 173+ // set the height of our smaller fieldset to match the taller
 174+ if ( $( '#article-assessment-rate' ).height() > $( '#article-assessment-ratings' ).height() ) {
 175+ $( '#article-assessment-ratings' ).css( 'minHeight', $( '#article-assessment-rate' ).height() );
 176+ } else {
 177+ $( '#article-assessment-rate' ).css( 'minHeight', $( '#article-assessment-ratings' ).height() );
 178+ }
 179+ // attempt to fetch the ratings
 180+ $.ArticleAssessment.fn.getRatingData();
 181+
 182+ // initialize the star plugin
 183+ $( '.rating-field' ).each( function() {
 184+ $( this )
 185+ .wrapAll( '<div class="rating-field"></div>' )
 186+ .parent()
 187+ .stars( {
 188+ inputType: 'select',
 189+ callback: function( value, link ) {
 190+ // remove any stale or rated classes
 191+ value.$stars.each( function() {
 192+ $( this )
 193+ .removeClass( 'ui-stars-star-stale' )
 194+ .removeClass( 'ui-stars-star-rated' );
 195+ // enable our submit button if it's still disabled
 196+ $( '#article-assessment input:disabled' ).removeAttr( 'disabled' );
 197+ } );
 198+ }
 199+ } );
 200+ });
 201+ // intialize the tooltips
 202+ $( '.field-wrapper label[original-title]' ).each( function() {
 203+ $( this )
 204+ .after( $( '<span class="rating-field-hint" />' )
 205+ .attr( 'original-title', $( this ).attr( 'original-title' ) )
 206+ .tipsy( { gravity : 'se', opacity: '0.9' } ) );
 207+ } );
 208+ // bind submit event to the form
 209+ $( '#article-assessment' )
 210+ .submit( function() { $.ArticleAssessment.fn.submitRating(); return false; } );
 211+ // prevent the submit button for being active until all ratings are filled out
 212+ $( '#article-assessment input[type=submit]' )
 213+ .attr( 'disabled', 'disabled' );
 214+ },
 215+ 'showRatings': function() {
 216+ $( '#article-assessment-ratings' )
 217+ .removeClass( 'article-assessment-ratings-disabled' )
 218+ .find( '.article-assessment-show-ratings' )
 219+ .hide()
 220+ .end()
 221+ .find( '.article-assessment-hide-ratings' )
 222+ .show();
 223+ return false;
 224+ },
 225+ 'hideRatings': function() {
 226+ $( '#article-assessment-ratings' )
 227+ .addClass( 'article-assessment-ratings-disabled' )
 228+ .find( '.article-assessment-hide-ratings' )
 229+ .hide()
 230+ .end()
 231+ .find( '.article-assessment-show-ratings' )
 232+ .show();
 233+ return false;
 234+
 235+ },
 236+
 237+ // Request the ratings data for the current article
 238+ 'getRatingData': function() {
 239+ var config = $( '#article-assessment' ).data( 'articleAssessment-context' ).config;
 240+ var requestData = {
 241+ 'action': 'query',
 242+ 'list': 'articleassessment',
 243+ 'aapageid': config.pageID,
 244+ 'aauserrating': 1,
 245+ 'format': 'json'
 246+ }
 247+ if ( config.userID.length == 32 ) {
 248+ requestData.aaanontoken = config.userID;
 249+ }
 250+
 251+ var request = $.ajax( {
 252+ url: wgScriptPath + '/api.php',
 253+ data: requestData,
 254+ dataType: 'json',
 255+ success: $.ArticleAssessment.fn.afterGetRatingData,
 256+ error: function( XMLHttpRequest, textStatus, errorThrown ) {
 257+ $.ArticleAssessment.fn.flashNotice( $.ArticleAssessment.fn.getMsg( 'articleassessment-error' ),
 258+ { 'class': 'article-assessment-error-msg' } );
 259+ }
 260+ } );
 261+ },
 262+ 'afterGetRatingData' : function( data ) {
 263+ var settings = $( '#article-assessment' ).data( 'articleAssessment-context' ).settings;
 264+ // add the correct data to the markup
 265+ if ( data.query && data.query.articleassessment && data.query.articleassessment.length > 0 ) {
 266+ for ( var r in data.query.articleassessment[0].ratings ) {
 267+ var rating = data.query.articleassessment[0].ratings[r],
 268+ $rating = $( '#' + rating.ratingdesc ),
 269+ count = rating.count,
 270+ total = ( rating.total / count ).toFixed( 1 ),
 271+ label = $.ArticleAssessment.fn.getMsg( 'articleassessment-noratings', [total, count] );
 272+ $rating
 273+ .find( '.article-assessment-rating-field-value' )
 274+ .text( total )
 275+ .end()
 276+ .find( '.article-assessment-rating-count' )
 277+ .text( label );
 278+ if( rating.userrating ) {
 279+ var $rateControl = $( '#' + rating.ratingdesc.replace( 'rating', 'rate' ) + ' .rating-field' );
 280+ $rateControl.stars( 'select', rating.userrating );
 281+ }
 282+ }
 283+ // if the rating is more than 5 revisions old, mark it as stale
 284+ if ( typeof data.query.articleassessment[0].stale != 'undefined' ) {
 285+ // add the stale star class to each on star
 286+ $( '.ui-stars-star-on' )
 287+ .addClass( 'ui-stars-star-stale' );
 288+ // add the stale message
 289+ var msg = $.ArticleAssessment.fn.getMsg( 'articleassessment-stalemessage-norevisioncount' );
 290+ $.ArticleAssessment.fn.flashNotice( msg, { 'class': 'article-assessment-stale-msg' } );
 291+ } else {
 292+ // if it's not a stale rating, we want to make the stars blue
 293+ $( '.ui-stars-star-on' ).addClass( 'ui-stars-star-rated' );
 294+ }
 295+ }
 296+ // initialize the ratings
 297+ $( '.article-assessment-rating-field-value' ).each( function() {
 298+ $( this )
 299+ .css( {
 300+ 'width': 120 - ( 120 * ( parseFloat( $( this ).text() ) / 5 ) ) + 'px'
 301+ } )
 302+ } );
 303+ },
 304+ 'submitRating': function() {
 305+ var config = $( '#article-assessment' ).data( 'articleAssessment-context' ).config;
 306+ // clear out the stale message
 307+ $.ArticleAssessment.fn.flashNotice( );
 308+
 309+ // lock the star inputs & submit
 310+ $( '.rating-field' ).stars( 'disable' );
 311+ $( '#article-assessment input' ).attr( 'disabled', 'disabled' );
 312+ // get our results for submitting
 313+ var results = {};
 314+ $( '.rating-field input' ).each( function() {
 315+ // expects the hidden inputs to have names like 'rating[field-name]' which we use to
 316+ // be transparent about what values we're sending to the server
 317+ var fieldName = $( this ).attr( 'name' ).match( /\[([a-zA-Z0-9\-]*)\]/ )[1];
 318+ results[ fieldName ] = $( this ).val();
 319+ } );
 320+ var request = $.ajax( {
 321+ url: wgScriptPath + '/api.php',
 322+ type: 'POST',
 323+ data: {
 324+ 'action': 'articleassessment',
 325+ 'revid': config.revID,
 326+ 'pageid': config.pageID,
 327+ 'r1' : results['wellsourced'],
 328+ 'r2' : results['neutrality'],
 329+ 'r3' : results['completeness'],
 330+ 'r4' : results['readability'],
 331+ 'anontoken': config.userID,
 332+ 'format': 'json'
 333+ },
 334+ dataType: 'json',
 335+ success: $.ArticleAssessment.fn.afterSubmitRating,
 336+ error: function( XMLHttpRequest, textStatus, errorThrown ) {
 337+ $.ArticleAssessment.fn.flashNotice( $.ArticleAssessment.fn.getMsg( 'articleassessment-error' ),
 338+ { 'class': 'article-assessment-error-msg' } );
 339+ }
 340+ } );
 341+ },
 342+ 'afterSubmitRating': function ( data ) {
 343+ // update the ratings
 344+ $.ArticleAssessment.fn.getRatingData();
 345+ // set the stars to rated status
 346+ $( '.ui-stars-star-on' ).addClass( 'ui-stars-star-rated' );
 347+ // unlock the stars & submit
 348+ $( '.rating-field' ).stars( 'enable' );
 349+ $( '#article-assessment input:disabled' ).removeAttr( 'disabled' );
 350+ // update the results
 351+
 352+ // show the results
 353+ $.ArticleAssessment.fn.showRatings();
 354+ // say thank you
 355+ $.ArticleAssessment.fn.flashNotice( $.ArticleAssessment.fn.getMsg( 'articleassessment-thanks' ),
 356+ { 'class': 'article-assessment-success-msg' } );
 357+ },
 358+ // places a message on the interface
 359+ 'flashNotice': function( text, options ) {
 360+ if ( arguments.length == 0 ) {
 361+ // clear existing messages, but don't add a new one
 362+ $( '#article-assessment .article-assessment-flash' ).remove();
 363+ } else {
 364+ // clear and add a new message
 365+ $( '#article-assessment .article-assessment-flash' ).remove();
 366+ var className = options['class'];
 367+ // create our new message
 368+ $msg = $( '<span />' )
 369+ .addClass( 'article-assessment-flash' )
 370+ .html( text );
 371+ // if the class option was passed, add it
 372+ if( options['class'] ) {
 373+ $msg.addClass( options['class'] );
 374+ }
 375+ // place our new message on the page
 376+ $( '#article-assessment .article-assessment-submit' )
 377+ .append( $msg );
 378+ }
 379+ },
 380+ 'showFeedback': function() {
 381+ $.ArticleAssessment.fn.withJUI( function() {
 382+ var $dialogDiv = $( '#article-assessment-dialog' );
 383+ if ( $dialogDiv.size() == 0 ) {
 384+ $dialogDiv = $( '<div id="article-assessment-dialog" class="loading" />' )
 385+ .dialog( {
 386+ width: 600,
 387+ height: 400,
 388+ bgiframe: true,
 389+ autoOpen: true,
 390+ modal: true,
 391+ title: $.ArticleAssessment.fn.getMsg( 'articleassessment-survey-title' ),
 392+ close: function() {
 393+ $( this )
 394+ .find( '.article-assessment-success-msg, .article-assessment-error-msg' )
 395+ .remove()
 396+ .end()
 397+ .find( 'form' )
 398+ .show();
 399+ }
 400+ } );
 401+ $dialogDiv.load(
 402+ wgScript + '?title=Special:SimpleSurvey&survey=articlerating&raw=1',
 403+ function() {
 404+ $( this ).find( 'form' ).bind( 'submit', $.ArticleAssessment.fn.submitFeedback );
 405+ $( this ).removeClass( 'loading' );
 406+ }
 407+ );
 408+ }
 409+ $dialogDiv.dialog( 'open' );
 410+ } );
 411+ return false;
 412+ },
 413+ 'submitFeedback': function() {
 414+ var $dialogDiv = $( '#article-assessment-dialog' );
 415+ $dialogDiv
 416+ .find( 'form' )
 417+ .hide()
 418+ .end()
 419+ .addClass( 'loading' );
 420+
 421+ // Submit straight to the special page. Yes, this is a dirty dirty hack
 422+ // Build request from form data
 423+ var formData = {};
 424+ $dialogDiv.find( 'input' ).each( function() {
 425+ var name = $( this ).attr( 'name' );
 426+ if ( name !== '' ) {
 427+ if ( name.substr( -2 ) == '[]' ) {
 428+ var trimmedName = name.substr( 0, name.length - 2 );
 429+ if ( typeof formData[trimmedName] == 'undefined' ) {
 430+ formData[trimmedName] = [];
 431+ }
 432+ formData[trimmedName].push( $( this ).val() );
 433+ } else {
 434+ formData[name] = $( this ).val();
 435+ }
 436+ }
 437+ } );
 438+ formData.title = 'Special:SimpleSurvey';
 439+
 440+ $.ajax( {
 441+ url: wgScript,
 442+ type: 'POST',
 443+ data: formData,
 444+ dataType: 'html',
 445+ success: function( data ) {
 446+ // This is an evil screenscraping method to determine whether
 447+ // the submission was successful
 448+ var success = $( data ).find( '.simplesurvey-success' ).size() > 0;
 449+ // TODO: Style success-msg, error-msg
 450+ $( '<div />' )
 451+ .addClass( success ? 'article-assessment-success-msg' : 'article-assessment-error-msg' )
 452+ .text( $.ArticleAssessment.fn.getMsg( success? 'articleassessment-survey-thanks' : 'articleassessment-error' ) )
 453+ .appendTo( $dialogDiv );
 454+ $dialogDiv.removeClass( 'loading' );
 455+ if ( success ) {
 456+ // Hide the dialog link
 457+ $( '#article-assessment .article-assessment-rate-feedback' ).hide();
 458+ }
 459+ },
 460+ error: function( XMLHttpRequest, textStatus, errorThrown ) {
 461+ // TODO: Duplicates code, factor out, maybe
 462+ $( '<div />' )
 463+ .addClass( 'article-assessment-error-msg' )
 464+ .text( $.ArticleAssessment.fn.getMsg( 'articleassessment-error' ) )
 465+ .appendTo( $dialogDiv );
 466+ $dialogDiv.removeClass( 'loading' );
 467+ }
 468+ } );
 469+ return false;
 470+ },
 471+ 'addMessages': function( messages ) {
 472+ for ( var key in messages ) {
 473+ $.ArticleAssessment.messages[key] = messages[key];
 474+ }
 475+ },
 476+ /**
 477+ * Get a message
 478+ * FIXME: Parameter expansion is broken in all sorts of edge cases
 479+ */
 480+ 'getMsg': function( key, args ) {
 481+ if ( !( key in $.ArticleAssessment.messages ) ) {
 482+ return '[' + key + ']';
 483+ }
 484+ var msg = $.ArticleAssessment.messages[key];
 485+ if ( typeof args == 'object' || typeof args == 'array' ) {
 486+ for ( var i = 0; i < args.length; i++ ) {
 487+ msg = msg.replace( new RegExp( '\\$' + ( parseInt( i ) + 1 ), 'g' ), args[i] );
 488+ }
 489+ } else if ( typeof args == 'string' || typeof args == 'number' ) {
 490+ msg = msg.replace( /\$1/g, args );
 491+ }
 492+ return msg;
 493+ },
 494+ 'withJUI': function( callback ) {
 495+ if ( typeof $.ui == 'undefined' ) {
 496+ $.getScript( wgArticleAssessmentJUIPath, callback );
 497+ } else {
 498+ callback();
 499+ }
 500+ }
 501+ }
 502+ };
 503+ $( document ).ready( function () {
 504+ $.ArticleAssessment.fn.init( );
 505+ } ); //document ready
 506+} )( jQuery );
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/ArticleAssessment.js
___________________________________________________________________
Added: svn:eol-style
1507 + native
Index: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.stars.js
@@ -0,0 +1,302 @@
 2+/*!
 3+ * jQuery Stars v1
 4+ * adapted by Adam Miller (acm6603@gmail.com)
 5+ *
 6+ * Adapted from jQuery UI Stars v3.0.1
 7+ * Marek "Orkan" Zajac (orkans@gmail.com)
 8+ * http://plugins.jquery.com/project/Star_Rating_widget
 9+ *
 10+ */
 11+(function($) {
 12+$.stars = {
 13+ defaults : {
 14+ inputType: 'radio', // [radio|select]
 15+ split: 0, // decrease number of stars by splitting each star into pieces [2|3|4|...]
 16+ disabled: false, // set to [true] to make the stars initially disabled
 17+ cancelTitle: 'Cancel Rating',
 18+ cancelValue: 0, // default value of Cancel btn.
 19+ cancelShow: true,
 20+ disableValue: true, // set to [false] to not disable the hidden input when Cancel btn is clicked, so the value will present in POST data.
 21+ oneVoteOnly: false,
 22+ showTitles: false,
 23+ captionEl: null, // jQuery object - target for text captions
 24+ callback: null, // function(ui, type, value, event)
 25+ /*
 26+ * CSS classes
 27+ */
 28+ starWidth: 16, // width of the star image
 29+ cancelClass: 'ui-stars-cancel',
 30+ starClass: 'ui-stars-star',
 31+ starOnClass: 'ui-stars-star-on',
 32+ starHoverClass: 'ui-stars-star-hover',
 33+ starDisabledClass: 'ui-stars-star-disabled',
 34+ cancelHoverClass: 'ui-stars-cancel-hover',
 35+ cancelDisabledClass: 'ui-stars-cancel-disabled'
 36+ },
 37+ create: function( ) {
 38+ var self = this, o = this.options, starId = 0;
 39+ this.element.data('former.stars', this.element.html());
 40+ o.isSelect = o.inputType == 'select';
 41+ this.$form = $(this.element).closest('form');
 42+ this.$selec = o.isSelect ? $('select', this.element) : null;
 43+ this.$rboxs = o.isSelect ? $('option', this.$selec) : $(':radio', this.element);
 44+ /*
 45+ * Map all inputs from $rboxs array to Stars elements
 46+ */
 47+ this.$stars = this.$rboxs.map(function(i)
 48+ {
 49+ var el = {
 50+ value: this.value,
 51+ title: (o.isSelect ? this.text : this.title) || this.value,
 52+ isDefault: (o.isSelect && this.defaultSelected) || this.defaultChecked
 53+ };
 54+ if(i==0) {
 55+ o.split = typeof o.split != 'number' ? 0 : o.split;
 56+ o.val2id = [];
 57+ o.id2val = [];
 58+ o.id2title = [];
 59+ o.name = o.isSelect ? self.$selec.get(0).name : this.name;
 60+ o.disabled = o.disabled || (o.isSelect ? $(self.$selec).attr('disabled') : $(this).attr('disabled'));
 61+ }
 62+ /*
 63+ * Consider it as a Cancel button?
 64+ */
 65+ if(el.value == o.cancelValue) {
 66+ o.cancelTitle = el.title;
 67+ return null;
 68+ }
 69+ o.val2id[el.value] = starId;
 70+ o.id2val[starId] = el.value;
 71+ o.id2title[starId] = el.title;
 72+ if(el.isDefault) {
 73+ o.checked = starId;
 74+ o.value = o.defaultValue = el.value;
 75+ o.title = el.title;
 76+ }
 77+ var $s = $('<div/>').addClass(o.starClass);
 78+ var $a = $('<a/>').attr('title', o.showTitles ? el.title : '').text(el.value);
 79+ /*
 80+ * Prepare division settings
 81+ */
 82+ if(o.split) {
 83+ var oddeven = (starId % o.split);
 84+ var stwidth = Math.floor(o.starWidth / o.split);
 85+ $s.width(stwidth);
 86+ $a.css('margin-left', '-' + (oddeven * stwidth) + 'px');
 87+ }
 88+ starId++;
 89+ return $s.append($a).get(0);
 90+ });
 91+ /*
 92+ * How many Stars?
 93+ */
 94+ o.items = starId;
 95+ /*
 96+ * Remove old content
 97+ */
 98+ o.isSelect ? this.$selec.remove() : this.$rboxs.remove();
 99+ /*
 100+ * Append Stars interface
 101+ */
 102+ this.$cancel = $('<div/>').addClass(o.cancelClass).append( $('<a/>').attr('title', o.showTitles ? o.cancelTitle : '').text(o.cancelValue) );
 103+ o.cancelShow &= !o.disabled && !o.oneVoteOnly;
 104+ o.cancelShow && this.element.append(this.$cancel);
 105+ this.element.append(this.$stars);
 106+ /*
 107+ * Initial selection
 108+ */
 109+ if(o.checked === undefined) {
 110+ o.checked = -1;
 111+ o.value = o.defaultValue = o.cancelValue;
 112+ o.title = '';
 113+ }
 114+ /*
 115+ * The only FORM element, that has been linked to the stars control. The value field is updated on each Star click event
 116+ */
 117+ this.$value = $("<input type='hidden' name='"+o.name+"' value='"+o.value+"' />");
 118+ this.element.append(this.$value);
 119+ /*
 120+ * Attach stars event handler
 121+ */
 122+ this.$stars.bind('click.stars', function(e) {
 123+ if(!o.forceSelect && o.disabled) return false;
 124+ var i = self.$stars.index(this);
 125+ o.checked = i;
 126+ o.value = o.id2val[i];
 127+ o.title = o.id2title[i];
 128+ self.$value.attr({disabled: o.disabled ? 'disabled' : '', value: o.value});
 129+ fillTo(i, false);
 130+ self.disableCancel();
 131+ !o.forceSelect && self.callback(e, 'star');
 132+ })
 133+ .bind('mouseover.stars', function() {
 134+ if(o.disabled) return false;
 135+ var i = self.$stars.index(this);
 136+ fillTo(i, true);
 137+ })
 138+ .bind('mouseout.stars', function() {
 139+ if(o.disabled) return false;
 140+ fillTo(self.options.checked, false);
 141+ });
 142+ /*
 143+ * Attach cancel event handler
 144+ */
 145+ this.$cancel.bind('click.stars', function(e) {
 146+ if(!o.forceSelect && (o.disabled || o.value == o.cancelValue)) return false;
 147+ o.checked = -1;
 148+ o.value = o.cancelValue;
 149+ o.title = '';
 150+ self.$value.val(o.value);
 151+ o.disableValue && self.$value.attr({disabled: 'disabled'});
 152+ fillNone();
 153+ self.disableCancel();
 154+ !o.forceSelect && self.callback(e, 'cancel');
 155+ })
 156+ .bind('mouseover.stars', function() {
 157+ if(self.disableCancel()) return false;
 158+ self.$cancel.addClass(o.cancelHoverClass);
 159+ fillNone();
 160+ self.showCap(o.cancelTitle);
 161+ })
 162+ .bind('mouseout.stars', function() {
 163+ if(self.disableCancel()) return false;
 164+ self.$cancel.removeClass(o.cancelHoverClass);
 165+ self.$stars.triggerHandler('mouseout.stars');
 166+ });
 167+ /*
 168+ * Attach onReset event handler to the parent FORM
 169+ */
 170+ this.$form.bind('reset.stars', function(){
 171+ !o.disabled && self.select(o.defaultValue);
 172+ });
 173+ /*
 174+ * Clean up to avoid memory leaks in certain versions of IE 6
 175+ */
 176+ $(window).unload(function(){
 177+ self.$cancel.unbind('.stars');
 178+ self.$stars.unbind('.stars');
 179+ self.$form.unbind('.stars');
 180+ self.$selec = self.$rboxs = self.$stars = self.$value = self.$cancel = self.$form = null;
 181+ });
 182+ /*
 183+ * Star selection helpers
 184+ */
 185+ function fillTo(index, hover) {
 186+ if(index != -1) {
 187+ var addClass = hover ? o.starHoverClass : o.starOnClass;
 188+ var remClass = hover ? o.starOnClass : o.starHoverClass;
 189+ self.$stars.eq(index).prevAll('.' + o.starClass).andSelf().removeClass(remClass).addClass(addClass);
 190+ self.$stars.eq(index).nextAll('.' + o.starClass).removeClass(o.starHoverClass + ' ' + o.starOnClass);
 191+ self.showCap(o.id2title[index]);
 192+ }
 193+ else fillNone();
 194+ };
 195+ function fillNone() {
 196+ self.$stars.removeClass(o.starOnClass + ' ' + o.starHoverClass);
 197+ self.showCap('');
 198+ };
 199+ /*
 200+ * Finally, set up the Stars
 201+ */
 202+ this.select( o.value );
 203+ o.disabled && this.disable();
 204+ },
 205+ /*
 206+ * Private functions
 207+ */
 208+ disableCancel: function() {
 209+ var o = this.options, disabled = o.disabled || o.oneVoteOnly || (o.value == o.cancelValue);
 210+ if(disabled) this.$cancel.removeClass(o.cancelHoverClass).addClass(o.cancelDisabledClass);
 211+ else this.$cancel.removeClass(o.cancelDisabledClass);
 212+ this.$cancel.css('opacity', disabled ? 0.5 : 1);
 213+ return disabled;
 214+ },
 215+ disableAll: function() {
 216+ var o = this.options;
 217+ this.disableCancel();
 218+ if(o.disabled) this.$stars.filter('div').addClass(o.starDisabledClass);
 219+ else this.$stars.filter('div').removeClass(o.starDisabledClass);
 220+ },
 221+ showCap: function(s) {
 222+ var o = this.options;
 223+ if(o.captionEl) o.captionEl.text(s);
 224+ },
 225+ /*
 226+ * Public functions
 227+ */
 228+ value: function() {
 229+ return this.options.value;
 230+ },
 231+ select: function( val ) {
 232+ var o = this.options, e = (val == o.cancelValue) ? this.$cancel : this.$stars.eq(o.val2id[val]);
 233+ o.forceSelect = true;
 234+ e.triggerHandler('click.stars');
 235+ o.forceSelect = false;
 236+ },
 237+ selectID: function(id) {
 238+ var o = this.options, e = (id == -1) ? this.$cancel : this.$stars.eq(id);
 239+ o.forceSelect = true;
 240+ e.triggerHandler('click.stars');
 241+ o.forceSelect = false;
 242+ },
 243+ enable: function() {
 244+ this.options.disabled = false;
 245+ this.disableAll();
 246+ },
 247+ disable: function() {
 248+ this.options.disabled = true;
 249+ this.disableAll();
 250+ },
 251+ destroy: function() {
 252+ this.$form.unbind('.stars');
 253+ this.$cancel.unbind('.stars').remove();
 254+ this.$stars.unbind('.stars').remove();
 255+ this.$value.remove();
 256+ this.element.unbind('.stars').html(this.element.data('former.stars')).removeData('stars');
 257+ return this;
 258+ },
 259+ callback: function(e, type) {
 260+ var o = this.options;
 261+ o.callback && o.callback(this, type, o.value, e);
 262+ o.oneVoteOnly && !o.disabled && this.disable();
 263+ }
 264+}
 265+$.fn.stars = function ( ) {
 266+ // convert the arguments to an array
 267+ var args = Array.prototype.slice.call(arguments);
 268+ // default value to return -- overwritten by api calls
 269+ var out = $( this );
 270+ $( this ).each( function() {
 271+ // get the context if it's already been initialized
 272+ var context = $( this ).data( 'stars-context' );
 273+ if ( typeof context == 'undefined' || context == null ) {
 274+ // setup the context if it hasn't been yet
 275+ context = $.extend( {}, {
 276+ element: $( this ),
 277+ options: $.stars.defaults
 278+ }, $.stars );
 279+ }
 280+ // Handle various calling styles
 281+ if ( args.length > 0 ) {
 282+ if ( typeof args[0] == 'object' ) {
 283+ // merge the passed options into defaults
 284+ context.options = $.extend( {}, context.options, args[0] );
 285+ // initialize
 286+ $.stars.create.call( context );
 287+ } else if ( typeof args[0] == 'string' ) {
 288+ // API call
 289+ var funcName = args[0];
 290+ // call the function, and if it returns something, store the output in our return var
 291+ out = $.stars[funcName].call( context, args.slice(1) ) || out;
 292+ }
 293+ } else {
 294+ // initialize with the defaults
 295+ $.stars.create.call( context );
 296+ }
 297+ // save our context, bay-bee
 298+ $( this ).data( 'stars-context', context );
 299+ } );
 300+
 301+ return out;
 302+};
 303+} )( jQuery );
Property changes on: branches/wmf/1.16wmf4/extensions/ArticleAssessmentPilot/js/jquery.stars.js
___________________________________________________________________
Added: svn:eol-style
1304 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/Surveys.php
@@ -0,0 +1,88 @@
 2+<?php
 3+
 4+$wgSimpleSurveyRedirectURL = "";
 5+
 6+$wgValidSurveys[] = 'vitals-07-2010';
 7+
 8+$wgPrefSwitchSurveys['vitals-07-2010'] = array(
 9+ 'submit-msg' => 'vitals-07-2010-submit',
 10+ 'intro-msg' => 'simple-survey-intro-vitals-07-2010',
 11+ 'updatable' => false,
 12+ 'questions' => array(
 13+ 'use' => array(
 14+ 'question' => 'vitals-07-2010-question-use',
 15+ 'type' => 'select',
 16+ 'answers' => array(
 17+ 'blank' => 'vitals-07-2010-blank',
 18+ 'daily' => 'vitals-07-2010-answer-daily',
 19+ 'weekly' => 'vitals-07-2010-answer-weekly',
 20+ 'monthly' => 'vitals-07-2010-answer-monthly',
 21+ 'rarely' => 'vitals-07-2010-answer-rarely',
 22+ 'first' => 'vitals-07-2010-answer-firsttime',
 23+ ),
 24+ ),
 25+ 'edit' => array(
 26+ 'question' => 'vitals-07-2010-question-edit',
 27+ 'type' => 'select',
 28+ 'answers' => array(
 29+ 'blank' => 'vitals-07-2010-blank',
 30+ 'daily' => 'vitals-07-2010-answer-y-daily',
 31+ 'weekly' => 'vitals-07-2010-answer-y-weekly',
 32+ 'monthly' => 'vitals-07-2010-answer-y-monthly',
 33+ 'rarely' => 'vitals-07-2010-answer-y-rarely',
 34+ 'never' => 'vitals-07-2010-answer-n-never',
 35+ 'dunno' => 'vitals-07-2010-answer-dunno-edit',
 36+ ),
 37+ ),
 38+ 'nonprofit' => array(
 39+ 'question' => 'vitals-07-2010-question-nonprofit',
 40+ 'type' => 'select',
 41+ 'answers' => array(
 42+ 'blank' => 'vitals-07-2010-blank',
 43+ 'knew' => 'vitals-07-2010-answer-nonprof-knew',
 44+ 'business' => 'vitals-07-2010-answer-nonprof-business',
 45+ 'nothink' => 'vitals-07-2010-answer-nonprof-think',
 46+ ),
 47+ ),
 48+ 'wikimediafoundation' => array(
 49+ 'question' => 'vitals-07-2010-question-wikimedia',
 50+ 'type' => 'select',
 51+ 'answers' => array(
 52+ 'blank' => 'vitals-07-2010-blank',
 53+ 'notknow' => 'vitals-07-2010-answer-never-heard',
 54+ 'exists' => 'vitals-07-2010-answer-heard-nothing',
 55+ 'hosted' => 'vitals-07-2010-answer-hosted',
 56+ 'familiar' => 'vitals-07-2010-answer-know',
 57+ ),
 58+ ),
 59+ 'computerexp' => array(
 60+ 'question' => 'vitals-07-2010-question-computerexp',
 61+ 'type' => 'select',
 62+ 'answers' => array(
 63+ 'blank' => 'vitals-07-2010-blank',
 64+ 'beginner' => 'vitals-07-2010-answer-beginner',
 65+ 'one' => 'vitals-07-2010-answer-one-lang',
 66+ 'many' => 'vitals-07-2010-answer-many-lang',
 67+ 'none' => 'vitals-07-2010-answer-no-lang',
 68+ ),
 69+ ),
 70+ 'age' => array(
 71+ 'question' => 'vitals-07-2010-question-age',
 72+ 'type' => 'smallinput',
 73+ ),
 74+ 'gender' => array(
 75+ 'question' => 'vitals-07-2010-question-gender',
 76+ 'type' => 'select',
 77+ 'answers' => array(
 78+ 'blank' => 'vitals-07-2010-blank',
 79+ 'm' => 'vitals-07-2010-answer-male',
 80+ 'f' => 'vitals-07-2010-answer-female',
 81+ 'o' => 'vitals-07-2010-answer-other',
 82+ ),
 83+ ),
 84+ 'story' => array(
 85+ 'question' => 'vitals-07-2010-question-story',
 86+ 'type' => 'text',
 87+ ),
 88+ ),
 89+);
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/Surveys.php
___________________________________________________________________
Added: svn:eol-style
190 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.classes.php
@@ -0,0 +1,106 @@
 2+<?php
 3+class SimpleSurvey extends PrefSwitchSurvey {
 4+ // Correlation between names of field types and implementation classes
 5+ /* Static Functions */
 6+
 7+ /* update schema*/
 8+ public static function schema( ) {
 9+ global $wgExtNewTables;
 10+
 11+ $wgExtNewTables[] = array( 'prefswitch_survey',
 12+ dirname( dirname( __FILE__ ) ) . "/UsabilityInitiative/PrefSwitch/PrefSwitch.sql"
 13+ );
 14+
 15+ return true;
 16+ }
 17+
 18+ /**
 19+ * creates a random token
 20+ * @return a random token
 21+ */
 22+ public static function generateRandomCookieID() {
 23+ global $wgUser;
 24+ return wfGenerateToken( array( $wgUser, time() ) );
 25+ }
 26+
 27+
 28+ /**
 29+ * Render the HTML for a survey.
 30+ * @param $name string Survey name
 31+ * @param $questions array Array containing question data
 32+ * @param $loadFromDB bool Load previous survey data from the database
 33+ * @return string HTML
 34+ */
 35+ public static function render( $questions ) {
 36+ global $wgUser;
 37+
 38+ $html = Xml::openElement( 'dl' );
 39+ foreach ( $questions as $field => $config ) {
 40+ $answer = null;
 41+ $answerData = null;
 42+ $invisible = false;
 43+ if ( isset( $config['visibility'] ) && $config['visibility'] == 'hidden' ) {
 44+ $invisible = true;
 45+ }
 46+ if ( $invisible ) {
 47+ $html .= Xml::openElement( 'div', array( "style" => "display:none;" ) );
 48+ }
 49+ $html .= call_user_func( array( self::$fieldTypes[$config['type']], 'render' ),
 50+ $field, $config, $answer, $answerData
 51+ );
 52+ if ( $invisible ) {
 53+ $html .= Xml::closeElement( 'div' );
 54+ }
 55+ }
 56+ $html .= Xml::closeElement( 'dl' );
 57+ return $html;
 58+ }
 59+
 60+ /**
 61+ * Save a survey to the database
 62+ * @param $name string Survey name
 63+ * @param $survey array Survey configuration data
 64+ */
 65+ public static function save( $name, $survey ) {
 66+ global $wgRequest, $wgUser;
 67+ $dbw = wfGetDb( DB_MASTER );
 68+ $now = $dbw->timestamp();
 69+ /*$cookieID = $wgRequest->getCookie( "vitals-survey" );
 70+ if ( $cookieID == null ) {
 71+ $cookieID = self::generateRandomCookieID();
 72+ $wgRequest->response()->setcookie( "vitals-survey", $cookieID );
 73+ }*/
 74+
 75+ foreach ( $survey['questions'] as $question => $config ) {
 76+ $dbw->insert(
 77+ 'prefswitch_survey',
 78+ array_merge(
 79+ array(
 80+ 'pss_user' => $wgUser->getId(),
 81+ 'pss_user_text' => $wgUser->getName(),
 82+ 'pss_timestamp' => $now,
 83+ 'pss_name' => $name,
 84+ 'pss_question' => $question,
 85+ ),
 86+ call_user_func( array( self::$fieldTypes[$config['type']], 'save' ), $question, $wgRequest )
 87+ ),
 88+ __METHOD__
 89+ );
 90+ }
 91+
 92+ // pseudoquestion, logged in? IP address?
 93+ $dbw->insert(
 94+ 'prefswitch_survey',
 95+ array(
 96+ 'pss_user' => $wgUser->getId(),
 97+ 'pss_user_text' => $wgUser->getName(),
 98+ 'pss_timestamp' => $now,
 99+ 'pss_name' => $name,
 100+ 'pss_question' => "logged_in",
 101+ 'pss_answer' => $wgUser->isLoggedIn() ? "yes" : "no",
 102+ 'pss_answer_data' => wfGetIP(),
 103+ ),
 104+ __METHOD__
 105+ );
 106+ }
 107+}
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.classes.php
___________________________________________________________________
Added: svn:eol-style
1108 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.i18n.php
@@ -0,0 +1,62 @@
 2+<?php
 3+
 4+$messages = array();
 5+
 6+/** English
 7+ * @author Nimish Gautam
 8+ */
 9+$messages['en'] = array(
 10+ 'simplesurvey' => 'Take a quick survey',
 11+ 'simple-survey-invalid' => 'That is not a valid survey at this time',
 12+ 'simple-survey-back' => 'Go back',
 13+ 'simple-survey-title' => 'Simple Survey',
 14+ 'simple-survey-confirm' => 'Thanks! Your data has been submitted.',
 15+
 16+ /*vitals 07 2010 */
 17+ 'simple-survey-intro-vitals-07-2010' => 'This is a quick survey to give us a better idea of who you are',
 18+ 'vitals-07-2010-submit' => 'Submit',
 19+
 20+ 'vitals-07-2010-question-use' => 'How often do you use Wikipedia?',
 21+ 'vitals-07-2010-question-edit' => 'Do you edit Wikipedia?',
 22+ 'vitals-07-2010-question-nonprofit' => 'Did you know Wikipedia is a non-profit project?',
 23+ 'vitals-07-2010-question-wikimedia' => 'Which of these describes your knowledge of the Wikimedia Foundation, the organization that hosts Wikipedia and its sister projects such as Wiktionary and Wikiquote:',
 24+ 'vitals-07-2010-question-age' => 'Please tell us your age',
 25+ 'vitals-07-2010-question-programming' => 'Please tell us which one of these describes you:',
 26+ 'vitals-07-2010-question-gender' => 'Please tell us your gender',
 27+ 'vitals-07-2010-question-story' => 'We love hearing about ways Wikipedia has impacted your life! Please feel free to share any stories, explain any of your answers, or leave a comment for the Wikimedia Foundation here:',
 28+ 'vitals-07-2010-question-computerexp' => "Which one of the following describes your computer experience?",
 29+
 30+ 'vitals-07-2010-blank' => '',
 31+ 'vitals-07-2010-answer-daily' => 'Daily',
 32+ 'vitals-07-2010-answer-weekly' => 'Weekly',
 33+ 'vitals-07-2010-answer-monthly' => 'Monthly',
 34+ 'vitals-07-2010-answer-rarely' => 'less than monthly',
 35+ 'vitals-07-2010-answer-firsttime' => 'This was my first time',
 36+ 'vitals-07-2010-answer-never' => 'Never',
 37+
 38+ 'vitals-07-2010-answer-y-daily' => 'Yes, daily',
 39+ 'vitals-07-2010-answer-y-weekly' => 'Yes, weekly',
 40+ 'vitals-07-2010-answer-y-monthly' => 'Yes, monthly',
 41+ 'vitals-07-2010-answer-y-rarely' => 'Yes, but less than monthly',
 42+ 'vitals-07-2010-answer-n-never' => 'No, never',
 43+ 'vitals-07-2010-answer-dunno-edit' => "I didn't know you could edit",
 44+
 45+ 'vitals-07-2010-answer-nonprof-knew' => "I knew it was a non-profit",
 46+ 'vitals-07-2010-answer-nonprof-business' => "I assumed it was a for-profit business",
 47+ 'vitals-07-2010-answer-nonprof-think' => "I've never thought about it",
 48+
 49+ 'vitals-07-2010-answer-never-heard' => "I've never heard of it",
 50+ 'vitals-07-2010-answer-heard-nothing' => "I guess I've heard of it, but don't know anything about it",
 51+ 'vitals-07-2010-answer-hosted' => "I know that Wikipedia is hosted by the Wikimedia Foundation, but that's about it",
 52+ 'vitals-07-2010-answer-know' => "I'm familiar with the Wikimedia Foundation",
 53+
 54+ 'vitals-07-2010-answer-beginner' => "I am a beginner with at least one programming language (eg HTML, PHP, Java, C)",
 55+ 'vitals-07-2010-answer-one-lang' => "I am comfortable with at least one programming language",
 56+ 'vitals-07-2010-answer-many-lang' => "I am comfortable with many programming languages",
 57+ 'vitals-07-2010-answer-no-lang' => "Programming? Not me!",
 58+
 59+ 'vitals-07-2010-answer-male' => 'Male',
 60+ 'vitals-07-2010-answer-female' => 'Female',
 61+ 'vitals-07-2010-answer-other' => 'Other',
 62+ );
 63+
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.i18n.php
___________________________________________________________________
Added: svn:eol-style
164 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/README
@@ -0,0 +1,6 @@
 2+#
 3+# THIS EXTENSION DEPENDS ON CODE THAT HAS BEEN MOVED TO A BRANCH, AND NO LONGER EXISTS IN TRUNK!
 4+#
 5+# TO SATISTFY THE DEPENDENCIES OF THIS CODE, YOU MUST GET THE UsabilityInitiative EXTENSION FROM ONE OF THE FOLLOWING:
 6+# /branches/REL1_16/extensions/UsabilityInitiative/ -- official release version
 7+# /branches/usability-initiative-1_16/ -- intermediate version with more recent patches, should be merged soon
\ No newline at end of file
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/README
___________________________________________________________________
Added: svn:eol-style
18 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.php
@@ -0,0 +1,103 @@
 2+<?php
 3+
 4+$dir = dirname( __FILE__ ) . '/';
 5+
 6+// from prefswitch in usability initiative
 7+$prefswitchdir = dirname( dirname( __FILE__ ) ) . "/UsabilityInitiative/PrefSwitch";
 8+
 9+// Use this to override the URL of ext.prefSwitch.{js,css} if needed
 10+$wgSimpleSurveyJSPath = null;
 11+$wgSimpleSurveyCSSPath = null;
 12+
 13+// Adds Autoload Classes
 14+$wgAutoloadClasses = array_merge(
 15+ $wgAutoloadClasses,
 16+ array(
 17+ 'PrefSwitchSurvey' => $prefswitchdir . '/PrefSwitch.classes.php',
 18+ 'PrefSwitchSurveyField' => $prefswitchdir . '/PrefSwitch.classes.php',
 19+ 'PrefSwitchSurveyFieldSelect' => $prefswitchdir . '/PrefSwitch.classes.php',
 20+ 'PrefSwitchSurveyFieldRadios' => $prefswitchdir . '/PrefSwitch.classes.php',
 21+ 'PrefSwitchSurveyFieldChecks' => $prefswitchdir . '/PrefSwitch.classes.php',
 22+ 'PrefSwitchSurveyFieldBoolean' => $prefswitchdir . '/PrefSwitch.classes.php',
 23+ 'PrefSwitchSurveyFieldDimensions' => $prefswitchdir . '/PrefSwitch.classes.php',
 24+ 'PrefSwitchSurveyFieldText' => $prefswitchdir . '/PrefSwitch.classes.php',
 25+ 'SimpleSurvey' => $dir . "SimpleSurvey.classes.php",
 26+ 'SpecialSimpleSurvey' => $dir . 'SpecialSimpleSurvey.php',
 27+ )
 28+);
 29+
 30+// add special pages
 31+$wgSpecialPages['SimpleSurvey'] = 'SpecialSimpleSurvey';
 32+$wgSpecialPageGroups['SimpleSurvey'] = 'wiki';
 33+$wgExtensionMessagesFiles['SimpleSurvey'] = $dir . 'SimpleSurvey.i18n.php';
 34+
 35+
 36+$wgExtensionCredits['other'][] = array(
 37+ 'path' => __FILE__,
 38+ 'name' => 'SimpleSurvey',
 39+ 'author' => array( 'Nimish Gautam' ),
 40+ 'version' => '0.1',
 41+ 'url' => 'http://www.mediawiki.org/wiki/Extension:UsabilityInitiative',
 42+);
 43+
 44+// Register database operations
 45+$wgHooks['LoadExtensionSchemaUpdates'][] = 'SimpleSurvey::schema';
 46+
 47+$wgValidSurveys = array();
 48+
 49+// add surveys
 50+require_once( $dir . "Surveys.php" );
 51+
 52+// Always include the browser stuff...
 53+foreach ( $wgPrefSwitchSurveys as &$survey ) {
 54+ $survey['questions']['browser'] = array(
 55+ 'question' => 'prefswitch-survey-question-browser',
 56+ 'type' => 'select',
 57+ 'answers' => array(
 58+ 'ie5' => 'prefswitch-survey-answer-browser-ie5',
 59+ 'ie6' => 'prefswitch-survey-answer-browser-ie6',
 60+ 'ie7' => 'prefswitch-survey-answer-browser-ie7',
 61+ 'ie8' => 'prefswitch-survey-answer-browser-ie8',
 62+ 'ie9' => 'prefswitch-survey-answer-browser-ie9',
 63+ 'ffb' => 'prefswitch-survey-answer-browser-ffb',
 64+ 'ff1' => 'prefswitch-survey-answer-browser-ff1',
 65+ 'ff2' => 'prefswitch-survey-answer-browser-ff2',
 66+ 'ff3' => 'prefswitch-survey-answer-browser-ff3',
 67+ 'cb' => 'prefswitch-survey-answer-browser-cb',
 68+ 'cd' => 'prefswitch-survey-answer-browser-cd',
 69+ 'c1' => 'prefswitch-survey-answer-browser-c1',
 70+ 'c2' => 'prefswitch-survey-answer-browser-c2',
 71+ 'c3' => 'prefswitch-survey-answer-browser-c3',
 72+ 'c4' => 'prefswitch-survey-answer-browser-c4',
 73+ 'c5' => 'prefswitch-survey-answer-browser-c5',
 74+ 's3' => 'prefswitch-survey-answer-browser-s3',
 75+ 's4' => 'prefswitch-survey-answer-browser-s4',
 76+ 's5' => 'prefswitch-survey-answer-browser-s5',
 77+ 'o9' => 'prefswitch-survey-answer-browser-o9',
 78+ 'o9.5' => 'prefswitch-survey-answer-browser-o9.5',
 79+ 'o10' => 'prefswitch-survey-answer-browser-o10',
 80+ ),
 81+ 'other' => 'prefswitch-survey-answer-browser-other',
 82+ );
 83+ $survey['questions']['os'] = array(
 84+ 'question' => 'prefswitch-survey-question-os',
 85+ 'type' => 'select',
 86+ 'answers' => array(
 87+ 'windows' => 'prefswitch-survey-answer-os-windows',
 88+ 'windowsmobile' => 'prefswitch-survey-answer-os-windowsmobile',
 89+ 'macos' => 'prefswitch-survey-answer-os-macos',
 90+ 'iphoneos' => 'prefswitch-survey-answer-os-iphoneos',
 91+ 'ios' => 'prefswitch-survey-answer-os-ios',
 92+ 'linux' => 'prefswitch-survey-answer-os-linux',
 93+ ),
 94+ 'other' => 'prefswitch-survey-answer-os-other',
 95+ );
 96+ $survey['questions']['res'] = array(
 97+ 'question' => 'prefswitch-survey-question-res',
 98+ 'type' => 'dimensions',
 99+ );
 100+}
 101+unset( $survey );
 102+
 103+
 104+
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SimpleSurvey.php
___________________________________________________________________
Added: svn:eol-style
1105 + native
Index: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SpecialSimpleSurvey.php
@@ -0,0 +1,157 @@
 2+<?php
 3+/**
 4+ * Special:PrefSwitch
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
 9+
 10+class SpecialSimpleSurvey extends SpecialPage {
 11+
 12+ /* Private Members */
 13+
 14+ private $origin = '';
 15+ private $originTitle = null;
 16+ private $originQuery = '';
 17+ private $originLink = '';
 18+ private $originLinkUrl = '';
 19+ private $originFullUrl = '';
 20+ private $tokenToCheck = '';
 21+
 22+ /* Functions */
 23+
 24+ /**
 25+ * Quick token matching wrapper for form processing
 26+ */
 27+ public function checkToken() {
 28+ global $wgRequest;
 29+ $this->tokenToCheck = $_SESSION['wsSimpleSurveyToken'];
 30+ if ( $this->tokenToCheck != "" &&
 31+ ( $wgRequest->getVal( 'token' ) == $this->tokenToCheck ) ) {
 32+ return true;
 33+ } else {
 34+ return false;
 35+ }
 36+ }
 37+
 38+ public function setToken() {
 39+ $this->tokenToCheck = wfGenerateToken( array( $this, time() ) );
 40+ $_SESSION['wsSimpleSurveyToken'] = $this->tokenToCheck;
 41+ }
 42+
 43+ public function __construct() {
 44+ parent::__construct( 'SimpleSurvey' );
 45+ wfLoadExtensionMessages( 'SimpleSurvey' );
 46+ }
 47+
 48+
 49+ public function execute( $par ) {
 50+ global $wgRequest, $wgOut, $wgUser, $wgPrefSwitchSurveys, $wgPrefSwitchStyleVersion, $wgValidSurveys, $wgSimpleSurveyRedirectURL;
 51+ $this->setHeaders();
 52+ // Set page title
 53+ $wgOut->setPageTitle( wfMsg( 'simple-survey-title' ) );
 54+ $surveyName = $wgRequest->getVal( "survey" );
 55+
 56+ if ( $wgRequest->wasPosted() ) {
 57+ if ( $surveyName && in_array( $surveyName, $wgValidSurveys ) && $this->checkToken() ) {
 58+ SimpleSurvey::save( $surveyName, $wgPrefSwitchSurveys[$surveyName] );
 59+ $wgOut->addHtml( '<strong class="simplesurvey-success">' . wfMsgHtml( 'simple-survey-confirm' ) . '</strong>' );
 60+ }
 61+ // forward to new page
 62+ if ( $wgSimpleSurveyRedirectURL ) {
 63+ $wgOut->redirect( $wgSimpleSurveyRedirectURL );
 64+ }
 65+
 66+ return;
 67+ }
 68+
 69+ $this->setToken();
 70+ // Get the origin from the request
 71+ $par = $wgRequest->getVal( 'from', $par );
 72+ $this->originTitle = Title::newFromText( $par );
 73+ // $this->originTitle should never be Special:Userlogout
 74+ if (
 75+ $this->originTitle &&
 76+ $this->originTitle->isSpecial( 'Userlogout' )
 77+ ) {
 78+ $this->originTitle = null;
 79+ }
 80+ // Get some other useful information about the origin
 81+ if ( $this->originTitle ) {
 82+ $this->origin = $this->originTitle->getPrefixedDBKey();
 83+ $this->originQuery = $wgRequest->getVal( 'fromquery' );
 84+ $this->originLink = $wgUser->getSkin()->link( $this->originTitle, null, array(), $this->originQuery );
 85+ $this->originLinkUrl = $this->originTitle->getLinkUrl( $this->originQuery );
 86+ $this->originFullUrl = $this->originTitle->getFullUrl( $this->originQuery );
 87+ }
 88+
 89+ // Begin output
 90+ $this->setHeaders();
 91+
 92+ global $wgExtensionAssetsPath, $wgSimpleSurveyJSPath, $wgSimpleSurveyCSSPath;
 93+ $script = Html::linkedScript( wfAppendQuery( $wgSimpleSurveyJSPath ? $wgSimpleSurveyJSPath :
 94+ "$wgExtensionAssetsPath/UsabilityInitiative/PrefSwitch/modules/ext.prefSwitch.js", $wgPrefSwitchStyleVersion ) );
 95+ $wgOut->addScript( $script );
 96+ $wgOut->addExtensionStyle( wfAppendQuery( $wgSimpleSurveyCSSPath ? $wgSimpleSurveyCSSPath :
 97+ "$wgExtensionAssetsPath/UsabilityInitiative/PrefSwitch/modules/ext.prefSwitch.css", $wgPrefSwitchStyleVersion ) );
 98+
 99+ // Handle various modes
 100+ $renderedSurvey = $this->render( $wgRequest->getVal( "survey" ) );
 101+
 102+ $wgOut->addHtml( '<div class="plainlinks">' );
 103+ $wgOut->addHtml( $renderedSurvey );
 104+ $wgOut->addHtml( '</div>' );
 105+
 106+ // Handle raw mode
 107+ // Only output the <form> and the <script>
 108+ if ( $wgRequest->getBool( 'raw' ) ) {
 109+ $wgOut->disable();
 110+ echo $renderedSurvey . $script;
 111+ }
 112+ }
 113+
 114+ /* Private Functions */
 115+
 116+ private function render( $mode = null ) {
 117+ global $wgUser, $wgOut, $wgPrefSwitchSurveys, $wgValidSurveys;
 118+ // Make sure links will retain the origin
 119+ $query = array( 'from' => $this->origin, 'fromquery' => $this->originQuery );
 120+
 121+ if ( !isset( $wgPrefSwitchSurveys[$mode] ) && !in_array( $mode, $wgValidSurveys ) ) {
 122+ $wgOut->addWikiMsg( "simple-survey-invalid" );
 123+ if ( $this->originTitle ) {
 124+ $wgOut->addHTML( wfMsg( "simple-survey-back", $this->originLink ) );
 125+ }
 126+ return;
 127+ }
 128+
 129+ if ( isset( $wgPrefSwitchSurveys[$mode]['intro-msg'] ) ) {
 130+ $wgOut->addWikiMsg( $wgPrefSwitchSurveys[$mode]['intro-msg'] );
 131+ }
 132+
 133+ // Setup a form
 134+ $html = Xml::openElement(
 135+ 'form', array(
 136+ 'method' => 'post',
 137+ 'action' => $this->getTitle()->getLinkURL( $query ),
 138+ 'class' => 'simple-survey',
 139+ 'id' => "simple-survey-{$mode}"
 140+ )
 141+ );
 142+ $html .= Xml::hidden( 'survey', $mode );
 143+ $html .= Xml::hidden( 'token', $this->tokenToCheck );
 144+ // Render a survey
 145+ $html .= SimpleSurvey::render(
 146+ $wgPrefSwitchSurveys[$mode]['questions']
 147+ );
 148+ // Finish out the form
 149+ $html .= Xml::openElement( 'dt', array( 'class' => 'prefswitch-survey-submit' ) );
 150+ $html .= Xml::submitButton(
 151+ wfMsg( $wgPrefSwitchSurveys[$mode]['submit-msg'] ),
 152+ array( 'id' => "simple-survey-submit-{$mode}", 'class' => 'prefswitch-survey-submit' )
 153+ );
 154+ $html .= Xml::closeElement( 'dt' );
 155+ $html .= Xml::closeElement( 'form' );
 156+ return $html;
 157+ }
 158+}
Property changes on: branches/wmf/1.16wmf4/extensions/SimpleSurvey/SpecialSimpleSurvey.php
___________________________________________________________________
Added: svn:eol-style
1159 + native

Status & tagging log