wikimedia / mediawiki-title

mediawiki title normalization library
8 stars 12 forks source link

mediawiki-title npm version Build Status Coverage Status Dependencies

Mediawiki title normalization, that conforms to the normalization rules used in MediaWiki Core. In general, the page title is converted to the mediawiki DB key format by trimming spaces, replacing whitespace symbols to underscores and applying wiki-specific capitalization rules. The namespace name is converted to a localized canonical name.

Classes

Namespace
Title
TitleError

Typedefs

SiteInfo : Object

Information about a wikimedia site required to make correct normalization. This information matches the format used by the PHP API response, however not all of the fields are required for library operation.

The list of required properties is documented here, others can be removed.

Namespace

Kind: global class

new Namespace(id, siteInfo)

Represents a wiki namespace

Param Type Description
id number The namespace identifier
siteInfo SiteInfo The site metadata information.

namespace.getId() ⇒ number

Returns the numeric namespace identifier

Kind: instance method of Namespace

namespace.isMedia() ⇒ boolean

Checks whether namespace is Media

Kind: instance method of Namespace

namespace.isSpecial() ⇒ boolean

Checks whether namespace is Special

Kind: instance method of Namespace

namespace.isMain() ⇒ boolean

Checks whether namespace is Main

Kind: instance method of Namespace

namespace.isTalk() ⇒ boolean

Checks whether namespace is Talk

Kind: instance method of Namespace

namespace.isUserTalk() ⇒ boolean

Checks whether namespace is UserTalk

Kind: instance method of Namespace

namespace.getNormalizedText() ⇒ string

Get the canonical name string for this namespace.

Kind: instance method of Namespace

namespace.equals(ns) ⇒ boolean

Determines whether this namespace is equal to the given ns, based on the numeric namespace identifier.

Kind: instance method of Namespace

Namespace.fromText(text, siteInfo) ⇒ Namespace | undefined

Creates a namespace instance from namespace text or a namespace alias

Kind: static method of Namespace
Returns: Namespace | undefined - a namespace or undefined if it wasn't found.

Param Type Description
text string Namespace name text.
siteInfo SiteInfo the site information.

Namespace.main(siteInfo) ⇒ Namespace

Creates a namespace object for a Main namespace.

Kind: static method of Namespace

Param Type Description
siteInfo SiteInfo the site information.

Title

Kind: global class

new Title(key, namespace, siteInfo, [fragment])

Creates a new title object with article the dbKey and namespace

Param Type Description
key string The article title in a form of the dbKey.
namespace Namespace | number The article namespace.
siteInfo SiteInfo The site metadata.
[fragment] string The fragment of the title.

title.getPrefixedDBKey() ⇒ string

Returns the normalized article title and namespace.

Kind: instance method of Title

title.getFragment() ⇒ string | undefined

Returns the normalized fragment part of the original title

Kind: instance method of Title

title.getNamespace() ⇒ Namespace

Returns the namespace of an article.

Kind: instance method of Title

title.equals(title2) ⇒ boolean

Determines whether this title is equals to the given title2, based on comparing namespace and key.

Kind: instance method of Title

Title.newFromText(title, siteInfo, defaultNs) ⇒ Title

Normalize a title according to the rules of siteInfo

Kind: static method of Title
Returns: Title - The resulting title object.

Param Type Description
title string The page title to normalize.
siteInfo SiteInfo The site information.

TitleError

Kind: global exception class

TitleError should be considered an opaque exception class, which is thrown by the various methods in this library. It is exported so that it can be identified if caught by the caller.

SiteInfo : Object

Information about a wikimedia site required to make correct normalization. This information matches the format used by the PHP API response, however not all of the fields are required for library operation.

The list of required properties is documented here, others can be removed.

Kind: global typedef
Properties

Name Type Description
general Object General information about the site
general.lang string Site language code.
general.legaltitlechars string A perl-like regex for characters allowed in the page title.
general.case string Whether to capitalize the first letter of the title. Could be obtained from the general section of the siteInfo php API response.
namespaces Object Site namespaces info in the same format as returned by PHP api.
namespacealiases Object Site namespace aliases in the same format as returned by PHP api.
specialpagealiases Object Site special page aliases in the same format as returned by PHP api.

Usage

The library synchronously returns a normalized title. Wiki-specific rules should be fetched from the MediaWiki API, and cached outside of the library. The description of the required properties is available in the SiteInfo object docs.

var result = Title.newFromText('some_title', {
            general: {
            lang: 'en',
            legaltitlechars: " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+",
            case: 'first-letter'
        },
    namespaces: {
        "0": {
            id: 0,
            case: "first-letter",
            content: "",
            "*": ""
            },
        }
});
console.log(result.getPrefixedDBKey());

Bug reporting

For bug reporting please use Phabricator and mark the bugs with Services label or contact directly in IRC in the #wikimedia-services channel.