kwin/data/stripTitle.js

104 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// ==============================================================
// Ok, *some* apps have really long and nasty window captions
// this looks clutterd, so we allow to crop them a bit and remove
// any information considered to be useless
// ==============================================================
function isBrowser(appName) {
if (appName.toLowerCase() == "konqueror")
return true;
if (appName.toLowerCase() == "rekonq")
return true;
if (appName.toLowerCase() == "qupzilla")
return true;
if (appName.toLowerCase() == "chromium")
return true;
if (appName.toLowerCase() == "firefox")
return true;
if (appName.toLowerCase() == "opera")
return true;
if (appName.toLowerCase() == "arora")
return true;
if (appName.toLowerCase() == "mozilla")
return true;
return false;
}
(function(title, wm_name, wm_class) {
var ret;
// == 1st off ======================================================================
// we assume the part beyond the last dash (if any) to be the
// uninteresting one (usually it's the apps name, if there's add info, that's
// more important to the user)
// --------------------------------------------------------------------------------
var lastPos = title.lastIndexOf(" "); // U+2013 "EN DASH"
if (lastPos > -1)
ret = title.slice(0, lastPos);
else {
lastPos = title.lastIndexOf(" - "); // ASCII Dash
if (lastPos > -1)
ret = title.slice(0, lastPos);
else {
lastPos = title.lastIndexOf(" — "); // U+2014 "EM DASH"
if (lastPos > -1)
ret = title.slice(0, lastPos);
else
ret = title;
}
}
// == 2nd =========================================================================
// Browsers set the caption to "<html><title/></html> - appname"
// Now the page titles can be ridiculously looooong, especially on news pages
// -------------------------------------------------------------------------------
if (isBrowser(wm_name)) {
var parts = ret.split(" - ");
ret = "";
if (parts.length > 2) { // select last two if 3 or more sects, prelast otherwise
for (i = Math.max(0,parts.length-2); i < parts.length - 1; ++i)
ret = ret + parts[i] + " - ";
ret = ret + parts[parts.length - 1];
} else {
ret = ret + parts[Math.max(0,parts.length-2)];
}
}
// 3rd ============================================================================
// if there're any details left, cut of stuff by ": ",
// we remove them as well
// --------------------------------------------------------------------------------
var lastPos = ret.lastIndexOf(": ");
if (lastPos > -1)
ret = title.slice(0, lastPos);
// 4th ============================================================================
// if this is a http url, please get rid of protocol, assuming the user knows or doesn't care
// --------------------------------------------------------------------------------
ret = ret.replace("http://", '');
// finally =========================================================================
// if the remaining string still contains the app name (which should have been removed),
// please shape away additional info like compile time, version numbers etc.
// we usitlize the caption string to preserve CapiTaliZation
// -----------------------------------------------------------------------------------
lastPos = ret.indexOf(RegExp("\\b" + wm_name + "\\b"));
if (lastPos > -1)
ret = ret.substr(lastPos, wm_name.length);
else {
lastPos = ret.indexOf(RegExp("\\b" + wm_class + "\\b"));
if (lastPos > -1)
ret = ret.substr(lastPos, wm_class.length);
}
if (ret.length == 0)
ret = title; // something _terribly_ went wrong -> fall back to the original string
// but in any case get replace the stupid [modified] hint by just an asterisk
ret = ret.replace("[modified]", "❖");
// in general, remove leading [and trailing] blanks and special chars
// ret = ret.replace(/^\W*/, ''); - this does not work - Umlauts and pot. other chars are considered "non Word"
ret = ret.replace(/^\s*/, '').replace(/\s*$/, '');
return ret;
})