mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-17 22:26:16 +00:00
From fdf157bb4db042e63f215607b284663f606bd98c Mon Sep 17 00:00:00 2001 From: Rick Walsh <rickmwalsh@gmail.com> Date: Sun, 25 May 2014 14:57:36 +1200 Subject: [PATCH] Add location and max depth to world map export Adds location name and maximum depth to the exported world map html file. Minor formatting changes to exported text for consistency and clarity. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> From fdf157bb4db042e63f215607b284663f606bd98c Mon Sep 17 00:00:00 2001 From: Rick Walsh <rickmwalsh@gmail.com> Date: Sun, 25 May 2014 14:57:36 +1200 Subject: [PATCH] Add location and max depth to world map export Adds location name and maximum depth to the exported world map html file. Minor formatting changes to exported text for consistency and clarity. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
163 lines
4.9 KiB
C
163 lines
4.9 KiB
C
#include <stdarg.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "dive.h"
|
|
#include "membuffer.h"
|
|
#include "worldmap-save.h"
|
|
#include "worldmap-options.h"
|
|
|
|
char *getGoogleApi()
|
|
{
|
|
/* google maps api auth*/
|
|
return "https://maps.googleapis.com/maps/api/js?key=AIzaSyDzo9PWsqYDDSddVswg_13rpD9oH_dLuoQ";
|
|
}
|
|
|
|
void put_HTML_date(struct membuffer *b, struct dive *dive)
|
|
{
|
|
struct tm tm;
|
|
utc_mkdate(dive->when, &tm);
|
|
put_format(b, "<p>Date: %04u-%02u-%02u</p>", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
|
|
put_format(b, "<p>Time: %02u:%02u:%02u</p>", tm.tm_hour, tm.tm_min, tm.tm_sec);
|
|
}
|
|
|
|
void put_HTML_temp(struct membuffer *b, struct dive *dive)
|
|
{
|
|
put_temperature(b, dive->airtemp, "<p>Air Temp: ", "°C</p>");
|
|
put_temperature(b, dive->watertemp, "<p>Water Temp: ", "°C</p>");
|
|
}
|
|
|
|
char *replace_char(char *str, char replace, char *replace_by)
|
|
{
|
|
/*
|
|
this fumction can't replace a character with a substring
|
|
where the substring contains the character, infinte loop.
|
|
*/
|
|
|
|
if (!str)
|
|
return 0;
|
|
|
|
int i = 0, char_count = 0, new_size;
|
|
|
|
while (str[i] != '\0') {
|
|
if (str[i] == replace)
|
|
char_count++;
|
|
i++;
|
|
}
|
|
|
|
new_size = strlen(str) + char_count * strlen(replace_by) + 1;
|
|
char *result = malloc(new_size);
|
|
char *temp = strdup(str);
|
|
char *p0, *p1;
|
|
if (!result || !temp)
|
|
return 0;
|
|
result[0] = '\0';
|
|
p0 = temp;
|
|
p1 = strchr(temp, replace);
|
|
while (p1) {
|
|
*p1 = '\0';
|
|
strcat(result, p0);
|
|
strcat(result, replace_by);
|
|
p0 = p1 + 1;
|
|
p1 = strchr(p0, replace);
|
|
}
|
|
strcat(result, p0); /*concat the rest of the string*/
|
|
free(temp);
|
|
return result;
|
|
}
|
|
|
|
char *quote(char *string)
|
|
{
|
|
char *new_line_removed = replace_char(string, '\n', "<br>");
|
|
char *single_quotes_removed = replace_char(new_line_removed, '\'', "'");
|
|
free(new_line_removed);
|
|
return single_quotes_removed;
|
|
}
|
|
|
|
void put_HTML_notes(struct membuffer *b, struct dive *dive)
|
|
{
|
|
if (dive->notes) {
|
|
char *notes = quote(dive->notes);
|
|
put_format(b, "<p>Notes: %s </p>", notes);
|
|
free(notes);
|
|
}
|
|
}
|
|
|
|
void writeMarkers(struct membuffer *b, const bool selected_only)
|
|
{
|
|
int i, dive_no = 0;
|
|
struct dive *dive;
|
|
|
|
for_each_dive(i, dive) {
|
|
if (selected_only) {
|
|
if (!dive->selected)
|
|
continue;
|
|
}
|
|
if (dive->latitude.udeg == 0 && dive->longitude.udeg == 0)
|
|
continue;
|
|
|
|
put_degrees(b, dive->latitude, "temp = new google.maps.Marker({position: new google.maps.LatLng(", "");
|
|
put_degrees(b, dive->longitude, ",", ")});\n");
|
|
put_string(b, "markers.push(temp);\ntempinfowindow = new google.maps.InfoWindow({content: '<div id=\"content\">'+'<div id=\"siteNotice\">'+'</div>'+'<div id=\"bodyContent\">");
|
|
put_format(b, "<p><b>%s</b></p>", dive->location);
|
|
put_HTML_date(b, dive);
|
|
put_duration(b, dive->duration, "<p>Duration: ", " min</p>");
|
|
put_depth(b, dive->maxdepth, "<p>Max Depth: ", " m</p>");
|
|
put_HTML_temp(b, dive);
|
|
put_HTML_notes(b, dive);
|
|
put_string(b, "</p>'+'</div>'+'</div>'});\ninfowindows.push(tempinfowindow);\n");
|
|
put_format(b, "google.maps.event.addListener(markers[%d], 'mouseover', function() {\ninfowindows[%d].open(map,markers[%d]);}", dive_no, dive_no, dive_no);
|
|
put_format(b, ");google.maps.event.addListener(markers[%d], 'mouseout', function() {\ninfowindows[%d].close();});\n", dive_no, dive_no);
|
|
dive_no++;
|
|
}
|
|
}
|
|
|
|
void insert_html_header(struct membuffer *b)
|
|
{
|
|
put_string(b, "<!DOCTYPE html>\n<html>\n<head>\n");
|
|
put_string(b, "<meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\" />\n<title>World Map</title>\n");
|
|
put_string(b, "<meta charset=\"UTF-8\">");
|
|
}
|
|
|
|
void insert_css(struct membuffer *b)
|
|
{
|
|
put_format(b, "<style type=\"text/css\">%s</style>\n", css);
|
|
}
|
|
|
|
void insert_javascript(struct membuffer *b, const bool selected_only)
|
|
{
|
|
put_string(b, "<script type=\"text/javascript\" src=\"");
|
|
put_string(b, getGoogleApi());
|
|
put_string(b, "&sensor=false\">\n</script>\n<script type=\"text/javascript\">\nvar map;\n");
|
|
put_format(b, "function initialize() {\nvar mapOptions = {\n\t%s,", map_options);
|
|
put_string(b, "rotateControl: false,\n\tstreetViewControl: false,\n\tmapTypeControl: false\n};\n");
|
|
put_string(b, "map = new google.maps.Map(document.getElementById(\"map-canvas\"),mapOptions);\nvar markers = new Array();");
|
|
put_string(b, "\nvar infowindows = new Array();\nvar temp;\nvar tempinfowindow;\n");
|
|
writeMarkers(b, selected_only);
|
|
put_string(b, "\nfor(var i=0;i<markers.length;i++)\n\tmarkers[i].setMap(map);\n}\n");
|
|
put_string(b, "google.maps.event.addDomListener(window, 'load', initialize);</script>\n");
|
|
}
|
|
|
|
void export(struct membuffer *b, const bool selected_only)
|
|
{
|
|
insert_html_header(b);
|
|
insert_css(b);
|
|
insert_javascript(b, selected_only);
|
|
put_string(b, "\t</head>\n<body>\n<div id=\"map-canvas\"></div>\n</body>\n</html>");
|
|
}
|
|
|
|
void export_worldmap_HTML(const char *file_name, const bool selected_only)
|
|
{
|
|
FILE *f;
|
|
|
|
struct membuffer buf = { 0 };
|
|
export(&buf, selected_only);
|
|
|
|
f = fopen(file_name, "w+");
|
|
if (!f)
|
|
printf("error"); /*report error*/
|
|
|
|
flush_buffer(&buf, f); /*check for writing errors? */
|
|
free_buffer(&buf);
|
|
fclose(f);
|
|
}
|