public static function userForm(&$items, $opts) { $opts->consumeValue('users'); global $wgRequest; $default = $wgRequest->getVal('users', ''); $items['users'] = Xml::inputLabelSep(wfMsg('cleanchanges-users'), 'users', 'mw-users', 40, $default); return true; }
/** * Create an input to filter changes by categories * * @param FormOptions $opts * @return array */ protected function categoryFilterForm(FormOptions $opts) { list($label, $input) = Xml::inputLabelSep($this->msg('rc_categories')->text(), 'categories', 'mw-categories', false, $opts['categories']); $input .= ' ' . Xml::checkLabel($this->msg('rc_categories_any')->text(), 'categories_any', 'mw-categories_any', $opts['categories_any']); return array($label, $input); }
/** * Shortcut for keeping the code at least a bit readable. Adds label and input into $form array. * @param $form \list{String} Array where input element and label is appended. * @param $label \string Label text. * @param $name \string Name attribute. * @param $size \int Size attribute of the input element. Default false. * @param $text \string Text of the value attribute. Default false. * @param $attribs \array Extra attributes. Default empty array. */ protected function addInputLabel( &$form, $label, $name, $size = false , $text = false, $attribs = array() ) { $br = Html::element( 'br' ); list( $label, $input ) = Xml::inputLabelSep( $label, $name, $name, $size, $text, $attribs ); $form[] = $label . $br; $form[] = $input . $br; }
/** * Returns query form fields. * @param $opts Form options. * @return Array of form fields. */ protected static function getQueryFormFields( FormOptions $opts ) { global $wgWikilogEnableTags; $fields = array(); $fields['wikilog'] = Xml::inputLabelSep( wfMsg( 'wikilog-form-wikilog' ), 'wikilog', 'wl-wikilog', 40, str_replace( '_', ' ', $opts->consumeValue( 'wikilog' ) ) ); $fields['category'] = Xml::inputLabelSep( wfMsg( 'wikilog-form-category' ), 'category', 'wl-category', 40, str_replace( '_', ' ', $opts->consumeValue( 'category' ) ) ); $fields['author'] = Xml::inputLabelSep( wfMsg( 'wikilog-form-author' ), 'author', 'wl-author', 40, str_replace( '_', ' ', $opts->consumeValue( 'author' ) ) ); if ( $wgWikilogEnableTags ) { $fields['tag'] = Xml::inputLabelSep( wfMsg( 'wikilog-form-tag' ), 'tag', 'wl-tag', 40, str_replace( '_', ' ', $opts->consumeValue( 'tag' ) ) ); } $fields['date'] = array( Xml::label( wfMsg( 'wikilog-form-date' ), 'wl-month' ), Xml::monthSelector( $opts->consumeValue( 'month' ), '', 'wl-month' ) . " " . Xml::input( 'year', 4, $opts->consumeValue( 'year' ), array( 'maxlength' => 4 ) ) ); $opts->consumeValue( 'day' ); // ignore day, not really useful $statusSelect = new XmlSelect( 'show', 'wl-status', $opts->consumeValue( 'show' ) ); $statusSelect->addOption( wfMsg( 'wikilog-show-all' ), 'all' ); $statusSelect->addOption( wfMsg( 'wikilog-show-published' ), 'published' ); $statusSelect->addOption( wfMsg( 'wikilog-show-drafts' ), 'drafts' ); $fields['status'] = array( Xml::label( wfMsg( 'wikilog-form-status' ), 'wl-status' ), $statusSelect->getHTML() ); $fields['submit'] = Xml::submitbutton( wfMsg( 'allpagessubmit' ) ); return $fields; }
/** * Generates the forms elements(s) for choosing printouts and sorting * options. Use its complement processPoSortFormBox() to decode data * sent by these elements. * * @global boolean $smwgQSortingSupport * @global boolean $smwgQRandSortingSupport * @global WebRequest $wgRequest * @global string $smwgScriptPath * @global integer $smwgQPrintoutLimit * @param mixed $enableAutocomplete * @return string */ protected function getPoSortFormBox($enableAutocomplete = SMWQueryUI::ENABLE_AUTO_SUGGEST) { global $smwgQSortingSupport, $wgRequest, $smwgScriptPath; global $smwgQRandSortingSupport, $smwgQPrintoutLimit; SMWOutputs::requireResource('jquery.ui.autocomplete'); SMWOutputs::requireResource('jquery.ui.dialog'); SMWOutputs::requireResource('ext.smw.style'); $result = '<span id="smwposortbox">'; $params = $this->uiCore->getParameters(); // mainlabel if (is_array($params) && array_key_exists('mainlabel', $params)) { $mainLabel = $params['mainlabel']; } else { $mainLabel = ''; } if ($mainLabel == '-') { $mainLabelText = ''; $formDisplay = 'none'; } else { $mainLabelText = $mainLabel; $formDisplay = 'block'; } $result .= Html::openElement('div', array('id' => 'smwmainlabel', 'class' => 'smwsort', 'style' => "display:{$formDisplay};")) . Html::openElement('span', array('class' => 'smwquisortlabel')) . Html::openElement('span', array('class' => 'smw-remove')) . Html::openElement('a', array('href' => 'javascript:smwRemoveMainLabel()')) . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span><strong>' . wfMessage('smw_qui_rescol')->text() . '</strong></span>' . Xml::openElement('div', array('id' => 'mainlabel-dialog', 'title' => wfMessage('smw_qui_mainlabopts')->text(), 'class' => 'smwmainlabdialog')) . '<table align="center" ><tr>' . '<td>' . wfMessage('smw_qui_dlabel')->text() . '</td>' . '<td><input size="25" value="' . $mainLabelText . '" id="mainlabelvis" /></td>' . '</tr></table>' . '</div>' . '<input type="hidden" name="pmainlabel" value="' . $mainLabel . '" id="mainlabelhid" /> ' . '<a class="smwq-more" href="javascript:smw_makeMainlabelDialog()">' . wfMessage('smw_qui_options')->text() . '</a> ' . '</div>'; $urlArgs = array(); $urlArgs['pmainlabel'] = $mainLabel; // START: create form elements already submitted earlier via form // attempting to load parameters from $wgRequest $propertyValues = $wgRequest->getArray('property', array()); $propertyLabelValues = $wgRequest->getArray('prop_label', array()); $propertyFormatValues = $wgRequest->getArray('prop_format', array()); $propertyLimitValues = $wgRequest->getArray('prop_limit', array()); $orderValues = $wgRequest->getArray('order', array()); $displayValues = $wgRequest->getArray('display', array()); $categoryValues = $wgRequest->getArray('category', array()); $categoryLabelValues = $wgRequest->getArray('cat_label', array()); $categoryYesValues = $wgRequest->getArray('cat_yes', array()); $categoryNoValues = $wgRequest->getArray('cat_no', array()); $mainColumnLabels = $wgRequest->getArray('maincol_label', array()); $mainLabelCheck = $wgRequest->getCheck('pmainlabel'); if (!$mainLabelCheck) { /* * Printouts and sorting might be set via another widget/form/source, so * create elements by fetching data from $uiCore. The exact ordering * of Ui elements might not be preserved, if the above check were to * be removed. */ if (array_key_exists('sort', $params) && array_key_exists('order', $params)) { $sortVal = explode(',', trim(strtolower($params['sort']))); $orderVal = explode(',', $params['order']); reset($sortVal); reset($orderVal); // give up if sort and order dont have equal number of elements if (count($sortVal) !== count($orderVal)) { $orderVal = array(); $sortVal = array(); } } else { $orderVal = array(); $sortVal = array(); } $printOuts = $this->uiCore->getPrintOuts(); $counter = 0; foreach ($printOuts as $poValue) { if ($poValue->getMode() == SMWPrintRequest::PRINT_CATS) { $categoryValues[$counter] = ' '; $categoryLabelValues[$counter] = $poValue->getLabel(); $categoryYesValues[$counter] = ''; $categoryNoValues[$counter] = ''; $counter++; } elseif ($poValue->getMode() == SMWPrintRequest::PRINT_PROP) { $tempProperty = trim(strtolower($poValue->getData()->getText())); $searchKey = array_search($tempProperty, $sortVal); if (!($searchKey === false)) { while ($searchKey != 0) { $propertyValues[$counter] = array_shift($sortVal); $orderValues[$counter] = array_shift($orderVal); $propertyLabelValues[$counter] = ''; $propertyFormatValues[$counter] = ''; $propertyLimitValues[$counter] = ''; $counter++; $searchKey--; } $propertyValues[$counter] = $poValue->getData()->getText(); $propertyLabelValues[$counter] = $poValue->getLabel() == $propertyValues[$counter] ? '' : $poValue->getLabel(); $propertyFormatValues[$counter] = $poValue->getOutputFormat(); $propertyLimitValues[$counter] = $poValue->getParameter('limit') ? $poValue->getParameter('limit') : ''; $orderValues[$counter] = $orderVal[0]; $displayValues[$counter] = '1'; $counter++; array_shift($orderVal); array_shift($sortVal); } else { $propertyValues[$counter] = $poValue->getData()->getText(); $propertyLabelValues[$counter] = $poValue->getLabel() == $propertyValues[$counter] ? '' : $poValue->getLabel(); $propertyFormatValues[$counter] = $poValue->getOutputFormat(); $propertyLimitValues[$counter] = $poValue->getParameter('limit') ? $poValue->getParameter('limit') : ''; $displayValues[$counter] = '1'; $counter++; } } elseif ($poValue->getMode() == SMWPrintRequest::PRINT_THIS) { $mainColumnLabels[$counter] = $poValue->getLabel(); $counter++; } elseif ($poValue->getMode() == SMWPrintRequest::PRINT_CCAT) { $outputFormat = explode(',', $poValue->getOutputFormat()); if (!array_key_exists(1, $outputFormat)) { $outputFormat[1] = ''; } $categoryValues[$counter] = $poValue->getData()->getText(); $categoryLabelValues[$counter] = $poValue->getLabel(); $categoryYesValues[$counter] = $outputFormat[0]; $categoryNoValues[$counter] = $outputFormat[1]; $counter++; } } while (!empty($sortVal)) { $propertyValues[$counter] = array_shift($sortVal); $orderValues[$counter] = array_shift($orderVal); $propertyLabelValues[$counter] = ''; $propertyFormatValues[$counter] = ''; $propertyLimitValues[$counter] = ''; $counter++; } } $i = 0; $additionalPOs = array(); $keys = array_keys($propertyValues); foreach ($keys as $value) { $additionalPOs[$value] = $propertyValues[$value]; // array_merge won't work because numeric keys need to be preserved } $keys = array_keys($categoryValues); foreach ($keys as $value) { $additionalPOs[$value] = $categoryValues[$value]; // array_merge won't work because numeric keys need to be preserved } $keys = array_keys($mainColumnLabels); foreach ($keys as $value) { $additionalPOs[$value] = $mainColumnLabels[$value]; // array_merge won't work because numeric keys need to be preserved } ksort($additionalPOs); foreach ($additionalPOs as $key => $value) { if (array_key_exists($key, $propertyValues)) { /* * Make an element for additional properties */ $result .= Html::openElement('div', array('id' => "sort_div_{$i}", 'class' => 'smwsort')); $result .= '<span class="smwquisortlabel">' . '<span class="smw-remove">' . '<a href="javascript:removePOInstance(\'sort_div_' . $i . '\')">' . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png"' . 'alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a></span>'; $result .= wfMessage('smw_qui_property')->text() . '</span>'; $result .= Html::input('property[' . $i . ']', $propertyValues[$key], 'text', array('size' => '25', 'id' => "property{$i}")) . "\n"; $urlArgs["property[{$i}]"] = $propertyValues[$key]; if ($smwgQSortingSupport) { $result .= Html::openElement('select', array('name' => "order[{$i}]")); if (array_key_exists($key, $orderValues)) { $urlArgs["order[{$i}]"] = $orderValues[$key]; } $if1 = !array_key_exists($key, $orderValues) || $orderValues[$key] == 'NONE'; $result .= Xml::option(wfMessage('smw_qui_nosort')->text(), "NONE", $if1); $if2 = array_key_exists($key, $orderValues) && $orderValues[$key] == 'ASC'; $result .= Xml::option(wfMessage('smw_qui_ascorder')->text(), "ASC", $if2); $if3 = array_key_exists($key, $orderValues) && $orderValues[$key] == 'DESC'; $result .= Xml::option(wfMessage('smw_qui_descorder')->text(), "DESC", $if3); if ($smwgQRandSortingSupport) { $if4 = array_key_exists($key, $orderValues) && $orderValues[$key] == 'RANDOM'; $result .= Xml::option(wfMessage('smw_qui_randorder')->text(), "RANDOM", $if4); } $result .= Xml::closeElement('select'); $if5 = array_key_exists($key, $displayValues); $result .= Xml::checkLabel(wfMessage('smw_qui_shownresults')->text(), "display[{$i}]", "display{$i}", $if5); if ($if5) { $urlArgs["display[{$i}]"] = '1'; } } if (array_key_exists($key, $propertyLabelValues)) { $result .= Html::hidden("prop_label[{$i}]", $propertyLabelValues[$key], array('id' => "prop_label{$i}")); $urlArgs["prop_label[{$i}]"] = $propertyLabelValues[$key]; } else { $result .= Html::hidden("prop_label[{$i}]", '', array('id' => "prop_label{$i}")); } if (array_key_exists($key, $propertyFormatValues)) { $result .= Html::hidden("prop_format[{$i}]", $propertyFormatValues[$key], array('id' => "prop_format{$i}")); $urlArgs["prop_format[{$i}]"] = $propertyFormatValues[$key]; } else { $result .= Html::hidden("prop_format[{$i}]", '', array('id' => "prop_format{$i}")); } if (array_key_exists($key, $propertyLimitValues)) { $result .= Html::hidden("prop_limit[{$i}]", $propertyLimitValues[$key], array('id' => "prop_limit{$i}")); $urlArgs["prop_limit[{$i}]"] = $propertyLimitValues[$key]; } else { $result .= Html::hidden("prop_limit[{$i}]", '', array('id' => "prop_limit{$i}")); } $result .= Html::element('a', array('id' => "more{$i}", 'class' => 'smwq-more', 'href' => "javascript:smw_makePropDialog('{$i}')"), wfMessage('smw_qui_options')->text()); $result .= Xml::closeElement('div'); $i++; } if (array_key_exists($key, $categoryValues)) { if (!array_key_exists($key, $categoryLabelValues)) { $categoryLabelValues[$key] = ''; } if (!array_key_exists($key, $categoryYesValues)) { $categoryYesValues[$key] = ''; } if (!array_key_exists($key, $categoryNoValues)) { $categoryNoValues[$key] = ''; } /* * Make an element for additional categories */ $result .= Html::openElement('div', array('id' => "sort_div_{$i}", 'class' => 'smwsort')); $result .= '<span class="smwquisortlabel">' . '<span class="smw-remove">' . Html::openElement('a', array('href' => "javascript:removePOInstance('sort_div_{$i}')")) . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span>' . wfMessage('smw_qui_category')->text() . '</span>' . Xml::input("category[{$i}]", '25', $categoryValues[$key], array('id' => "category{$i}")) . " " . Html::hidden("cat_label[{$i}]", $categoryLabelValues[$key], array('id' => "cat_label{$i}")) . Html::hidden("cat_yes[{$i}]", $categoryYesValues[$key], array('id' => "cat_yes{$i}")) . Html::hidden("cat_no[{$i}]", $categoryNoValues[$key], array('id' => "cat_no{$i}")) . Html::element('a', array('id' => "more{$i}", 'class' => 'smwq-more', 'href' => "javascript:smw_makeCatDialog('{$i}')"), wfMessage('smw_qui_options')->text()) . Xml::closeElement('div'); $urlArgs["category[{$i}]"] = $categoryValues[$key] === '' ? ' ' : $categoryValues[$key]; $urlArgs["cat_label[{$i}]"] = $categoryLabelValues[$key]; $urlArgs["cat_yes[{$i}]"] = $categoryYesValues[$key]; $urlArgs["cat_no[{$i}]"] = $categoryNoValues[$key]; $i++; } if (array_key_exists($key, $mainColumnLabels)) { /* * Make an element for main column aka query-matches */ $result .= Html::openElement('div', array('id' => "sort_div_{$i}", 'class' => 'smwsort')) . '<span class="smwquisortlabel">' . '<span class="smw-remove">' . Html::openelement('a', array('href' => "javascript:removePOInstance('sort_div_{$i}')")) . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span><strong>' . wfMessage('smw_qui_rescol')->text() . '</strong></span>' . Html::hidden("maincol_label[{$i}]", $mainColumnLabels[$key], array('id' => "maincol_label{$i}")) . " " . '<a class="smwq-more" href="javascript:smw_makeQueryMatchesDialog(\'' . $i . '\')">' . wfMessage('smw_qui_options')->text() . '</a> ' . '</div>'; $urlArgs["maincol_label[{$i}]"] = $mainColumnLabels[$key] === '' ? ' ' : $mainColumnLabels[$key]; $i++; } } $numSortValues = $i; $this->setUrlArgs($urlArgs); // END: create form elements already submitted earlier via form // create hidden form elements to be cloned later // property $hiddenProperty = Html::openElement('div', array('id' => 'property_starter', 'style' => 'display:none')) . '<span class="smwquisortlabel">' . '<span class="smw-remove">' . '<a>' . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span>' . wfMessage('smw_qui_property')->text() . '</span>' . Xml::input('property_num', '25') . " "; if ($smwgQSortingSupport) { $hiddenProperty .= Html::openElement('select', array('name' => 'order_num')) . Xml::option(wfMessage('smw_qui_nosort')->text(), 'NONE') . Xml::option(wfMessage('smw_qui_ascorder')->text(), 'ASC') . Xml::option(wfMessage('smw_qui_descorder')->text(), 'DESC'); if ($smwgQRandSortingSupport) { $hiddenProperty .= Xml::option(wfMessage('smw_qui_randorder')->text(), 'RANDOM'); } $hiddenProperty .= Xml::closeElement('select') . Xml::checkLabel(wfMessage('smw_qui_shownresults')->text(), "display_num", '', true); } $hiddenProperty .= Html::hidden('prop_label_num', '') . Html::hidden('prop_format_num', '') . Html::hidden('prop_limit_num', '') . Xml::closeElement('div'); $hiddenProperty = json_encode($hiddenProperty); // category $hiddenCategory = Html::openElement('div', array('id' => 'category_starter', 'style' => 'display:none')) . '<span class="smwquisortlabel">' . '<span class="smw-remove">' . '<a>' . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span>' . wfMessage('smw_qui_category')->text() . '</span>' . Xml::input("category_num", '25') . " " . '<input type="hidden" name="cat_label_num" />' . '<input type="hidden" name="cat_yes_num" />' . '<input type="hidden" name="cat_no_num" />' . Xml::closeElement('div'); $hiddenCategory = json_encode($hiddenCategory); // For '?' printouts $hiddenMainColumn = Html::openElement('div', array('id' => 'maincol_starter', 'style' => 'display:none')) . '<span class="smwquisortlabel">' . '<span class="smw-remove">' . '<a>' . '<img src="' . $smwgScriptPath . '/skins/images/close-button.png" alt="' . wfMessage('smw_qui_delete')->text() . '">' . '</a>' . '</span><strong>' . wfMessage('smw_qui_rescol')->text() . '</strong></span>' . Html::hidden("maincol_label_num", '') . " " . Xml::closeElement('div'); $hiddenMainColumn = json_encode($hiddenMainColumn); // Create dialog-boxes // create dialogbox for Property options $propertyHtml = Xml::inputLabelSep(wfMessage('smw_qui_prop')->text(), '', 'd-property', 'd-property'); $propertyLabelHtml = Xml::inputLabelSep(wfMessage('smw_qui_labl')->text(), '', 'd-prop-label', 'd-prop-label'); $propertyFormatHtml = Xml::inputLabelSep(wfMessage('smw_qui_formt')->text(), '', 'd-prop-format', 'd-prop-format'); $propertyLimitHtml = Xml::inputLabelSep(wfMessage('smw_qui_limt')->text(), 'd-prop-limit', 'd-prop-limit'); $propertyDialogBox = Xml::openElement('div', array('id' => 'prop-dialog', 'title' => wfMessage('smw_prp_options')->text(), 'class' => 'smwpropdialog')) . '<table align="center">' . '<tr><td>' . $propertyHtml[0] . '</td><td>' . $propertyHtml[1] . '</td></tr>' . '<tr><td>' . $propertyLabelHtml[0] . '</td><td>' . $propertyLabelHtml[1] . '</td></tr>' . '<tr><td>' . $propertyLimitHtml[0] . '</td><td>' . $propertyLimitHtml[1] . '</td></tr>' . '<tr><td>' . $propertyFormatHtml[0] . '</td><td>' . $propertyFormatHtml[1] . '</td></tr>' . '</table>' . Xml::closeElement('div'); // create dialogbox for Category options $categoryHtml = Xml::inputLabelSep(wfMessage('smw_qui_dcategory')->text(), '', 'd-category', 'd-category'); $categoryLabelHtml = Xml::inputLabelSep(wfMessage('smw_qui_dlabel')->text(), '', 'd-category-label', 'd-category-label'); $categoryYesHtml = Xml::inputLabelSep(wfMessage('smw_qui_dcatyes')->text(), '', 'd-category-yes', 'd-category-yes'); $categoryNoHtml = Xml::inputLabelSep(wfMessage('smw_qui_dcatno')->text(), '', 'd-category-no', 'd-category-no'); $categoryDialogBox = Xml::openElement('div', array('id' => 'cat-dialog', 'title' => wfMessage('smw_qui_catopts')->text(), 'class' => 'smwcatdialog')) . '<table align="center">' . '<tr><td>' . $categoryHtml[0] . '</td><td>' . $categoryHtml[1] . '</td></tr>' . '<tr><td>' . $categoryLabelHtml[0] . '</td><td>' . $categoryLabelHtml[1] . '</td></tr>' . '</table><br/><table align="center">' . '<tr><td>' . $categoryYesHtml[0] . '</td><td>' . $categoryYesHtml[1] . '</td></tr>' . '<tr><td>' . $categoryNoHtml[0] . '</td><td>' . $categoryNoHtml[1] . '</td></tr>' . '</table>' . Xml::closeElement('div'); // Create dialog box for QueryMatches $mainResLabelHtml = Xml::inputLabelSep(wfMessage('smw_qui_dlabel')->text(), '', 'd-mainres-label'); $mainResDialogBox = Xml::openElement('div', array('id' => 'mainres-dialog', 'title' => wfMessage('smw_qui_mainlabopts')->text(), 'class' => 'smwmainlabdialog')) . '<table align="center">' . '<tr><td>' . $mainResLabelHtml[0] . '</td><td>' . $mainResLabelHtml[1] . '</td></tr>' . '</table>' . Xml::closeElement('div'); $result .= '<div id="sorting_main"></div>' . "\n"; $result .= '[<a href="javascript:smw_addPropertyInstance(\'property_starter\', \'sorting_main\')">' . wfMessage('smw_qui_addnprop')->text() . '</a>]' . '[<a href="javascript:smw_addCategoryInstance(\'category_starter\', \'sorting_main\')">' . wfMessage('smw_qui_addcategory')->text() . '</a>]' . '[<a href="javascript:smw_addMainColInstance(\'maincol_starter\', \'sorting_main\')">' . wfMessage('smw_qui_addrescol')->text() . '</a>]' . "\n"; // Javascript code for handling adding and removing the "sort" inputs if ($enableAutocomplete == SMWQueryUI::ENABLE_AUTO_SUGGEST) { $this->enableAutocompletion(); } // localisation messages for javascript $optionsMsg = wfMessage('smw_qui_options')->text(); $okMsg = wfMessage('smw_qui_ok')->text(); $cancelMsg = wfMessage('smw_qui_cancel')->text(); $javascriptText = <<<EOT <script type="text/javascript"> \tvar num_elements = {$numSortValues}; \tvar smwgQPrintoutLimit={$smwgQPrintoutLimit}; EOT; // add autocomplete if ($enableAutocomplete == SMWQueryUI::ENABLE_AUTO_SUGGEST) { $javascriptText .= <<<EOT \tfunction smw_property_autocomplete(){ \t\tjQuery( '[name*="property"]' ).autocomplete( { \t\t\tminLength: 2, \t\t\tsource: function( request, response ) { \t\t\t\turl = wgScriptPath+'/api.php?action=opensearch&limit=10&namespace='+wgNamespaceIds['property']+'&format=jsonfm'; \t\t\t\tjQuery.getJSON( url, 'search='+request.term, function( data ) { \t\t\t\t\t//remove the namespace prefix 'Property:' from returned data \t\t\t\t\tfor( i=0; i < data[1].length; i++ ){ \t\t\t\t\t\tdata[1][i]=data[1][i].substr(data[1][i].indexOf(':')+1); \t\t\t\t\t} \t\t\t\t\tresponse(data[1]); \t\t\t\t}); \t\t\t} \t\t} ); \t} \tfunction smw_category_autocomplete(){ \t\t\tjQuery( '[name*="category"]' ).autocomplete( { \t\t\tminLength: 2, \t\t\tsource: function(request, response) { \t\t\t\turl = wgScriptPath+'/api.php?action=opensearch&limit=10&namespace='+wgNamespaceIds['category']+'&format=jsonfm'; \t\t\t\tjQuery.getJSON( url, 'search='+request.term, function( data ){ \t\t\t\t\t//remove the namespace prefix 'Category:' from returned data \t\t\t\t\tfor( i=0; i<data[1].length; i++ ){ \t\t\t\t\t\tdata[1][i]=data[1][i].substr(data[1][i].indexOf(':')+1); \t\t\t\t\t} \t\t\t\t\tresponse(data[1]); \t\t\t\t}); \t\t\t} \t\t}); \t} EOT; } else { $javascriptText .= <<<EOT \tfunction smw_property_autocomplete(){ \t} \tfunction smw_category_autocomplete(){ \t} EOT; } $javascriptText .= <<<EOT \tfunction smw_makeMainlabelDialog(){ \t\tjQuery('#mainlabel-dialog').dialog("open"); \t} \tfunction smwRemoveMainLabel(){ \t\t\tjQuery( '#mainlabelhid' ).attr( 'value', '-' ); \t\t\tjQuery( '#mainlabelvis' ).attr( 'value', '' ); \t\t\tjQuery( '#smwmainlabel' ).hide(); \t} \tfunction smw_makeQueryMatchesDialog( qm_id ){ \t\tqmLabel=jQuery('#maincol_label'+qm_id).attr('value'); \t\tjQuery('#d-mainres-label').attr('value', qmLabel); \t\tjQuery( '#mainres-dialog' ).dialog.sortid = qm_id; \t\tjQuery( '#mainres-dialog' ).dialog( 'open' ); \t} \tfunction smw_makeCatDialog( cat_id ){ \t\tjQuery( '#prop-cat input' ).attr('value',''); \t\tcat=jQuery('#category'+cat_id)[0].value; \t\tlabel=jQuery('#cat_label'+cat_id)[0].value; \t\tyes = jQuery('#cat_yes'+cat_id)[0].value; \t\tno = jQuery('#cat_no'+cat_id)[0].value; \t\tjQuery('#d-category-yes').attr('value',yes); \t\tjQuery('#d-category-no').attr('value',no); \t\tjQuery('#d-category-label').attr('value',label); \t\tjQuery('#d-category').attr('value',cat); \t\tjQuery('#cat-dialog').dialog.id=cat_id; \t\tjQuery('#cat-dialog').dialog('open'); \t} \tfunction smw_makePropDialog(prop_id){ \t\tjQuery('#prop-dialog input').attr('value',''); \t\tprop=jQuery('#property'+prop_id).attr('value'); \t\tlabel=jQuery('#prop_label'+prop_id).attr('value'); \t\tformat=jQuery('#prop_format'+prop_id).attr('value'); \t\tlimit=jQuery('#prop_limit'+prop_id).attr('value'); \t\tjQuery('#d-property').attr('value', prop); \t\tjQuery('#d-prop-label').attr('value', label); \t\tjQuery('#d-prop-limit').attr('value', limit); \t\tjQuery('#d-prop-format').attr('value', format); \t\tjQuery('#prop-dialog').dialog.id=prop_id; \t\tjQuery('#prop-dialog').dialog('open'); \t} \t// code for handling adding and removing the "sort" inputs \tfunction smw_addPropertyInstance(starter_div_id, main_div_id) { \t\tif( jQuery( '.smwsort' ).length > smwgQPrintoutLimit ) return; \t\tvar starter_div = document.getElementById(starter_div_id); \t\tvar main_div = document.getElementById(main_div_id); \t\t//Create the new instance \t\tvar new_div = starter_div.cloneNode(true); \t\tvar div_id = 'sort_div_' + num_elements; \t\tnew_div.id = div_id; \t\tnew_div.style.display = 'block'; \t\tjQuery(new_div.getElementsByTagName('label')).attr('for', 'display'+num_elements); \t\tjQuery(new_div).addClass( 'smwsort' ); \t\tvar children = new_div.getElementsByTagName('*'); \t\tvar x; \t\tfor (x = 0; x < children.length; x++) { \t\t\tif (jQuery(children[x]).attr('for')) jQuery(children[x]).attr('for',"display"+num_elements); \t\t\tif (children[x].name){ \t\t\t\tchildren[x].id = children[x].name.replace(/_num/, ''+num_elements); \t\t\t\tchildren[x].name = children[x].name.replace(/_num/, '[' + num_elements + ']'); \t\t\t} \t\t} \t\t//Create 'options' link \t\tvar more_button =document.createElement('span'); \t\tmore_button.innerHTML = ' <a class="smwq-more" href="javascript:smw_makePropDialog(\\'' + num_elements + '\\')">{$optionsMsg}</a> '; \t\tmore_button.id = 'more'+num_elements; \t\tnew_div.appendChild(more_button); \t\t//Add the new instance \t\tmain_div.appendChild(new_div); \t\t// initialize delete button \t\tst='sort_div_'+num_elements; \t\tjQuery('#'+new_div.id).find(".smw-remove a")[0].href="javascript:removePOInstance('"+st+"')"; \t\tnum_elements++; \t\tsmw_property_autocomplete(); \t} \tfunction smw_addCategoryInstance(starter_div_id, main_div_id) { \t\tif( jQuery( '.smwsort' ).length > smwgQPrintoutLimit ) return; \t\tvar starter_div = document.getElementById(starter_div_id); \t\tvar main_div = document.getElementById(main_div_id); \t\t//Create the new instance \t\tvar new_div = starter_div.cloneNode(true); \t\tvar div_id = 'sort_div_' + num_elements; \t\tnew_div.id = div_id; \t\tnew_div.style.display = 'block'; \t\tjQuery(new_div.getElementsByTagName('label')).attr('for', 'display'+num_elements); \t\tjQuery(new_div).addClass( 'smwsort' ); \t\tvar children = new_div.getElementsByTagName('*'); \t\tvar x; \t\tfor (x = 0; x < children.length; x++) { \t\t\tif (jQuery(children[x]).attr('for')) jQuery(children[x]).attr('for',"display"+num_elements); \t\t\tif (children[x].name){ \t\t\t\tchildren[x].id = children[x].name.replace(/_num/, ''+num_elements); \t\t\t\tchildren[x].name = children[x].name.replace(/_num/, '[' + num_elements + ']'); \t\t\t} \t\t} \t\t//Create 'options' link \t\tvar more_button =document.createElement('span'); \t\tmore_button.innerHTML = ' <a class="smwq-more" href="javascript:smw_makeCatDialog(\\'' + num_elements + '\\')">{$optionsMsg}</a> '; \t\tmore_button.id = 'more'+num_elements; \t\tnew_div.appendChild(more_button); \t\t//Add the new instance \t\tmain_div.appendChild(new_div); \t\t// initialize delete button \t\tst='sort_div_'+num_elements; \t\tjQuery('#'+new_div.id).find(".smw-remove a")[0].href="javascript:removePOInstance('"+st+"')"; \t\tnum_elements++; \t\tsmw_category_autocomplete(); \t} \tfunction smw_addMainColInstance(starter_div_id, main_div_id) { \t\tif( (jQuery('#smwmainlabel').css('display')=='none') \t\t\t&& (jQuery('.smwsort').length==1) \t\t){ \t\t\tjQuery('#mainlabelhid').attr('value',''); \t\t\tjQuery('#mainlabelvis').attr('value',''); \t\t\tjQuery('#smwmainlabel').show(); \t\t} else { \t\t\tif( jQuery( '.smwsort' ).length > smwgQPrintoutLimit ){ \t\t\t\treturn; \t\t\t} \t\t\tvar starter_div = document.getElementById(starter_div_id); \t\t\tvar main_div = document.getElementById(main_div_id); \t\t\t//Create the new instance \t\t\tvar new_div = starter_div.cloneNode(true); \t\t\tvar div_id = 'sort_div_' + num_elements; \t\t\tnew_div.id = div_id; \t\t\tnew_div.style.display = 'block'; \t\t\tjQuery(new_div.getElementsByTagName('label')).attr('for', 'display'+num_elements); \t\t\tjQuery(new_div).addClass( 'smwsort' ); \t\t\tvar children = new_div.getElementsByTagName('*'); \t\t\tvar x; \t\t\tfor (x = 0; x < children.length; x++) { \t\t\t\tif (jQuery(children[x]).attr('for')) jQuery(children[x]).attr('for',"display"+num_elements); \t\t\t\tif (children[x].name){ \t\t\t\t\tchildren[x].id = children[x].name.replace(/_num/, ''+num_elements); \t\t\t\t\tchildren[x].name = children[x].name.replace(/_num/, '[' + num_elements + ']'); \t\t\t\t} \t\t\t} \t\t\t//Create 'options' link \t\t\tvar more_button =document.createElement('span'); \t\t\tmore_button.innerHTML = ' <a class="smwq-more" href="javascript:smw_makeQueryMatchesDialog(\\'' + num_elements + '\\')">{$optionsMsg}</a> '; \t\t\tmore_button.id = 'more'+num_elements; \t\t\tnew_div.appendChild(more_button); \t\t\t//Add the new instance \t\t\tmain_div.appendChild(new_div); \t\t\t// initialize delete button \t\t\tst='sort_div_'+num_elements; \t\t\tjQuery('#'+new_div.id).find(".smw-remove a")[0].href="javascript:removePOInstance('"+st+"')"; \t\t\tnum_elements++; \t\t} \t} \tfunction removePOInstance(div_id) { \t\tvar olddiv = document.getElementById(div_id); \t\tvar parent = olddiv.parentNode; \t\tparent.removeChild(olddiv); \t} \tjQuery(function(){ \t\tjQuery('{$hiddenProperty}').appendTo(document.body); \t\tjQuery('{$hiddenCategory}').appendTo(document.body); \t\tjQuery('{$hiddenMainColumn}').appendTo(document.body); \t\tjQuery('{$propertyDialogBox}').appendTo(document.body); \t\tjQuery('{$categoryDialogBox}').appendTo(document.body); \t\tjQuery('{$mainResDialogBox}').appendTo(document.body); \t\tjQuery( '#mainlabel-dialog' ).dialog( { \t\t\tautoOpen: false, \t\t\tmodal: true, \t\t\tresizable: true, \t\t\tminWidth: 400, \t\t\tbuttons: { \t\t\t\t"{$okMsg}": function(){ \t\t\t\t\tjQuery('#mainlabelhid').attr('value',jQuery('#mainlabelvis').attr('value')); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t}, \t\t\t\t"{$cancelMsg}": function(){ \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t} \t\t\t} \t\t} ); \t\tjQuery( '#mainres-dialog' ).dialog( { \t\t\tautoOpen: false, \t\t\tmodal: true, \t\t\tresizable: true, \t\t\tminWidth: 400, \t\t\tbuttons: { \t\t\t\t"{$okMsg}": function(){ \t\t\t\t\tid = jQuery( this ).dialog.sortid; \t\t\t\t\tlabel = jQuery('#d-mainres-label'); \t\t\t\t\tjQuery('#maincol_label'+id).attr('value', label); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t}, \t\t\t\t"{$cancelMsg}": function(){ \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t} \t\t\t} \t\t} ); \t\tjQuery( '#cat-dialog' ).dialog( { \t\t\tautoOpen: false, \t\t\tmodal: true, \t\t\tresizable: true, \t\t\tminHeight: 200, \t\t\tminWidth: 400, \t\t\tbuttons: { \t\t\t\t"{$okMsg}": function(){ \t\t\t\t\tcat = jQuery('#d-category').attr('value'); \t\t\t\t\tlabel = jQuery('#d-category-label').attr('value'); \t\t\t\t\tyes = jQuery('#d-category-yes').attr('value'); \t\t\t\t\tno = jQuery('#d-category-no').attr('value'); \t\t\t\t\tid=jQuery(this).dialog.id; \t\t\t\t\tjQuery('#category'+id).attr('value',cat); \t\t\t\t\tjQuery('#cat_label'+id).attr('value',label); \t\t\t\t\tjQuery('#cat_yes'+id).attr('value',yes); \t\t\t\t\tjQuery('#cat_no'+id).attr('value',no); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t}, \t\t\t\t"{$cancelMsg}": function(){ \t\t\t\t\tjQuery('#cat-dialog input').attr('value',''); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t} \t\t\t} \t\t}); \t\tjQuery('#prop-dialog').dialog({ \t\t\tautoOpen: false, \t\t\tmodal: true, \t\t\tresizable: true, \t\t\tminWidth: 400, \t\t\tbuttons: { \t\t\t\t"{$okMsg}": function(){ \t\t\t\t\tid=jQuery(this).dialog.id; \t\t\t\t\tproperty=jQuery('#d-property').attr('value'); \t\t\t\t\tlabel=jQuery('#d-prop-label').attr('value'); \t\t\t\t\tlimit=jQuery('#d-prop-limit').attr('value'); \t\t\t\t\tformat=jQuery('#d-prop-format').attr('value'); \t\t\t\t\tjQuery('#property'+id).attr('value',property); \t\t\t\t\tjQuery('#prop_label'+id).attr('value',label); \t\t\t\t\tjQuery('#prop_limit'+id).attr('value',limit); \t\t\t\t\tjQuery('#prop_format'+id).attr('value',format); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t}, \t\t\t\t"{$cancelMsg}": function(){ \t\t\t\t\tjQuery('#prop-dialog input').attr('value',''); \t\t\t\t\tjQuery(this).dialog("close"); \t\t\t\t} \t\t\t} \t\t}); \t\tjQuery('#sort-more').click(function(){jQuery('#prop-dialog').dialog("open");}); \t\tjQuery('#d-category').bind('change keyup focus click',function(){ \t\t\tif(jQuery(this).attr('value')==''){ \t\t\t\tjQuery('#d-category-yes').css('visibility','hidden'); \t\t\t\tjQuery('#d-category-no').css('visibility','hidden'); \t\t\t\tjQuery('#cat-dialog [for="d-category-no"]').css('visibility','hidden'); \t\t\t\tjQuery('#cat-dialog [for="d-category-yes"]').css('visibility','hidden'); \t\t\t} else { \t\t\t\tjQuery('#d-category-yes').css('visibility','visible'); \t\t\t\tjQuery('#d-category-no').css('visibility','visible'); \t\t\t\tjQuery('#cat-dialog [for="d-category-no"]').css('visibility','visible'); \t\t\t\tjQuery('#cat-dialog [for="d-category-yes"]').css('visibility','visible'); \t\t\t} \t\t}); \t}); \tjQuery(document).ready(smw_property_autocomplete); \tjQuery(document).ready(smw_category_autocomplete); </script> EOT; SMWOutputs::requireScript('smwAutocompleteQueryUI', $javascriptText); $result .= '</span>'; return $result; }
/** * @param TranslatablePage $page */ protected function priorityLanguagesForm(TranslatablePage $page) { global $wgContLang; $groupId = $page->getMessageGroupId(); $this->getOutput()->wrapWikiMsg('==$1==', 'tpt-sections-prioritylangs'); $langSelector = Xml::languageSelector($wgContLang->getCode(), false, $this->getLanguage()->getCode()); $hLangs = Xml::inputLabelSep($this->msg('tpt-select-prioritylangs')->text(), 'prioritylangs', 'tpt-prioritylangs', 50, TranslateMetadata::get($groupId, 'prioritylangs')); $hForce = Xml::checkLabel($this->msg('tpt-select-prioritylangs-force')->text(), 'forcelimit', 'tpt-priority-forcelimit', TranslateMetadata::get($groupId, 'priorityforce') === 'on'); $hReason = Xml::inputLabelSep($this->msg('tpt-select-prioritylangs-reason')->text(), 'priorityreason', 'tpt-priority-reason', 50, TranslateMetadata::get($groupId, 'priorityreason')); $this->getOutput()->addHTML("<table>" . "<tr>" . "<td class='mw-label'>{$hLangs['0']}</td>" . "<td class='mw-input'>{$hLangs['1']}{$langSelector['1']}</td>" . "</tr>" . "<tr><td></td><td class='mw-inout'>{$hForce}</td></tr>" . "<tr>" . "<td class='mw-label'>{$hReason['0']}</td>" . "<td class='mw-input'>{$hReason['1']}</td>" . "</tr>" . "</table>"); }
/** * @param $filename string */ function printTranslations( $filename ){ global $wgScript; $languages = Language::getLanguageNames(); $languages['fallback'] = wfMsg( 'translatesvg-fallbackdesc'); $languages['qqq'] = wfMsg( 'translatesvg-qqqdesc' ); uksort($this->translations, "self::customsort"); $this->getOutput()->addModules( 'ext.translateSvg' ); $html = $this->thumb . Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'specialtranslatesvg' ) ) . Html::hidden( 'file', $filename ) . Html::hidden( 'step', 'translated' ) . Html::hidden( 'title', $this->getTitle()->getPrefixedText() ); $groups = array(); foreach( $this->translations as $language=>$translations ){ $html .= Html::openElement( 'fieldset', array( 'id' => "mw-translatesvg-fieldset-$language" ) ) . Html::element( 'legend', null, $languages[$language] ) . Html::openElement( 'div', array( 'class' => 'mw-collapsible mw-collapsed', 'data-collapsetext' => wfMsg( 'translatesvg-toggle-hide' ), 'data-expandtext' => wfMsg( 'translatesvg-toggle-view' ) ) ); $groups = array(); for( $i = 0; $i < $this->number; $i++ ){ $fallback = $this->getFallback( $i ); $existing = $this->getExisting( $i, $language ); $desc = ( $language === 'qqq' ) ? '' : ' ' . Html::element( 'small', null, $this->getDescriptor( $i ) ); list( $label, $input ) = Xml::inputLabelSep( $fallback['text'], "mw-translatesvg-$language-$i-text", "mw-translatesvg-$language-$i-text", 50, $existing['text'] ); $grouphtml = $label . $desc . '   ' . $input; if( $language !== 'qqq' ){ $grouphtml .= Html::element( 'br' ) . "   " . Xml::inputLabel( wfMsg( 'translatesvg-xcoordinate-pre' ), "mw-translatesvg-$language-$i-x", "mw-translatesvg-$language-$i-x", 5, $existing['x'] ) . "   " . Xml::inputLabel( wfMsg( 'translatesvg-ycoordinate-pre' ), "mw-translatesvg-$language-$i-y", "mw-translatesvg-$language-$i-y", 5, $existing['y'] ); } $groups[] = $grouphtml; } $html .= implode( Html::element( 'div', array( 'style' => 'height:10px' ) ), $groups ); $html .= Html::closeElement( 'div' ) . Html::closeElement( 'fieldset' ); } $html .= Xml::submitButton( wfMsg( 'translatesvg-submit' ) ) . "\n" . Html::closeElement( 'form' ); $this->getOutput()->addHTML( $html ); }