Fixing that Workflows activities are not measured in relative coordinates

This commit is contained in:
Lombiq
2015-11-24 14:23:20 +01:00
parent 188fabe233
commit c5fb96ca4f
2 changed files with 594 additions and 574 deletions

View File

@@ -1,288 +1,307 @@
 var connectorPaintStyle = {  var connectorPaintStyle = {
lineWidth: 2, lineWidth: 2,
strokeStyle: "#999", strokeStyle: "#999",
joinstyle: "round", joinstyle: "round",
//outlineColor: "white", //outlineColor: "white",
//outlineWidth: 7 //outlineWidth: 7
}; };
var connectorHoverStyle = { var connectorHoverStyle = {
lineWidth: 2, lineWidth: 2,
strokeStyle: "#225588" strokeStyle: "#225588"
}; };
var sourceEndpointOptions = { var sourceEndpointOptions = {
endpoint: ["Dot", { cssClass: 'sourceEndpoint', radius: 5 }], endpoint: ["Dot", { cssClass: 'sourceEndpoint', radius: 5 }],
paintStyle: { fillStyle: '#225588' }, paintStyle: { fillStyle: '#225588' },
isSource: true, isSource: true,
isTarget: false, isTarget: false,
deleteEndpointsOnDetach: false, deleteEndpointsOnDetach: false,
connector: ["Flowchart"], // gap needs to be the same as makeTarget.paintStyle.radius connector: ["Flowchart"], // gap needs to be the same as makeTarget.paintStyle.radius
connectorStyle: connectorPaintStyle, connectorStyle: connectorPaintStyle,
hoverPaintStyle: connectorHoverStyle, hoverPaintStyle: connectorHoverStyle,
connectorHoverStyle: connectorHoverStyle, connectorHoverStyle: connectorHoverStyle,
overlays: [["Label", { location: [3, -1.5], cssClass: "sourceEndpointLabel" }]] overlays: [["Label", { location: [3, -1.5], cssClass: "sourceEndpointLabel" }]]
}; };
jsPlumb.bind("ready", function () { jsPlumb.bind("ready", function () {
jsPlumb.importDefaults({ jsPlumb.importDefaults({
Anchor : "Continuous", Anchor : "Continuous",
// default drag options // default drag options
DragOptions: { cursor: 'pointer', zIndex: 2000 }, DragOptions: { cursor: 'pointer', zIndex: 2000 },
// default to blue at one end and green at the other // default to blue at one end and green at the other
EndpointStyles: [{ fillStyle: '#225588' }], EndpointStyles: [{ fillStyle: '#225588' }],
// blue endpoints 7 px; Blank endpoints. // blue endpoints 7 px; Blank endpoints.
Endpoints: [["Dot", { radius: 7 }], ["Blank"]], Endpoints: [["Dot", { radius: 7 }], ["Blank"]],
// the overlays to decorate each connection with. note that the label overlay uses a function to generate the label text; in this // the overlays to decorate each connection with. note that the label overlay uses a function to generate the label text; in this
// case it returns the 'labelText' member that we set on each connection in the 'init' method below. // case it returns the 'labelText' member that we set on each connection in the 'init' method below.
ConnectionOverlays: [ ConnectionOverlays: [
["Arrow", { width: 12, length: 12, location: -5 }], ["Arrow", { width: 12, length: 12, location: -5 }],
// ["Label", { location: 0.1, id: "label", cssClass: "aLabel" }] // ["Label", { location: 0.1, id: "label", cssClass: "aLabel" }]
], ],
ConnectorZIndex: 5 ConnectorZIndex: 5
}); });
// updates the state of any edited activity // updates the state of any edited activity
updateActivities(localId); updateActivities(localId);
// deserialize the previously locally saved workflow // deserialize the previously locally saved workflow
loadActivities(localId); loadActivities(localId);
// create activity toolbar for controlling their states // create activity toolbar for controlling their states
createToolbar(); createToolbar();
// a new connection is created // a new connection is created
jsPlumb.bind("jsPlumbConnection", function (connectionInfo) { jsPlumb.bind("jsPlumbConnection", function (connectionInfo) {
// ...update your data model here. The contents of the 'connectionInfo' are described below. // ...update your data model here. The contents of the 'connectionInfo' are described below.
}); });
// a connection is detached // a connection is detached
jsPlumb.bind("jsPlumbConnectionDetached", function (connectionInfo) { jsPlumb.bind("jsPlumbConnectionDetached", function (connectionInfo) {
// ...update your data model here. The contents of the 'connectionInfo' are described below. // ...update your data model here. The contents of the 'connectionInfo' are described below.
}); });
}); });
// instanciates a new workflow widget in the editor // instanciates a new workflow widget in the editor
var createActivity = function (activityName, top, left) { var createActivity = function (activityName, top, left) {
return renderActivity(null, -1, activityName, {}, false, top, left); return renderActivity(null, -1, activityName, {}, false, top, left);
}; };
// create a new activity node on the editor // create a new activity node on the editor
$('.activity-toolbox-item').draggable({ helper: 'clone' }); $('.activity-toolbox-item').draggable({ helper: 'clone' });
$('#activity-editor').droppable({ drop: function(event, ui) { $('#activity-editor').droppable({ drop: function(event, ui) {
var activityName = ui.draggable.data('activity-name'); var activityName = ui.draggable.data('activity-name');
if (activityName && activityName.length) { if (activityName && activityName.length) {
createActivity(activityName, event.pageY, event.pageX); var offset = $(this).offset();
} if (displaySaveMessage()) {
createActivity(activityName, event.pageY - offset.top - 40, event.pageX - offset.left); /* The displaySaveMessage's height is 40px */
displaySaveMessage(); }
} else {
}); createActivity(activityName, event.pageY - offset.top, event.pageX - offset.left);
}
$("#search-box").focus().on("keyup", function (e) { }
var text = $(this).val(); if (displaySaveMessage()) {
if (text == "") { var activityPosition = ui.position;
$(".activity-toolbox-item").show(); activityPosition.top += 40; /* The displaySaveMessage's height is 40px */
} else { }
var lowerCaseText = text.toLowerCase(); }
$(".activity-toolbox-item").each(function () { });
var recordText = $(this).data("activity-text").toLowerCase();
$(this).toggle(recordText.indexOf(lowerCaseText) >= 0); $("#search-box").focus().on("keyup", function (e) {
}); var text = $(this).val();
} if (text == "") {
}); $(".activity-toolbox-item").show();
} else {
var renderActivity = function (clientId, id, name, state, start, top, left) { var lowerCaseText = text.toLowerCase();
$(".activity-toolbox-item").each(function () {
$.ajax({ var recordText = $(this).data("activity-text").toLowerCase();
type: 'POST', $(this).toggle(recordText.indexOf(lowerCaseText) >= 0);
url: renderActivityUrl, });
data: { name: name, state: state, __RequestVerificationToken: requestAntiForgeryToken }, }
async: false, });
success: function(data) {
var dom = $($.parseHTML($.trim(data))); var renderActivity = function (clientId, id, name, state, start, top, left) {
if (dom == null) { $.ajax({
return null; type: 'POST',
} url: renderActivityUrl,
data: { name: name, state: state, __RequestVerificationToken: requestAntiForgeryToken },
dom.addClass('activity'); async: false,
success: function(data) {
if ($.inArray(id, awaitingRecords) != -1) { var dom = $($.parseHTML($.trim(data)));
dom.addClass('awaiting');
} if (dom == null) {
return null;
if (start) { }
dom.addClass('start');
} dom.addClass('activity');
if (clientId) { if ($.inArray(id, awaitingRecords) != -1) {
dom.attr('id', clientId); dom.addClass('awaiting');
} }
var editor = $('#activity-editor'); if (start) {
editor.append(dom); dom.addClass('start');
}
jsPlumb.draggable(dom, { containment: "parent", scroll: true, drag: hideToolbar });
if (clientId) {
jsPlumb.makeTarget(dom, { dom.attr('id', clientId);
dropOptions: { hoverClass: "dragHover" }, }
anchor: "Continuous",
endpoint: "Blank", var editor = $('#activity-editor');
paintStyle: { fillStyle: "#558822", radius: 3 }, editor.append(dom);
});
jsPlumb.draggable(dom, { containment: "parent", scroll: true, drag: hideToolbar });
var elt = dom.get(0);
elt.viewModel = { jsPlumb.makeTarget(dom, {
name: name, dropOptions: { hoverClass: "dragHover" },
state: state, anchor: "Continuous",
start: start, endpoint: "Blank",
clientId: dom.attr("id"), paintStyle: { fillStyle: "#558822", radius: 3 },
hasForm: activities[name].hasForm });
};
var elt = dom.get(0);
elt.endpoints = {}; elt.viewModel = {
name: name,
var outcomes = activities[name].outcomes; state: state,
start: start,
if (dom.data('outcomes')) { clientId: dom.attr("id"),
outcomes = eval('[' + dom.data('outcomes') + ']'); hasForm: activities[name].hasForm
} };
for (i = 0; i < outcomes.length; i++) { elt.endpoints = {};
var ep = jsPlumb.addEndpoint(dom, {
anchor: "Continuous", var outcomes = activities[name].outcomes;
connectorOverlays: [["Label", { label: outcomes[i].Label, cssClass: "connection-label" }]],
}, if (dom.data('outcomes')) {
sourceEndpointOptions); outcomes = eval('[' + dom.data('outcomes') + ']');
}
elt.endpoints[outcomes[i].Id] = ep;
ep.outcome = outcomes[i]; for (i = 0; i < outcomes.length; i++) {
// ep.overlays[0].setLabel(outcomes[i].Label); var ep = jsPlumb.addEndpoint(dom, {
} anchor: "Continuous",
connectorOverlays: [["Label", { label: outcomes[i].Label, cssClass: "connection-label" }]],
if (activities[name].hasForm) { },
var edit = function() { sourceEndpointOptions);
saveLocal(localId);
window.location.href = editActivityUrl + "/" + $("#id").val() + "?name=" + name + "&clientId=" + elt.viewModel.clientId + "&localId=" + localId; elt.endpoints[outcomes[i].Id] = ep;
}; ep.outcome = outcomes[i];
// ep.overlays[0].setLabel(outcomes[i].Label);
dom.dblclick(edit); }
elt.viewModel.edit = edit;
} if (activities[name].hasForm) {
var edit = function() {
dom.css('top', top + 'px'); saveLocal(localId);
dom.css('left', left + 'px'); window.location.href = editActivityUrl + "/" + $("#id").val() + "?name=" + name + "&clientId=" + elt.viewModel.clientId + "&localId=" + localId;
jsPlumb.repaint(elt.viewModel.clientId); };
dom.on("click", function () { dom.dblclick(edit);
var self = $(this); elt.viewModel.edit = edit;
var toolbar = $('#activity-toolbar'); }
var canvasWidth = $('#activity-editor').width();
refreshToolbar(this); var domWidth = $('#' + clientId).width() + 25; /* width + padding */
toolbar.position({ dom.css('top', top + 'px');
my: "right bottom", dom.css('left', left + domWidth > canvasWidth ? canvasWidth - domWidth : left + 'px');
at: "right top", jsPlumb.repaint(elt.viewModel.clientId);
offset: "0 -5",
of: self, dom.on("click", function () {
collision: "none" var self = $(this);
}); var toolbar = $('#activity-toolbar');
toolbar.get(0).target = this;
toolbar.show(); refreshToolbar(this);
return false; toolbar.position({
}); my: "right bottom",
} at: "right top",
offset: "0 -5",
}); of: self,
collision: "none"
}; });
var createToolbar = function () { toolbar.get(0).target = this;
var editor = $('#activity-editor'); toolbar.show();
// editor.focus(function () { return false;
editor.on("click", function () { });
hideToolbar(); }
});
});
initToolbar();
}; };
var initToolbar = function() { var createToolbar = function () {
$('#activity-toolbar-start-checkbox').change(function () { var editor = $('#activity-editor');
var toolbar = $('#activity-toolbar');
var target = $(toolbar).get(0).target; // editor.focus(function () {
//var clientId = target.attr('id'); editor.on("click", function () {
//var activity = getActivity(localId, clientId); hideToolbar();
var checked = $(this).is(':checked'); });
target.viewModel.start = checked;
$(target).toggleClass('start', checked); initToolbar();
};
// display a warning if there are no activities with a start state
refreshStateMessage(); var initToolbar = function() {
$('#activity-toolbar-start-checkbox').change(function () {
displaySaveMessage(); var toolbar = $('#activity-toolbar');
}); var target = $(toolbar).get(0).target;
//var clientId = target.attr('id');
// prevent the editor from getting clicked when the label is clicked //var activity = getActivity(localId, clientId);
$('#activity-toolbar-start').click(function (event) { var checked = $(this).is(':checked');
event.stopPropagation(); target.viewModel.start = checked;
}); $(target).toggleClass('start', checked);
};
// display a warning if there are no activities with a start state
function refreshStateMessage() { refreshStateMessage();
if ($("#activity-editor div").hasClass('start')) {
$("#start-message").hide(); displaySaveMessage();
} else { });
$("#start-message").show();
} // prevent the editor from getting clicked when the label is clicked
} $('#activity-toolbar-start').click(function (event) {
event.stopPropagation();
function displaySaveMessage() { });
$("#save-message").show(); };
}
function refreshStateMessage() {
var refreshToolbar = function(target) { if ($("#activity-editor div").hasClass('start')) {
target = $(target); $("#start-message").hide();
} else {
// start button $("#start-message").show();
$('#activity-toolbar-start').toggle(target.hasClass('canStart')); }
$('#activity-toolbar-start-checkbox').prop('checked', target.get(0).viewModel.start); }
// edit button function displaySaveMessage() {
var editButton = $('#activity-toolbar-edit'); var saveMessage = $("#save-message");
if (target.get(0).viewModel.hasForm) {
editButton.unbind("click").click(target.get(0).viewModel.edit); if (saveMessage.css('display') === "none") {
editButton.toggle(true); saveMessage.show();
} else { return true;
editButton.toggle(false); }
} else {
return false;
// delete button }
var deleteButton = $('#activity-toolbar-delete'); }
deleteButton.unbind("click").click(function () {
if (!confirm($("#confirm-delete-activity").val())) { var refreshToolbar = function(target) {
return false; target = $(target);
}
// start button
jsPlumb.removeAllEndpoints(target.attr('id')); $('#activity-toolbar-start').toggle(target.hasClass('canStart'));
target.remove(); $('#activity-toolbar-start-checkbox').prop('checked', target.get(0).viewModel.start);
displaySaveMessage(); // edit button
}); var editButton = $('#activity-toolbar-edit');
if (target.get(0).viewModel.hasForm) {
}; editButton.unbind("click").click(target.get(0).viewModel.edit);
editButton.toggle(true);
// hides the } else {
var hideToolbar = function () { editButton.toggle(false);
var toolbar = $('#activity-toolbar'); }
toolbar.offset({ top: 0, left: 0 });
toolbar.hide(); // delete button
}; var deleteButton = $('#activity-toolbar-delete');
deleteButton.unbind("click").click(function () {
if (!confirm($("#confirm-delete-activity").val())) {
return false;
}
jsPlumb.removeAllEndpoints(target.attr('id'));
target.remove();
displaySaveMessage();
});
};
// hides the
var hideToolbar = function () {
var toolbar = $('#activity-toolbar');
toolbar.offset({ top: 0, left: 0 });
toolbar.hide();
};

