Improved entity item menu with stack button.

This commit is contained in:
Christian P. MOMON 2021-07-04 12:35:11 +02:00
parent 4159387133
commit c7e4123477
23 changed files with 777 additions and 141 deletions

View file

@ -36,6 +36,31 @@ public class Organizations extends ArrayList<Organization>
super(); super();
} }
/**
* Filter by social network.
*
* @param value
* the value
* @return the organizations
*/
public Organizations filterBySocialNetwork(final SocialNetworks value)
{
Organizations result;
result = new Organizations();
for (Organization organization : this)
{
if (organization.hasSocialNetwork(value))
{
result.add(organization);
}
}
//
return result;
}
/** /**
* Filter by social network. * Filter by social network.
* *
@ -60,24 +85,18 @@ public class Organizations extends ArrayList<Organization>
} }
/** /**
* Filter by social network. * Gets the service count.
* *
* @param value * @return the service count
* the value
* @return the organizations
*/ */
public Organizations filterBySocialNetwork(final SocialNetworks value) public int getServiceCount()
{ {
Organizations result; int result;
result = new Organizations();
result = 0;
for (Organization organization : this) for (Organization organization : this)
{ {
if (organization.hasSocialNetwork(value)) result += organization.getServiceCount();
{
result.add(organization);
}
} }
// //

View file

@ -71,7 +71,8 @@ public class FederationHeaderView
} }
data.setContent("federationStartDate", StringUtils.defaultIfBlank(federation.getStartDate(), "n/a")); data.setContent("federationStartDate", StringUtils.defaultIfBlank(federation.getStartDate(), "n/a"));
data.setAttribute("subsLink", "href", "index.xhtml"); data.setAttribute("organizationsLink", "href", federation.getTechnicalName() + "-organizations.xhtml");
data.setAttribute("servicesLink", "href", federation.getTechnicalName() + "-services.xhtml");
data.setAttribute("rawLink", "href", federation.getTechnicalName() + ".properties"); data.setAttribute("rawLink", "href", federation.getTechnicalName() + ".properties");
data.setAttribute("propertyCheckLink", "href", federation.getTechnicalName() + "-propertycheck.xhtml"); data.setAttribute("propertyCheckLink", "href", federation.getTechnicalName() + "-propertycheck.xhtml");
data.setAttribute("statsLink", "href", federation.getTechnicalName() + "-stats.xhtml"); data.setAttribute("statsLink", "href", federation.getTechnicalName() + "-stats.xhtml");

View file

