[pmwiki-users] Prevent the "html" elements of returned values from pagelist
Petko Yotov
5ko at 5ko.fr
Sun Nov 17 00:01:18 PST 2019
On 17/11/2019 07:02, Christopher Cox wrote:
> My solution. I created a page specific php file
> (Test.UsersByDepartment.php) and inside it I put:
>
> <?php
> global $BlockMarkups;
> $BlockMarkups['p'] = array('','','',0);
Didn't this mess your other page content, and the sidebar/header/footer?
>
> This got rid of the extraneous <p> around the (:pagelist wrap=none....
There is wrap=inline.
> This is so I can use a pagelist to produce graphing data. See:
> https://endlessnow.com/wiki2/Test/UsersByDepartment
This is not a reply to your question, but another solution to your
problem.
In a case of a JavaScript-generated chart, I would let the pagelist
output an HTML table, then I would parse the data from the table with
JavaScript to feed it to the Chart API.
(There is another benefit, people with disabled JavaScript or with 3rd
party blocking would still see the table with the numbers.)
In the wiki, generated by a pagelist, something like:
>>id=chart_div height=500px<<
>><<
|| border=1 class="simpletable sortable pie-chart"
||! Caption of the table !||
||! Department ||! Users ||
These above are the headers and the caption, could be in a (:template
first:) section.
Then the data, output by (:template each:) or in your case (:template
last {=$:department}:)
||Sales || 184||
||IT || 116||
||HR || 21||
Then in JavaScript:
// your lines
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
// get the data table
var pietable = document.querySelector("table.pie-chart");
// earlier
var options = {
'animation':{
'duration': 1000,
'easing': 'out',
'startup': true,
}
};
// set the chart title from the table caption (if exists)
var caption = pietable.querySelector('caption');
if(caption) options.title = caption.textContent;
var rows = pietable.querySelectorAll('tr');
var depts_users = [ ];
// get the names and numbers from the table
// start from 1 not 0 to skip the headers
for(var r=1; r<rows.length; r++) {
var cells = rows[r].querySelectorAll('td,th');
depts_users.push([ cells[0].textContent,
parseInt(cells[1].textContent) ]);
}
// your lines
var data = new google.visualization.DataTable();
data.addColumn('string', 'A');
data.addColumn('number', 'B');
// this, instead of the raw pagelist
data.addRows(depts_users);
// your lines
var chart = new
google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
// optionally: hide the table (I wouldn't)
// pietable.style.display = 'none';
}
Petko
P.S. As I don't have your (:snhtmlend:) markup, here is how I loaded the
scripts. In local/Main.PieChart.php:
<?php
$HTMLHeaderFmt['pie-chart'] = '
<script type="text/javascript"
src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript"
src="$PubDirUrl/pie-chart.js"></script>
';
With the pie-chart.js file containing the above code, placed in pub/.
> On 11/16/19 10:11 PM, Christopher Cox wrote:
>> That didn't format well. I figured out some thing I had wrong. Added
>> wrap=none to get id of the div. Found my extraneous newliune in my
>> pagelist. What I'm trying to do is embed the output of the pagelist
>> in the middle of raw html on a page to draw a chart. But now I'm down
>> to:
>>
>> <p>['', 43],
>> ['Sales', 174],
>> ['Development', 46],
>> ['IT', 116],
>> ['Customer Support', 145],
>> ['HR', 21],
>> ['Product Management', 28],
>> ['Finance', 35],
>> </p>
>>
>> I just need to somehow get rid of the paragraph around it all.
>>
>>
>> On 11/16/19 9:54 PM, Christopher Cox wrote:
>>> Is there any way to just have the values and not the html from a
>>> pagelist (as in what gets returned in the page source)?
>>>
>>> <div class='fpltemplate'><pclass='vspace'>['Sales', 174], </p>
>>> <pclass='vspace'>['Development', 46], </p> <pclass='vspace'>['IT',
>>> 116], </p> <pclass='vspace'>['Customer Support', 145], </p>
>>> <pclass='vspace'>['HR', 21], </p> <pclass='vspace'>['Product
>>> Management', 28], </p> <pclass='vspace'>['Finance', 35], </p> </div>
>>> Instead, I'd like just: ['Development', 46], ['IT', 116], etc...
>>>
>>
More information about the pmwiki-users
mailing list