Improved entity item menu with stack button.
This commit is contained in:
parent
4159387133
commit
c7e4123477
23 changed files with 777 additions and 141 deletions
|
@ -36,6 +36,31 @@ public class Organizations extends ArrayList<Organization>
|
|||
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.
|
||||
*
|
||||
|
@ -60,24 +85,18 @@ public class Organizations extends ArrayList<Organization>
|
|||
}
|
||||
|
||||
/**
|
||||
* Filter by social network.
|
||||
* Gets the service count.
|
||||
*
|
||||
* @param value
|
||||
* the value
|
||||
* @return the organizations
|
||||
* @return the service count
|
||||
*/
|
||||
public Organizations filterBySocialNetwork(final SocialNetworks value)
|
||||
public int getServiceCount()
|
||||
{
|
||||
Organizations result;
|
||||
|
||||
result = new Organizations();
|
||||
int result;
|
||||
|
||||
result = 0;
|
||||
for (Organization organization : this)
|
||||
{
|
||||
if (organization.hasSocialNetwork(value))
|
||||
{
|
||||
result.add(organization);
|
||||
}
|
||||
result += organization.getServiceCount();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -71,7 +71,8 @@ public class FederationHeaderView
|
|||
}
|
||||
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("propertyCheckLink", "href", federation.getTechnicalName() + "-propertycheck.xhtml");
|
||||
data.setAttribute("statsLink", "href", federation.getTechnicalName() + "-stats.xhtml");
|
||||
|
|
|
@ -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
|
||||
{
|
||||
String result;
|
||||
|
||||
try
|
||||
{
|
||||
TagDataManager data = new TagDataManager();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -21,7 +21,6 @@ package fr.devinsy.statoolinfos.htmlize;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -30,21 +29,17 @@ import org.slf4j.LoggerFactory;
|
|||
import fr.devinsy.catgenerator.core.CatGenerator;
|
||||
import fr.devinsy.statoolinfos.HtmlizerContext;
|
||||
import fr.devinsy.statoolinfos.core.Federation;
|
||||
import fr.devinsy.statoolinfos.core.Organization;
|
||||
import fr.devinsy.statoolinfos.core.StatoolInfosException;
|
||||
import fr.devinsy.statoolinfos.crawl.CrawlCache;
|
||||
import fr.devinsy.statoolinfos.htmlize.FederationMetricMenuView.PeriodMenu;
|
||||
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.
|
||||
*/
|
||||
public class FederationPage
|
||||
public class FederationPages
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger(FederationPage.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(FederationPages.class);
|
||||
|
||||
/**
|
||||
* Builds the.
|
||||
|
@ -68,9 +63,18 @@ public class FederationPage
|
|||
FileUtils.copyFile(federation.getInputFile(), new File(htmlizeDirectory, federation.getTechnicalName() + ".properties"));
|
||||
|
||||
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);
|
||||
|
||||
//
|
||||
FederationOrganizationsPage.build();
|
||||
FederationServicesPage.build();
|
||||
FederationCrawlJournalPage.build();
|
||||
FederationPropertyCheckPage.build();
|
||||
FederationPropertyAlertPage.buildAll();
|
||||
FederationStatsPage.build();
|
||||
FederationUptimePage.build();
|
||||
|
||||
//
|
||||
logger.info("Htmlize federation metric pages: {}.", federation.getName());
|
||||
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.
|
||||
*
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -162,12 +162,7 @@ public class Htmlizer
|
|||
CategoryPage.buildAll();
|
||||
EditoPage.build();
|
||||
ExportsPage.build();
|
||||
FederationPage.build();
|
||||
FederationCrawlJournalPage.build();
|
||||
FederationPropertyCheckPage.build();
|
||||
FederationPropertyAlertPage.buildAll();
|
||||
FederationStatsPage.build();
|
||||
FederationUptimePage.build();
|
||||
FederationPages.build();
|
||||
OrganizationPage.buildAll();
|
||||
OrganizationCrawlJournalPage.buildAll();
|
||||
OrganizationUptimePage.buildAll();
|
||||
|
|
|
@ -96,7 +96,8 @@ public class OrganizationHeaderView
|
|||
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("rawCheckLink", "href", organization.getTechnicalName() + "-propertycheck.xhtml");
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -69,6 +69,7 @@ public class OrganizationPage
|
|||
logger.info("Htmlize organization page: {}.", organization.getName());
|
||||
String page = OrganizationPage.htmlize(organization);
|
||||
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();
|
||||
|
|
|
@ -84,6 +84,9 @@ public class ServiceHeaderView
|
|||
data.setAttribute("serviceStatusImg", "src", "status-" + service.getStatus().toString().toLowerCase() + ".png");
|
||||
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("rawCheckLink", "href", service.getLocalFileBaseName() + "-propertycheck.xhtml");
|
||||
|
||||
|
|
|
@ -77,6 +77,8 @@ public class ServicePage
|
|||
String page = ServicePage.htmlize(service);
|
||||
FileUtils.write(new File(htmlizeDirectory, service.getLocalFileBaseName() + ".xhtml"), page, StandardCharsets.UTF_8);
|
||||
|
||||
ServiceServicesPage.build(service);
|
||||
|
||||
//
|
||||
logger.info("Htmlize service metric pages: {}.", service.getName());
|
||||
for (ViewMenu view : ViewMenu.values())
|
||||
|
|
106
src/fr/devinsy/statoolinfos/htmlize/ServiceServicesPage.java
Normal file
106
src/fr/devinsy/statoolinfos/htmlize/ServiceServicesPage.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -12,51 +12,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="federationHeaderView" />
|
||||
<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;"/>
|
||||
 <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>
|
||||
<div id="organizationListView" />
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -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="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="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="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>
|
||||
|
|
|
@ -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>
|
17
src/fr/devinsy/statoolinfos/htmlize/federationServices.xhtml
Normal file
17
src/fr/devinsy/statoolinfos/htmlize/federationServices.xhtml
Normal 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>
|
|
@ -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="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="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="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>
|
||||
|
|
|
@ -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;"/>
|
||||
 <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>
|
|
@ -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="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="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="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>
|
||||
|
|
17
src/fr/devinsy/statoolinfos/htmlize/serviceServices.xhtml
Normal file
17
src/fr/devinsy/statoolinfos/htmlize/serviceServices.xhtml
Normal 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>
|
|
@ -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 |
129
src/fr/devinsy/statoolinfos/htmlize/stuff/circle-icons/stack.svg
Normal file
129
src/fr/devinsy/statoolinfos/htmlize/stuff/circle-icons/stack.svg
Normal 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 |
Loading…
Reference in a new issue