Fourmilab home page

Monkeying with
the Mainstream Media

by John Walker


Media Trigger Words

Bias in the legacy “mainstream” media manifests itself in many forms: injecting opinion into stories which purport to be objective reporting, choosing not to report stories which don't advance their agenda or burying them in obscure locations, creating the impression that support for the favoured side of issues on which the populace is about equally divided is the consensus view and opponents a marginal fringe, and more. One of the most insidious forms of bias is the use of what I have come to call media trigger words.

Trigger words are terms with well-defined meanings which have been endowed with additional power, often emotional in nature, by use and repetition in the legacy media and government schools, employed to evoke a visceral response and short-cut rational thought in the reader. Consider, for example, “controversial”. By itself, the word is entirely devoid of political tilt in any direction: it simply denotes something about which people disagree with some degree of ferocity. But look at how it's used: legacy media outlets consistently label issues they oppose as “controversial”, while those they endorse, equally disputed amongst the public, appear without an adjective. The bias is never explicit, but deliciously subtle and effective: the “controversial” issue is, inarguably, controversial, while the unlabeled one appears, by contrast, to be the consensus view of all right-thinking people.

Another frequently-encountered example of trigger words is the selective labeling of the political views of opponents, while allies never seem to merit an adjective. In the collectivist legacy media, for example, those who differ from their views are invariably labeled “right-wing”, “conservative”, and the like, while those who agree with their agenda and are just as far from the political centre will rarely if ever see their names preceded by “left-wing” or “liberal”. The opposite would be the case in right-leaning media, although among the legacy media the overwhelming tilt is toward the left, so you don't see it as frequently, although it is on display in conservative new media outlets.

Here is a collection of trigger words I've encountered in a wide variety of collectivist legacy media. The “Love” and “Hate” designations are those the publisher wishes to trigger in the audience; in media biased the other way, the labels may be reversed.

Love Hate
Collaborative Arrogant
Collective Christian
Community Competitive
Commons Conservative
Consensus/Consensual Controversial
Cooperative Corporate/Corporation
Creative Decency
Democratic Divisive
Dissent Elite
Diverse/Diversity Enterprise
Environmental Evangelical
Equitable Extremist
Expert Faith
Foundation Fundamentalist
Free Individual
Green Market
Independent Moral
Innovative Nuclear
Mainstream/Mainline Partisan
Maverick Private
Open Property
Organic Reactionary
Participatory Religious
People's Responsible
Popular Right-wing
Pragmatic Traditional

There are few clichés as tired as “one man's freedom fighter is another man's terrorist”, but tedious repetition doesn't make it any less true, especially in the labels the legacy media apply to those who indiscriminately slaughter noncombatants. Killers on behalf of causes to which the media are sympathetic tend to be labeled toward the top of this scale, while those who murder innocents to advance policies the media oppose receive tags toward the bottom.

The Spectrum of Killers
Freedom fighter

Suggestions for additions or changes to these lists are more than welcome. Please use the “Feedback” button at the bottom of this page to submit them.

Monkeying with the Media

Wouldn't it be great if your Web browser could automatically point out the trigger words in documents you read, and even translate politically correct gobbledegook into plain talk? Well, if you use the Firefox browser, now it can! By installing the Greasemonkey extension, Firefox can process pages you view with user scripts which examine and modify the content of pages you view, either from all sites or specific sites you designate. Two Greasemonkey user scripts, which can be installed directly from this page, allow you to highlight trigger words and deflate euphemisms and politically correct bafflegab all across the Web.

Installing Greasemonkey

Before you can use these user scripts in the Firefox browser, you must first install the Greasemonkey add-on package. If you're unsure whether this add-on is already installed, pull down the “Tools” menu and see whether there's a “Greasemonkey” item within it—if not, you'll have to use the following link to install Greasemonkey into your browser.

Install Greasemonkey

Installing Greasemonkey by itself does not change the behaviour or your browser in any way. It simply gives you the ability to install one or more “user scripts” (identified by a file name ending in “.user.js”) which are run to preprocess Web pages loaded by the browser.

