158 lines
5.1 KiB
JavaScript
158 lines
5.1 KiB
JavaScript
import PaletteProvider from 'bpmn-js/lib/features/palette/PaletteProvider'
|
||
import { assign } from "min-dash"
|
||
|
||
export default function CustomPalette (palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate) {
|
||
PaletteProvider.call(this, palette, create, elementFactory, spaceTool, lassoTool, handTool, globalConnect, translate, 2000)
|
||
}
|
||
|
||
const F = function () { } // 核心,利用空对象作为中介;
|
||
F.prototype = PaletteProvider.prototype // 核心,将父类的原型赋值给空对象F;
|
||
|
||
// 利用中介函数重写原型链方法
|
||
F.prototype.getPaletteEntries = function () {
|
||
const actions = {},
|
||
create = this._create,
|
||
elementFactory = this._elementFactory,
|
||
spaceTool = this._spaceTool,
|
||
lassoTool = this._lassoTool,
|
||
handTool = this._handTool,
|
||
globalConnect = this._globalConnect,
|
||
translate = this._translate
|
||
|
||
function createAction (type, group, className, title, options) {
|
||
function createListener (event) {
|
||
const shape = elementFactory.createShape(assign({ type: type }, options))
|
||
|
||
if (options) {
|
||
shape.businessObject.di.isExpanded = options.isExpanded
|
||
}
|
||
|
||
create.start(event, shape)
|
||
}
|
||
|
||
const shortType = type.replace(/^bpmn:/, '')
|
||
|
||
return {
|
||
group: group,
|
||
className: className,
|
||
title: title || translate("Create {type}", { type: shortType }),
|
||
action: {
|
||
dragstart: createListener,
|
||
click: createListener
|
||
}
|
||
}
|
||
}
|
||
|
||
function createSubprocess (event) {
|
||
const subProcess = elementFactory.createShape({
|
||
type: 'bpmn:SubProcess',
|
||
x: 0,
|
||
y: 0,
|
||
isExpanded: true
|
||
})
|
||
|
||
const startEvent = elementFactory.createShape({
|
||
type: 'bpmn:StartEvent',
|
||
x: 40,
|
||
y: 82,
|
||
parent: subProcess
|
||
})
|
||
|
||
create.start(event, [subProcess, startEvent], {
|
||
hints: {
|
||
autoSelect: [startEvent]
|
||
}
|
||
})
|
||
}
|
||
|
||
function createParticipant (event) {
|
||
create.start(event, elementFactory.createParticipantShape())
|
||
}
|
||
|
||
assign(actions, {
|
||
"hand-tool": {
|
||
group: "tools",
|
||
className: "bpmn-icon-hand-tool",
|
||
title: '激活抓手工具',
|
||
// title: translate("Activate the hand tool"),
|
||
action: {
|
||
click: function (event) {
|
||
handTool.activateHand(event)
|
||
}
|
||
}
|
||
},
|
||
"lasso-tool": {
|
||
group: "tools",
|
||
className: "bpmn-icon-lasso-tool",
|
||
title: translate("Activate the lasso tool"),
|
||
action: {
|
||
click: function (event) {
|
||
lassoTool.activateSelection(event)
|
||
}
|
||
}
|
||
},
|
||
"space-tool": {
|
||
group: "tools",
|
||
className: "bpmn-icon-space-tool",
|
||
title: translate("Activate the create/remove space tool"),
|
||
action: {
|
||
click: function (event) {
|
||
spaceTool.activateSelection(event)
|
||
}
|
||
}
|
||
},
|
||
"global-connect-tool": {
|
||
group: "tools",
|
||
className: "bpmn-icon-connection-multi",
|
||
title: translate("Activate the global connect tool"),
|
||
action: {
|
||
click: function (event) {
|
||
globalConnect.toggle(event)
|
||
}
|
||
}
|
||
},
|
||
"tool-separator": {
|
||
group: "tools",
|
||
separator: true
|
||
},
|
||
"create.start-event": createAction("bpmn:StartEvent", "event", "bpmn-icon-start-event-none", translate("Create StartEvent")),
|
||
"create.intermediate-event": createAction(
|
||
"bpmn:IntermediateThrowEvent",
|
||
"event",
|
||
"bpmn-icon-intermediate-event-none",
|
||
translate("Create Intermediate/Boundary Event")
|
||
),
|
||
"create.end-event": createAction("bpmn:EndEvent", "event", "bpmn-icon-end-event-none", translate("Create EndEvent")),
|
||
"create.exclusive-gateway": createAction("bpmn:ExclusiveGateway", "gateway", "bpmn-icon-gateway-none", translate("Create Gateway")),
|
||
"create.user-task": createAction("bpmn:UserTask", "activity", "bpmn-icon-user-task", translate("Create User Task")),
|
||
"create.data-object": createAction("bpmn:DataObjectReference", "data-object", "bpmn-icon-data-object", translate("Create DataObjectReference")),
|
||
"create.data-store": createAction("bpmn:DataStoreReference", "data-store", "bpmn-icon-data-store", translate("Create DataStoreReference")),
|
||
"create.subprocess-expanded": {
|
||
group: "activity",
|
||
className: "bpmn-icon-subprocess-expanded",
|
||
title: translate("Create expanded SubProcess"),
|
||
action: {
|
||
dragstart: createSubprocess,
|
||
click: createSubprocess
|
||
}
|
||
},
|
||
"create.participant-expanded": {
|
||
group: "collaboration",
|
||
className: "bpmn-icon-participant",
|
||
title: translate("Create Pool/Participant"),
|
||
action: {
|
||
dragstart: createParticipant,
|
||
click: createParticipant
|
||
}
|
||
},
|
||
"create.group": createAction("bpmn:Group", "artifact", "bpmn-icon-group", translate("Create Group"))
|
||
})
|
||
|
||
return actions
|
||
}
|
||
|
||
CustomPalette.$inject = ["palette", "create", "elementFactory", "spaceTool", "lassoTool", "handTool", "globalConnect", "translate"]
|
||
|
||
CustomPalette.prototype = new F() // 核心,将 F的实例赋值给子类;
|
||
CustomPalette.prototype.constructor = CustomPalette // 修复子类CustomPalette的构造器指向,防止原型链的混乱;
|