@ -53,8 +53,6 @@ public class FederationMetricWebPage
*/ */
public static void build(final File htmlizeDirectory, final Federation federation, final ViewMenu view, final PeriodMenu period) throws StatoolInfosException, IOException public static void build(final File htmlizeDirectory, final Federation federation, final ViewMenu view, final PeriodMenu period) throws StatoolInfosException, IOException
{ {
String result;
try try
{ {
TagDataManager data = new TagDataManager(); TagDataManager data = new TagDataManager();

View file

@ -0,0 +1,96 @@
/*
* Copyright (C) 2020-2021 Christian Pierre MOMON <christian@momon.org>
*
* This file is part of StatoolInfos, simple service statistics tool.
*
* StatoolInfos is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* StatoolInfos is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.devinsy.statoolinfos.htmlize;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils;
/**
* The Class FederationOrganizationsPage.
*/
public class FederationOrganizationsPage
{
private static Logger logger = LoggerFactory.getLogger(FederationOrganizationsPage.class);
/**
* Builds the.
*
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
*/
public static void build() throws StatoolInfosException, IOException
{
Federation federation = HtmlizerContext.instance().getFederation();
File htmlizeDirectory = HtmlizerContext.instance().getHtmlizeDirectory();
//
logger.info("PAGE FEDERATION organizations page: {}.", federation.getName());
String page = htmlize(federation);
FileUtils.write(new File(htmlizeDirectory, federation.getLocalFileBaseName() + "-organizations.xhtml"), page, StandardCharsets.UTF_8);
}
/**
* Builds the.
*
* @param federation
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
*/
public static String htmlize(final Federation federation) throws StatoolInfosException, IOException
{
String result;
try
{
TagDataManager data = new TagDataManager();
data.setContent("federationHeaderView", FederationHeaderView.htmlize(federation));
data.setContent("organizationListView", OrganizationListView.htmlize(federation.getOrganizations()));
String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federationOrganizations.xhtml", data).toString();
BreadcrumbTrail trail = new BreadcrumbTrail();
result = WebCharterView.build(content, trail);
}
catch (XidynException exception)
{
throw new StatoolInfosException("Error building federation organizations page: " + exception.getMessage(), exception);
}
//
return result;
}
}

View file

@ -21,7 +21,6 @@ package fr.devinsy.statoolinfos.htmlize;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.format.DateTimeFormatter;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -30,21 +29,17 @@ import org.slf4j.LoggerFactory;
import fr.devinsy.catgenerator.core.CatGenerator; import fr.devinsy.catgenerator.core.CatGenerator;
import fr.devinsy.statoolinfos.HtmlizerContext; import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Federation; import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.Organization;
import fr.devinsy.statoolinfos.core.StatoolInfosException; import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.statoolinfos.crawl.CrawlCache; import fr.devinsy.statoolinfos.crawl.CrawlCache;
import fr.devinsy.statoolinfos.htmlize.FederationMetricMenuView.PeriodMenu; import fr.devinsy.statoolinfos.htmlize.FederationMetricMenuView.PeriodMenu;
import fr.devinsy.statoolinfos.htmlize.FederationMetricMenuView.ViewMenu; import fr.devinsy.statoolinfos.htmlize.FederationMetricMenuView.ViewMenu;
import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils;
/** /**
* The Class FederationPage. * The Class FederationPage.
*/ */
public class FederationPage public class FederationPages
{ {
private static Logger logger = LoggerFactory.getLogger(FederationPage.class); private static Logger logger = LoggerFactory.getLogger(FederationPages.class);
/** /**
* Builds the. * Builds the.
@ -68,9 +63,18 @@ public class FederationPage
FileUtils.copyFile(federation.getInputFile(), new File(htmlizeDirectory, federation.getTechnicalName() + ".properties")); FileUtils.copyFile(federation.getInputFile(), new File(htmlizeDirectory, federation.getTechnicalName() + ".properties"));
logger.info("PAGE FEDERATION federation page: {}.", federation.getName()); logger.info("PAGE FEDERATION federation page: {}.", federation.getName());
String page = htmlize(federation); String page = FederationOrganizationsPage.htmlize(federation);
FileUtils.write(new File(htmlizeDirectory, "index.xhtml"), page, StandardCharsets.UTF_8); FileUtils.write(new File(htmlizeDirectory, "index.xhtml"), page, StandardCharsets.UTF_8);
//
FederationOrganizationsPage.build();
FederationServicesPage.build();
FederationCrawlJournalPage.build();
FederationPropertyCheckPage.build();
FederationPropertyAlertPage.buildAll();
FederationStatsPage.build();
FederationUptimePage.build();
// //
logger.info("Htmlize federation metric pages: {}.", federation.getName()); logger.info("Htmlize federation metric pages: {}.", federation.getName());
for (ViewMenu view : ViewMenu.values()) for (ViewMenu view : ViewMenu.values())
@ -91,68 +95,6 @@ public class FederationPage
} }
} }
/**
* Builds the.
*
* @param federation
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
*/
public static String htmlize(final Federation federation) throws StatoolInfosException, IOException
{
String result;
try
{
logger.debug("Building federation page {}…", federation.getName());
TagDataManager data = new TagDataManager();
data.setContent("federationHeaderView", FederationHeaderView.htmlize(federation));
data.setContent("organizationCount", federation.getOrganizations().size());
data.setContent("serviceCount", federation.getServiceCount());
int index = 0;
for (Organization organization : federation.getOrganizations().sortByReverseServiceCount())
{
data.setAttribute("organizationListLine", index, "organizationListLineNameLink", "href", organization.getTechnicalName() + ".xhtml");
data.setAttribute("organizationListLine", index, "organizationListLineLogo", "src", organization.getLogoFileName());
data.setAttribute("organizationListLine", index, "organizationListLineLogo", "alt", organization.getName());
data.setEscapedContent("organizationListLine", index, "organizationListLineNameValue", organization.getName());
if (organization.getWebsiteURL() != null)
{
data.setEscapedContent("organizationListLine", index, "organizationListLineUrlLink", organization.getWebsiteURL().toString());
data.setEscapedAttribute("organizationListLine", index, "organizationListLineUrlLink", "href", organization.getWebsiteURL().toString());
}
data.setContent("organizationListLine", index, "organizationListLineServiceCount", organization.getServiceCount());
data.setContent("organizationListLine", index, "organizationListLineUserCount", organization.getPreviousMonthUserCount());
data.setContent("organizationListLine", index, "organizationListLineVisitCount", organization.getPreviousMonthVisitCount());
data.setContent("organizationListLine", index, "organizationListLineDate", organization.getCrawledDate().format(DateTimeFormatter.ofPattern("dd/MM/YYYY")));
data.setAttribute("organizationListLine", index, "organizationListLineDate", "title", organization.getCrawledDate().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
index += 1;
}
String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federation.xhtml", data).toString();
BreadcrumbTrail trail = new BreadcrumbTrail();
result = WebCharterView.build(content, trail);
}
catch (XidynException exception)
{
throw new StatoolInfosException("Error building federation page: " + exception.getMessage(), exception);
}
//
return result;
}
/** /**
* Htmlize federation logo. * Htmlize federation logo.
* *

View file

@ -0,0 +1,96 @@
/*
* Copyright (C) 2020-2021 Christian Pierre MOMON <christian@momon.org>
*
* This file is part of StatoolInfos, simple service statistics tool.
*
* StatoolInfos is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* StatoolInfos is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.devinsy.statoolinfos.htmlize;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Federation;
import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils;
/**
* The Class FederationServicesPage.
*/
public class FederationServicesPage
{
private static Logger logger = LoggerFactory.getLogger(FederationServicesPage.class);
/**
* Builds the.
*
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
*/
public static void build() throws StatoolInfosException, IOException
{
Federation federation = HtmlizerContext.instance().getFederation();
File htmlizeDirectory = HtmlizerContext.instance().getHtmlizeDirectory();
//
logger.info("PAGE FEDERATION services page: {}.", federation.getName());
String page = htmlize(federation);
FileUtils.write(new File(htmlizeDirectory, federation.getLocalFileBaseName() + "-services.xhtml"), page, StandardCharsets.UTF_8);
}
/**
* Builds the.
*
* @param federation
* the organization
* @return the string
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
*/
public static String htmlize(final Federation federation) throws StatoolInfosException, IOException
{
String result;
try
{
TagDataManager data = new TagDataManager();
data.setContent("federationHeaderView", FederationHeaderView.htmlize(federation));
data.setContent("serviceListView", ServiceListView.htmlize(federation.getServicesAll()));
String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/federationServices.xhtml", data).toString();
BreadcrumbTrail trail = new BreadcrumbTrail();
result = WebCharterView.build(content, trail);
}
catch (XidynException exception)
{
throw new StatoolInfosException("Error building federation services page: " + exception.getMessage(), exception);
}
//
return result;
}
}

View file

@ -162,12 +162,7 @@ public class Htmlizer
CategoryPage.buildAll(); CategoryPage.buildAll();
EditoPage.build(); EditoPage.build();
ExportsPage.build(); ExportsPage.build();
FederationPage.build(); FederationPages.build();
FederationCrawlJournalPage.build();
FederationPropertyCheckPage.build();
FederationPropertyAlertPage.buildAll();
FederationStatsPage.build();
FederationUptimePage.build();
OrganizationPage.buildAll(); OrganizationPage.buildAll();
OrganizationCrawlJournalPage.buildAll(); OrganizationCrawlJournalPage.buildAll();
OrganizationUptimePage.buildAll(); OrganizationUptimePage.buildAll();

View file

@ -96,7 +96,8 @@ public class OrganizationHeaderView
data.setContent("organizationStartDateWord", ""); data.setContent("organizationStartDateWord", "");
} }
data.setAttribute("subsLink", "href", organization.getTechnicalName() + ".xhtml"); data.setAttribute("organizationsLink", "href", organization.getFederation().getTechnicalName() + "-organizations.xhtml");
data.setAttribute("servicesLink", "href", organization.getTechnicalName() + "-services.xhtml");
data.setAttribute("rawLink", "href", organization.getTechnicalName() + ".properties"); data.setAttribute("rawLink", "href", organization.getTechnicalName() + ".properties");
data.setAttribute("rawCheckLink", "href", organization.getTechnicalName() + "-propertycheck.xhtml"); data.setAttribute("rawCheckLink", "href", organization.getTechnicalName() + "-propertycheck.xhtml");

View file

@ -0,0 +1,99 @@
/*
* Copyright (C) 2020-2021 Christian Pierre MOMON <christian@momon.org>
*
* This file is part of StatoolInfos, simple service statistics tool.
*
* StatoolInfos is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* StatoolInfos is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.devinsy.statoolinfos.htmlize;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.devinsy.statoolinfos.core.Organization;
import fr.devinsy.statoolinfos.core.Organizations;
import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils;
import fr.devinsy.xidyn.utils.XidynUtils;
/**
* The Class OrganizationsView.
*/
public class OrganizationListView
{
private static Logger logger = LoggerFactory.getLogger(OrganizationListView.class);
/**
* Htmlize.
*
* @param organizations
* the organizations
* @return the string
* @throws StatoolInfosException
* the statool infos exception
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static String htmlize(final Organizations organizations) throws StatoolInfosException, IOException
{
String result;
try
{
TagDataManager data = new TagDataManager();
data.setContent("organizationCount", organizations.size());
data.setContent("serviceCount", organizations.getServiceCount());
int index = 0;
for (Organization organization : organizations.sortByReverseServiceCount())
{
data.setAttribute("organizationListLine", index, "organizationListLineNameLink", "href", organization.getTechnicalName() + ".xhtml");
data.setAttribute("organizationListLine", index, "organizationListLineLogo", "src", organization.getLogoFileName());
data.setAttribute("organizationListLine", index, "organizationListLineLogo", "alt", organization.getName());
data.setEscapedContent("organizationListLine", index, "organizationListLineNameValue", organization.getName());
if (organization.getWebsiteURL() != null)
{
data.setEscapedContent("organizationListLine", index, "organizationListLineUrlLink", organization.getWebsiteURL().toString());
data.setEscapedAttribute("organizationListLine", index, "organizationListLineUrlLink", "href", organization.getWebsiteURL().toString());
}
data.setContent("organizationListLine", index, "organizationListLineServiceCount", organization.getServiceCount());
data.setContent("organizationListLine", index, "organizationListLineUserCount", organization.getPreviousMonthUserCount());
data.setContent("organizationListLine", index, "organizationListLineVisitCount", organization.getPreviousMonthVisitCount());
data.setContent("organizationListLine", index, "organizationListLineDate", organization.getCrawledDate().format(DateTimeFormatter.ofPattern("dd/MM/YYYY")));
data.setAttribute("organizationListLine", index, "organizationListLineDate", "title", organization.getCrawledDate().format(DateTimeFormatter.ofPattern("HH:mm:ss")));
index += 1;
}
String page = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/organizationListView.xhtml", data).toString();
result = XidynUtils.extractBodyContent(page);
}
catch (XidynException exception)
{
throw new StatoolInfosException("Error building organizations view: " + exception.getMessage(), exception);
}
//
return result;
}
}

View file

@ -69,6 +69,7 @@ public class OrganizationPage
logger.info("Htmlize organization page: {}.", organization.getName()); logger.info("Htmlize organization page: {}.", organization.getName());
String page = OrganizationPage.htmlize(organization); String page = OrganizationPage.htmlize(organization);
FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8); FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + ".xhtml"), page, StandardCharsets.UTF_8);
FileUtils.write(new File(htmlizeDirectory, organization.getTechnicalName() + "-services.xhtml"), page, StandardCharsets.UTF_8);
// //
OrganizationPropertyAlertPage.buildAll(); OrganizationPropertyAlertPage.buildAll();

View file

@ -84,6 +84,9 @@ public class ServiceHeaderView
data.setAttribute("serviceStatusImg", "src", "status-" + service.getStatus().toString().toLowerCase() + ".png"); data.setAttribute("serviceStatusImg", "src", "status-" + service.getStatus().toString().toLowerCase() + ".png");
data.setAttribute("serviceStatusImg", "title", StringUtils.defaultIfBlank(service.getStatusDescription(), service.getStatus().toString())); data.setAttribute("serviceStatusImg", "title", StringUtils.defaultIfBlank(service.getStatusDescription(), service.getStatus().toString()));
data.setAttribute("organizationsLink", "href", service.getOrganization().getTechnicalName() + "-services.xhtml");
data.setAttribute("servicesLink", "href", service.getLocalFileBaseName() + "-services.xhtml");
data.setAttribute("rawLink", "href", service.getLocalFileBaseName() + ".properties"); data.setAttribute("rawLink", "href", service.getLocalFileBaseName() + ".properties");
data.setAttribute("rawCheckLink", "href", service.getLocalFileBaseName() + "-propertycheck.xhtml"); data.setAttribute("rawCheckLink", "href", service.getLocalFileBaseName() + "-propertycheck.xhtml");

View file

@ -77,6 +77,8 @@ public class ServicePage
String page = ServicePage.htmlize(service); String page = ServicePage.htmlize(service);
FileUtils.write(new File(htmlizeDirectory, service.getLocalFileBaseName() + ".xhtml"), page, StandardCharsets.UTF_8); FileUtils.write(new File(htmlizeDirectory, service.getLocalFileBaseName() + ".xhtml"), page, StandardCharsets.UTF_8);
ServiceServicesPage.build(service);
// //
logger.info("Htmlize service metric pages: {}.", service.getName()); logger.info("Htmlize service metric pages: {}.", service.getName());
for (ViewMenu view : ViewMenu.values()) for (ViewMenu view : ViewMenu.values())

View file

@ -0,0 +1,106 @@
/*
* Copyright (C) 2020-2021 Christian Pierre MOMON <christian@momon.org>
*
* This file is part of StatoolInfos, simple service statistics tool.
*
* StatoolInfos is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* StatoolInfos is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with StatoolInfos. If not, see <http://www.gnu.org/licenses/>.
*/
package fr.devinsy.statoolinfos.htmlize;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.devinsy.catgenerator.core.BirdGenerator;
import fr.devinsy.statoolinfos.HtmlizerContext;
import fr.devinsy.statoolinfos.core.Service;
import fr.devinsy.statoolinfos.core.Services;
import fr.devinsy.statoolinfos.core.StatoolInfosException;
import fr.devinsy.statoolinfos.crawl.CrawlCache;
import fr.devinsy.xidyn.XidynException;
import fr.devinsy.xidyn.data.TagDataManager;
import fr.devinsy.xidyn.presenters.PresenterUtils;
// TODO: Auto-generated Javadoc
/**
* The Class ServiceServicesPage.
*/
public class ServiceServicesPage
{
private static Logger logger = LoggerFactory.getLogger(ServiceServicesPage.class);
/**
* Builds the view.
*
* @param service
* the service
* @throws IOException
* Signals that an I/O exception has occurred.
* @throws StatoolInfosException
* the statool infos exception
*/
public static void build(final Service service) throws IOException, StatoolInfosException
{
File htmlizeDirectory = HtmlizerContext.instance().getHtmlizeDirectory();
//
String page = htmlize(service);
FileUtils.write(new File(htmlizeDirectory, service.getLocalFileBaseName() + "-services.xhtml"), page, StandardCharsets.UTF_8);
}
/**
* Builds the.
*
* @param service
* the service
* @return the string
* @throws StatoolInfosException
* the statool infos exception
*/
public static String htmlize(final Service service) throws StatoolInfosException
{
String result;
try
{
TagDataManager data = new TagDataManager();
//
data.setContent("headerView", ServiceHeaderView.htmlize(service));
Services services = new Services();
services.add(service);
data.setContent("servicesView", ServiceListView.htmlize(services));
//
String content = PresenterUtils.dynamize("/fr/devinsy/statoolinfos/htmlize/serviceServices.xhtml", data).toString();
BreadcrumbTrail trail = new BreadcrumbTrail();
trail.add(service.getOrganization().getName(), service.getOrganization().getTechnicalName() + ".xhtml");
trail.add(service.getName(), service.getOrganization().getTechnicalName() + "-" + service.getTechnicalName() + ".xhtml");
result = WebCharterView.build(content, trail);
}
catch (XidynException exception)
{
throw new StatoolInfosException("Error building service page: " + exception.getMessage(), exception);
}
//
return result;
}
}

View file

@ -12,51 +12,6 @@
</head> </head>
<body> <body>
<div id="federationHeaderView" /> <div id="federationHeaderView" />
<div class="center_table" style="width: 900px;"> <div id="organizationListView" />
<br/>
<div class="center">Nombre de membres : <span id="organizationCount">n/a</span></div>
<div class="center">Nombre de services : <span id="serviceCount">n/a</span></div>
<table id="organizations" class="table_classic left">
<thead>
<tr>
<th style="width: 200px;">Membre</th>
<th style="width: 250px;">URL</th>
<th style="width: 10px;">Services</th>
<th style="width: 10px;">Utilisateurs mensuels</th>
<th style="width: 10px;">Visites mensuelles</th>
<th style="width: 10px;">Date</th>
</tr>
</thead>
<tbody>
<tr id="organizationListLine">
<td id="organizationListLineName" style="padding-top: 0; padding-bottom: 0;">
<a href="#" id="organizationListLineNameLink">
<img id="organizationListLineLogo" src="" style="width: 26px; height: 26px; padding-top:0; padding-bottom: 0; vertical-align: middle;"/>
&#160;<span id="organizationListLineNameValue">n/a</span>
</a>
</td>
<td id="organizationListLineUrl"><a href="#" id="organizationListLineUrlLink">n/a</a></td>
<td id="organizationListLineServiceCount" class="td_number">n/a</td>
<td id="organizationListLineUserCount" class="td_number">n/a</td>
<td id="organizationListLineVisitCount" class="td_number">n/a</td>
<td id="organizationListLineDate" class="center">n/a</td>
</tr>
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function()
{
$.fn.dataTable.moment( 'DD/MM/YYYY' );
$('#organizations').DataTable(
{
paging: false,
ordering: true,
"order": [[ 2, "desc" ]],
language: dataTableFrench
});
} );
</script>
</body> </body>
</html> </html>

View file

@ -28,7 +28,8 @@
<a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a> <a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a>
<a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a> <a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a>
<a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a> <a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a>
<a id="subsLink" href="#"><img id="subsLinkImg" src="circle-icons/frames-mono.svg" title="Liste des organisations"/></a> <a id="organizationsLink" href="#"><img id="organizationsLinkImg" src="circle-icons/stack-mono.svg" title="Liste des organisations"/></a>
<a id="servicesLink" href="#"><img id="servicesLinkImg" src="circle-icons/frames-mono.svg" title="Liste des services"/></a>
<a id="propertyCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a> <a id="propertyCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a>
<a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a> <a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a>
<a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a> <a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>StatoolInfos</title>
<meta charset="UTF-8" />
<meta name="keywords" content="statoolinfos,devinsy,federation" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="statoolinfos.css" />
<script src="sorttable.js" />
<script src="Chart.bundle.min.js"></script>
</head>
<body>
<div id="federationHeaderView" />
<div id="organizationListView" />
</body>
</html>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>StatoolInfos</title>
<meta charset="UTF-8" />
<meta name="keywords" content="statoolinfos,devinsy,federation" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="statoolinfos.css" />
<script src="sorttable.js" />
<script src="Chart.bundle.min.js"></script>
</head>
<body>
<div id="federationHeaderView" />
<div id="serviceListView" />
</body>
</html>

View file

@ -30,7 +30,8 @@
<a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a> <a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a>
<a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a> <a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a>
<a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a> <a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a>
<a id="subsLink" href="#"><img id="subsLinkImg" src="circle-icons/frames-mono.svg" title="Liste des services"/></a> <a id="organizationsLink" href="#"><img id="organizationsLinkImg" src="circle-icons/stack-mono.svg" title="Liste des organisations"/></a>
<a id="servicesLink" href="#"><img id="servicesLinkImg" src="circle-icons/frames-mono.svg" title="Liste des services"/></a>
<a id="rawCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a> <a id="rawCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a>
<a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a> <a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a>
<a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a> <a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>StatoolInfos</title>
<meta charset="UTF-8" />
<meta name="keywords" content="statoolinfos,devinsy,federation" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="statoolinfos.css" />
<script src="sorttable.js" />
<script src="Chart.bundle.min.js"></script>
</head>
<body>
<div class="center_table" style="width: 900px;">
<br/>
<div class="center">Nombre de membres : <span id="organizationCount">n/a</span></div>
<div class="center">Nombre de services : <span id="serviceCount">n/a</span></div>
<table id="organizations" class="table_classic left">
<thead>
<tr>
<th style="width: 200px;">Membre</th>
<th style="width: 250px;">URL</th>
<th style="width: 10px;">Services</th>
<th style="width: 10px;">Utilisateurs mensuels</th>
<th style="width: 10px;">Visites mensuelles</th>
<th style="width: 10px;">Date</th>
</tr>
</thead>
<tbody>
<tr id="organizationListLine">
<td id="organizationListLineName" style="padding-top: 0; padding-bottom: 0;">
<a href="#" id="organizationListLineNameLink">
<img id="organizationListLineLogo" src="" style="width: 26px; height: 26px; padding-top:0; padding-bottom: 0; vertical-align: middle;"/>
&#160;<span id="organizationListLineNameValue">n/a</span>
</a>
</td>
<td id="organizationListLineUrl"><a href="#" id="organizationListLineUrlLink">n/a</a></td>
<td id="organizationListLineServiceCount" class="td_number">n/a</td>
<td id="organizationListLineUserCount" class="td_number">n/a</td>
<td id="organizationListLineVisitCount" class="td_number">n/a</td>
<td id="organizationListLineDate" class="center">n/a</td>
</tr>
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function()
{
$.fn.dataTable.moment( 'DD/MM/YYYY' );
$('#organizations').DataTable(
{
paging: false,
ordering: true,
"order": [[ 2, "desc" ]],
language: dataTableFrench
});
} );
</script>
</body>
</html>

View file

@ -38,7 +38,8 @@
<a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a> <a id="emailLink" href="#"><img id="emailLinkImg" src="circle-icons/mail.svg" class="disabled" title="Courriel de contact/support"/></a>
<a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a> <a id="userDocLink" href="#"><img id="userDocLinkImg" src="circle-icons/bookshelf.svg" class="disabled" title="Documentation"/></a>
<a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a> <a id="technicalDocLink" href="#"><img id="technicalDocLinkImg" src="circle-icons/tools.svg" class="disabled" title="Documentation technique"/></a>
<a id="subsLink" href="#"><img id="subsLinkImg" src="circle-icons/frames-mono.svg" title="" class="disabled" /></a> <a id="organizationsLink" href="#"><img id="organizationsLinkImg" src="circle-icons/stack-mono.svg" title="Organisation"/></a>
<a id="servicesLink" href="#"><img id="servicesLinkImg" src="circle-icons/frames-mono.svg" title="" /></a>
<a id="rawCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a> <a id="rawCheckLink" href="#"><img id="rawCheckLinkImg" src="circle-icons/clipboard-mono.svg" title="Propriétés"/></a>
<a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a> <a id="rawLink" href="#"><img id="rawLinkImg" src="circle-icons/document-mono.svg" title="Propriétés brutes"/></a>
<a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a> <a id="crawlLink" href="#"><img id="crawlLinkImg" src="circle-icons/download-mono.svg" title="Statut des téléchargements"/></a>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>StatoolInfos</title>
<meta charset="UTF-8" />
<meta name="keywords" content="statoolinfos,devinsy,federation" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="statoolinfos.css" />
<script src="sorttable.js" />
<script src="Chart.bundle.min.js"></script>
</head>
<body>
<div id="headerView" />
<div id="servicesView" />
</body>
</html>

View file

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
xml:space="preserve"
width="85.333336"
height="85.333336"
viewBox="0 0 85.333336 85.333336"
sodipodi:docname="stack.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath18"><path
d="M 0,64 H 64 V 0 H 0 Z"
id="path16"
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="830"
inkscape:window-height="480"
id="namedview4"
showgrid="false"
inkscape:zoom="2.7656249"
inkscape:cx="42.666668"
inkscape:cy="42.666668"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="0"
inkscape:current-layer="g10" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="Elegant_circle-icons"
transform="matrix(1.3333333,0,0,-1.3333333,0,85.333333)"><g
id="g12"><g
id="g14"
clip-path="url(#clipPath18)"><g
id="g20"
transform="translate(51.2742,25.0513)"><path
d="m 0,0 -2.971,1.782 -13.522,-8.113 c -0.774,-0.464 -1.762,-0.72 -2.781,-0.72 -1.019,0 -2.007,0.256 -2.781,0.72 L -35.578,1.782 -38.548,0 c -0.968,-0.581 -0.968,-1.522 0,-2.103 l 17.522,-10.513 c 0.483,-0.29 1.118,-0.435 1.752,-0.435 0.634,0 1.268,0.145 1.752,0.435 L 0,-2.103 C 0.968,-1.522 0.968,-0.581 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /></g><g
id="g24"
transform="translate(51.2742,33.0513)"><path
d="m 0,0 -2.971,1.782 -13.522,-8.113 c -0.774,-0.464 -1.762,-0.72 -2.781,-0.72 -1.019,0 -2.007,0.256 -2.781,0.72 L -35.578,1.782 -38.548,0 c -0.968,-0.581 -0.968,-1.522 0,-2.103 l 17.522,-10.513 c 0.483,-0.29 1.118,-0.435 1.752,-0.435 0.634,0 1.268,0.145 1.752,0.435 L 0,-2.103 C 0.968,-1.522 0.968,-0.581 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26"
inkscape:connector-curvature="0" /></g><g
id="g28"
transform="translate(51.2742,41.0513)"><path
d="m 0,0 -17.522,10.513 c -0.484,0.29 -1.118,0.436 -1.752,0.436 -0.634,0 -1.269,-0.146 -1.752,-0.436 L -38.548,0 c -0.968,-0.581 -0.968,-1.522 0,-2.103 l 17.522,-10.513 c 0.483,-0.29 1.118,-0.435 1.752,-0.435 0.634,0 1.268,0.145 1.752,0.435 L 0,-2.103 C 0.968,-1.522 0.968,-0.581 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path30"
inkscape:connector-curvature="0" /></g><g
id="g32"
transform="translate(51.2742,38.9487)"><path
d="m 0,0 -17.522,-10.513 c -0.484,-0.29 -1.118,-0.436 -1.752,-0.436 -0.634,0 -1.269,0.146 -1.752,0.436 L -38.548,0 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.483,0.29 1.118,0.435 1.752,0.435 0.634,0 1.268,-0.145 1.752,-0.435 L 0,2.103 C 0.968,1.522 0.968,0.581 0,0 m 0,-8 -17.522,-10.513 c -0.484,-0.29 -1.118,-0.436 -1.752,-0.436 -0.634,0 -1.269,0.146 -1.752,0.436 L -38.548,-8 c -0.968,0.581 -0.968,1.522 0,2.103 l 2.97,1.782 13.523,-8.113 c 0.774,-0.465 1.762,-0.721 2.781,-0.721 1.019,0 2.007,0.256 2.781,0.721 L -2.971,-4.115 0,-5.897 C 0.968,-6.478 0.968,-7.419 0,-8 m 0,-8 -17.522,-10.513 c -0.484,-0.29 -1.118,-0.436 -1.752,-0.436 -0.634,0 -1.269,0.146 -1.752,0.436 L -38.548,-16 c -0.968,0.581 -0.968,1.522 0,2.103 l 2.97,1.782 13.523,-8.113 c 0.774,-0.465 1.762,-0.721 2.781,-0.721 1.019,0 2.007,0.256 2.781,0.721 L -2.971,-12.115 0,-13.897 C 0.968,-14.478 0.968,-15.419 0,-16 m -19.274,41.051 c -17.673,0 -32,-14.327 -32,-32 0,-17.673 14.327,-32 32,-32 17.673,0 32,14.327 32,32 0,17.673 -14.327,32 -32,32"
style="fill:#4f5d73;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path34"
inkscape:connector-curvature="0" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
xml:space="preserve"
width="85.333336"
height="85.333336"
viewBox="0 0 85.333336 85.333336"
sodipodi:docname="stack.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath18"><path
d="M 0,64 H 64 V 0 H 0 Z"
id="path16"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath30"><path
d="M 12,34 H 52 V 10 H 12 Z"
id="path28"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath50"><path
d="M 12,42 H 52 V 18 H 12 Z"
id="path48"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath70"><path
d="M 12,50 H 52 V 26 H 12 Z"
id="path68"
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="830"
inkscape:window-height="480"
id="namedview4"
showgrid="false"
inkscape:zoom="2.7656249"
inkscape:cx="42.666668"
inkscape:cy="42.666668"
inkscape:window-x="768"
inkscape:window-y="288"
inkscape:window-maximized="0"
inkscape:current-layer="g10" /><g
id="g10"
inkscape:groupmode="layer"
inkscape:label="Elegant_circle-icons"
transform="matrix(1.3333333,0,0,-1.3333333,0,85.333333)"><g
id="g12"><g
id="g14"
clip-path="url(#clipPath18)"><g
id="g20"
transform="translate(64,32)"><path
d="m 0,0 c 0,-17.673 -14.327,-32 -32,-32 -17.673,0 -32,14.327 -32,32 0,17.673 14.327,32 32,32 C -14.327,32 0,17.673 0,0"
style="fill:#e0e0d1;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22"
inkscape:connector-curvature="0" /></g><g
id="g24"><g
id="g26" /><g
id="g38"><g
clip-path="url(#clipPath30)"
id="g36"
style="opacity:0.19999701"><g
transform="translate(33.7522,10.4355)"
id="g34"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path32"
inkscape:connector-curvature="0" /></g></g></g></g><g
id="g40"
transform="translate(33.7522,12.4355)"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#c75c5c;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42"
inkscape:connector-curvature="0" /></g><g
id="g44"><g
id="g46" /><g
id="g58"><g
clip-path="url(#clipPath50)"
id="g56"
style="opacity:0.19999701"><g
transform="translate(33.7522,18.4355)"
id="g54"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path52"
inkscape:connector-curvature="0" /></g></g></g></g><g
id="g60"
transform="translate(33.7522,20.4355)"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#76c2af;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path62"
inkscape:connector-curvature="0" /></g><g
id="g64"><g
id="g66" /><g
id="g78"><g
clip-path="url(#clipPath70)"
id="g76"
style="opacity:0.19999701"><g
transform="translate(33.7522,26.4355)"
id="g74"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#231f20;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path72"
inkscape:connector-curvature="0" /></g></g></g></g><g
id="g80"
transform="translate(33.7522,28.4355)"><path
d="m 0,0 c -0.968,-0.581 -2.537,-0.581 -3.504,0 l -17.522,10.513 c -0.968,0.581 -0.968,1.522 0,2.103 l 17.522,10.513 c 0.967,0.581 2.536,0.581 3.504,0 L 17.522,12.616 c 0.968,-0.581 0.968,-1.522 0,-2.103 z"
style="fill:#4f5d73;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path82"
inkscape:connector-curvature="0" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 6.2 KiB