View File

@@ -1,287 +1,288 @@
.activity { .activity {
position: absolute; position: absolute;
z-index: 20; z-index: 20;
padding: 1em; /*min-width: 5em;*/ padding: 1em; /*min-width: 5em;*/
border: 1px solid #999; border: 1px solid #999;
-moz-border-radius: 2px; -moz-border-radius: 2px;
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
background-color: white; background-color: white;
text-align: center; text-align: center;
font-size: 0.9em; font-size: 0.9em;
font-family: helvetica; font-family: helvetica;
-moz-opacity: 0.8; -moz-opacity: 0.8;
opacity: 0.8; opacity: 0.8;
filter: alpha(opacity=80); filter: alpha(opacity=80);
white-space: nowrap; white-space: nowrap;
} }
.activity:hover, .dragHover { .activity:hover, .dragHover {
-moz-box-shadow: 2px 2px 19px #aaa; -moz-box-shadow: 2px 2px 19px #aaa;
-o-box-shadow: 2px 2px 19px #aaa; -o-box-shadow: 2px 2px 19px #aaa;
-webkit-box-shadow: 2px 2px 19px #aaa; -webkit-box-shadow: 2px 2px 19px #aaa;
box-shadow: 2px 2px 19px #aaa; box-shadow: 2px 2px 19px #aaa;
} }
.event { .event {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAATCAYAAACk9eypAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAANNJREFUOE+VkbENhDAMRcOtRElDRRsxB5MwAxNQ0yAGYAJqWiagASFfbMmRHXzcXfGk+Nvf+UocAPzDyxIfMcUnZJF94WYg0ziOkOc50TQNHMehZlQRyLqui4a+74Ok+jrSeZ5TXdc0XJYl7Psu+4Qssm3boKoqMrRtGyRwqHnvo1kZZH4JmxFpcDI/UxQFrOsa2okh5HecH19nGAY6y+1IPKTgbel2RA0xfNsv/0Dwa83zHErdUwWzLIu5HbkJCOa3tiM34bouMljbEVN8whQ/A+4NnH6HdIESjBQAAAAASUVORK5CYII='); background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAATCAYAAACk9eypAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAANNJREFUOE+VkbENhDAMRcOtRElDRRsxB5MwAxNQ0yAGYAJqWiagASFfbMmRHXzcXfGk+Nvf+UocAPzDyxIfMcUnZJF94WYg0ziOkOc50TQNHMehZlQRyLqui4a+74Ok+jrSeZ5TXdc0XJYl7Psu+4Qssm3boKoqMrRtGyRwqHnvo1kZZH4JmxFpcDI/UxQFrOsa2okh5HecH19nGAY6y+1IPKTgbel2RA0xfNsv/0Dwa83zHErdUwWzLIu5HbkJCOa3tiM34bouMljbEVN8whQ/A+4NnH6HdIESjBQAAAAASUVORK5CYII=');
background-position: top left; background-position: top left;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.awaiting { .awaiting {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAADpJREFUOE9j+P//P0UYqyApGKsgKRhM/P79m+F/TTuEC8P+sf+/fv2KV27UgFEDhpsBlGCsgsTj/wwAFS7Z3zr+A08AAAAASUVORK5CYII='); background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAADpJREFUOE9j+P//P0UYqyApGKsgKRhM/P79m+F/TTuEC8P+sf+/fv2KV27UgFEDhpsBlGCsgsTj/wwAFS7Z3zr+A08AAAAASUVORK5CYII=');
background-position: top left; background-position: top left;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.start { .start {
border-width: 2px; border-width: 2px;
background-color: #eee; background-color: #eee;
} }
._jsPlumb_connector { ._jsPlumb_connector {
z-index: 4; z-index: 4;
} }
._jsPlumb_endpoint { ._jsPlumb_endpoint {
z-index: 21; z-index: 21;
cursor: pointer; cursor: pointer;
} }
.sourceEndpoint { .sourceEndpoint {
fill: red; fill: red;
} }
.sourceEndpointLabel, .targetEndpointLabel { .sourceEndpointLabel, .targetEndpointLabel {
z-index: 21; z-index: 21;
cursor: pointer; cursor: pointer;
} }
.active { .active {
border: 1px dotted green; border: 1px dotted green;
} }
.hover { .hover {
border: 1px dotted red; border: 1px dotted red;
} }
/* attempt to make the editor section to take the full height */ /* attempt to make the editor section to take the full height */
#layout-main, #main, #content { #layout-main, #main, #content {
height: 100%; height: 100%;
} }
.connection-label { .connection-label {
z-index: 10; z-index: 10;
padding: 0 0.5em; padding: 0 0.5em;
border: 1px solid #999; border: 1px solid #999;
-moz-border-radius: 2px; -moz-border-radius: 2px;
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
background-color: white; background-color: white;
-moz-opacity: 0.8; -moz-opacity: 0.8;
opacity: 0.8; opacity: 0.8;
filter: alpha(opacity=80); filter: alpha(opacity=80);
filter: alpha(opacity=80); filter: alpha(opacity=80);
} }
#workflow-container { #workflow-container {
} position: relative;
}
#editor-wrapper {
display: block; #editor-wrapper {
float: left; display: block;
width: 100%; float: left;
} width: 100%;
}
#workflow-footer {
clear: left; #workflow-footer {
} clear: left;
}
#activity-editor {
display: block; #activity-editor {
padding: 0; display: block;
margin: 0; padding: 0;
min-height: 600px; margin: 0;
overflow:auto; min-height: 600px;
margin-right: 302px; /* width + borders */ overflow:auto;
} margin-right: 302px; /* width + borders */
}
/* toolbox */
/* toolbox */
#activity-toolbox {
display: block; #activity-toolbox {
padding: 0; display: block;
margin: 0; padding: 0;
height: 600px; margin: 0;
overflow-y: scroll; height: 600px;
border: 1px solid #E4E5E6; overflow-y: scroll;
background-color: #F3F4F5; border: 1px solid #E4E5E6;
float:left; background-color: #F3F4F5;
float:left;
width: 300px;
margin-left: -302px; /* width + borders */ width: 300px;
} margin-left: -302px; /* width + borders */
}
#activity-toolbox .bulk-actions {
margin-top: 10px; #activity-toolbox .bulk-actions {
margin-bottom: 5px; margin-top: 10px;
margin-left: 5px; margin-bottom: 5px;
} margin-left: 5px;
}
#activity-toolbox .activity-toolbox-item {
display: block; #activity-toolbox .activity-toolbox-item {
margin: 5px 5px; display: block;
width: auto; margin: 5px 5px;
border: 1px solid #EAEAEA; width: auto;
background-color: white; border: 1px solid #EAEAEA;
} background-color: white;
}
#activity-toolbox .activity-toolbox-item > div {
display: block; #activity-toolbox .activity-toolbox-item > div {
padding: 0 5px 0 10px; display: block;
width: auto; padding: 0 5px 0 10px;
height: auto; width: auto;
} height: auto;
}
#activity-toolbox .activity-toolbox-item > div > h2 {
color: #333; #activity-toolbox .activity-toolbox-item > div > h2 {
font-size: 1.077em; color: #333;
} font-size: 1.077em;
}
#activity-toolbar {
position: absolute; #activity-toolbar {
z-index: 30; position: absolute;
left: -2000px; z-index: 30;
padding: 2px 0; left: -2000px;
min-width: 0; padding: 2px 0;
border: 1px solid #ccc; min-width: 0;
background-color: white; border: 1px solid #ccc;
} background-color: white;
}
#activity-toolbar > div {
width: 24px; #activity-toolbar > div {
height: 24px; width: 24px;
margin: 0; height: 24px;
padding: 0 2px; margin: 0;
float: left; padding: 0 2px;
border-right: 1px solid #ccc; float: left;
} border-right: 1px solid #ccc;
}
#activity-toolbar > div:last-child {
border-right: none; #activity-toolbar > div:last-child {
} border-right: none;
}
#activity-toolbar > div label {
display: inline-block; #activity-toolbar > div label {
width: 22px; display: inline-block;
height: 22px; width: 22px;
padding: 0; height: 22px;
margin: 0; padding: 0;
background-color: #eaeaea; margin: 0;
background-repeat: no-repeat; background-color: #eaeaea;
border: 1px solid #999; background-repeat: no-repeat;
-moz-border-radius: 2px; border: 1px solid #999;
-webkit-border-radius: 2px; -moz-border-radius: 2px;
border-radius: 2px; -webkit-border-radius: 2px;
} border-radius: 2px;
}
#activity-toolbar > div label:hover {
border-color: #333; #activity-toolbar > div label:hover {
} border-color: #333;
}
/* Start button */
#activity-toolbar #activity-toolbar-start-checkbox { /* hide the checkbox and rely on the label for two-state button */ /* Start button */
display: none; #activity-toolbar #activity-toolbar-start-checkbox { /* hide the checkbox and rely on the label for two-state button */
} display: none;
}
#activity-toolbar #activity-toolbar-start-checkbox + label {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAK1JREFUKFN1ULsNxSAQY6eUNKnSM0dGyERswARMkJqWASIoQMgP8gTigBQuwJ/zHQNAkFJi13XhPE+EECZ++ogxMiEE9n2Hc27iiaikeu+b4Xmed1pvbhW2bfs0VK5UZEop8jFW6gOllGgPrXWeuN7hvu8W2pOvYXWlHIKqmwwrEMNYaQVSaVx6FE9L9x+ccxhjsu4vttbiOA4S+BL1MoVYob9YG11Qu/agu4H9AENqkP+wqtOOAAAAAElFTkSuQmCC'); #activity-toolbar #activity-toolbar-start-checkbox + label {
background-position: center; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAANCAYAAACdKY9CAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAK1JREFUKFN1ULsNxSAQY6eUNKnSM0dGyERswARMkJqWASIoQMgP8gTigBQuwJ/zHQNAkFJi13XhPE+EECZ++ogxMiEE9n2Hc27iiaikeu+b4Xmed1pvbhW2bfs0VK5UZEop8jFW6gOllGgPrXWeuN7hvu8W2pOvYXWlHIKqmwwrEMNYaQVSaVx6FE9L9x+ccxhjsu4vttbiOA4S+BL1MoVYob9YG11Qu/agu4H9AENqkP+wqtOOAAAAAElFTkSuQmCC');
} background-position: center;
}
/* Edit button */
#activity-toolbar #activity-toolbar-edit > label { /* Edit button */
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJFJREFUKFOVkLENAyEMRdmJBajoaakpkCgpmYAZGIoxmOAaJPQjLPmSiCN3KV6D3rOMBYAtYwyRUkIIAb13elskhmUpJcHRVi6loNZ6BpOc87XMk+fUz2gJWPbeI8b4FS0rXcnM8umnMgX/yBRM2TkHrfWtTIG1FsdxoLV2RjuZAmMMlFIUzdv/kicU3K3xBuIFb6p0auW2YMcAAAAASUVORK5CYII='); #activity-toolbar #activity-toolbar-edit > label {
background-position: center; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAJFJREFUKFOVkLENAyEMRdmJBajoaakpkCgpmYAZGIoxmOAaJPQjLPmSiCN3KV6D3rOMBYAtYwyRUkIIAb13elskhmUpJcHRVi6loNZ6BpOc87XMk+fUz2gJWPbeI8b4FS0rXcnM8umnMgX/yBRM2TkHrfWtTIG1FsdxoLV2RjuZAmMMlFIUzdv/kicU3K3xBuIFb6p0auW2YMcAAAAASUVORK5CYII=');
} background-position: center;
}
/* Delete button */
#activity-toolbar #activity-toolbar-delete > label { /* Delete button */
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAGVJREFUKFOVkLENwCAMBL2TS3p2YwbvwwSuaRnjEywZBRJHSXEFr3sDJgCkqmBmlFLOIywbiIjltVbLqfeOnLOF14KLg5QSWmvrhAgfcLsyEhd5sBf2P4TiU+FVdOabf2/j255BB4ch671zW3IBAAAAAElFTkSuQmCC'); #activity-toolbar #activity-toolbar-delete > label {
background-position: center; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAJCAYAAADkZNYtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAGVJREFUKFOVkLENwCAMBL2TS3p2YwbvwwSuaRnjEywZBRJHSXEFr3sDJgCkqmBmlFLOIywbiIjltVbLqfeOnLOF14KLg5QSWmvrhAgfcLsyEhd5sBf2P4TiU+FVdOabf2/j255BB4ch671zW3IBAAAAAElFTkSuQmCC');
} background-position: center;
}
#activity-toolbar #activity-toolbar-start-checkbox:checked + label {
background-color: white; #activity-toolbar #activity-toolbar-start-checkbox:checked + label {
} background-color: white;
}
.toolbox-task {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASFJREFUSEvFlbEVhCAMQNnJ0sbK3jkcwQmcwQncwAmcwNqWCWz0+XLGEy/EAHo+74rPewRCSAKJAoAgXddBFEUWbdsuS/J+iijkNE1zMFDX9bIk76ccBHhYkiQwDMMyfcuqqjoYKMtyX5+mSWVZJnplTfhNUUFrDWmaWnIkjmPo+x54+LhnzsPvQD1Zh3meVVEU4uZvyPMcxnG0PTBxlBSuwPO3G0Ck53gFkxd65ikD/FY+b/lLWgdfgrd4WkqIL2/kQhCMu+/HhkKKhrwGeGg4oYfxfwPI7RDhRt9N6KehhD7nVjJspceeqcFV2K7gNBBK2Fm4t+vwk2J3tw5RaE/YDSCPNhwDKvA4nm2ZUp+2Ji6kYigdJiEKOVJ+fD/8A6gXPdsrCgSlf2sAAAAASUVORK5CYII='); .toolbox-task {
background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASFJREFUSEvFlbEVhCAMQNnJ0sbK3jkcwQmcwQncwAmcwNqWCWz0+XLGEy/EAHo+74rPewRCSAKJAoAgXddBFEUWbdsuS/J+iijkNE1zMFDX9bIk76ccBHhYkiQwDMMyfcuqqjoYKMtyX5+mSWVZJnplTfhNUUFrDWmaWnIkjmPo+x54+LhnzsPvQD1Zh3meVVEU4uZvyPMcxnG0PTBxlBSuwPO3G0Ck53gFkxd65ikD/FY+b/lLWgdfgrd4WkqIL2/kQhCMu+/HhkKKhrwGeGg4oYfxfwPI7RDhRt9N6KehhD7nVjJspceeqcFV2K7gNBBK2Fm4t+vwk2J3tw5RaE/YDSCPNhwDKvA4nm2ZUp+2Ji6kYigdJiEKOVJ+fD/8A6gXPdsrCgSlf2sAAAAASUVORK5CYII=');
background-position: 10px 10px; background-repeat: no-repeat;
} background-position: 10px 10px;
}
.toolbox-task div {
margin-left: 36px; .toolbox-task div {
} margin-left: 36px;
}
.toolbox-event {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAaCAYAAACHD21cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAQNJREFUOE+Vk7ERgzAMAL0TJQ0VPXMwAhMwAxOwARMwATUtE9DAcYrlRJxsSfaleF2wpdgPkgOAwPM8bhgGqKpKMI6jT/nmEe+P4zigbVu1cF1Xn2IUbtumFjVNA+d5+hSjcFkWtVC7JhJCzk+7JhLCfd+u6zpR1Pc9XNclipAQLL95nv22LEJC0PzquoZ93/22/GN8YVk/C7yJ6WdBn8f0syBv8/tpcO+//HgzRH789afu/DQkBI206dPWi5I53D09DYmSOdM0vYVa60UPROqXnUcO97MaXSwg3C87VinkVxwrDvcrjhWH/H7NLPYJsUB+udMQsYB+pdOQ6IGGunQaALgPuFaRbIPh6Z8AAAAASUVORK5CYII='); .toolbox-event {
background-repeat: no-repeat; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAaCAYAAACHD21cAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAQNJREFUOE+Vk7ERgzAMAL0TJQ0VPXMwAhMwAxOwARMwATUtE9DAcYrlRJxsSfaleF2wpdgPkgOAwPM8bhgGqKpKMI6jT/nmEe+P4zigbVu1cF1Xn2IUbtumFjVNA+d5+hSjcFkWtVC7JhJCzk+7JhLCfd+u6zpR1Pc9XNclipAQLL95nv22LEJC0PzquoZ93/22/GN8YVk/C7yJ6WdBn8f0syBv8/tpcO+//HgzRH789afu/DQkBI206dPWi5I53D09DYmSOdM0vYVa60UPROqXnUcO97MaXSwg3C87VinkVxwrDvcrjhWH/H7NLPYJsUB+udMQsYB+pdOQ6IGGunQaALgPuFaRbIPh6Z8AAAAASUVORK5CYII=');
background-position: 10px 10px; background-repeat: no-repeat;
} background-position: 10px 10px;
}
.toolbox-event div {
margin-left: 36px; .toolbox-event div {
} margin-left: 36px;
}
/* RTL */
.dir-rtl #editor-wrapper { /* RTL */
float: right; .dir-rtl #editor-wrapper {
} float: right;
}
.dir-rtl #workflow-footer {
clear: right; .dir-rtl #workflow-footer {
} clear: right;
}
.dir-rtl #activity-editor {
margin-right: inherit; .dir-rtl #activity-editor {
margin-left: 302px; margin-right: inherit;
} margin-left: 302px;
}
/* RTL toolbox */
/* RTL toolbox */
.dir-rtl #activity-toolbox {
float:right; .dir-rtl #activity-toolbox {
float:right;
margin-left: inherit; /* width + borders */
margin-right: -302px; /* width + borders */ margin-left: inherit; /* width + borders */
} margin-right: -302px; /* width + borders */
}
.dir-rtl #activity-toolbox .activity-toolbox-item > div {
padding: 0 10px 0 5px; .dir-rtl #activity-toolbox .activity-toolbox-item > div {
} padding: 0 10px 0 5px;
}
.dir-rtl #activity-toolbar > div {
float: right; .dir-rtl #activity-toolbar > div {
} float: right;
}
.dir-rtl #activity-toolbar > div:last-child {
border-right: inherit; .dir-rtl #activity-toolbar > div:last-child {
border-left: none; border-right: inherit;
} border-left: none;
}
.dir-rtl .toolbox-task div {
margin-left: inherit; .dir-rtl .toolbox-task div {
margin-right: 36px; margin-left: inherit;
} margin-right: 36px;
}
.dir-rtl .toolbox-event div {
margin-left: inherit; .dir-rtl .toolbox-event div {
margin-right: 36px; margin-left: inherit;
margin-right: 36px;
} }