/** * Return serialised results in specified format. * Implemented by subclasses. */ protected function getResultText(SMWQueryResult $res, $outputmode) { $html = ''; $id = uniqid(); // build an array of article IDs contained in the result set $objects = array(); foreach ($res->getResults() as $key => $object) { $objects[] = array($object->getTitle()->getArticleId()); $html .= $key . ': ' . $object->getSerialization() . "<br>\n"; } // build an array of data about the printrequests $printrequests = array(); foreach ($res->getPrintRequests() as $key => $printrequest) { $data = $printrequest->getData(); if ($data instanceof SMWPropertyValue) { $name = $data->getDataItem()->getKey(); } else { $name = null; } $printrequests[] = array($printrequest->getMode(), $printrequest->getLabel(), $name, $printrequest->getOutputFormat(), $printrequest->getParameters()); } // write out results and query params into JS arrays // Define the srf_filtered_values array SMWOutputs::requireScript('srf_slideshow', Html::inlineScript('srf_slideshow = {};')); SMWOutputs::requireScript('srf_slideshow' . $id, Html::inlineScript('srf_slideshow["' . $id . '"] = ' . json_encode(array($objects, $this->params['template'], $this->params['delay'] * 1000, $this->params['height'], $this->params['width'], $this->params['nav controls'], $this->params['effect'], json_encode($printrequests))) . ';')); SMWOutputs::requireResource('ext.srf.slideshow'); if ($this->params['nav controls']) { SMWOutputs::requireResource('jquery.ui.slider'); } return Html::element('div', array('id' => $id, 'class' => 'srf-slideshow ' . $id . ' ' . $this->params['class'])); }
/** * Creates the JS needed for adding auto-completion to queryForm(). Uses the * MW API to fetch suggestions. * */ protected static function addAutoComplete() { SMWOutputs::requireResource('jquery.ui.autocomplete'); $javascript_autocomplete_text = <<<END <script type="text/javascript"> jQuery(document).ready(function(){ \tjQuery("#property_box").autocomplete({ \t\tminLength: 2, \t\tsource: function(request, response) { \t\t\tjQuery.getJSON(wgScriptPath+'/api.php?action=opensearch&limit=10&namespace='+wgNamespaceIds['property']+'&format=jsonfm&search='+request.term, function(data){ \t\t\t\t//remove the word 'Property:' from returned data \t\t\t\tfor(i=0;i<data[1].length;i++) data[1][i]=data[1][i].substr(data[1][i].indexOf(':')+1); \t\t\t\tresponse(data[1]); \t\t\t}); \t\t} \t}); }); </script> END; SMWOutputs::requireScript('smwAutocompleteSpecialSearchByProperty', $javascript_autocomplete_text); }
/** * Creates the JS needed for adding auto-completion to queryForm(). Uses the * MW API to fetch suggestions. */ private static function addAutoComplete() { SMWOutputs::requireResource( 'jquery.ui.autocomplete' ); $javascript_autocomplete_text = <<<END <script type="text/javascript"> jQuery(document).ready(function(){ jQuery("#page_input_box").autocomplete({ minLength: 3, source: function(request, response) { jQuery.getJSON(wgScriptPath+'/api.php?action=opensearch&limit=10&namespace=0&format=jsonfm&search='+request.term, function(data){ response(data[1]); }); } }); }); </script> END; SMWOutputs::requireScript( 'smwAutocompleteSpecialBrowse', $javascript_autocomplete_text ); }
/** * Return serialised results in specified format. */ protected function getResultText(SMWQueryResult $res, $outputmode) { // collect the query results in an array $result = array(); while ($row = $res->getNext()) { $result[uniqid()] = new SRF_Filtered_Item($row, $this); } $resourceModules = array(); // prepare filter data for inclusion in HTML and JS $filterHtml = ''; $filterHandlers = array(); $filterData = array(); foreach ($res->getPrintRequests() as $printRequest) { $filter = $printRequest->getParameter('filter'); if ($filter) { $filtersForPrintout = array_map('trim', explode(',', $filter)); foreach ($filtersForPrintout as $filterName) { if (array_key_exists($filterName, $this->mFilterTypes)) { $filter = new $this->mFilterTypes[$filterName]($result, $printRequest, $this); $resourceModules = $filter->getResourceModules(); if (is_array($resourceModules)) { array_walk($resourceModules, 'SMWOutputs::requireResource'); } elseif (is_string($resourceModules)) { SMWOutputs::requireResource($resourceModules); } $printRequestHash = md5($printRequest->getHash()); $filterHtml .= Html::rawElement('div', array('class' => "filtered-{$filterName} {$printRequestHash}"), $filter->getResultText()); $filterHandlers[$filterName] = null; $filterData[$filterName][$printRequestHash] = $filter->getJsData(); } } } } // wrap filters in a div $filterHtml = Html::rawElement('div', array('class' => 'filtered-filters'), $filterHtml); // prepare view data for inclusion in HTML and JS $viewHtml = ''; $viewSelectorsHtml = ''; $viewHandlers = array(); $viewElements = array(); // will contain the id of the html element to be used by the view $viewData = array(); foreach ($this->mViews as $viewName) { // cut off the selector label (if one was specified) from the actual view name $viewnameComponents = explode('=', $viewName, 2); $viewName = trim($viewnameComponents[0]); if (array_key_exists($viewName, $this->mViewTypes)) { // generate unique id $viewid = uniqid(); $view = new $this->mViewTypes[$viewName]($viewid, $result, $this->mParams, $this); if (count($viewnameComponents) > 1) { // a selector label was specified in the wiki text $viewSelectorLabel = trim($viewnameComponents[1]); } else { // use the default selector label $viewSelectorLabel = $view->getSelectorLabel(); } $resourceModules = $view->getResourceModules(); if (is_array($resourceModules)) { array_walk($resourceModules, 'SMWOutputs::requireResource'); } elseif (is_string($resourceModules)) { SMWOutputs::requireResource($resourceModules); } $viewHtml .= Html::rawElement('div', array('class' => "filtered-view filtered-{$viewName} filtered-view-id{$viewid}"), $view->getResultText()); $viewSelectorsHtml .= Html::rawElement('div', array('class' => "filtered-view-selector filtered-{$viewName} filtered-view-id{$viewid}"), $viewSelectorLabel); $viewHandlers[$viewName] = null; $viewElements[$viewName][] = $viewid; $viewData[$viewName] = $view->getJsData(); } } // more than one view? if (count($viewData) > 1) { // wrap views in a div $viewHtml = Html::rawElement('div', array('class' => 'filtered-views', 'style' => 'display:none'), Html::rawElement('div', array('class' => 'filtered-views-selectors-container'), $viewSelectorsHtml) . Html::rawElement('div', array('class' => 'filtered-views-container'), $viewHtml)); } else { // wrap views in a div $viewHtml = Html::rawElement('div', array('class' => 'filtered-views', 'style' => 'display:none'), Html::rawElement('div', array('class' => 'filtered-views-container'), $viewHtml)); } // Define the srf_filtered_values array SMWOutputs::requireScript('srf_filtered_values', Html::inlineScript('srf_filtered_values = {};')); $resultAsArray = array(); foreach ($result as $id => $value) { $resultAsArray[$id] = $value->getArrayRepresentation(); } $id = uniqid(); SMWOutputs::requireScript('srf_filtered_values' . $id, Html::inlineScript('srf_filtered_values["' . $id . '"] = { "values":' . json_encode($resultAsArray) . ', "data": {' . ' "viewhandlers" : ' . json_encode($viewHandlers) . ', "viewelements" : ' . json_encode($viewElements) . ', "viewdata" : ' . json_encode($viewData) . ', "filterhandlers" : ' . json_encode($filterHandlers) . ', "filterdata" : ' . json_encode($filterData) . ', "sorthandlers" : ' . json_encode(array()) . ', "sorterdata" : ' . json_encode(array()) . '}};')); SMWOutputs::requireResource('ext.srf.filtered'); // wrap all in a div if ($this->mFiltersOnTop) { $html = Html::rawElement('div', array('class' => 'filtered ' . $id), $filterHtml . $viewHtml); } else { $html = Html::rawElement('div', array('class' => 'filtered ' . $id), $viewHtml . $filterHtml); } return $html; }
/** * Create the search form. * * @return string HTML code for search form */ protected function makeForm() { SMWOutputs::requireResource('jquery'); $specTitle = $this->getTitle(); $formatBox = $this->getFormatSelectBoxSep('broadtable'); $result = '<div class="smwqcerrors">' . $this->getErrorsHtml() . '</div>'; $formParameters = array('name' => 'qc', 'id' => 'smwqcform', 'action' => htmlspecialchars($specTitle->getLocalURL()), 'method' => 'get'); $result .= Html::openElement('form', $formParameters) . "\n" . Html::hidden('title', $specTitle->getPrefixedText()) . wfMsg('smw_qc_query_help') . $this->getQueryFormBox() . '<div class="smwqcsortbox">' . $this->getPoSortFormBox() . '</div>'; // Control to show/hide additional options: $result .= '<div class="smwqcformatas">' . Html::element('strong', array(), wfMsg('smw_ask_format_as')) . $formatBox[0] . '<span id="show_additional_options" style="display:inline;">' . '<a href="#addtional" rel="nofollow" onclick="' . "jQuery('#additional_options').show('blind');" . "document.getElementById('show_additional_options').style.display='none';" . "document.getElementById('hide_additional_options').style.display='inline';" . '">' . wfMsg('smw_qc_show_addnal_opts') . '</a></span>' . '<span id="hide_additional_options" style="display:none"><a href="#" rel="nofollow" onclick="' . "jQuery('#additional_options').hide('blind');;" . "document.getElementById('hide_additional_options').style.display='none';" . "document.getElementById('show_additional_options').style.display='inline';" . '">' . wfMsg('smw_qc_hide_addnal_opts') . '</a></span>' . '</div>'; // Controls for additional options: $result .= '<div id="additional_options" style="display:none">' . $this->getOtherParametersBox() . '<fieldset><legend>' . wfMsg('smw_qc_formatopt') . "</legend>\n" . $formatBox[1] . "</fieldset>\n" . '</div>'; // end of hidden additional options // Submit button and documentation link: $result .= '<br/><input type="submit" value="' . wfMsg('smw_ask_submit') . '"/><br/>' . '<a href="' . htmlspecialchars(wfMsg('smw_ask_doculink')) . '">' . wfMsg('smw_ask_help') . '</a>'; // Control for showing #ask syntax of query: if ($this->uiCore->getQueryString() !== '') { // only show if query given $result .= ' | <a name="show-embed-code" id="show-embed-code" href="##" rel="nofollow">' . wfMsg('smw_ask_show_embed') . '</a>' . '<div id="embed-code-dialog">' . $this->getAskEmbedBox() . '</div>'; SMWOutputs::requireResource('jquery.ui.autocomplete'); SMWOutputs::requireResource('jquery.ui.dialog'); SMWOutputs::requireResource('ext.smw.style'); $javascriptText = <<<EOT <script type="text/javascript"> \tjQuery( document ).ready( function(){ \t\tjQuery( '#embed-code-dialog' ).dialog( { \t\t\tautoOpen:false, \t\t\tmodal: true, \t\t\tbuttons: { \t\t\t\tOk: function(){ \t\t\t\t\tjQuery( this ).dialog( "close" ); \t\t\t\t} \t\t\t} \t\t} ); \t\tjQuery( '#show-embed-code' ).bind( 'click', function(){ \t\t\tjQuery( '#embed-code-dialog' ).dialog( "open" ); \t\t} ); \t} ); </script> EOT; SMWOutputs::requireScript('smwToggleAskSyntaxQC', $javascriptText); } $result .= '<input type="hidden" name="eq" value="no"/>' . "\n</form><br/>"; return $result; }
/** * Creates form elements for choosing the result-format and their * associated format. * * The drop-down list and the format options are returned seperately as * elements of an array.Use in conjunction with processFormatOptions() to * supply formats options using ajax. Also, use its complement * processFormatSelectBox() to decode form data sent by these elements. * UI's may overload these methods to change behaviour or form * parameters. * * @param string $defaultFormat The default format which remains selected in the form * @return array The first element contains the format selector, while the second contains the Format options */ protected function getFormatSelectBoxSep($defaultFormat = 'broadtable') { global $smwgResultFormats; SMWOutputs::requireResource('jquery'); // checking argument $defFormat = 'broadtable'; if (array_key_exists($defaultFormat, $smwgResultFormats)) { $defFormat = $defaultFormat; } $printer = SMWQueryProcessor::getResultPrinter($defFormat, SMWQueryProcessor::SPECIAL_PAGE); $url = $this->getTitle()->getLocalURL("showformatoptions=' + this.value + '"); foreach ($this->uiCore->getParameters() as $param => $value) { if ($param !== 'format') { $url .= '¶ms[' . Xml::escapeJsString($param) . ']=' . Xml::escapeJsString($value); } } // @todo FIXME: i18n: Hard coded parentheses. $result[0] = "\n" . '<select id="formatSelector" name="p[format]" onChange="JavaScript:updateOtherOptions(\'' . $url . '\')">' . "\n" . '<option value="' . $defFormat . '">' . $printer->getName() . ' (' . wfMessage('smw_ask_defaultformat')->text() . ')</option>' . "\n"; $formats = array(); foreach (array_keys($smwgResultFormats) as $format) { // Special formats "count" and "debug" currently not supported. if ($format != $defFormat && $format != 'count' && $format != 'debug') { $printer = SMWQueryProcessor::getResultPrinter($format, SMWQueryProcessor::SPECIAL_PAGE); $formats[$format] = $printer->getName(); } } natcasesort($formats); $params = $this->uiCore->getParameters(); foreach ($formats as $format => $name) { $result[0] .= '<option value="' . $format . '"' . ($params['format'] == $format ? ' selected' : '') . '>' . $name . "</option>\n"; } $result[0] .= "</select>"; $result[0] .= "\n"; $result[] .= '<div id="other_options"> ' . $this->showFormatOptions($params['format'], $params) . ' </div>'; // BEGIN: add javascript for updating formating options by ajax $javascript = <<<END <script type="text/javascript"> function updateOtherOptions(strURL) { \tjQuery.ajax({ url: strURL, context: document.body, success: function(data){ \t\tjQuery("#other_options").html(data); \t}}); } </script> END; SMWOutputs::requireScript('smwUpdateOptionsQueryUI', $javascript); // END: add javascript for updating formating options by ajax return $result; }
/** * Creates the JS needed for */ private static function setStartMenu(){ SMWOutputs::requireResource( 'jquery.ui.autocomplete' ); $javascript_autocomplete_text = <<<END <script type="text/javascript"> jQuery(document).ready(function(){ var xxx="hallo"; echo "xxx=".xxx; druck = window.open ('', 'fenster', xxx); druck.print(); }); </script> END; SMWOutputs::requireScript( 'smwAutocompleteSpecialBrowse', $javascript_autocomplete_text ); }
/** * Return serialised results in specified format. */ protected function getResultText(SMWQueryResult $res, $outputmode) { // collect the query results in an array $result = array(); while ($row = $res->getNext()) { $result[uniqid()] = new SRF_Filtered_Item($row, $this); } $resourceModules = array(); // prepare filter data for inclusion in HTML and JS $filterHtml = ''; $filterHandlers = array(); $filterData = array(); foreach ($res->getPrintRequests() as $printRequest) { $filter = $printRequest->getParameter('filter'); if ($filter) { $filtersForPrintout = explode(',', $filter); $filtersForPrintout = array_map('trim', $filtersForPrintout); foreach ($filtersForPrintout as $filterName) { if (array_key_exists($filterName, $this->mFilterTypes)) { $filter = new $this->mFilterTypes[$filterName]($result, $printRequest, $this); $resourceModules = $filter->getResourceModules(); if (is_array($resourceModules)) { array_walk($resourceModules, 'SMWOutputs::requireResource'); } elseif (is_string($resourceModules)) { SMWOutputs::requireResource($resourceModules); } $printRequestHash = md5($printRequest->getHash()); $filterHtml .= Html::rawElement('div', array('class' => "filtered-{$filterName} {$printRequestHash}"), $filter->getResultText()); $filterHandlers[$filterName] = null; $filterData[$filterName][$printRequestHash] = $filter->getJsData(); } } } } // wrap filters in a div $filterHtml = Html::rawElement('div', array('class' => 'filtered-filters'), $filterHtml); // prepare view data for inclusion in HTML and JS $viewHtml = ''; $viewHandlers = array(); $viewElements = array(); foreach ($this->mViews as $viewName) { if (array_key_exists($viewName, $this->mViewTypes)) { // generate unique id $viewid = uniqid(); $view = new $this->mViewTypes[$viewName]($viewid, $result, $this->mParams, $this); $resourceModules = $view->getResourceModules(); if (is_array($resourceModules)) { array_walk($resourceModules, 'SMWOutputs::requireResource'); } elseif (is_string($resourceModules)) { SMWOutputs::requireResource($resourceModules); } $viewHtml .= Html::rawElement('div', array('class' => "filtered-{$viewName} {$viewid}"), $view->getResultText()); $viewHandlers[$viewName] = null; $viewElements[$viewName][] = $viewid; } } // wrap views in a div $viewHtml = Html::rawElement('div', array('class' => 'filtered-views'), $viewHtml); // Define the srf_filtered_values array SMWOutputs::requireScript('srf_filtered_values', Html::inlineScript('srf_filtered_values = {};')); $resultAsArray = array(); foreach ($result as $id => $value) { $resultAsArray[$id] = $value->getArrayRepresentation(); } $id = uniqid(); SMWOutputs::requireScript('srf_filtered_values' . $id, Html::inlineScript('srf_filtered_values["' . $id . '"] = { "values":' . json_encode($resultAsArray) . ', "data": {' . ' "viewhandlers" : ' . json_encode($viewHandlers) . ', "viewelements" : ' . json_encode($viewElements) . ', "filterhandlers" : ' . json_encode($filterHandlers) . ', "filterdata" : ' . json_encode($filterData) . '}};')); SMWOutputs::requireResource('ext.srf.filtered'); // wrap all in a div $html = Html::rawElement('div', array('class' => 'filtered ' . $id), $filterHtml . $viewHtml); return $html; }