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",