Refactoring
This commit is contained in:
1 parent
e660e5f84e
commit
ffc6778007
15 files changed
+70
-70
No files matched your search
@@ -602,7 +602,7 @@ function newTimeMachine() {
|
||||
}
|
||||
} else {
|
||||
if (canvas.chartingSpace.viewport.zoomTargetLevel < ZOOM_OUT_THRESHOLD_FOR_DISPLAYING_TIME_MACHINES_ICONIZED) {
|
||||
let icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
let icon = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
if (icon !== undefined) {
|
||||
if (icon.canDrawIcon === true) {
|
||||
let imageSize = 40
|
||||
@@ -655,7 +655,7 @@ function newTimeMachine() {
|
||||
let imageSize = 12
|
||||
let fontSize = 12
|
||||
let opacity = 1
|
||||
let icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
let icon = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
|
||||
position = transformThisPoint(position, thisObject.container)
|
||||
|
||||
|
||||
@@ -242,19 +242,19 @@ function newCircularMenuItem() {
|
||||
temporaryStatus === STATUS_SECONDARY_WORK_FAILED
|
||||
) && thisObject.secondaryAction !== undefined
|
||||
) {
|
||||
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.secondaryIcon)
|
||||
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.secondaryIcon)
|
||||
thisObject.iconOn = canvas.designSpace.iconsByName.get(thisObject.secondaryIcon)
|
||||
thisObject.iconOff = canvas.designSpace.iconsByName.get(thisObject.secondaryIcon)
|
||||
} else {
|
||||
if (thisObject.relatedUiObject !== undefined) {
|
||||
thisObject.iconOn = canvas.designSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
|
||||
thisObject.iconOff = canvas.designSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
|
||||
thisObject.iconOn = canvas.designSpace.iconsByProjectType.get(thisObject.relatedUiObject)
|
||||
thisObject.iconOff = canvas.designSpace.iconsByProjectType.get(thisObject.relatedUiObject)
|
||||
} else {
|
||||
if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined) {
|
||||
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.iconPathOn)
|
||||
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.iconPathOff)
|
||||
thisObject.iconOn = canvas.designSpace.iconsByName.get(thisObject.iconPathOn)
|
||||
thisObject.iconOff = canvas.designSpace.iconsByName.get(thisObject.iconPathOff)
|
||||
} else {
|
||||
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
|
||||
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
|
||||
thisObject.iconOn = canvas.designSpace.iconsByName.get(thisObject.icons[thisObject.actionStatus()])
|
||||
thisObject.iconOff = canvas.designSpace.iconsByName.get(thisObject.icons[thisObject.actionStatus()])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,14 +67,14 @@ function newConditionEditor() {
|
||||
}
|
||||
|
||||
function initialize() {
|
||||
timeFrameIcon = canvas.designSpace.iconCollection.get('time-period')
|
||||
dataMineIcon = canvas.designSpace.iconCollection.get('data-mine')
|
||||
botIcon = canvas.designSpace.iconCollection.get('bot-indicator')
|
||||
whenIcon = canvas.designSpace.iconCollection.get('chronometer')
|
||||
productIcon = canvas.designSpace.iconCollection.get('product-definition')
|
||||
propertyIcon = canvas.designSpace.iconCollection.get('record-property')
|
||||
operationIcon = canvas.designSpace.iconCollection.get('headphones')
|
||||
valueIcon = canvas.designSpace.iconCollection.get('competition')
|
||||
timeFrameIcon = canvas.designSpace.iconsByName.get('time-period')
|
||||
dataMineIcon = canvas.designSpace.iconsByName.get('data-mine')
|
||||
botIcon = canvas.designSpace.iconsByName.get('bot-indicator')
|
||||
whenIcon = canvas.designSpace.iconsByName.get('chronometer')
|
||||
productIcon = canvas.designSpace.iconsByName.get('product-definition')
|
||||
propertyIcon = canvas.designSpace.iconsByName.get('record-property')
|
||||
operationIcon = canvas.designSpace.iconsByName.get('headphones')
|
||||
valueIcon = canvas.designSpace.iconsByName.get('competition')
|
||||
}
|
||||
|
||||
function activate(payload) {
|
||||
|
||||
@@ -1112,7 +1112,7 @@ function newUiObject() {
|
||||
}
|
||||
|
||||
function iconPhysics() {
|
||||
icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
icon = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
let nodeDefinition = getNodeDefinition(thisObject.payload.node)
|
||||
if (nodeDefinition.alternativeIcons !== undefined) {
|
||||
let nodeToUse = thisObject.payload.node
|
||||
@@ -1142,7 +1142,7 @@ function newUiObject() {
|
||||
iconName = alternativeIcon.iconName
|
||||
}
|
||||
}
|
||||
let newIcon = canvas.designSpace.iconCollection.get(iconName)
|
||||
let newIcon = canvas.designSpace.iconsByName.get(iconName)
|
||||
if (newIcon !== undefined) {
|
||||
icon = newIcon
|
||||
}
|
||||
@@ -1151,7 +1151,7 @@ function newUiObject() {
|
||||
}
|
||||
}
|
||||
|
||||
executingIcon = canvas.designSpace.iconCollection.get('attractive')
|
||||
executingIcon = canvas.designSpace.iconsByName.get('attractive')
|
||||
}
|
||||
|
||||
function onFocus() {
|
||||
|
||||
+3
-3
@@ -287,7 +287,7 @@ function newLayer() {
|
||||
thisObject.exchangeIcon = getIcon(thisObject.exchange)
|
||||
|
||||
if (thisObject.plotterModule.config.icon !== undefined) {
|
||||
thisObject.plotterTypeIcon = canvas.designSpace.iconCollection.get(thisObject.plotterModule.config.icon)
|
||||
thisObject.plotterTypeIcon = canvas.designSpace.iconsByName.get(thisObject.plotterModule.config.icon)
|
||||
}
|
||||
|
||||
thisObject.baseAssetIcon = getIcon(thisObject.baseAsset)
|
||||
@@ -306,9 +306,9 @@ function newLayer() {
|
||||
}
|
||||
}
|
||||
if (iconName !== undefined) {
|
||||
icon = canvas.designSpace.iconCollection.get(iconName)
|
||||
icon = canvas.designSpace.iconsByName.get(iconName)
|
||||
} else {
|
||||
icon = canvas.designSpace.iconCollection.get(nodeDefinition.icon)
|
||||
icon = canvas.designSpace.iconsByName.get(nodeDefinition.icon)
|
||||
}
|
||||
return icon
|
||||
}
|
||||
|
||||
@@ -450,8 +450,8 @@ function newLayersPanel() {
|
||||
let label2 = thisObject.payload.node.payload.parentNode.name.substring(0, 18)
|
||||
let label3 = ''
|
||||
|
||||
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon1 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.payload.parentNode.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
|
||||
let backgroundColor = UI_COLOR.BLACK
|
||||
|
||||
|
||||
@@ -74,9 +74,9 @@ function newPanelsVisibleButton() {
|
||||
function draw() {
|
||||
let icon
|
||||
if (thisObject.showPanels === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('plotter-panel')
|
||||
icon = canvas.designSpace.iconsByName.get('plotter-panel')
|
||||
} else {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-panel-off')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-panel-off')
|
||||
}
|
||||
|
||||
drawIcon(icon, 1 / 2, 1 / 2, 0, 0, 14, thisObject.container)
|
||||
|
||||
+1
-1
@@ -817,7 +817,7 @@ function newPlotter() {
|
||||
|
||||
imagePosition.x = dataPoint.x
|
||||
imagePosition.y = dataPoint.y
|
||||
let imageToDraw = canvas.designSpace.iconCollection.get(imageName)
|
||||
let imageToDraw = canvas.designSpace.iconsByName.get(imageName)
|
||||
if (imageToDraw !== undefined) {
|
||||
if (imageToDraw.canDrawIcon === true) {
|
||||
browserCanvasContext.drawImage(imageToDraw, imagePosition.x - imageSize / 2 + offsetX, imagePosition.y - imageSize / 2 - offsetY, imageSize, imageSize)
|
||||
|
||||
@@ -170,32 +170,32 @@ function newAutoScaleButton() {
|
||||
switch (axis) {
|
||||
case 'X': {
|
||||
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-manual')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-time-scale-manual')
|
||||
}
|
||||
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-min')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-time-scale-auto-min')
|
||||
}
|
||||
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-max')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-time-scale-auto-max')
|
||||
}
|
||||
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-min-max')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-time-scale-auto-min-max')
|
||||
}
|
||||
drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container)
|
||||
break
|
||||
}
|
||||
case 'Y': {
|
||||
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-manual')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-scale-manual')
|
||||
}
|
||||
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-min')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-scale-auto-min')
|
||||
}
|
||||
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-max')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-scale-auto-max')
|
||||
}
|
||||
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-min-max')
|
||||
icon = canvas.designSpace.iconsByName.get('toggle-auto-scale-auto-min-max')
|
||||
}
|
||||
drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container)
|
||||
break
|
||||
|
||||
+2
-2
@@ -532,8 +532,8 @@ function newRateScale() {
|
||||
if (thisObject.payload === undefined) { return }
|
||||
if (thisObject.payload.node === undefined) { return }
|
||||
|
||||
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
let icon1 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
|
||||
let backgroundColor = UI_COLOR.BLACK
|
||||
let labels = scaleLabels(thisObject.rate)
|
||||
|
||||
@@ -383,8 +383,8 @@ function newTimeFrameScale() {
|
||||
let label2 = label[0]
|
||||
let label3 = label[1].toUpperCase()
|
||||
|
||||
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
let icon1 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
|
||||
let backgroundColor = UI_COLOR.BLACK
|
||||
|
||||
|
||||
+2
-2
@@ -338,8 +338,8 @@ function newTimeScale() {
|
||||
function drawScaleBox() {
|
||||
if (thisObject.date === undefined) { return }
|
||||
|
||||
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
|
||||
let icon1 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.payload.parentNode.type)
|
||||
let icon2 = canvas.designSpace.iconsByProjectType.get(thisObject.payload.node.type)
|
||||
|
||||
let backgroundColor = UI_COLOR.BLACK
|
||||
let labels = scaleLabels(thisObject.date)
|
||||
|
||||
@@ -75,7 +75,7 @@ function newListItem() {
|
||||
}
|
||||
|
||||
function draw() {
|
||||
let icon = canvas.designSpace.iconByUiObjectType.get(type)
|
||||
let icon = canvas.designSpace.iconsByProjectType.get(type)
|
||||
let backgroundColor = UI_COLOR.BLACK
|
||||
let labelColor
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ function newDesignSpace() {
|
||||
const MODULE_NAME = 'Designe Space'
|
||||
let thisObject = {
|
||||
container: undefined,
|
||||
iconCollection: undefined,
|
||||
iconByUiObjectType: undefined,
|
||||
iconsByName: undefined,
|
||||
iconsByProjectType: undefined,
|
||||
workspace: undefined,
|
||||
physics: physics,
|
||||
draw: draw,
|
||||
@@ -20,8 +20,8 @@ function newDesignSpace() {
|
||||
|
||||
container.isDraggeable = false
|
||||
|
||||
thisObject.iconCollection = new Map()
|
||||
thisObject.iconByUiObjectType = new Map()
|
||||
thisObject.iconsByName = new Map()
|
||||
thisObject.iconsByProjectType = new Map()
|
||||
|
||||
return thisObject
|
||||
|
||||
@@ -43,9 +43,9 @@ function newDesignSpace() {
|
||||
iconName = nodeDefinition.type.toLowerCase()
|
||||
iconName = iconName.split(" ").join("-")
|
||||
}
|
||||
let icon = thisObject.iconCollection.get(iconName)
|
||||
let icon = thisObject.iconsByName.get(iconName)
|
||||
if (icon !== undefined) {
|
||||
thisObject.iconByUiObjectType.set(nodeDefinition.type, icon)
|
||||
thisObject.iconsByProjectType.set(nodeDefinition.type, icon)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -81,7 +81,7 @@ function newDesignSpace() {
|
||||
}
|
||||
image.src = PATH + name
|
||||
let key = name.substring(0, name.length - 4)
|
||||
thisObject.iconCollection.set(key, image)
|
||||
thisObject.iconsByName.set(key, image)
|
||||
|
||||
if (imageLoadedCounter === imageNames.length) {
|
||||
callBack()
|
||||
|
||||
+19
-19
@@ -20,12 +20,12 @@ function newVideoRecorder() {
|
||||
const DISTANCE_BETWEEN_ICONS = 35
|
||||
const ICON_SIZES = 50
|
||||
|
||||
let mousePointerIcon = canvas.designSpace.iconCollection.get('mouse-pointer')
|
||||
let draggingIcon = canvas.designSpace.iconCollection.get('hand-drag')
|
||||
let mousePointerIcon = canvas.designSpace.iconsByName.get('mouse-pointer')
|
||||
let draggingIcon = canvas.designSpace.iconsByName.get('hand-drag')
|
||||
|
||||
let leftClickIcon = canvas.designSpace.iconCollection.get('mouse-left-click')
|
||||
let rightClickIcon = canvas.designSpace.iconCollection.get('mouse-right-click')
|
||||
let wheelClickIcon = canvas.designSpace.iconCollection.get('mouse-wheel-click')
|
||||
let leftClickIcon = canvas.designSpace.iconsByName.get('mouse-left-click')
|
||||
let rightClickIcon = canvas.designSpace.iconsByName.get('mouse-right-click')
|
||||
let wheelClickIcon = canvas.designSpace.iconsByName.get('mouse-wheel-click')
|
||||
|
||||
let imagePosition
|
||||
let buttonPressedIcon
|
||||
@@ -45,10 +45,10 @@ function newVideoRecorder() {
|
||||
case 'wheel': {
|
||||
wheelAnimationCounter = 25
|
||||
if (canvas.mouse.event.delta > 0) {
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('mouse-wheel-up')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('mouse-wheel-up')
|
||||
lastWheelPointerIcon = pointerIcon
|
||||
} else {
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('mouse-wheel-down')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('mouse-wheel-down')
|
||||
lastWheelPointerIcon = pointerIcon
|
||||
}
|
||||
|
||||
@@ -65,27 +65,27 @@ function newVideoRecorder() {
|
||||
switch (key.toLowerCase()) {
|
||||
case 'escape':
|
||||
{
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('key-m')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('key-m')
|
||||
break
|
||||
}
|
||||
case 'm':
|
||||
{
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('key-m')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('key-m')
|
||||
break
|
||||
}
|
||||
case 'a':
|
||||
{
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('key-a')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('key-a')
|
||||
break
|
||||
}
|
||||
case 'r':
|
||||
{
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('key-r')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('key-r')
|
||||
break
|
||||
}
|
||||
case 'c':
|
||||
{
|
||||
pointerIcon = canvas.designSpace.iconCollection.get('key-r')
|
||||
pointerIcon = canvas.designSpace.iconsByName.get('key-r')
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -139,7 +139,7 @@ function newVideoRecorder() {
|
||||
drawMousePointer(buttonPressedIcon, imagePosition, ICON_SIZES)
|
||||
|
||||
if (canvas.mouse.event.shiftKey === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('key-shift')
|
||||
icon = canvas.designSpace.iconsByName.get('key-shift')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 3,
|
||||
y: canvas.mouse.position.y + firstRow
|
||||
@@ -148,7 +148,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.ctrlKey === true || canvas.mouse.event.metaKey === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('key-ctrl')
|
||||
icon = canvas.designSpace.iconsByName.get('key-ctrl')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 3,
|
||||
y: canvas.mouse.position.y + secondRow
|
||||
@@ -157,7 +157,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.altKey === true) {
|
||||
icon = canvas.designSpace.iconCollection.get('key-alt')
|
||||
icon = canvas.designSpace.iconsByName.get('key-alt')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x + DISTANCE_BETWEEN_ICONS * 3 + ICON_SIZES * 0,
|
||||
y: canvas.mouse.position.y + secondRow
|
||||
@@ -166,7 +166,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.code === 'ArrowUp') {
|
||||
icon = canvas.designSpace.iconCollection.get('key-up')
|
||||
icon = canvas.designSpace.iconsByName.get('key-up')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x - 0,
|
||||
y: canvas.mouse.position.y + firstRow
|
||||
@@ -175,7 +175,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.code === 'ArrowDown') {
|
||||
icon = canvas.designSpace.iconCollection.get('key-down')
|
||||
icon = canvas.designSpace.iconsByName.get('key-down')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x - 0,
|
||||
y: canvas.mouse.position.y + secondRow
|
||||
@@ -184,7 +184,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.code === 'ArrowLeft') {
|
||||
icon = canvas.designSpace.iconCollection.get('key-left')
|
||||
icon = canvas.designSpace.iconsByName.get('key-left')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x - DISTANCE_BETWEEN_ICONS * 0 - ICON_SIZES * 1,
|
||||
y: canvas.mouse.position.y + secondRow
|
||||
@@ -193,7 +193,7 @@ function newVideoRecorder() {
|
||||
}
|
||||
|
||||
if (canvas.mouse.event.code === 'ArrowRight') {
|
||||
icon = canvas.designSpace.iconCollection.get('key-right')
|
||||
icon = canvas.designSpace.iconsByName.get('key-right')
|
||||
imagePosition = {
|
||||
x: canvas.mouse.position.x + DISTANCE_BETWEEN_ICONS * 0 + ICON_SIZES * 1,
|
||||
y: canvas.mouse.position.y + secondRow
|
||||
|
||||
Reference in new issue
Block a user