If you suspect Greasemonkey or one of your user scripts of causing problems in viewing a page, use the “Tools/Greasemonkey” menu to disable Greasemonkey entirely, then reload the page. If the problem goes away, you can then track down which user script (if you've installed more than one) is the culprit by re-enabling Greasemonkey, then using the “Tools/Greasemonkey/Manage User Scripts” menu item to display the configuration dialogue, then disable your installed scripts one by one to determine which is causing the problem. Remember to reload the page after each script is disabled, as scripts are only run when a page is loaded.

Installing the User Scripts

There are two completely independent Greasemonkey scripts available from this page. They perform entirely different functions, come preconfigured with different default word lists, and can be installed separately or together.

If you're installing the scripts on a browser other than Firefox or wish to download and examine them before installing, right click (or whatever the convention is on your computer) the installation links below and save to a local file.


The first script, MediaTriggerWords, highlights a set of trigger words defined within the script. “Love” words are highlighted in blue, “hate” words in pink, and “spectrum of killers” words in yellow. The actual text of the page is not modified at all: only the background colour of the trigger words it contains.

To install MediaTriggerWords, click the link below. If Greasemonkey is installed and enabled, a Greasemonkey Installation dialogue will open automatically. Click the “Install” button and the user script will be installed. You may then load or refresh various pages to see how they appear with the MediaTriggerWords script active. If the installation dialogue does not appear when you click the installation link, Greasemonkey is either not installed in your browser or disabled.

Install MediaTriggerWords


The second script, OldSpeak, translates a set of words to alternative text. This allows you to translate “newspeak” terms to their plain-spoken equivalent.

To install OldSpeak, click the link below. If Greasemonkey is installed and enabled, a Greasemonkey Installation dialogue will open automatically. Click the “Install” button and the user script will be installed. You may then load or refresh various pages to see how they appear with the OldSpeak script active.

Install OldSpeak

As supplied, OldSpeak is configured to mock appeals to authority by performing the following translations:

Analysis: Propaganda:
analyst(s) moron(s)
expert(s) idiot(s)
politician(s) crook(s)
Report: Propaganda:
Study: Propaganda:

You can add additional translations as described below. A variety of commented-out transformations are included in the script source code which you can enable if you wish, and which will serve as templates for handling various cases in transformations of your own devising.

Red Meat Edition: If you're interested in developing more complicated transformations than those in the default script, or simply wish to see how OldSpeak can be deployed by an opinionated person to skewer mealy mouthed media, give the “red meat” edition of OldSpeak a try. The transformations range from amusing to incendiary, and make no effort whatsoever at ideological balance: they exude anarcho-libertarianism from their every regular expression. See “Customising OldSpeak” below for details on how to adapt this script to your own individual spin.

Install OldSpeak “Red Meat” Edition

Configuring Affected Sites

By default, the scripts are applied to all Web pages you view. If you'd prefer to restrict their use to specific sites (for example, consistently biased legacy media outlets), you can do so by choosing the “Tools/Greasemonkey/Manage User Scripts” menu item, clicking the script in question, and editing the “Included Pages” list which initially is “*”, denoting all sites and pages, to a list of sites to which you wish the script to apply. You can use asterisks in the URL to wild-card variant strings, and add any number of included pages with the “Add” button. If you'd like the script to apply to all pages except for a few specific exclusions (for example, your own site, or scrupulously objective Fourmilab), leave the asterisk in “Included Pages” and list the URLs to which the script should not be applied in the “Excluded Pages” box. As always, you'll need to reload any affected pages for the changes to take effect.

Manage User Scripts dialogue

Above is an example of the MediaTriggerWords script having been configured to apply only to a list of legacy media outlets for which it is well-suited. The appearance of this dialogue box may vary depending upon the versions of Firefox and Greasemonkey you're using and the operating system upon which they're running.

Customising the Scripts

When you install a Greasemonkey user script, a copy of it is placed in your Firefox user profile directory, from which it is run whenever a page for which it is enabled is loaded. You can modify an installed script by selecting the “Tools/Greasemonkey/Manage User Scripts” menu item, clicking the script you wish to change, then pressing the “Edit” button. If your system is properly configured, the JavaScript source code for the script will open in a text editor window in which you can make whatever modifications you wish, save the script, then refresh a page to test your changes. Important: When you're satisfied with your changes to a script, be sure to save a copy in a different directory. Should you re-install or update the script from its host site for whatever reason, your modified version in the profile directory will be overwritten, and you'll need to refer to your local copy of the modified script to integrate your changes into the standard version.

Modifying user scripts usually requires knowledge of JavaScript programming and the Document Object Model (DOM) structure used to access the objects which compose a Web page. If you're not familiar with these details you can still, however, if you're careful to copy the punctuation of existing items, modify the word lists used by the scripts to highlight and translate document text.

If, after modifying the script, it ceases to work, you've probably introduced a syntax error in your modifications. Display the Firefox error console with the “Tools/Error Console” menu item, reload a page, and you'll probably see an error message which identifies the line in the script on which the error was detected.

Customising MediaTriggerWords

The changes you'll most likely want to make to MediaTriggerWords are to the lists of words which are highlighted in various ways. The words are defined in a series of calls to the defwords() function, one for each category of words. Here, for example, is an abbreviated list of “love” words:


The array defines the list of words, while the final string argument specifies the class of the words, which corresponds to a style definition in the addGlobalStyle() function call above the word lists. You can add new classes of words by defining new styles which you then reference in additional defwords() calls. The word entries in the array may be simple words or JavaScript regular expressions to match plural or other variant forms. Note that if you aren't familiar with regular expressions, you can always handle plurals just by entering both the singular and plural forms of the word. Matching is case-insensitive (for example “Alternative” matches “alternative”, “Alternative”, “ALTERNATIVE”, and “AlTERnaTIvE”) unless the first character of the pattern is “=”, in which case the balance of the pattern is matched in a case-sensitive manner.

Customising OldSpeak

Because it performs replacement instead of just highlighting words, the OldSpeak script is somewhat more complicated and its configuration accordingly trickier. The list of words and their replacements is declared in a call to the deftrans() function at the top of the script. The argument to this function is an object literal consisting of one or more property:value pairs in which the property is the word or regular expression to be replaced and the value is the string which should replace all matches found in the page text. Here is an example of a replacement containing three terms:

	"experts?": "idiot",
    	"global\\s+warming": "climate change",
	"=(?:Study|Report|Analysis)\\:": "Propaganda:",

Note that we have used regular expression syntax in the first item to match plurals. When you define an optional plural, you must use one of the plural-matching patterns defined in the pluralise() function later in the script; if you add a new form of plural or other variant form of a word, it's up to you to add it to the transformations done by that function. There is no requirement that the replacement word form its plural in the same way as the word it replaces. Irregular plurals may simply be entered as separate words. Matching is case-insensitive unless the first character of the pattern is “=”, in which case the balance of the pattern is matched in a case-sensitive manner.

The specifications of the words to be matched are strings from which regular expressions will be formed, not regular expressions themselves. Consequently, if you need to use the regular expression escape character “\”, you must specify a double backslash in order to force it into the string literal. All parenthesised expressions within a regular expression (for example, the alternation in the last pattern above) must use the “?:” construct to avoid disrupting the capture of the matched text.

Two variable declarations at the top of script allow you to enable additional output for debugging. Setting brackets nonzero will enclose all replaced words in braces {like these}. Setting showchanges will show both the original word and its replacement separated by an arrow, for example “Experts→Idiots: Peach fuzz is good for you”. You can set both of these variables if you wish.

Using the Scripts with the Opera Browser and Others

The Opera Browser is a superbly standards-compliant free Web browser. Since version 8.0, Opera has supported a user script facility largely compatible with Greasemonkey under Firefox, and based on cursory testing, these scripts appear to be compatible with Opera. You cannot install a user script in Opera just by clicking on the links above. Please see the Opera User JavaScript document for instructions on how to enable and install user scripts.

While patches for Opera compatibility and reports of problems are welcome, these scripts are developed and tested exclusively as extensions for Firefox with Greasemonkey, and no support is promised for other configurations.

Patches for compatibility problems with other competently-implemented browsers (which excludes Microsoft's laughable and lamentable Internet Explorer) are welcome, as long as they're compatible with the latest releases of Firefox and Greasemonkey.

Publishing Your Own Scripts

Both the MediaTriggerWords and OldSpeak scripts are in the public domain—you can do anything you wish with them, without any restrictions whatsoever. This means, in particular, that you're not only welcome, but invited to create customised versions of the scripts embodying your own take on the contemporary discourse, and publish them on your own Web pages or Web logs. To do so, simply download the scripts to local files on your computer, modify the word lists and transformation rules as you wish, and after testing them on a variety of Web pages, post them on your own site. If you do this, please modify the “@namespace” and “@homepage” declarations at the top of the scripts to point to your own site and the home directories of your modified scripts. This will keep your scripts from “stepping on” and overloading the original versions from Fourmilab, should a user choose to install both, and will direct users of your script back to your site for updates when you post them.

This document and the software it describes are in the public domain. Do what thou wilt shall be the whole of the law. Lawyers burn spontaneously in an atmosphere of fluorine.