*/
function rightClickHandler(ev, term) {
var s = document.getSelection(),
- sText = prepareTextForClipboard(s.toString()),
+ selectedText = prepareTextForClipboard(s.toString()),
clickIsOnSelection = false;
if (s.rangeCount) {
(x > rect.left) && (x < rect.right) &&
(y > rect.top) && (y < rect.bottom)
);
- // If we clicked on selection and selection is not a single space,
- // then mark the right click as copy-only. We check for the single
- // space selection, as this can happen when clicking on an
- // and there is not much pointing in copying a single space.
- if (clickIsOnSelection && (sText !== ' ')) {
+
+ if (clickIsOnSelection) {
break;
}
}
+ // If we clicked on selection and selection is not a single space,
+ // then mark the right click as copy-only. We check for the single
+ // space selection, as this can happen when clicking on an
+ // and there is not much pointing in copying a single space.
+ if (selectedText.match(/^\s$/) || !selectedText.length) {
+ clickIsOnSelection = false;
+ }
}
// Bring textarea at the cursor position
if (!clickIsOnSelection) {
term.textarea.style.position = 'fixed';
- term.textarea.style.width = '10px';
- term.textarea.style.height = '10px';
- term.textarea.style.left = x + 'px';
- term.textarea.style.top = y + 'px';
+ term.textarea.style.width = '20px';
+ term.textarea.style.height = '20px';
+ term.textarea.style.left = (x - 10) + 'px';
+ term.textarea.style.top = (y - 10) + 'px';
term.textarea.style.zIndex = 1000;
term.textarea.focus();
term.textarea.style.left = null;
term.textarea.style.top = null;
term.textarea.style.zIndex = null;
- }, 1);
+ }, 4);
}
}
--- /dev/null
+/**
+ * xterm.js: xterm, in the browser
+ * Copyright (c) 2016, SourceLair Private Company <www.sourcelair.com> (MIT License)
+ */
+
+/**
+ * Browser utilities module. This module contains attributes and methods to help with
+ * identifying the current browser and platform.
+ * @module xterm/utils/Browser
+ */
+
+
+let userAgent = navigator.userAgent;
+let platform = navigator.platform;
+
+export let isFirefox = !!~userAgent.indexOf('Firefox');
+export let isMSIE = !!~userAgent.indexOf('MSIE');
import { EventEmitter } from './EventEmitter.js';
import { Viewport } from './Viewport.js';
import { rightClickHandler, pasteHandler, copyHandler } from './handlers/Clipboard.js';
+import { isFirefox, isMSIE } from './utils/Browser';
/**
* Terminal Emulation References:
on(this.textarea, 'paste', function (ev) {
pasteHandler.call(this, ev, term);
});
- on(this.element, 'contextmenu', function (ev) {
+
+
+ function rightClickHandlerWrapper (ev) {
rightClickHandler.call(this, ev, term);
- });
+ }
+
+ if (isFirefox || isMSIE) {
+ on(this.element, 'mousedown', function (ev) {
+ if (ev.button == 2) {
+ rightClickHandlerWrapper(ev);
+ }
+ });
+ } else {
+ on(this.element, 'contextmenu', rightClickHandlerWrapper);
+ }
};
/**
this.document = this.parent.ownerDocument;
this.body = this.document.getElementsByTagName('body')[0];
- // Parse User-Agent
- if (this.context.navigator && this.context.navigator.userAgent) {
- this.isMSIE = !!~this.context.navigator.userAgent.indexOf('MSIE');
- }
-
// Find the users platform. We use this to interpret the meta key
// and ISO third level shifts.
// http://stackoverflow.com/q/19877924/577598
? ev.which - 1
: null;
- if (self.isMSIE) {
+ if (isMSIE) {
button = button === 1 ? 0 : button === 4 ? 1 : button;
}
break;