Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No "open in new tab" option after right clicking an identifier #30

Open
seagreen opened this issue Mar 24, 2019 · 4 comments
Open

No "open in new tab" option after right clicking an identifier #30

seagreen opened this issue Mar 24, 2019 · 4 comments

Comments

@seagreen
Copy link
Contributor

Right click followed by "open in new tab" works for me for the files in the sidebar, but not for identifiers. Instead I see:
screenshot

@seagreen
Copy link
Contributor Author

The top of "distDir" is cut off due to an Ubuntu screenshotting issue, not the fault of haskell-code-explorer.

@alexwl
Copy link
Owner

alexwl commented Mar 26, 2019

There is no "Open Link in New Tab" in the context menu because each identifier (e.g., distDir) is a span HTML element, not an anchor.

A click on an identifier is handled by JavaScript:

function goToDefinition(store,locationInfo,buttonId,currentLineNumber) {
if(locationInfo.tag === "ExactLocation") {
const url = exactLocationToUrl(locationInfo);
if(locationInfo.startLine !== currentLineNumber) {
saveCurrentLocation(currentLineNumber);
}
openUrl(buttonId,url);
} else if((locationInfo.tag === "ApproximateLocation") &&
(locationInfo.moduleName.indexOf("Paths_") !== 0)) {
const packageId = locationInfo.packageId.name+"-"+locationInfo.packageId.version;
if(locationInfo.entity === "Mod") {
store.loadDefinitionSite(packageId,
locationInfo.moduleName,
locationInfo.componentId,
locationInfo.entity,
locationInfo.moduleName)
.then((defSite) => {
const packageId = defSite.location.packageId.name + "-" + defSite.location.packageId.version;
openUrl(buttonId,"/package/" + packageId + "/show/" + defSite.location.modulePath);
}).catch(() => {
openUrl(buttonId,hackageUrl(packageId,locationInfo));
});
} else {
store.loadDefinitionSite(packageId,
locationInfo.moduleName,
locationInfo.componentId,
locationInfo.entity,
locationInfo.name)
.then((definitionSite) => {
if(definitionSite.location.tag === "ExactLocation") {
const url = exactLocationToUrl(definitionSite.location);
if(locationInfo.startLine !== currentLineNumber) {
saveCurrentLocation(currentLineNumber);
}
openUrl(buttonId,url);
} else {
saveCurrentLocation(currentLineNumber);
openUrl(buttonId,hackageUrl(packageId,locationInfo));
}
}).catch((e) => {
console.log(e);
saveCurrentLocation(currentLineNumber);
openUrl(buttonId,hackageUrl(packageId,locationInfo));
});
}
} else {
alert('No location info');
}
}

  • Left mouse click on an identifier updates the current browser tab.
  • Middle mouse click on an identifier opens a new browser tab (that tab may be blocked by a popup blocker).
  • There is no handler for the "right mouse click" event.

@seagreen
Copy link
Contributor Author

There is no "Open Link in New Tab" in the context menu because each identifier (e.g., distDir) is a span HTML element, not an anchor.

Is there a technical reason this has to be the case, or is it arbitrary? If the former it might still be nice to switch them to anchors at some point, because not everyone will know that they can middle click to get a new tab. Not a big deal though.

@alexwl
Copy link
Owner

alexwl commented Mar 31, 2019

not everyone will know that they can middle click to get a new tab

I agree. Middle mouse click on an identifier is a rather obscure feature. I'll think about adding a JavaScript context menu (which opens with a right click on an identifier) with an "Open in new tab" button.

Is there a technical reason this has to be the case, or is it arbitrary?

It is mostly for convenience. Each token (clickable and non-clickable) in the source code is just a span.

There is no technical reason why Haskell identifiers can't be anchors.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants