mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-02 23:20:20 +00:00
Compare commits
5 commits
b431e6d832
...
00952b89af
Author | SHA1 | Date | |
---|---|---|---|
|
00952b89af | ||
|
364c776ff1 | ||
|
9bd1631103 | ||
|
7201a40c5f | ||
|
c5e5535f51 |
15 changed files with 71 additions and 463 deletions
|
@ -160,6 +160,6 @@ void exportHtmlInitLogic(const QString &filename, struct htmlExportSetting &hes)
|
||||||
file_copy_and_overwrite(searchPath + "jqplot.canvasAxisTickRenderer.min.js", exportFiles + "jqplot.canvasAxisTickRenderer.min.js");
|
file_copy_and_overwrite(searchPath + "jqplot.canvasAxisTickRenderer.min.js", exportFiles + "jqplot.canvasAxisTickRenderer.min.js");
|
||||||
file_copy_and_overwrite(searchPath + "jqplot.canvasTextRenderer.min.js", exportFiles + "jqplot.canvasTextRenderer.min.js");
|
file_copy_and_overwrite(searchPath + "jqplot.canvasTextRenderer.min.js", exportFiles + "jqplot.canvasTextRenderer.min.js");
|
||||||
file_copy_and_overwrite(searchPath + "jquery.min.js", exportFiles + "jquery.min.js");
|
file_copy_and_overwrite(searchPath + "jquery.min.js", exportFiles + "jquery.min.js");
|
||||||
file_copy_and_overwrite(searchPath + "jquery.jqplot.css", exportFiles + "jquery.jqplot.css");
|
file_copy_and_overwrite(searchPath + "jquery.jqplot.min.css", exportFiles + "jquery.jqplot.min.css");
|
||||||
file_copy_and_overwrite(searchPath + hes.themeFile, exportFiles + "theme.css");
|
file_copy_and_overwrite(searchPath + hes.themeFile, exportFiles + "theme.css");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0
|
||||||
import QtQuick 2.5
|
import QtQuick
|
||||||
import QtLocation 5.3
|
import QtLocation
|
||||||
import QtPositioning 5.3
|
import QtPositioning
|
||||||
import org.subsurfacedivelog.mobile 1.0
|
import org.subsurfacedivelog.mobile 1.0
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
@ -15,7 +15,7 @@ Item {
|
||||||
id: mapHelper
|
id: mapHelper
|
||||||
map: map
|
map: map
|
||||||
editMode: false
|
editMode: false
|
||||||
onSelectedDivesChanged: rootItem.selectedDivesChanged(list)
|
onSelectedDivesChanged: (list) => { rootItem.selectedDivesChanged(list) }
|
||||||
onEditModeChanged: editMessage.isVisible = editMode === true ? 1 : 0
|
onEditModeChanged: editMessage.isVisible = editMode === true ? 1 : 0
|
||||||
onCoordinatesChanged: {}
|
onCoordinatesChanged: {}
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
@ -29,7 +29,6 @@ Item {
|
||||||
id: map
|
id: map
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
zoomLevel: defaultZoomIn
|
zoomLevel: defaultZoomIn
|
||||||
|
|
||||||
property var mapType
|
property var mapType
|
||||||
readonly property var defaultCenter: QtPositioning.coordinate(0, 0)
|
readonly property var defaultCenter: QtPositioning.coordinate(0, 0)
|
||||||
readonly property real defaultZoomIn: 12.0
|
readonly property real defaultZoomIn: 12.0
|
||||||
|
@ -41,12 +40,46 @@ Item {
|
||||||
property real newZoomOut: 1.0
|
property real newZoomOut: 1.0
|
||||||
property var clickCoord: QtPositioning.coordinate(0, 0)
|
property var clickCoord: QtPositioning.coordinate(0, 0)
|
||||||
property bool isReady: false
|
property bool isReady: false
|
||||||
|
|
||||||
Component.onCompleted: isReady = true
|
Component.onCompleted: isReady = true
|
||||||
onZoomLevelChanged: {
|
onZoomLevelChanged: {
|
||||||
if (isReady)
|
if (isReady)
|
||||||
mapHelper.calculateSmallCircleRadius(map.center)
|
mapHelper.calculateSmallCircleRadius(map.center)
|
||||||
}
|
}
|
||||||
|
property geoCoordinate startCentroid
|
||||||
|
startCentroid: newCenter
|
||||||
|
|
||||||
|
PinchHandler {
|
||||||
|
id: pinch
|
||||||
|
target: null
|
||||||
|
onActiveChanged: if (active) {
|
||||||
|
map.startCentroid = map.toCoordinate(pinch.centroid.position, false)
|
||||||
|
}
|
||||||
|
onScaleChanged: (delta) => {
|
||||||
|
map.zoomLevel += Math.log2(delta)
|
||||||
|
map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position)
|
||||||
|
}
|
||||||
|
onRotationChanged: (delta) => {
|
||||||
|
map.bearing -= delta
|
||||||
|
map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position)
|
||||||
|
}
|
||||||
|
grabPermissions: PointerHandler.TakeOverForbidden
|
||||||
|
}
|
||||||
|
WheelHandler {
|
||||||
|
id: wheel
|
||||||
|
// workaround for QTBUG-87646 / QTBUG-112394 / QTBUG-112432:
|
||||||
|
// Magic Mouse pretends to be a trackpad but doesn't work with PinchHandler
|
||||||
|
// and we don't yet distinguish mice and trackpads on Wayland either
|
||||||
|
acceptedDevices: Qt.platform.pluginName === "cocoa" || Qt.platform.pluginName === "wayland"
|
||||||
|
? PointerDevice.Mouse | PointerDevice.TouchPad
|
||||||
|
: PointerDevice.Mouse
|
||||||
|
rotationScale: 1/120
|
||||||
|
property: "zoomLevel"
|
||||||
|
}
|
||||||
|
DragHandler {
|
||||||
|
id: drag
|
||||||
|
target: null
|
||||||
|
onTranslationChanged: (delta) => map.pan(-delta.x, -delta.y)
|
||||||
|
}
|
||||||
|
|
||||||
MapItemView {
|
MapItemView {
|
||||||
id: mapItemView
|
id: mapItemView
|
||||||
|
@ -67,7 +100,9 @@ Item {
|
||||||
}
|
}
|
||||||
MouseArea {
|
MouseArea {
|
||||||
drag.target: (mapHelper.editMode && model.isSelected) ? mapItem : undefined
|
drag.target: (mapHelper.editMode && model.isSelected) ? mapItem : undefined
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
hoverEnabled: true
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
if (!mapHelper.editMode && model.divesite)
|
if (!mapHelper.editMode && model.divesite)
|
||||||
mapHelper.selectedLocationChanged(model.divesite)
|
mapHelper.selectedLocationChanged(model.divesite)
|
||||||
|
@ -122,8 +157,8 @@ Item {
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
onPressed: { map.stopZoomAnimations(); mouse.accepted = false }
|
onPressed: (mouse) => { map.stopZoomAnimations(); mouse.accepted = false }
|
||||||
onWheel: { map.stopZoomAnimations(); wheel.accepted = false }
|
onWheel: (wheel) => { map.stopZoomAnimations(); wheel.accepted = false }
|
||||||
onDoubleClicked: map.doubleClickHandler(map.toCoordinate(Qt.point(mouseX, mouseY)))
|
onDoubleClicked: map.doubleClickHandler(map.toCoordinate(Qt.point(mouseX, mouseY)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,20 +4,20 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
|
||||||
#include "qmlmapwidgethelper.h"
|
|
||||||
#include "core/divefilter.h"
|
#include "core/divefilter.h"
|
||||||
#include "core/divelist.h"
|
#include "core/divelist.h"
|
||||||
#include "core/divelog.h"
|
#include "core/divelog.h"
|
||||||
#include "core/divesite.h"
|
#include "core/divesite.h"
|
||||||
#include "core/qthelper.h"
|
#include "core/qthelper.h"
|
||||||
#include "core/range.h"
|
#include "core/range.h"
|
||||||
#include "qt-models/maplocationmodel.h"
|
#include "qmlmapwidgethelper.h"
|
||||||
#include "qt-models/divelocationmodel.h"
|
#include "qt-models/divelocationmodel.h"
|
||||||
|
#include "qt-models/maplocationmodel.h"
|
||||||
#ifndef SUBSURFACE_MOBILE
|
#ifndef SUBSURFACE_MOBILE
|
||||||
#include "desktop-widgets/mapwidget.h"
|
#include "desktop-widgets/mapwidget.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SMALL_CIRCLE_RADIUS_PX 26.0
|
#define SMALL_CIRCLE_RADIUS_PX 26.0
|
||||||
|
|
||||||
MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent)
|
MapWidgetHelper::MapWidgetHelper(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ void MapWidgetHelper::centerOnDiveSite(struct dive_site *ds)
|
||||||
} else {
|
} else {
|
||||||
// dive site with GPS
|
// dive site with GPS
|
||||||
m_mapLocationModel->setSelected(ds);
|
m_mapLocationModel->setSelected(ds);
|
||||||
QGeoCoordinate dsCoord (ds->location.lat.udeg * 0.000001, ds->location.lon.udeg * 0.000001);
|
QGeoCoordinate dsCoord(ds->location.lat.udeg * 0.000001, ds->location.lon.udeg * 0.000001);
|
||||||
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
|
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ void MapWidgetHelper::centerOnSelectedDiveSite()
|
||||||
// find the most top-left and bottom-right dive sites on the map coordinate system.
|
// find the most top-left and bottom-right dive sites on the map coordinate system.
|
||||||
qreal minLat = 0.0, minLon = 0.0, maxLat = 0.0, maxLon = 0.0;
|
qreal minLat = 0.0, minLon = 0.0, maxLat = 0.0, maxLon = 0.0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for(struct dive_site *dss: selDS) {
|
for (struct dive_site *dss : selDS) {
|
||||||
if (!has_location(&dss->location))
|
if (!has_location(&dss->location))
|
||||||
continue;
|
continue;
|
||||||
qreal lat = dss->location.lat.udeg * 0.000001;
|
qreal lat = dss->location.lat.udeg * 0.000001;
|
||||||
|
@ -92,7 +92,7 @@ void MapWidgetHelper::centerOnSelectedDiveSite()
|
||||||
// Pass coordinates to QML, either as a point or as a rectangle.
|
// Pass coordinates to QML, either as a point or as a rectangle.
|
||||||
// If we didn't find any coordinates, do nothing.
|
// If we didn't find any coordinates, do nothing.
|
||||||
if (count == 1) {
|
if (count == 1) {
|
||||||
QGeoCoordinate dsCoord (selDS[0]->location.lat.udeg * 0.000001, selDS[0]->location.lon.udeg * 0.000001);
|
QGeoCoordinate dsCoord(selDS[0]->location.lat.udeg * 0.000001, selDS[0]->location.lon.udeg * 0.000001);
|
||||||
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
|
QMetaObject::invokeMethod(m_map, "centerOnCoordinate", Q_ARG(QVariant, QVariant::fromValue(dsCoord)));
|
||||||
} else if (count > 1) {
|
} else if (count > 1) {
|
||||||
QGeoCoordinate coordTopLeft(minLat, minLon);
|
QGeoCoordinate coordTopLeft(minLat, minLon);
|
||||||
|
@ -134,7 +134,7 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
|
||||||
return;
|
return;
|
||||||
QGeoCoordinate locationCoord = location->coordinate;
|
QGeoCoordinate locationCoord = location->coordinate;
|
||||||
|
|
||||||
for (auto [idx, dive]: enumerated_range(divelog.dives)) {
|
for (auto [idx, dive] : enumerated_range(divelog.dives)) {
|
||||||
struct dive_site *ds = dive->dive_site;
|
struct dive_site *ds = dive->dive_site;
|
||||||
if (!ds || !ds->has_gps_location())
|
if (!ds || !ds->has_gps_location())
|
||||||
continue;
|
continue;
|
||||||
|
@ -151,9 +151,9 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
|
||||||
}
|
}
|
||||||
int last; // get latest dive chronologically
|
int last; // get latest dive chronologically
|
||||||
if (!selectedDiveIds.isEmpty()) {
|
if (!selectedDiveIds.isEmpty()) {
|
||||||
last = selectedDiveIds.last();
|
last = selectedDiveIds.last();
|
||||||
selectedDiveIds.clear();
|
selectedDiveIds.clear();
|
||||||
selectedDiveIds.append(last);
|
selectedDiveIds.append(last);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
emit selectedDivesChanged(selectedDiveIds);
|
emit selectedDivesChanged(selectedDiveIds);
|
||||||
|
@ -162,7 +162,7 @@ void MapWidgetHelper::selectedLocationChanged(struct dive_site *ds_in)
|
||||||
void MapWidgetHelper::selectVisibleLocations()
|
void MapWidgetHelper::selectVisibleLocations()
|
||||||
{
|
{
|
||||||
QList<int> selectedDiveIds;
|
QList<int> selectedDiveIds;
|
||||||
for (auto [idx, dive]: enumerated_range(divelog.dives)) {
|
for (auto [idx, dive] : enumerated_range(divelog.dives)) {
|
||||||
struct dive_site *ds = dive->dive_site;
|
struct dive_site *ds = dive->dive_site;
|
||||||
if (!ds || ds->has_gps_location())
|
if (!ds || ds->has_gps_location())
|
||||||
continue;
|
continue;
|
||||||
|
@ -171,7 +171,7 @@ void MapWidgetHelper::selectVisibleLocations()
|
||||||
QGeoCoordinate dsCoord(latitude, longitude);
|
QGeoCoordinate dsCoord(latitude, longitude);
|
||||||
QPointF point;
|
QPointF point;
|
||||||
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
|
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
|
||||||
Q_ARG(QGeoCoordinate, dsCoord));
|
Q_ARG(QGeoCoordinate, dsCoord));
|
||||||
if (!qIsNaN(point.x()))
|
if (!qIsNaN(point.x()))
|
||||||
#ifndef SUBSURFACE_MOBILE // indices on desktop
|
#ifndef SUBSURFACE_MOBILE // indices on desktop
|
||||||
selectedDiveIds.append(idx);
|
selectedDiveIds.append(idx);
|
||||||
|
@ -181,9 +181,9 @@ void MapWidgetHelper::selectVisibleLocations()
|
||||||
}
|
}
|
||||||
int last; // get latest dive chronologically
|
int last; // get latest dive chronologically
|
||||||
if (!selectedDiveIds.isEmpty()) {
|
if (!selectedDiveIds.isEmpty()) {
|
||||||
last = selectedDiveIds.last();
|
last = selectedDiveIds.last();
|
||||||
selectedDiveIds.clear();
|
selectedDiveIds.clear();
|
||||||
selectedDiveIds.append(last);
|
selectedDiveIds.append(last);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
emit selectedDivesChanged(selectedDiveIds);
|
emit selectedDivesChanged(selectedDiveIds);
|
||||||
|
@ -205,11 +205,11 @@ void MapWidgetHelper::calculateSmallCircleRadius(QGeoCoordinate coord)
|
||||||
{
|
{
|
||||||
QPointF point;
|
QPointF point;
|
||||||
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
|
QMetaObject::invokeMethod(m_map, "fromCoordinate", Q_RETURN_ARG(QPointF, point),
|
||||||
Q_ARG(QGeoCoordinate, coord));
|
Q_ARG(QGeoCoordinate, coord));
|
||||||
QPointF point2(point.x() + SMALL_CIRCLE_RADIUS_PX, point.y());
|
QPointF point2(point.x() + SMALL_CIRCLE_RADIUS_PX, point.y());
|
||||||
QGeoCoordinate coord2;
|
QGeoCoordinate coord2;
|
||||||
QMetaObject::invokeMethod(m_map, "toCoordinate", Q_RETURN_ARG(QGeoCoordinate, coord2),
|
QMetaObject::invokeMethod(m_map, "toCoordinate", Q_RETURN_ARG(QGeoCoordinate, coord2),
|
||||||
Q_ARG(QPointF, point2));
|
Q_ARG(QPointF, point2));
|
||||||
m_smallCircleRadius = coord2.distanceTo(coord);
|
m_smallCircleRadius = coord2.distanceTo(coord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,8 +251,8 @@ QString MapWidgetHelper::pluginObject()
|
||||||
{
|
{
|
||||||
QString lang = getUiLanguage().replace('_', '-');
|
QString lang = getUiLanguage().replace('_', '-');
|
||||||
QString cacheFolder = QString::fromStdString(system_default_directory() + "/googlemaps").replace("\\", "/");
|
QString cacheFolder = QString::fromStdString(system_default_directory() + "/googlemaps").replace("\\", "/");
|
||||||
return QStringLiteral("import QtQuick 2.0;"
|
return QStringLiteral("import QtQuick;"
|
||||||
"import QtLocation 5.3;"
|
"import QtLocation;"
|
||||||
"Plugin {"
|
"Plugin {"
|
||||||
" id: mapPlugin;"
|
" id: mapPlugin;"
|
||||||
" name: 'googlemaps';"
|
" name: 'googlemaps';"
|
||||||
|
@ -263,5 +263,6 @@ QString MapWidgetHelper::pluginObject()
|
||||||
" console.warn('MapWidget.qml: cannot find a plugin named: ' + name);"
|
" console.warn('MapWidget.qml: cannot find a plugin named: ' + name);"
|
||||||
" }"
|
" }"
|
||||||
" }"
|
" }"
|
||||||
"}").arg(lang, cacheFolder);
|
"}")
|
||||||
|
.arg(lang, cacheFolder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,8 +169,9 @@ for package in "${PACKAGES[@]}" ; do
|
||||||
git_checkout_library breeze-icons $CURRENT_BREEZE_ICONS https://github.com/kde/breeze-icons.git
|
git_checkout_library breeze-icons $CURRENT_BREEZE_ICONS https://github.com/kde/breeze-icons.git
|
||||||
;;
|
;;
|
||||||
googlemaps)
|
googlemaps)
|
||||||
git_checkout_library googlemaps master https://github.com/Subsurface/googlemaps.git
|
#git_checkout_library googlemaps master https://github.com/Subsurface/googlemaps.git
|
||||||
;;
|
git_checkout_library googlemaps master https://github.com/vladest/googlemaps.git
|
||||||
|
;;
|
||||||
hidapi)
|
hidapi)
|
||||||
git_checkout_library hidapi master https://github.com/libusb/hidapi.git
|
git_checkout_library hidapi master https://github.com/libusb/hidapi.git
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -27,7 +27,7 @@ function load_scripts()
|
||||||
fileref=document.createElement("link");
|
fileref=document.createElement("link");
|
||||||
fileref.setAttribute("rel", "stylesheet");
|
fileref.setAttribute("rel", "stylesheet");
|
||||||
fileref.setAttribute("type", "text/css");
|
fileref.setAttribute("type", "text/css");
|
||||||
fileref.setAttribute("href", location.pathname + "_files/jquery.jqplot.css");
|
fileref.setAttribute("href", location.pathname + "_files/jquery.jqplot.min.css");
|
||||||
document.getElementsByTagName("head")[0].appendChild(fileref);
|
document.getElementsByTagName("head")[0].appendChild(fileref);
|
||||||
|
|
||||||
fileref=document.createElement('script');
|
fileref=document.createElement('script');
|
||||||
|
|
BIN
theme/jqplot.canvasAxisTickRenderer.js
Normal file
BIN
theme/jqplot.canvasAxisTickRenderer.js
Normal file
Binary file not shown.
57
theme/jqplot.canvasAxisTickRenderer.min.js
vendored
57
theme/jqplot.canvasAxisTickRenderer.min.js
vendored
|
@ -1,57 +0,0 @@
|
||||||
/**
|
|
||||||
* jqPlot
|
|
||||||
* Pure JavaScript plotting plugin using jQuery
|
|
||||||
*
|
|
||||||
* Version: 1.0.0r1095
|
|
||||||
*
|
|
||||||
* Copyright (c) 2009-2011 Chris Leonello
|
|
||||||
* jqPlot is currently available for use in all personal or commercial projects
|
|
||||||
* under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
|
|
||||||
* version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
|
|
||||||
* choose the license that best suits your project and use it accordingly.
|
|
||||||
*
|
|
||||||
* Although not required, the author would appreciate an email letting him
|
|
||||||
* know of any substantial use of jqPlot. You can reach the author at:
|
|
||||||
* chris at jqplot dot com or see http://www.jqplot.com/info.php .
|
|
||||||
*
|
|
||||||
* If you are feeling kind and generous, consider supporting the project by
|
|
||||||
* making a donation at: http://www.jqplot.com/donate.php .
|
|
||||||
*
|
|
||||||
* sprintf functions contained in jqplot.sprintf.js by Ash Searle:
|
|
||||||
*
|
|
||||||
* version 2007.04.27
|
|
||||||
* author Ash Searle
|
|
||||||
* http://hexmen.com/blog/2007/03/printf-sprintf/
|
|
||||||
* http://hexmen.com/js/sprintf.js
|
|
||||||
* The author (Ash Searle) has placed this code in the public domain:
|
|
||||||
* "This code is unrestricted: you are free to use it however you like."
|
|
||||||
*
|
|
||||||
* included jsDate library by Chris Leonello:
|
|
||||||
*
|
|
||||||
* Copyright (c) 2010-2011 Chris Leonello
|
|
||||||
*
|
|
||||||
* jsDate is currently available for use in all personal or commercial projects
|
|
||||||
* under both the MIT and GPL version 2.0 licenses. This means that you can
|
|
||||||
* choose the license that best suits your project and use it accordingly.
|
|
||||||
*
|
|
||||||
* jsDate borrows many concepts and ideas from the Date Instance
|
|
||||||
* Methods by Ken Snyder along with some parts of Ken's actual code.
|
|
||||||
*
|
|
||||||
* Ken's origianl Date Instance Methods and copyright notice:
|
|
||||||
*
|
|
||||||
* Ken Snyder (ken d snyder at gmail dot com)
|
|
||||||
* 2008-09-10
|
|
||||||
* version 2.0.2 (http://kendsnyder.com/sandbox/date/)
|
|
||||||
* Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
|
|
||||||
*
|
|
||||||
* jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
|
|
||||||
* Larry has generously given permission to adapt his code for inclusion
|
|
||||||
* into jqPlot.
|
|
||||||
*
|
|
||||||
* Larry's original code can be found here:
|
|
||||||
*
|
|
||||||
* https://github.com/lsiden/export-jqplot-to-png
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery);
|
|
BIN
theme/jqplot.canvasTextRenderer.js
Normal file
BIN
theme/jqplot.canvasTextRenderer.js
Normal file
Binary file not shown.
57
theme/jqplot.canvasTextRenderer.min.js
vendored
57
theme/jqplot.canvasTextRenderer.min.js
vendored
File diff suppressed because one or more lines are too long
BIN
theme/jqplot.highlighter.js
Normal file
BIN
theme/jqplot.highlighter.js
Normal file
Binary file not shown.
57
theme/jqplot.highlighter.min.js
vendored
57
theme/jqplot.highlighter.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -1,259 +0,0 @@
|
||||||
/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/
|
|
||||||
.jqplot-target {
|
|
||||||
position: relative;
|
|
||||||
color: #666666;
|
|
||||||
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 1em;
|
|
||||||
/* height: 300px;
|
|
||||||
width: 400px;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/*rules applied to all axes*/
|
|
||||||
.jqplot-axis {
|
|
||||||
font-size: 0.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-xaxis {
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-x2axis {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yaxis {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis {
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*rules applied to all axis tick divs*/
|
|
||||||
.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick {
|
|
||||||
position: absolute;
|
|
||||||
white-space: pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.jqplot-xaxis-tick {
|
|
||||||
top: 0px;
|
|
||||||
/* initial position untill tick is drawn in proper place */
|
|
||||||
left: 15px;
|
|
||||||
/* padding-top: 10px;*/
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-x2axis-tick {
|
|
||||||
bottom: 0px;
|
|
||||||
/* initial position untill tick is drawn in proper place */
|
|
||||||
left: 15px;
|
|
||||||
/* padding-bottom: 10px;*/
|
|
||||||
vertical-align: bottom;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yaxis-tick {
|
|
||||||
right: 0px;
|
|
||||||
/* initial position untill tick is drawn in proper place */
|
|
||||||
top: 15px;
|
|
||||||
/* padding-right: 10px;*/
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yaxis-tick.jqplot-breakTick {
|
|
||||||
right: -20px;
|
|
||||||
margin-right: 0px;
|
|
||||||
padding:1px 5px 1px 5px;
|
|
||||||
/* background-color: white;*/
|
|
||||||
z-index: 2;
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
|
|
||||||
left: 0px;
|
|
||||||
/* initial position untill tick is drawn in proper place */
|
|
||||||
top: 15px;
|
|
||||||
/* padding-left: 10px;*/
|
|
||||||
/* padding-right: 15px;*/
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yMidAxis-tick {
|
|
||||||
text-align: center;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-xaxis-label {
|
|
||||||
margin-top: 10px;
|
|
||||||
font-size: 11pt;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-x2axis-label {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
font-size: 11pt;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yaxis-label {
|
|
||||||
margin-right: 10px;
|
|
||||||
/* text-align: center;*/
|
|
||||||
font-size: 11pt;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-yMidAxis-label {
|
|
||||||
font-size: 11pt;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label {
|
|
||||||
/* text-align: center;*/
|
|
||||||
font-size: 11pt;
|
|
||||||
margin-left: 10px;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-meterGauge-tick {
|
|
||||||
font-size: 0.75em;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-meterGauge-label {
|
|
||||||
font-size: 1em;
|
|
||||||
color: #999999;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.jqplot-table-legend {
|
|
||||||
margin-top: 12px;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
margin-left: 12px;
|
|
||||||
margin-right: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.jqplot-table-legend, table.jqplot-cursor-legend {
|
|
||||||
background-color: rgba(255,255,255,0.6);
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
position: absolute;
|
|
||||||
font-size: 0.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.jqplot-table-legend {
|
|
||||||
vertical-align:middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
These rules could be used instead of assigning
|
|
||||||
element styles and relying on js object properties.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
td.jqplot-table-legend-swatch {
|
|
||||||
padding-top: 0.5em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.jqplot-table-legend:first td.jqplot-table-legend-swatch {
|
|
||||||
padding-top: 0px;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-table-legend .jqplot-series-hidden {
|
|
||||||
text-decoration: line-through;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-table-legend-swatch-outline {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
padding:1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-table-legend-swatch {
|
|
||||||
width:0px;
|
|
||||||
height:0px;
|
|
||||||
border-top-width: 5px;
|
|
||||||
border-bottom-width: 5px;
|
|
||||||
border-left-width: 6px;
|
|
||||||
border-right-width: 6px;
|
|
||||||
border-top-style: solid;
|
|
||||||
border-bottom-style: solid;
|
|
||||||
border-left-style: solid;
|
|
||||||
border-right-style: solid;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-title {
|
|
||||||
top: 0px;
|
|
||||||
left: 0px;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
font-size: 1.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.jqplot-cursor-tooltip {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
font-size: 0.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.jqplot-cursor-tooltip {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
font-size: 0.75em;
|
|
||||||
white-space: nowrap;
|
|
||||||
background: rgba(208,208,208,0.5);
|
|
||||||
padding: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip {
|
|
||||||
border: 1px solid #cccccc;
|
|
||||||
font-size: 0.75em;
|
|
||||||
white-space: nowrap;
|
|
||||||
background: rgba(208,208,208,0.9);
|
|
||||||
padding: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-point-label {
|
|
||||||
font-size: 0.75em;
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.jqplot-cursor-legend-swatch {
|
|
||||||
vertical-align: middle;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-cursor-legend-swatch {
|
|
||||||
width: 1.2em;
|
|
||||||
height: 0.7em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-error {
|
|
||||||
/* Styles added to the plot target container when there is an error go here.*/
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.jqplot-error-message {
|
|
||||||
/* Styling of the custom error message div goes here.*/
|
|
||||||
position: relative;
|
|
||||||
top: 46%;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-bubble-label {
|
|
||||||
font-size: 0.8em;
|
|
||||||
/* background: rgba(90%, 90%, 90%, 0.15);*/
|
|
||||||
padding-left: 2px;
|
|
||||||
padding-right: 2px;
|
|
||||||
color: rgb(20%, 20%, 20%);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-bubble-label.jqplot-bubble-label-highlight {
|
|
||||||
background: rgba(90%, 90%, 90%, 0.7);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.jqplot-noData-container {
|
|
||||||
text-align: center;
|
|
||||||
background-color: rgba(96%, 96%, 96%, 0.3);
|
|
||||||
}
|
|
1
theme/jquery.jqplot.min.css
vendored
Normal file
1
theme/jquery.jqplot.min.css
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.jqplot-xaxis,.jqplot-xaxis-label{margin-top:10px}.jqplot-x2axis,.jqplot-x2axis-label{margin-bottom:10px}.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-x2axis-tick,.jqplot-xaxis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick,.jqplot-yaxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px;z-index:2;font-size:1.5em}.jqplot-x2axis-label,.jqplot-xaxis-label,.jqplot-yMidAxis-label,.jqplot-yaxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-yaxis-label{margin-right:10px}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin:12px}table.jqplot-cursor-legend,table.jqplot-table-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:active,td.jqplot-seriesToggle:hover{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-width:5px 6px;border-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-canvasOverlay-tooltip,.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%)}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,.3)}
|
BIN
theme/jquery.jqplot.min.js
vendored
BIN
theme/jquery.jqplot.min.js
vendored
Binary file not shown.
BIN
theme/jquery.min.js
vendored
BIN
theme/jquery.min.js
vendored
Binary file not shown.
Loading…
Reference in a new issue