diff --git a/bower.json b/bower.json
index 922eb905f3..419871fe57 100644
--- a/bower.json
+++ b/bower.json
@@ -19,7 +19,6 @@
"comma-separated-values": "^3.6.4",
"FileSaver.js": "^0.0.2",
"zepto": "^1.1.6",
- "html2canvas": "^0.4.1",
- "jspdf": "^1.2.61"
+ "html2canvas": "^0.4.1"
}
}
diff --git a/main.js b/main.js
index 3fc2c4da36..6968d8ff26 100644
--- a/main.js
+++ b/main.js
@@ -29,7 +29,6 @@ requirejs.config({
"csv": "bower_components/comma-separated-values/csv.min",
"es6-promise": "bower_components/es6-promise/es6-promise.min",
"html2canvas": "bower_components/html2canvas/build/html2canvas.min",
- "jsPDF": "bower_components/jspdf/dist/jspdf.min",
"moment": "bower_components/moment/moment",
"moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format",
"saveAs": "bower_components/FileSaver.js/FileSaver.min",
@@ -48,9 +47,6 @@ requirejs.config({
"html2canvas": {
"exports": "html2canvas"
},
- "jsPDF": {
- "exports": "jsPDF"
- },
"moment-duration-format": {
"deps": ["moment"]
},
diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js
index 60da900176..1094abb864 100644
--- a/platform/commonUI/edit/bundle.js
+++ b/platform/commonUI/edit/bundle.js
@@ -245,7 +245,9 @@ define([
"key": "cancel",
"category": "conclude-editing",
"implementation": CancelAction,
- "name": "Cancel",
+ // Because we use the name as label for edit buttons and mct-control buttons need
+ // the label to be set to undefined in order to not apply the labeled CSS rule.
+ "name": undefined,
"cssclass": "icon-x no-label",
"description": "Discard changes made to these objects.",
"depends": []
diff --git a/platform/commonUI/edit/res/templates/edit-action-buttons.html b/platform/commonUI/edit/res/templates/edit-action-buttons.html
index 4bc020612f..2af47b6878 100644
--- a/platform/commonUI/edit/res/templates/edit-action-buttons.html
+++ b/platform/commonUI/edit/res/templates/edit-action-buttons.html
@@ -25,7 +25,7 @@
@@ -42,11 +42,12 @@
-
- {{currentAction.getMetadata().name}}
-
+
+
\ No newline at end of file
diff --git a/platform/commonUI/edit/src/controllers/EditActionController.js b/platform/commonUI/edit/src/controllers/EditActionController.js
index 7c33799ebb..ba91b63e9d 100644
--- a/platform/commonUI/edit/src/controllers/EditActionController.js
+++ b/platform/commonUI/edit/src/controllers/EditActionController.js
@@ -61,6 +61,12 @@ define(
$scope.otherEditActions = $scope.action ?
$scope.action.getActions(OTHERS_ACTION_CONTEXT) :
[];
+
+ // Required because Angular does not allow 'bind'
+ // in expressions.
+ $scope.actionPerformer = function (action) {
+ return action.perform.bind(action);
+ };
}
// Update set of actions whenever the action capability
diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss
index 7900739668..d1935d8ce0 100644
--- a/platform/commonUI/general/res/sass/controls/_controls.scss
+++ b/platform/commonUI/general/res/sass/controls/_controls.scss
@@ -216,6 +216,7 @@ input[type="search"] {
.l-input-lg input[type="text"] { width: 100% !important; }
.l-input-med input[type="text"] { width: 200px !important; }
.l-input-sm input[type="text"] { width: 50px !important; }
+.l-textarea-sm textarea { position: relative; height: 50px; }
.l-numeric input[type="text"] { text-align: right; }
.input-labeled {
diff --git a/platform/core/bundle.js b/platform/core/bundle.js
index 8b4baf83ff..4b9e2b9adb 100644
--- a/platform/core/bundle.js
+++ b/platform/core/bundle.js
@@ -252,6 +252,14 @@ define([
"pattern": "\\S+",
"required": true,
"cssclass": "l-input-lg"
+ },
+ {
+ "name": "Notes",
+ "key": "notes",
+ "property": "notes",
+ "control": "textarea",
+ "required": false,
+ "cssclass": "l-textarea-sm"
}
]
},
diff --git a/platform/features/plot/bundle.js b/platform/features/plot/bundle.js
index 691e310791..ec4e6f375a 100644
--- a/platform/features/plot/bundle.js
+++ b/platform/features/plot/bundle.js
@@ -146,16 +146,6 @@ define([
"copyright": "Copyright © 2012 Niklas von Hertzen.",
"license": "license-mit",
"link": "https://github.com/niklasvh/html2canvas/blob/master/LICENSE"
- },
- {
- "name": "jsPDF",
- "version": "1.2.61",
- "author": "James Hall",
- "description": "JavaScript HTML renderer",
- "website": "https://github.com/MrRio/jsPDF",
- "copyright": "Copyright © 2010-2016 James Hall",
- "license": "license-mit",
- "link": "https://github.com/MrRio/jsPDF/blob/master/MIT-LICENSE.txt"
}
]
}
diff --git a/platform/features/plot/res/templates/plot.html b/platform/features/plot/res/templates/plot.html
index e25b582044..461389e2c1 100644
--- a/platform/features/plot/res/templates/plot.html
+++ b/platform/features/plot/res/templates/plot.html
@@ -23,11 +23,6 @@
class="abs holder holder-plot has-control-bar">
-
- PDF
-
diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js
index 3b23bce34a..b5af440731 100644
--- a/platform/features/plot/src/PlotController.js
+++ b/platform/features/plot/src/PlotController.js
@@ -368,17 +368,6 @@ define(
return this.pending;
};
- /**
- * Export the plot to PDF
- */
- PlotController.prototype.exportPDF = function () {
- var self = this;
- self.hideExportButtons = true;
- self.exportImageService.exportPDF(self.$element[0], "plot.pdf").finally(function () {
- self.hideExportButtons = false;
- });
- };
-
/**
* Export the plot to PNG
*/
diff --git a/platform/features/plot/src/services/ExportImageService.js b/platform/features/plot/src/services/ExportImageService.js
index d49adc15ec..8fa02c8bf5 100644
--- a/platform/features/plot/src/services/ExportImageService.js
+++ b/platform/features/plot/src/services/ExportImageService.js
@@ -26,32 +26,29 @@
define(
[
"html2canvas",
- "jsPDF",
"saveAs"
],
function (
html2canvas,
- jsPDF,
saveAs
) {
var self = this;
/**
* The export image service will export any HTML node to
- * PDF, JPG, or PNG.
+ * JPG, or PNG.
* @param {object} $q
* @param {object} $timeout
* @param {object} $log
* @param {constant} EXPORT_IMAGE_TIMEOUT time in milliseconds before a timeout error is returned
* @constructor
*/
- function ExportImageService($q, $timeout, $log, EXPORT_IMAGE_TIMEOUT, injHtml2Canvas, injJsPDF, injSaveAs, injFileReader) {
+ function ExportImageService($q, $timeout, $log, EXPORT_IMAGE_TIMEOUT, injHtml2Canvas, injSaveAs, injFileReader) {
self.$q = $q;
self.$timeout = $timeout;
self.$log = $log;
self.EXPORT_IMAGE_TIMEOUT = EXPORT_IMAGE_TIMEOUT;
self.html2canvas = injHtml2Canvas || html2canvas;
- self.jsPDF = injJsPDF || jsPDF;
self.saveAs = injSaveAs || saveAs;
self.reader = injFileReader || new FileReader();
}
@@ -128,23 +125,6 @@ define(
}
}
- /**
- * Takes a screenshot of a DOM node and exports to PDF.
- * @param {node} element to be exported
- * @param {string} filename the exported image
- * @returns {promise}
- */
- ExportImageService.prototype.exportPDF = function (element, filename) {
- return renderElement(element, "jpeg").then(function (img) {
- self.reader.readAsDataURL(img);
- self.reader.onloadend = function () {
- var pdf = new self.jsPDF("l", "px", [element.offsetHeight, element.offsetWidth]);
- pdf.addImage(self.reader.result, "JPEG", 0, 0, element.offsetWidth, element.offsetHeight);
- pdf.save(filename);
- };
- });
- };
-
/**
* Takes a screenshot of a DOM node and exports to JPG.
* @param {node} element to be exported
diff --git a/platform/features/plot/test/PlotControllerSpec.js b/platform/features/plot/test/PlotControllerSpec.js
index 73a01d716a..482af047cb 100644
--- a/platform/features/plot/test/PlotControllerSpec.js
+++ b/platform/features/plot/test/PlotControllerSpec.js
@@ -72,7 +72,7 @@ define(
mockElement = angular.element('');
mockExportImageService = jasmine.createSpyObj(
"ExportImageService",
- ["exportJPG", "exportPNG", "exportPDF"]
+ ["exportJPG", "exportPNG"]
);
mockFormatter = jasmine.createSpyObj(
"formatter",
diff --git a/platform/features/plot/test/services/ExportImageServiceSpec.js b/platform/features/plot/test/services/ExportImageServiceSpec.js
index 111a8d3432..675429f4e2 100644
--- a/platform/features/plot/test/services/ExportImageServiceSpec.js
+++ b/platform/features/plot/test/services/ExportImageServiceSpec.js
@@ -33,8 +33,6 @@ define(
mockLog,
mockHtml2Canvas,
mockCanvas,
- mockJsPDF,
- mockJsPDFSave,
mockSaveAs,
mockFileReader,
mockExportTimeoutConstant,
@@ -79,13 +77,6 @@ define(
"canvas",
["toBlob"]
);
- mockJsPDFSave = jasmine.createSpy("jsPDFSave");
- mockJsPDF = function () {
- return {
- "addImage": function () {},
- "save": mockJsPDFSave
- };
- };
mockSaveAs = jasmine.createSpy("saveAs");
mockFileReader = jasmine.createSpyObj(
"FileReader",
@@ -100,23 +91,11 @@ define(
mockLog,
mockExportTimeoutConstant,
mockHtml2Canvas,
- mockJsPDF,
mockSaveAs,
mockFileReader
);
});
- it("runs html2canvas and tries to save a pdf", function () {
- exportImageService.exportPDF(testElement, "plot.pdf");
- mockFileReader.onloadend();
-
- expect(mockHtml2Canvas).toHaveBeenCalledWith(testElement, { onrendered: jasmine.any(Function) });
- expect(mockCanvas.toBlob).toHaveBeenCalledWith(mockDeferred.resolve, "image/jpeg");
- expect(mockDeferred.reject).not.toHaveBeenCalled();
- expect(mockJsPDFSave).toHaveBeenCalled();
- expect(mockPromise.finally).toHaveBeenCalled();
- });
-
it("runs html2canvas and tries to save a png", function () {
exportImageService.exportPNG(testElement, "plot.png");
diff --git a/platform/features/timeline/bundle.js b/platform/features/timeline/bundle.js
index 12effc50a3..42b3c948f9 100644
--- a/platform/features/timeline/bundle.js
+++ b/platform/features/timeline/bundle.js
@@ -182,6 +182,16 @@ define([
"capacity"
],
"pattern": "^-?\\d+(\\.\\d*)?$"
+ },
+ {
+ "name": "Battery starting SOC (%)",
+ "control": "textfield",
+ "required": false,
+ "conversion": "number",
+ "property": [
+ "startingSOC"
+ ],
+ "pattern": "^([0-9](\\.\\d*)?|[1-9][0-9](\\.\\d*)?|100)%?$"
}
],
"model": {
diff --git a/platform/features/timeline/src/capabilities/GraphCapability.js b/platform/features/timeline/src/capabilities/GraphCapability.js
index d9810005a3..181c909f79 100644
--- a/platform/features/timeline/src/capabilities/GraphCapability.js
+++ b/platform/features/timeline/src/capabilities/GraphCapability.js
@@ -37,7 +37,8 @@ define(
// Build graphs for this group of utilizations
function buildGraphs(utilizations) {
var utilizationMap = {},
- result = {};
+ result = {},
+ startingSOC;
// Bucket utilizations by type
utilizations.forEach(function (u) {
@@ -55,12 +56,14 @@ define(
if (domainObject.getModel().type === 'timeline' &&
result.power &&
domainObject.getModel().capacity > 0) {
+ startingSOC = isNaN(parseFloat(domainObject.getModel().startingSOC)) ?
+ 100 : parseFloat(domainObject.getModel().startingSOC);
result.battery = new CumulativeGraph(
result.power,
0,
domainObject.getModel().capacity, // Watts
- domainObject.getModel().capacity,
+ (startingSOC / 100) * domainObject.getModel().capacity,
1 / 3600000 // millis-to-hour (since units are watt-hours)
);
}
diff --git a/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js b/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js
index 71a6de2ade..e2ccd376e2 100644
--- a/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js
+++ b/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js
@@ -101,6 +101,7 @@ define(
it("provides a battery graph for timelines with capacity", function () {
var mockCallback = jasmine.createSpy('callback');
testModel.capacity = 1000;
+ testModel.startingSOC = 100;
testModel.type = "timeline";
mockDomainObject.useCapability.andReturn(asPromise([
{ key: "power", start: 0, end: 15 }
diff --git a/platform/forms/bundle.js b/platform/forms/bundle.js
index daa7063ffe..d3ee14f440 100644
--- a/platform/forms/bundle.js
+++ b/platform/forms/bundle.js
@@ -32,6 +32,7 @@ define([
"text!./res/templates/controls/datetime.html",
"text!./res/templates/controls/select.html",
"text!./res/templates/controls/textfield.html",
+ "text!./res/templates/controls/textarea.html",
"text!./res/templates/controls/button.html",
"text!./res/templates/controls/color.html",
"text!./res/templates/controls/composite.html",
@@ -51,6 +52,7 @@ define([
datetimeTemplate,
selectTemplate,
textfieldTemplate,
+ textareaTemplate,
buttonTemplate,
colorTemplate,
compositeTemplate,
@@ -103,6 +105,10 @@ define([
"key": "textfield",
"template": textfieldTemplate
},
+ {
+ "key": "textarea",
+ "template": textareaTemplate
+ },
{
"key": "button",
"template": buttonTemplate
diff --git a/platform/forms/res/templates/controls/textarea.html b/platform/forms/res/templates/controls/textarea.html
new file mode 100644
index 0000000000..45c4db4e1e
--- /dev/null
+++ b/platform/forms/res/templates/controls/textarea.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
diff --git a/test-main.js b/test-main.js
index 43142766b9..e006094a24 100644
--- a/test-main.js
+++ b/test-main.js
@@ -55,7 +55,6 @@ requirejs.config({
"csv": "bower_components/comma-separated-values/csv.min",
"es6-promise": "bower_components/es6-promise/es6-promise.min",
"html2canvas": "bower_components/html2canvas/build/html2canvas.min",
- "jsPDF": "bower_components/jspdf/dist/jspdf.min",
"moment": "bower_components/moment/moment",
"moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format",
"saveAs": "bower_components/FileSaver.js/FileSaver.min",