custom-cornerstone-tools
Version:
Medical imaging tools for the Cornerstone library - customized for DrNuvem
1,464 lines (1,122 loc) • 514 kB
JavaScript
/*! drnuvem-cornerstone-tools - 1.1.2 - 2017-11-24 | (c) 2017 Chris Hafey | https://bitbucket.org/antonio_drtis/drnuvem-cornerstone-tools */
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("cornerstoneTools", [], factory);
else if(typeof exports === 'object')
exports["cornerstoneTools"] = factory();
else
root["cornerstoneTools"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 60);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var cornerstone = window.cornerstone;
var cornerstoneMath = window.cornerstoneMath;
var $ = window.$;
var Hammer = window.Hammer;
exports.default = {
set cornerstone(cs) {
cornerstone = cs;
},
get cornerstone() {
return cornerstone;
},
set cornerstoneMath(cm) {
cornerstoneMath = cm;
},
get cornerstoneMath() {
return cornerstoneMath;
},
set $(module) {
$ = module;
},
get $() {
return $;
},
set Hammer(module) {
Hammer = module;
},
get Hammer() {
return Hammer;
}
};
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getElementToolStateManager = exports.setElementToolStateManager = exports.clearToolState = exports.removeToolState = exports.getToolState = exports.addToolState = undefined;
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefault(_externalModules);
var _imageIdSpecificStateManager = __webpack_require__(16);
var _triggerEvent = __webpack_require__(3);
var _triggerEvent2 = _interopRequireDefault(_triggerEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getElementToolStateManager(element) {
var enabledImage = _externalModules2.default.cornerstone.getEnabledElement(element);
// If the enabledImage has no toolStateManager, create a default one for it
// NOTE: This makes state management element specific
if (enabledImage.toolStateManager === undefined) {
enabledImage.toolStateManager = _imageIdSpecificStateManager.globalImageIdSpecificToolStateManager;
}
return enabledImage.toolStateManager;
}
// Here we add tool state, this is done by tools as well
// As modules that restore saved state
function addToolState(element, toolType, measurementData) {
var toolStateManager = getElementToolStateManager(element);
toolStateManager.add(element, toolType, measurementData);
var eventType = 'CornerstoneToolsMeasurementAdded';
var eventData = {
toolType: toolType,
element: element,
measurementData: measurementData
};
(0, _triggerEvent2.default)(element, eventType, eventData);
}
// Here you can get state - used by tools as well as modules
// That save state persistently
function getToolState(element, toolType) {
var toolStateManager = getElementToolStateManager(element);
return toolStateManager.get(element, toolType);
}
function removeToolState(element, toolType, data) {
var toolStateManager = getElementToolStateManager(element);
var toolData = toolStateManager.get(element, toolType);
// Find this tool data
var indexOfData = -1;
for (var i = 0; i < toolData.data.length; i++) {
if (toolData.data[i] === data) {
indexOfData = i;
}
}
if (indexOfData !== -1) {
toolData.data.splice(indexOfData, 1);
var eventType = 'CornerstoneToolsMeasurementRemoved';
var eventData = {
toolType: toolType,
element: element,
measurementData: data
};
(0, _triggerEvent2.default)(element, eventType, eventData);
}
}
function clearToolState(element, toolType) {
var toolStateManager = getElementToolStateManager(element);
var toolData = toolStateManager.get(element, toolType);
// If any toolData actually exists, clear it
if (toolData !== undefined) {
toolData.data = [];
}
}
// Sets the tool state manager for an element
function setElementToolStateManager(element, toolStateManager) {
var enabledImage = _externalModules2.default.cornerstone.getEnabledElement(element);
enabledImage.toolStateManager = toolStateManager;
}
exports.addToolState = addToolState;
exports.getToolState = getToolState;
exports.removeToolState = removeToolState;
exports.clearToolState = clearToolState;
exports.setElementToolStateManager = setElementToolStateManager;
exports.getElementToolStateManager = getElementToolStateManager;
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (which, mouseButtonMask) {
var mouseButton = 1 << which - 1;
return (mouseButtonMask & mouseButton) !== 0;
};
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = triggerEvent;
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefault(_externalModules);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Trigger a CustomEvent
*
* @param {EventTarget} el The element or EventTarget to trigger the event upon
* @param {String} type The event type name
* @param {Object|null} detail=null The event data to be sent
* @returns {boolean} The return value is false if at least one event listener called preventDefault(). Otherwise it returns true.
*/
function triggerEvent(el, type) {
var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var event = void 0;
// This check is needed to polyfill CustomEvent on IE11-
if (typeof window.CustomEvent === 'function') {
event = new CustomEvent(type.toLocaleLowerCase(), {
detail: detail,
cancelable: true
});
} else {
event = document.createEvent('CustomEvent');
event.initCustomEvent(type.toLocaleLowerCase(), true, true, detail);
}
// TODO: remove jQuery event triggers
var jqEvent = _externalModules2.default.$.Event(type, detail);
_externalModules2.default.$(el).trigger(jqEvent, detail);
if (jqEvent.isImmediatePropagationStopped()) {
return false;
}
return el.dispatchEvent(event);
}
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var defaultColor = 'white',
activeColor = 'greenyellow',
fillColor = 'transparent';
function setFillColor(color) {
fillColor = color;
}
function getFillColor() {
return fillColor;
}
function setToolColor(color) {
defaultColor = color;
}
function getToolColor() {
return defaultColor;
}
function setActiveColor(color) {
activeColor = color;
}
function getActiveColor() {
return activeColor;
}
function getColorIfActive(active) {
return active ? activeColor : defaultColor;
}
var toolColors = {
setFillColor: setFillColor,
getFillColor: getFillColor,
setToolColor: setToolColor,
getToolColor: getToolColor,
setActiveColor: setActiveColor,
getActiveColor: getActiveColor,
getColorIfActive: getColorIfActive
};
exports.default = toolColors;
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var defaultWidth = 1,
activeWidth = 2;
function setToolWidth(width) {
defaultWidth = width;
}
function getToolWidth() {
return defaultWidth;
}
function setActiveWidth(width) {
activeWidth = width;
}
function getActiveWidth() {
return activeWidth;
}
var toolStyle = {
setToolWidth: setToolWidth,
getToolWidth: getToolWidth,
setActiveWidth: setActiveWidth,
getActiveWidth: getActiveWidth
};
exports.default = toolStyle;
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (context, textLines, x, y, color, options) {
if (Object.prototype.toString.call(textLines) !== '[object Array]') {
textLines = [textLines];
}
var padding = 5;
var font = _textStyle2.default.getFont();
var fontSize = _textStyle2.default.getFontSize();
var backgroundColor = _textStyle2.default.getBackgroundColor();
context.save();
context.font = font;
context.textBaseline = 'top';
context.strokeStyle = color;
// Find the longest text width in the array of text data
var maxWidth = 0;
textLines.forEach(function (text) {
// Get the text width in the current font
var width = context.measureText(text).width;
// Find the maximum with for all the text rows;
maxWidth = Math.max(maxWidth, width);
});
// Draw the background box with padding
context.fillStyle = backgroundColor;
// Calculate the bounding box for this text box
var boundingBox = {
width: maxWidth + padding * 2,
height: padding + textLines.length * (fontSize + padding)
};
if (options && options.centering && options.centering.x === true) {
x -= boundingBox.width / 2;
}
if (options && options.centering && options.centering.y === true) {
y -= boundingBox.height / 2;
}
boundingBox.left = x;
boundingBox.top = y;
if (options && options.debug === true) {
context.fillStyle = '#FF0000';
}
context.fillRect(boundingBox.left, boundingBox.top, boundingBox.width, boundingBox.height);
// Draw each of the text lines on top of the background box
textLines.forEach(function (text, index) {
context.fillStyle = color;
/* Var ypos;
if (index === 0) {
ypos = y + index * (fontSize + padding);
} else {
ypos = y + index * (fontSize + padding * 2);
}*/
context.fillText(text, x + padding, y + padding + index * (fontSize + padding));
});
context.restore();
// Return the bounding box so it can be used for pointNearHandle
return boundingBox;
};
var _textStyle = __webpack_require__(14);
var _textStyle2 = _interopRequireDefault(_textStyle);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (mouseToolInterface) {
var configuration = {};
// /////// BEGIN ACTIVE TOOL ///////
function addNewMeasurement(mouseEventData) {
var cornerstone = _externalModules2.default.cornerstone;
var element = mouseEventData.element;
var measurementData = mouseToolInterface.createNewMeasurement(mouseEventData);
if (!measurementData) {
return;
}
var eventData = {
mouseButtonMask: mouseEventData.which
};
// Associate this data with this imageId so we can render it and manipulate it
(0, _toolState.addToolState)(mouseEventData.element, mouseToolInterface.toolType, measurementData);
// Since we are dragging to another place to drop the end point, we can just activate
// The end point and let the moveHandle move it for us.
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDown', mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDownActivate', mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseDoubleClick', mouseToolInterface.mouseDoubleClickCallback);
}
cornerstone.updateImage(element);
var handleMover = void 0;
if (Object.keys(measurementData.handles).length === 1) {
handleMover = _moveHandle2.default;
} else {
handleMover = _moveNewHandle2.default;
}
var preventHandleOutsideImage = void 0;
if (mouseToolInterface.options && mouseToolInterface.options.preventHandleOutsideImage !== undefined) {
preventHandleOutsideImage = mouseToolInterface.options.preventHandleOutsideImage;
} else {
preventHandleOutsideImage = false;
}
handleMover(mouseEventData, mouseToolInterface.toolType, measurementData, measurementData.handles.end, function () {
measurementData.active = false;
measurementData.invalidated = true;
if ((0, _anyHandlesOutsideImage2.default)(mouseEventData, measurementData.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(element, mouseToolInterface.toolType, measurementData);
}
_externalModules2.default.$(element).on('CornerstoneToolsMouseMove', eventData, mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDown', eventData, mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDownActivate', eventData, mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).on('CornerstoneToolsMouseDoubleClick', eventData, mouseToolInterface.mouseDoubleClickCallback);
}
cornerstone.updateImage(element);
}, preventHandleOutsideImage);
}
function mouseDownActivateCallback(e, eventData) {
if ((0, _isMouseButtonEnabled2.default)(eventData.which, e.data.mouseButtonMask)) {
if (mouseToolInterface.addNewMeasurement) {
mouseToolInterface.addNewMeasurement(eventData);
} else {
addNewMeasurement(eventData);
}
return false; // False = causes jquery to preventDefault() and stopPropagation() this event
}
}
// /////// END ACTIVE TOOL ///////
// /////// BEGIN DEACTIVE TOOL ///////
function mouseMoveCallback(e, eventData) {
_toolCoordinates2.default.setCoords(eventData);
// If a mouse button is down, do nothing
if (eventData.which !== 0) {
return;
}
// If we have no tool data for this element, do nothing
var toolData = (0, _toolState.getToolState)(eventData.element, mouseToolInterface.toolType);
if (!toolData) {
return;
}
// We have tool data, search through all data
// And see if we can activate a handle
var imageNeedsUpdate = false;
for (var i = 0; i < toolData.data.length; i++) {
// Get the cursor position in canvas coordinates
var coords = eventData.currentPoints.canvas;
var data = toolData.data[i];
if ((0, _handleActivator2.default)(eventData.element, data.handles, coords) === true) {
imageNeedsUpdate = true;
}
if (mouseToolInterface.pointNearTool(eventData.element, data, coords) && !data.active || !mouseToolInterface.pointNearTool(eventData.element, data, coords) && data.active) {
data.active = !data.active;
imageNeedsUpdate = true;
}
}
// Handle activation status changed, redraw the image
if (imageNeedsUpdate === true) {
_externalModules2.default.cornerstone.updateImage(eventData.element);
}
}
function mouseDownCallback(e, eventData) {
var data = void 0;
var element = eventData.element;
function handleDoneMove() {
data.invalidated = true;
if ((0, _anyHandlesOutsideImage2.default)(eventData, data.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(element, mouseToolInterface.toolType, data);
}
_externalModules2.default.cornerstone.updateImage(element);
_externalModules2.default.$(element).on('CornerstoneToolsMouseMove', eventData, mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
}
if (!(0, _isMouseButtonEnabled2.default)(eventData.which, e.data.mouseButtonMask)) {
return;
}
var coords = eventData.startPoints.canvas;
var toolData = (0, _toolState.getToolState)(e.currentTarget, mouseToolInterface.toolType);
if (!toolData) {
return;
}
var i = void 0;
// Now check to see if there is a handle we can move
var preventHandleOutsideImage = void 0;
if (mouseToolInterface.options && mouseToolInterface.options.preventHandleOutsideImage !== undefined) {
preventHandleOutsideImage = mouseToolInterface.options.preventHandleOutsideImage;
} else {
preventHandleOutsideImage = false;
}
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
var distance = 6;
var handle = (0, _getHandleNearImagePoint2.default)(element, data.handles, coords, distance);
if (handle) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
data.active = true;
(0, _moveHandle2.default)(eventData, mouseToolInterface.toolType, data, handle, handleDoneMove, preventHandleOutsideImage);
e.stopImmediatePropagation();
return false;
}
}
// Now check to see if there is a line we can move
// Now check to see if we have a tool that we can move
if (!mouseToolInterface.pointNearTool) {
return;
}
var options = mouseToolInterface.options || {
deleteIfHandleOutsideImage: true,
preventHandleOutsideImage: false
};
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
data.active = false;
if (mouseToolInterface.pointNearTool(element, data, coords)) {
data.active = true;
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
(0, _moveAllHandles2.default)(e, data, toolData, mouseToolInterface.toolType, options, handleDoneMove);
e.stopImmediatePropagation();
return false;
}
}
}
// /////// END DEACTIVE TOOL ///////
// Not visible, not interactive
function disable(element) {
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDown', mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDownActivate', mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseDoubleClick', mouseToolInterface.mouseDoubleClickCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
// Note: This is to maintain compatibility for developers that have
// Built on top of mouseButtonTool.js
// TODO: Remove this after we migrate Cornerstone Tools away from jQuery
function onImageRendered(e) {
mouseToolInterface.onImageRendered(e, e.detail);
}
// Visible but not interactive
function enable(element) {
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDown', mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDownActivate', mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseDoubleClick', mouseToolInterface.mouseDoubleClickCallback);
}
element.addEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.cornerstone.updateImage(element);
}
// Visible, interactive and can create
function activate(element, mouseButtonMask) {
var eventData = {
mouseButtonMask: mouseButtonMask
};
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDown', mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDownActivate', mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
element.addEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).on('CornerstoneToolsMouseMove', eventData, mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDown', eventData, mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDownActivate', eventData, mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseDoubleClick', mouseToolInterface.mouseDoubleClickCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDoubleClick', eventData, mouseToolInterface.mouseDoubleClickCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
// Visible, interactive
function deactivate(element, mouseButtonMask) {
var eventData = {
mouseButtonMask: mouseButtonMask
};
var eventType = 'CornerstoneToolsToolDeactivated';
var statusChangeEventData = {
mouseButtonMask: mouseButtonMask,
toolType: mouseToolInterface.toolType,
type: eventType
};
(0, _triggerEvent2.default)(element, eventType, statusChangeEventData);
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsMouseMove', mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDown', mouseToolInterface.mouseDownCallback || mouseDownCallback);
_externalModules2.default.$(element).off('CornerstoneToolsMouseDownActivate', mouseToolInterface.mouseDownActivateCallback || mouseDownActivateCallback);
element.addEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).on('CornerstoneToolsMouseMove', eventData, mouseToolInterface.mouseMoveCallback || mouseMoveCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDown', eventData, mouseToolInterface.mouseDownCallback || mouseDownCallback);
if (mouseToolInterface.mouseDoubleClickCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsMouseDoubleClick', mouseToolInterface.mouseDoubleClickCallback);
_externalModules2.default.$(element).on('CornerstoneToolsMouseDoubleClick', eventData, mouseToolInterface.mouseDoubleClickCallback);
}
if (mouseToolInterface.deactivate) {
mouseToolInterface.deactivate(element, mouseButtonMask);
}
_externalModules2.default.cornerstone.updateImage(element);
}
function getConfiguration() {
return configuration;
}
function setConfiguration(config) {
configuration = config;
}
var toolInterface = {
enable: enable,
disable: disable,
activate: activate,
deactivate: deactivate,
getConfiguration: getConfiguration,
setConfiguration: setConfiguration,
mouseDownCallback: mouseDownCallback,
mouseMoveCallback: mouseMoveCallback,
mouseDownActivateCallback: mouseDownActivateCallback
};
// Expose pointNearTool if available
if (mouseToolInterface.pointNearTool) {
toolInterface.pointNearTool = mouseToolInterface.pointNearTool;
}
if (mouseToolInterface.mouseDoubleClickCallback) {
toolInterface.mouseDoubleClickCallback = mouseToolInterface.mouseDoubleClickCallback;
}
if (mouseToolInterface.addNewMeasurement) {
toolInterface.addNewMeasurement = mouseToolInterface.addNewMeasurement;
}
return toolInterface;
};
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefault(_externalModules);
var _toolCoordinates = __webpack_require__(35);
var _toolCoordinates2 = _interopRequireDefault(_toolCoordinates);
var _getHandleNearImagePoint = __webpack_require__(19);
var _getHandleNearImagePoint2 = _interopRequireDefault(_getHandleNearImagePoint);
var _handleActivator = __webpack_require__(36);
var _handleActivator2 = _interopRequireDefault(_handleActivator);
var _moveHandle = __webpack_require__(22);
var _moveHandle2 = _interopRequireDefault(_moveHandle);
var _moveNewHandle = __webpack_require__(23);
var _moveNewHandle2 = _interopRequireDefault(_moveNewHandle);
var _moveAllHandles = __webpack_require__(37);
var _moveAllHandles2 = _interopRequireDefault(_moveAllHandles);
var _anyHandlesOutsideImage = __webpack_require__(12);
var _anyHandlesOutsideImage2 = _interopRequireDefault(_anyHandlesOutsideImage);
var _isMouseButtonEnabled = __webpack_require__(2);
var _isMouseButtonEnabled2 = _interopRequireDefault(_isMouseButtonEnabled);
var _toolState = __webpack_require__(1);
var _triggerEvent = __webpack_require__(3);
var _triggerEvent2 = _interopRequireDefault(_triggerEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (context, renderData, handles, color, options) {
context.strokeStyle = color;
Object.keys(handles).forEach(function (name) {
var handle = handles[name];
if (handle.drawnIndependently === true) {
return;
}
if (options && options.drawHandlesIfActive === true && !handle.active) {
return;
}
context.beginPath();
if (handle.active) {
context.lineWidth = _toolStyle2.default.getActiveWidth();
} else {
context.lineWidth = _toolStyle2.default.getToolWidth();
}
var handleCanvasCoords = _externalModules2.default.cornerstone.pixelToCanvas(renderData.element, handle);
context.arc(handleCanvasCoords.x, handleCanvasCoords.y, handleRadius, 0, 2 * Math.PI);
if (options && options.fill) {
context.fillStyle = options.fill;
context.fill();
}
context.stroke();
});
};
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefault(_externalModules);
var _toolStyle = __webpack_require__(5);
var _toolStyle2 = _interopRequireDefault(_toolStyle);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var handleRadius = 6;
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefault(_externalModules);
var _anyHandlesOutsideImage = __webpack_require__(12);
var _anyHandlesOutsideImage2 = _interopRequireDefault(_anyHandlesOutsideImage);
var _getHandleNearImagePoint = __webpack_require__(19);
var _getHandleNearImagePoint2 = _interopRequireDefault(_getHandleNearImagePoint);
var _touchMoveHandle = __webpack_require__(52);
var _touchMoveHandle2 = _interopRequireDefault(_touchMoveHandle);
var _moveNewHandleTouch = __webpack_require__(25);
var _moveNewHandleTouch2 = _interopRequireDefault(_moveNewHandleTouch);
var _touchMoveAllHandles = __webpack_require__(51);
var _touchMoveAllHandles2 = _interopRequireDefault(_touchMoveAllHandles);
var _toolState = __webpack_require__(1);
var _triggerEvent = __webpack_require__(3);
var _triggerEvent2 = _interopRequireDefault(_triggerEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function deactivateAllHandles(handles) {
Object.keys(handles).forEach(function (name) {
var handle = handles[name];
handle.active = false;
});
}
function deactivateAllToolInstances(toolData) {
if (!toolData) {
return;
}
for (var i = 0; i < toolData.data.length; i++) {
var data = toolData.data[i];
data.active = false;
if (!data.handles) {
continue;
}
deactivateAllHandles(data.handles);
}
}
function touchTool(touchToolInterface) {
// /////// BEGIN ACTIVE TOOL ///////
function addNewMeasurement(touchEventData) {
// Console.log('touchTool addNewMeasurement');
var cornerstone = _externalModules2.default.cornerstone;
var element = touchEventData.element;
var measurementData = touchToolInterface.createNewMeasurement(touchEventData);
if (!measurementData) {
return;
}
(0, _toolState.addToolState)(element, touchToolInterface.toolType, measurementData);
if (Object.keys(measurementData.handles).length === 1 && touchEventData.type === 'CornerstoneToolsTap') {
measurementData.active = false;
measurementData.handles.end.active = false;
measurementData.handles.end.highlight = false;
measurementData.invalidated = true;
if ((0, _anyHandlesOutsideImage2.default)(touchEventData, measurementData.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(element, touchToolInterface.toolType, measurementData);
}
cornerstone.updateImage(element);
return;
}
_externalModules2.default.$(element).off('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
cornerstone.updateImage(element);
(0, _moveNewHandleTouch2.default)(touchEventData, touchToolInterface.toolType, measurementData, measurementData.handles.end, function () {
measurementData.active = false;
measurementData.invalidated = true;
if ((0, _anyHandlesOutsideImage2.default)(touchEventData, measurementData.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(element, touchToolInterface.toolType, measurementData);
}
_externalModules2.default.$(element).on('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
cornerstone.updateImage(element);
});
}
function touchDownActivateCallback(e, eventData) {
// Console.log('touchTool touchDownActivateCallback');
if (touchToolInterface.addNewMeasurement) {
touchToolInterface.addNewMeasurement(eventData);
} else {
addNewMeasurement(eventData);
}
e.stopImmediatePropagation();
e.preventDefault();
}
// /////// END ACTIVE TOOL ///////
// /////// BEGIN INACTIVE TOOL ///////
function tapCallback(e, eventData) {
// Console.log('touchTool tapCallback');
var cornerstone = _externalModules2.default.cornerstone;
var element = eventData.element;
var coords = eventData.currentPoints.canvas;
var toolData = (0, _toolState.getToolState)(e.currentTarget, touchToolInterface.toolType);
var data = void 0;
var i = void 0;
// Deactivate everything
deactivateAllToolInstances(toolData);
function doneMovingCallback() {
// Console.log('touchTool tapCallback doneMovingCallback');
deactivateAllToolInstances(toolData);
if ((0, _anyHandlesOutsideImage2.default)(eventData, data.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(element, touchToolInterface.toolType, data);
}
cornerstone.updateImage(element);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
}
// Now check to see if there is a handle we can move
if (toolData) {
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
var distanceSq = 25; // Should probably make this a settable property later
var handle = (0, _getHandleNearImagePoint2.default)(element, data.handles, coords, distanceSq);
if (handle) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
data.active = true;
handle.active = true;
cornerstone.updateImage(element);
(0, _touchMoveHandle2.default)(e, touchToolInterface.toolType, data, handle, doneMovingCallback);
e.stopImmediatePropagation();
e.preventDefault();
return;
}
}
}
// Now check to see if we have a tool that we can move
if (toolData && touchToolInterface.pointNearTool) {
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
if (touchToolInterface.pointNearTool(element, data, coords)) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
data.active = true;
cornerstone.updateImage(element);
(0, _touchMoveAllHandles2.default)(e, data, toolData, touchToolInterface.toolType, true, doneMovingCallback);
e.stopImmediatePropagation();
e.preventDefault();
return;
}
}
}
// If there is nothing to move, add a new instance of the tool
// Need to check here to see if activation is allowed!
if (touchToolInterface.touchDownActivateCallback) {
touchToolInterface.touchDownActivateCallback(e, eventData);
} else {
touchDownActivateCallback(e, eventData);
}
return false;
}
function touchStartCallback(e, eventData) {
// Console.log('touchTool touchStartCallback');
var cornerstone = _externalModules2.default.cornerstone;
var element = eventData.element;
var coords = eventData.startPoints.canvas;
var data = void 0;
var toolData = (0, _toolState.getToolState)(e.currentTarget, touchToolInterface.toolType);
var i = void 0;
function doneMovingCallback(lastEvent, lastEventData) {
// Console.log('touchTool touchStartCallback doneMovingCallback');
data.active = false;
data.invalidated = true;
if ((0, _anyHandlesOutsideImage2.default)(eventData, data.handles)) {
// Delete the measurement
(0, _toolState.removeToolState)(eventData.element, touchToolInterface.toolType, data);
}
cornerstone.updateImage(eventData.element);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).on('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
if (lastEvent && lastEvent.type === 'CornerstoneToolsTouchPress') {
(0, _triggerEvent2.default)(element, lastEvent.type, lastEventData);
}
}
// Now check to see if there is a handle we can move
// Average pixel width of index finger is 45-57 pixels
// https://www.smashingmagazine.com/2012/02/finger-friendly-design-ideal-mobile-touchscreen-target-sizes/
var distance = 28;
if (!toolData) {
return;
}
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
var handle = (0, _getHandleNearImagePoint2.default)(eventData.element, data.handles, coords, distance);
if (handle) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
data.active = true;
(0, _touchMoveHandle2.default)(e, touchToolInterface.toolType, data, handle, doneMovingCallback);
e.stopImmediatePropagation();
e.preventDefault();
return;
}
}
// Now check to see if we have a tool that we can move
if (!touchToolInterface.pointNearTool) {
return;
}
for (i = 0; i < toolData.data.length; i++) {
data = toolData.data[i];
if (touchToolInterface.pointNearTool(eventData.element, data, coords)) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
(0, _touchMoveAllHandles2.default)(e, data, toolData, touchToolInterface.toolType, true, doneMovingCallback);
e.stopImmediatePropagation();
e.preventDefault();
return;
}
}
}
// /////// END INACTIVE TOOL ///////
// Not visible, not interactive
function disable(element) {
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
if (touchToolInterface.doubleTapCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsDoubleTap', touchToolInterface.doubleTapCallback);
}
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
// Visible but not interactive
function enable(element) {
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
element.addEventListener('cornerstoneimagerendered', onImageRendered);
if (touchToolInterface.doubleTapCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsDoubleTap', touchToolInterface.doubleTapCallback);
}
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
// Visible, interactive and can create
function activate(element) {
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
element.addEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
if (touchToolInterface.doubleTapCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsDoubleTap', touchToolInterface.doubleTapCallback);
_externalModules2.default.$(element).on('CornerstoneToolsDoubleTap', touchToolInterface.doubleTapCallback);
}
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
_externalModules2.default.$(element).on('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
// Note: This is to maintain compatibility for developers that have
// Built on top of touchTool.js
// TODO: Remove this after we migrate Cornerstone Tools away from jQuery
function onImageRendered(e) {
touchToolInterface.onImageRendered(e, e.detail);
}
// Visible, interactive
function deactivate(element) {
var eventType = 'CornerstoneToolsToolDeactivated';
var statusChangeEventData = {
toolType: touchToolInterface.toolType,
type: eventType
};
(0, _triggerEvent2.default)(element, eventType, statusChangeEventData);
element.removeEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTouchStartActive', touchToolInterface.touchDownActivateCallback || touchDownActivateCallback);
_externalModules2.default.$(element).off('CornerstoneToolsTap', touchToolInterface.tapCallback || tapCallback);
element.addEventListener('cornerstoneimagerendered', onImageRendered);
_externalModules2.default.$(element).on('CornerstoneToolsTouchStart', touchToolInterface.touchStartCallback || touchStartCallback);
if (touchToolInterface.doubleTapCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsDoubleTap', touchToolInterface.doubleTapCallback);
}
if (touchToolInterface.pressCallback) {
_externalModules2.default.$(element).off('CornerstoneToolsTouchPress', touchToolInterface.pressCallback);
}
_externalModules2.default.cornerstone.updateImage(element);
}
var toolInterface = {
enable: enable,
disable: disable,
activate: activate,
deactivate: deactivate,
touchStartCallback: touchToolInterface.touchStartCallback || touchStartCallback,
touchDownActivateCallback: touchToolInterface.touchDownActivateCallback || touchDownActivateCallback,
tapCallback: touchToolInterface.tapCallback || tapCallback
};
// Expose pointNearTool if available
if (touchToolInterface.pointNearTool) {
toolInterface.pointNearTool = touchToolInterface.pointNearTool;
}
if (touchToolInterface.doubleTapCallback) {
toolInterface.doubleTapCallback = touchToolInterface.doubleTapCallback;
}
if (touchToolInterface.pressCallback) {
toolInterface.pressCallback = touchToolInterface.pressCallback;
}
if (touchToolInterface.addNewMeasurement) {
toolInterface.addNewMeasurement = touchToolInterface.addNewMeasurement;
}
return toolInterface;
}
exports.default = touchTool;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var defaultStartLoadHandler = void 0;
var defaultEndLoadHandler = void 0;
var defaultErrorLoadingHandler = void 0;
function setStartLoadHandler(handler) {
defaultStartLoadHandler = handler;
}
function getStartLoadHandler() {
return defaultStartLoadHandler;
}
function setEndLoadHandler(handler) {
defaultEndLoadHandler = handler;
}
function getEndLoadHandler() {
return defaultEndLoadHandler;
}
function setErrorLoadingHandler(handler) {
defaultErrorLoadingHandler = handler;
}
function getErrorLoadingHandler() {
return defaultErrorLoadingHandler;
}
var loadHandlerManager = {
setStartLoadHandler: setStartLoadHandler,
getStartLoadHandler: getStartLoadHandler,
setEndLoadHandler: setEndLoadHandler,
getEndLoadHandler: getEndLoadHandler,
setErrorLoadingHandler: setErrorLoadingHandler,
getErrorLoadingHandler: getErrorLoadingHandler
};
exports.default = loadHandlerManager;
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (touchDragCallback, options) {
var events = 'CornerstoneToolsTouchDrag';
if (options && options.fireOnTouchStart === true) {
events += ' CornerstoneToolsTouchStart';
}
var toolInterface = {
activate: function activate(element) {
_externalModules2.default.$(element).off(events, touchDragCallback);
if (options && options.eventData) {
_externalModules2.default.$(element).on(events, options.eventData, touchDragCallback);
} else {
_externalModules2.default.$(element).on(events, touchDragCallback);
}
if (options && options.activateCallback) {
options.activateCallback(element);
}
},
disable: function disable(element) {
_externalModules2.default.$(element).off(events, touchDragCallback);
if (options && options.disableCallback) {
options.disableCallback(element);
}
},
enable: function enable(element) {
_externalModules2.default.$(element).off(events, touchDragCallback);
if (options && options.enableCallback) {
options.enableCallback(element);
}
},
deactivate: function deactivate(element) {
_externalModules2.default.$(element).off(events, touchDragCallback);
if (options && options.deactivateCallback) {
options.deactivateCallback(element);
}
}
};
return toolInterface;
};
var _externalModules = __webpack_require__(0);
var _externalModules2 = _interopRequireDefa