mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-27 20:58:47 +00:00
Compare commits
12 commits
6b27265925
...
953ff85dd4
Author | SHA1 | Date | |
---|---|---|---|
|
953ff85dd4 | ||
|
364c776ff1 | ||
|
3bd7be809a | ||
|
b392052c37 | ||
|
c72a26afe1 | ||
|
f81cf77886 | ||
|
821f3fc551 | ||
|
b1493c3540 | ||
|
8a64d1f4b9 | ||
|
784eddc166 | ||
|
5613014124 | ||
|
b5e5e4c212 |
33 changed files with 57 additions and 468 deletions
2
.github/workflows/android.yml
vendored
2
.github/workflows/android.yml
vendored
|
@ -18,7 +18,7 @@ jobs:
|
|||
KEYSTORE_FILE: ${{ github.workspace }}/../subsurface.keystore
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: docker://subsurface/android-build:5.15.2
|
||||
image: docker://subsurface/android-build:5.15.3
|
||||
|
||||
steps:
|
||||
- name: checkout sources
|
||||
|
|
1
.github/workflows/linux-debian-generic.yml
vendored
1
.github/workflows/linux-debian-generic.yml
vendored
|
@ -95,6 +95,5 @@ jobs:
|
|||
echo "--------------------------------------------------------------"
|
||||
echo "building smtk2ssrf"
|
||||
|
||||
# build smtk2ssrf (needs the artefacts generated by the subsurface build
|
||||
cd ..
|
||||
bash -e -x subsurface/scripts/smtk2ssrf-build.sh -y
|
||||
|
|
4
.github/workflows/snap_usns.yml
vendored
4
.github/workflows/snap_usns.yml
vendored
|
@ -14,7 +14,7 @@ jobs:
|
|||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
|
@ -28,7 +28,7 @@ jobs:
|
|||
sudo snap install review-tools --edge
|
||||
|
||||
- name: Set up Launchpad credentials
|
||||
uses: DamianReeves/write-file-action@v1.2
|
||||
uses: DamianReeves/write-file-action@v1.3
|
||||
with:
|
||||
path: lp_credentials
|
||||
contents: ${{ secrets.LAUNCHPAD_CREDENTIALS }}
|
||||
|
|
|
@ -52,6 +52,7 @@ option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
|
|||
#Options regarding enabling parts of subsurface
|
||||
option(BTSUPPORT "enable support for QtBluetooth" ON)
|
||||
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
|
||||
option(LIBRAW_SUPPORT "enable support for LibRaw images" ON)
|
||||
|
||||
# Options regarding What should we build on subsurface
|
||||
option(MAKE_TESTS "Make the tests" ON)
|
||||
|
@ -169,10 +170,6 @@ if(NOT ANDROID)
|
|||
pkg_config_library(LIBRAW libraw )
|
||||
endif()
|
||||
|
||||
if(LIBRAW_FOUND)
|
||||
add_definitions(-DLIBRAW_SUPPORT)
|
||||
endif()
|
||||
|
||||
include_directories(.
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}
|
||||
|
@ -300,6 +297,7 @@ elseif (SUBSURFACE_TARGET_EXECUTABLE MATCHES "DownloaderExecutable")
|
|||
set(SUBSURFACE_TARGET subsurface-downloader)
|
||||
endif()
|
||||
set(BTSUPPORT ON)
|
||||
set(LIBRAW_SUPPORT OFF)
|
||||
add_definitions(-DSUBSURFACE_DOWNLOADER)
|
||||
message(STATUS "building the embedded Subsurface-downloader app")
|
||||
endif()
|
||||
|
@ -363,6 +361,14 @@ if(BTSUPPORT)
|
|||
add_definitions(-DBLE_SUPPORT)
|
||||
endif()
|
||||
|
||||
if (LIBRAW_SUPPORT)
|
||||
if(LIBRAW_FOUND)
|
||||
add_definitions(-DLIBRAW_SUPPORT)
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "building without built-in libraw support")
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
# when building for Android, the toolchain file requires all cmake modules
|
||||
# to be inside the CMAKE_FIND_ROOT_PATH - which prevents cmake from finding
|
||||
|
|
|
@ -11,7 +11,7 @@ buildscript {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
||||
classpath 'com.android.tools.build:gradle:3.5.4'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,8 +28,8 @@ apply plugin: 'com.android.application'
|
|||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'com.github.mik3y:usb-serial-for-android:v3.4.3'
|
||||
implementation 'com.android.support:support-v4:25.3.1'
|
||||
implementation 'com.github.mik3y:usb-serial-for-android:v3.8.0'
|
||||
implementation 'com.android.support:support-v4:28.0.0'
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
|
@ -439,7 +439,7 @@ static void cochran_parse_samples(struct dive *dive, const unsigned char *log,
|
|||
{
|
||||
const unsigned char *s;
|
||||
unsigned int offset = 0, profile_period = 1, sample_cnt = 0;
|
||||
double depth = 0, temp = 0, depth_sample = 0, psi = 0, sgc_rate = 0;
|
||||
double depth = 0, temp = 0, depth_sample = 0, psi = 0;
|
||||
//int ascent_rate = 0;
|
||||
unsigned int ndl = 0;
|
||||
unsigned int in_deco = 0, deco_ceiling = 0, deco_time = 0;
|
||||
|
@ -457,8 +457,6 @@ static void cochran_parse_samples(struct dive *dive, const unsigned char *log,
|
|||
+ log[CMD_START_DEPTH + 1] * 256) / 4;
|
||||
temp = log[CMD_START_TEMP];
|
||||
psi = log[CMD_START_PSI] + log[CMD_START_PSI + 1] * 256;
|
||||
sgc_rate = (double)(log[CMD_START_SGC]
|
||||
+ log[CMD_START_SGC + 1] * 256) / 2;
|
||||
profile_period = log[CMD_PROFILE_PERIOD];
|
||||
break;
|
||||
case TYPE_COMMANDER:
|
||||
|
@ -533,9 +531,6 @@ static void cochran_parse_samples(struct dive *dive, const unsigned char *log,
|
|||
case 2: // PSI change
|
||||
psi -= (double)(s[1] & 0x7f) * (s[1] & 0x80 ? 1 : -1) / 4;
|
||||
break;
|
||||
case 1: // SGC rate
|
||||
sgc_rate -= (double)(s[1] & 0x7f) * (s[1] & 0x80 ? 1 : -1) / 2;
|
||||
break;
|
||||
case 3: // Temperature
|
||||
temp = (double)s[1] / 2 + 20;
|
||||
break;
|
||||
|
|
|
@ -1599,7 +1599,7 @@ static bool cylinder_in_use(const struct dive *dive, int idx)
|
|||
bool is_cylinder_use_appropriate(const struct divecomputer &dc, const cylinder_t &cyl, bool allowNonUsable)
|
||||
{
|
||||
switch (cyl.cylinder_use) {
|
||||
case OC:
|
||||
case OC_GAS:
|
||||
if (dc.divemode == FREEDIVE)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -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.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.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");
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "gettext.h"
|
||||
#include "tag.h"
|
||||
#include "errorhelper.h"
|
||||
#include "format.h"
|
||||
#include <string.h>
|
||||
#include "divecomputer.h"
|
||||
|
||||
|
@ -45,7 +46,6 @@ static int seac_dive(void *param, int, char **data, char **)
|
|||
{
|
||||
int retval = 0, cylnum = 0;
|
||||
int year, month, day, hour, min, sec, tz;
|
||||
char isodatetime[30];
|
||||
time_t divetime;
|
||||
struct gasmix lastgas, curgas;
|
||||
struct parser_state *state = (struct parser_state *)param;
|
||||
|
@ -123,8 +123,8 @@ static int seac_dive(void *param, int, char **data, char **)
|
|||
"-13:45", // 40
|
||||
"-14:00"}; // 41
|
||||
|
||||
sprintf(isodatetime, "%4i-%02i-%02iT%02i:%02i:%02i%6s", year, month, day, hour, min, sec, timezoneoffset[tz]);
|
||||
divetime = get_dive_datetime_from_isostring(isodatetime);
|
||||
std::string isodatetime = format_string_std("%4i-%02i-%02iT%02i:%02i:%02i%6s", year, month, day, hour, min, sec, timezoneoffset[tz]);
|
||||
divetime = get_dive_datetime_from_isostring(isodatetime.c_str());
|
||||
state->cur_dive->when = divetime;
|
||||
|
||||
// 6 = dive_type
|
||||
|
|
|
@ -917,7 +917,7 @@ QString get_dive_date_string(timestamp_t when)
|
|||
}
|
||||
|
||||
// Get local seconds since Epoch from ISO formatted UTC date time + offset string
|
||||
time_t get_dive_datetime_from_isostring(char *when) {
|
||||
time_t get_dive_datetime_from_isostring(const char *when) {
|
||||
QDateTime divetime = QDateTime::fromString(when, Qt::ISODate);
|
||||
return (time_t)(divetime.toSecsSinceEpoch());
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ std::string local_file_path(const struct picture &picture);
|
|||
std::string hashfile_name();
|
||||
enum deco_mode decoMode(bool in_planner);
|
||||
void parse_seabear_header(const char *filename, struct xml_params *params);
|
||||
time_t get_dive_datetime_from_isostring(char *when);
|
||||
time_t get_dive_datetime_from_isostring(const char *when);
|
||||
void print_qt_versions();
|
||||
void lock_planner();
|
||||
void unlock_planner();
|
||||
|
|
|
@ -399,6 +399,8 @@ Kirigami.Page {
|
|||
delegate: Flickable {
|
||||
id: internalScrollView
|
||||
width: diveDetailsListView.width
|
||||
height: diveDetailsListView.height
|
||||
contentHeight: diveDetails.height
|
||||
boundsBehavior: Flickable.StopAtBounds
|
||||
property var modelData: model
|
||||
DiveDetailsView {
|
||||
|
@ -423,6 +425,7 @@ Kirigami.Page {
|
|||
anchors.fill: parent
|
||||
leftMargin: Kirigami.Units.smallSpacing
|
||||
rightMargin: Kirigami.Units.smallSpacing
|
||||
contentHeight: detailsEdit.height
|
||||
// start invisible and scaled down, to get the transition
|
||||
// off to the right start
|
||||
visible: false
|
||||
|
|
|
@ -34,7 +34,7 @@ if [[ -z "${CONTAINER_ID}" ]]; then
|
|||
croak "Please make sure GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL are set for the first run of this script."
|
||||
fi
|
||||
|
||||
docker create -v ${SUBSURFACE_ROOT}:${CONTAINER_SUBSURFACE_DIR} --name=${CONTAINER_NAME} subsurface/android-build:5.15.2 sleep infinity
|
||||
docker create -v ${SUBSURFACE_ROOT}:${CONTAINER_SUBSURFACE_DIR} --name=${CONTAINER_NAME} subsurface/android-build:5.15.3 sleep infinity
|
||||
|
||||
fi
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ set -e
|
|||
mkdir -p win32
|
||||
cd win32
|
||||
|
||||
# build Subsurface and then smtk2ssrf
|
||||
# build Subsurface
|
||||
export MXEBUILDTYPE=x86_64-w64-mingw32.shared
|
||||
bash -ex ../subsurface/packaging/windows/mxe-based-build.sh installer
|
||||
|
||||
|
@ -23,6 +23,10 @@ mv subsurface/subsurface.exe* ${OUTPUT_DIR}/
|
|||
fullname=$(cd subsurface ; ls subsurface-*.exe)
|
||||
mv subsurface/"$fullname" ${OUTPUT_DIR}/"${fullname%.exe}-installer.exe"
|
||||
|
||||
# build Subsurface for smtk2ssrf
|
||||
|
||||
bash -ex ../subsurface/packaging/windows/mxe-based-build.sh -noftdi -nolibraw subsurface
|
||||
|
||||
bash -ex ../subsurface/packaging/windows/smtk2ssrf-mxe-build.sh -a -i
|
||||
|
||||
# the strange two step move is in order to get predictable names to use
|
||||
|
|
|
@ -27,12 +27,16 @@
|
|||
#
|
||||
# now you can start the build
|
||||
#
|
||||
# make libxml2 libxslt libusb1 libzip libssh2 libftdi1 curl qt5 nsis
|
||||
# make libxml2 libxslt libusb1 libzip libssh2 libftdi1 libraw curl qt5 nsis
|
||||
#
|
||||
# (if you intend to build Subsurface without user space FTDI support
|
||||
# you can drop libftdi1 from that list and start this script with
|
||||
# -noftdi )
|
||||
#
|
||||
# (if you intend to build Subsurface without libraw support
|
||||
# you can drop libraw from that list and start this script with
|
||||
# -nolibraw )
|
||||
#
|
||||
# After quite a while (depending on your machine anywhere from 15-20
|
||||
# minutes to several hours) you should have a working MXE install in
|
||||
# ~/src/mxe
|
||||
|
@ -93,6 +97,13 @@ else
|
|||
FTDI="ON"
|
||||
fi
|
||||
|
||||
if [[ "$1" == "-nolibraw" ]] ; then
|
||||
shift
|
||||
LIBRAW="OFF"
|
||||
else
|
||||
LIBRAW="ON"
|
||||
fi
|
||||
|
||||
# this is run on a rather powerful machine - if you want less
|
||||
# build parallelism, please change this variable
|
||||
JOBS="-j4"
|
||||
|
@ -292,6 +303,7 @@ cd "$BUILDDIR"/subsurface
|
|||
-DMAKE_TESTS=OFF \
|
||||
-DBTSUPPORT=ON -DBLESUPPORT=ON \
|
||||
-DFTDISUPPORT=$FTDI \
|
||||
-DLIBRAW_SUPPORT=$LIBRAW \
|
||||
-DLIBGIT2_FROM_PKGCONFIG=ON \
|
||||
"$BASEDIR"/subsurface
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "core/event.h"
|
||||
|
||||
class DiveCartesianAxis;
|
||||
class DivePixmaps;
|
||||
struct DivePixmaps;
|
||||
struct event;
|
||||
struct plot_info;
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ class DiveGasPressureItem;
|
|||
class DiveHeartrateItem;
|
||||
class DiveMeanDepthItem;
|
||||
class DivePercentageItem;
|
||||
class DivePixmaps;
|
||||
struct DivePixmaps;
|
||||
class DivePlannerPointsModel;
|
||||
class DiveProfileItem;
|
||||
class DiveReportedCeiling;
|
||||
|
|
|
@ -586,7 +586,7 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event)
|
|||
|
||||
if (DiveEventItem *item = dynamic_cast<DiveEventItem *>(sceneItem)) {
|
||||
m.addAction(tr("Remove event"), [this,item] { removeEvent(item); });
|
||||
m.addAction(tr("Hide event"), [this, item] { hideEvent(item); });
|
||||
m.addAction(tr("Hide event"), [this, item] { hideOneEvent(item); });
|
||||
m.addAction(tr("Hide events of type '%1'").arg(event_type_name(item->ev)),
|
||||
[this, item] { hideEventType(item); });
|
||||
if (item->ev.type == SAMPLE_EVENT_BOOKMARK)
|
||||
|
@ -678,7 +678,7 @@ void ProfileWidget2::renameCurrentDC()
|
|||
Command::editDeviceNickname(currentdc, newName);
|
||||
}
|
||||
|
||||
void ProfileWidget2::hideEvent(DiveEventItem *item)
|
||||
void ProfileWidget2::hideOneEvent(DiveEventItem *item)
|
||||
{
|
||||
if (!d)
|
||||
return;
|
||||
|
|
|
@ -126,7 +126,7 @@ private:
|
|||
void splitDive(int seconds);
|
||||
void addSetpointChange(int seconds);
|
||||
void removeEvent(DiveEventItem *item);
|
||||
void hideEvent(DiveEventItem *item);
|
||||
void hideOneEvent(DiveEventItem *item);
|
||||
void hideEventType(DiveEventItem *item);
|
||||
void editName(DiveEventItem *item);
|
||||
void unhideEvents();
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "core/divelist.h"
|
||||
#include "core/divelog.h"
|
||||
#include "core/event.h"
|
||||
#include "core/format.h"
|
||||
#include "core/subsurface-string.h"
|
||||
#include "qt-models/cylindermodel.h"
|
||||
#include "core/metrics.h" // For defaultModelFont().
|
||||
|
@ -1271,13 +1272,12 @@ void DivePlannerPointsModel::computeVariations(std::unique_ptr<struct diveplan>
|
|||
auto shorter = plan(&ds, plan_copy, dive.get(), dcNr, 1, cache, true, false);
|
||||
save.restore(&ds, false);
|
||||
|
||||
char buf[200];
|
||||
sprintf(buf, ", %s: %c %d:%02d /%s %c %d:%02d /min", qPrintable(tr("Stop times")),
|
||||
std::string buf = format_string_std(", %s: %c %d:%02d /%s %c %d:%02d /min", qPrintable(tr("Stop times")),
|
||||
SIGNED_FRAC_TRIPLET(analyzeVariations(shallower, original, deeper, qPrintable(depth_units)), 60), qPrintable(depth_units),
|
||||
SIGNED_FRAC_TRIPLET(analyzeVariations(shorter, original, longer, qPrintable(time_units)), 60));
|
||||
|
||||
// By using a signal, we can transport the variations to the main thread.
|
||||
emit variationsComputed(QString(buf));
|
||||
emit variationsComputed(QString::fromStdString(buf));
|
||||
#ifdef DEBUG_STOPVAR
|
||||
printf("\n\n");
|
||||
#endif
|
||||
|
|
|
@ -148,6 +148,7 @@ cmake -DBTSUPPORT=OFF \
|
|||
-DNO_DOCS=ON \
|
||||
-DNO_PRINTING=ON \
|
||||
-DNO_USERMANUAL=ON \
|
||||
-DLIBRAW_SUPPORT=OFF \
|
||||
-DSUBSURFACE_TARGET_EXECUTABLE=DesktopExecutable \
|
||||
build
|
||||
cd build || aborting "Couldn't cd into $SSRF_PATH/build directory"
|
||||
|
|
|
@ -34,8 +34,6 @@ pkg_config_library(GLIB2 glib-2.0 REQUIRED)
|
|||
pkg_config_library(LIBGIT2 libgit2 REQUIRED)
|
||||
pkg_config_library(LIBMDB libmdb REQUIRED)
|
||||
pkg_config_library(LIBDC libdivecomputer REQUIRED)
|
||||
pkg_config_library(LIBFTDI libftdi1 QUIET)
|
||||
pkg_config_library(LIBRAW libraw)
|
||||
|
||||
find_package(Qt5 REQUIRED COMPONENTS Core
|
||||
Concurrent
|
||||
|
|
|
@ -27,7 +27,7 @@ function load_scripts()
|
|||
fileref=document.createElement("link");
|
||||
fileref.setAttribute("rel", "stylesheet");
|
||||
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);
|
||||
|
||||
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