Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4127418
jquery.uls.data.utils.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
jquery.uls.data.utils.js
View Options
/**
* Utility functions for querying language data.
*
* Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
* contributors. See CREDITS for a list.
*
* UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
* have to do anything special to choose one license or the other and you don't
* have to notify anyone which license you are using. You are free to use
* UniversalLanguageSelector in commercial projects as long as the copyright
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
*
* @file
* @ingroup Extensions
* @licence GNU General Public Licence 2.0 or later
* @licence MIT License
*/
(
function
(
$
)
{
'use strict'
;
/**
* Is this language a redirect to another language?
* @param language string Language code
* @return Target language code if it's a redirect or false if it's not
*/
$
.
uls
.
data
.
isRedirect
=
function
(
language
)
{
return
(
$
.
uls
.
data
.
languages
[
language
]
!==
undefined
&&
$
.
uls
.
data
.
languages
[
language
].
length
===
1
)
?
$
.
uls
.
data
.
languages
[
language
][
0
]
:
false
;
};
/**
* Returns the script of the language.
* @param language string Language code
* @return string
*/
$
.
uls
.
data
.
getScript
=
function
(
language
)
{
var
target
=
$
.
uls
.
data
.
isRedirect
(
language
);
if
(
target
)
{
return
$
.
uls
.
data
.
getScript
(
target
);
}
if
(
!
$
.
uls
.
data
.
languages
[
language
]
)
{
// Undetermined
return
'Zyyy'
;
}
return
$
.
uls
.
data
.
languages
[
language
][
0
];
};
/**
* Returns the regions in which a language is spoken.
* @param language string Language code
* @return array|string 'UNKNOWN'
*/
$
.
uls
.
data
.
getRegions
=
function
(
language
)
{
var
target
=
$
.
uls
.
data
.
isRedirect
(
language
);
if
(
target
)
{
return
$
.
uls
.
data
.
getRegions
(
target
);
}
return
(
$
.
uls
.
data
.
languages
[
language
]
&&
$
.
uls
.
data
.
languages
[
language
][
1
]
)
||
'UNKNOWN'
;
};
/**
* Returns the autonym of the language.
* @param language string Language code
* @return string
*/
$
.
uls
.
data
.
getAutonym
=
function
(
language
)
{
var
target
=
$
.
uls
.
data
.
isRedirect
(
language
);
if
(
target
)
{
return
$
.
uls
.
data
.
getAutonym
(
target
);
}
return
(
$
.
uls
.
data
.
languages
[
language
]
&&
$
.
uls
.
data
.
languages
[
language
][
2
]
)
||
language
;
};
/**
* Returns all language codes and corresponding autonyms
* @return array
*/
$
.
uls
.
data
.
getAutonyms
=
function
()
{
var
language
,
autonymsByCode
=
{};
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
autonymsByCode
[
language
]
=
$
.
uls
.
data
.
getAutonym
(
language
);
}
return
autonymsByCode
;
};
/**
* Returns an array of all region codes.
* @return array
*/
$
.
uls
.
data
.
getAllRegions
=
function
()
{
var
region
,
allRegions
=
[];
for
(
region
in
$
.
uls
.
data
.
regiongroups
)
{
allRegions
.
push
(
region
);
}
return
allRegions
;
};
/**
* Returns all languages written in script.
* @param script string
* @return array of strings (languages codes)
*/
$
.
uls
.
data
.
getLanguagesInScript
=
function
(
script
)
{
return
$
.
uls
.
data
.
getLanguagesInScripts
(
[
script
]
);
};
/**
* Returns all languages written in the given scripts.
* @param scripts array of strings
* @return array of strings (languages codes)
*/
$
.
uls
.
data
.
getLanguagesInScripts
=
function
(
scripts
)
{
var
language
,
i
,
languagesInScripts
=
[];
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
for
(
i
=
0
;
i
<
scripts
.
length
;
i
++
)
{
if
(
scripts
[
i
]
===
$
.
uls
.
data
.
getScript
(
language
)
)
{
languagesInScripts
.
push
(
language
);
break
;
}
}
}
return
languagesInScripts
;
};
/**
* Returns all languages in a given region.
* @param region string
* @return array of strings (languages codes)
*/
$
.
uls
.
data
.
getLanguagesInRegion
=
function
(
region
)
{
return
$
.
uls
.
data
.
getLanguagesInRegions
(
[
region
]
);
};
/**
* Returns all languages in given regions.
* @param regions array of strings.
* @return array of strings (languages codes)
*/
$
.
uls
.
data
.
getLanguagesInRegions
=
function
(
regions
)
{
var
language
,
i
,
languagesInRegions
=
[];
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
for
(
i
=
0
;
i
<
regions
.
length
;
i
++
)
{
if
(
$
.
inArray
(
regions
[
i
],
$
.
uls
.
data
.
getRegions
(
language
)
)
!==
-
1
)
{
languagesInRegions
.
push
(
language
);
break
;
}
}
}
return
languagesInRegions
;
};
/**
* Returns all languages in a region group.
* @param groupNum number.
* @return array of strings (languages codes)
*/
$
.
uls
.
data
.
getLanguagesInRegionGroup
=
function
(
groupNum
)
{
return
$
.
uls
.
data
.
getLanguagesInRegions
(
$
.
uls
.
data
.
getRegionsInGroup
(
groupNum
)
);
};
/**
* Returns an associative array of languages in a region,
* grouped by script.
* @param region string Region code
* @return associative array
*/
$
.
uls
.
data
.
getLanguagesByScriptInRegion
=
function
(
region
)
{
var
language
,
script
,
languagesByScriptInRegion
=
{};
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
if
(
$
.
inArray
(
region
,
$
.
uls
.
data
.
getRegions
(
language
)
)
!==
-
1
)
{
script
=
$
.
uls
.
data
.
getScript
(
language
);
if
(
languagesByScriptInRegion
[
script
]
===
undefined
)
{
languagesByScriptInRegion
[
script
]
=
[];
}
languagesByScriptInRegion
[
script
].
push
(
language
);
}
}
return
languagesByScriptInRegion
;
};
/**
* Returns an associative array of languages in a region,
* grouped by script group.
* @param region string Region code
* @return associative array
*/
$
.
uls
.
data
.
getLanguagesByScriptGroupInRegion
=
function
(
region
)
{
return
$
.
uls
.
data
.
getLanguagesByScriptGroupInRegions
(
[
region
]
);
};
/**
* Returns an associative array of all languages,
* grouped by script group.
* @return associative array
*/
$
.
uls
.
data
.
getAllLanguagesByScriptGroup
=
function
()
{
return
$
.
uls
.
data
.
getLanguagesByScriptGroupInRegions
(
$
.
uls
.
data
.
getAllRegions
()
);
};
/**
* Get the given list of languages grouped by script.
* @param languages Array of language codes
* @return {Object} Array of languages indexed by script codes
*/
$
.
uls
.
data
.
getLanguagesByScriptGroup
=
function
(
languages
)
{
var
languagesByScriptGroup
=
{},
language
,
codeToAdd
,
langScriptGroup
;
for
(
language
in
languages
)
{
codeToAdd
=
$
.
uls
.
data
.
isRedirect
(
language
)
||
language
;
langScriptGroup
=
$
.
uls
.
data
.
getScriptGroupOfLanguage
(
codeToAdd
);
if
(
!
languagesByScriptGroup
[
langScriptGroup
]
)
{
languagesByScriptGroup
[
langScriptGroup
]
=
[];
}
// Prevent duplicate adding of redirects
if
(
$
.
inArray
(
codeToAdd
,
languagesByScriptGroup
[
langScriptGroup
]
)
===
-
1
)
{
languagesByScriptGroup
[
langScriptGroup
].
push
(
codeToAdd
);
}
}
return
languagesByScriptGroup
;
};
/**
* Returns an associative array of languages in several regions,
* grouped by script group.
* @param regions array of strings - region codes
* @return associative array
*/
$
.
uls
.
data
.
getLanguagesByScriptGroupInRegions
=
function
(
regions
)
{
var
language
,
i
,
scriptGroup
,
languagesByScriptGroupInRegions
=
{};
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
for
(
i
=
0
;
i
<
regions
.
length
;
i
++
)
{
if
(
$
.
inArray
(
regions
[
i
],
$
.
uls
.
data
.
getRegions
(
language
)
)
!==
-
1
)
{
scriptGroup
=
$
.
uls
.
data
.
getScriptGroupOfLanguage
(
language
);
if
(
languagesByScriptGroupInRegions
[
scriptGroup
]
===
undefined
)
{
languagesByScriptGroupInRegions
[
scriptGroup
]
=
[];
}
languagesByScriptGroupInRegions
[
scriptGroup
].
push
(
language
);
break
;
}
}
}
return
languagesByScriptGroupInRegions
;
};
/**
* Returns an array of languages grouped by region group,
* region, script group and script.
* @return associative array
*/
$
.
uls
.
data
.
getAllLanguagesByRegionAndScript
=
function
()
{
var
region
,
regionGroup
,
language
,
script
,
scriptGroup
,
regions
,
regionNum
,
allLanguagesByRegionAndScript
=
{};
for
(
region
in
$
.
uls
.
data
.
regiongroups
)
{
regionGroup
=
$
.
uls
.
data
.
regiongroups
[
region
];
if
(
allLanguagesByRegionAndScript
[
regionGroup
]
===
undefined
)
{
allLanguagesByRegionAndScript
[
regionGroup
]
=
{};
}
allLanguagesByRegionAndScript
[
regionGroup
][
region
]
=
{};
}
for
(
language
in
$
.
uls
.
data
.
languages
)
{
if
(
$
.
uls
.
data
.
isRedirect
(
language
)
)
{
continue
;
}
script
=
$
.
uls
.
data
.
getScript
(
language
);
scriptGroup
=
$
.
uls
.
data
.
getGroupOfScript
(
script
);
regions
=
$
.
uls
.
data
.
getRegions
(
language
);
for
(
regionNum
=
0
;
regionNum
<
regions
.
length
;
regionNum
++
)
{
region
=
regions
[
regionNum
];
regionGroup
=
$
.
uls
.
data
.
regiongroups
[
region
];
if
(
allLanguagesByRegionAndScript
[
regionGroup
][
region
][
scriptGroup
]
===
undefined
)
{
allLanguagesByRegionAndScript
[
regionGroup
][
region
][
scriptGroup
]
=
{};
}
if
(
allLanguagesByRegionAndScript
[
regionGroup
][
region
][
scriptGroup
][
script
]
===
undefined
)
{
allLanguagesByRegionAndScript
[
regionGroup
][
region
][
scriptGroup
][
script
]
=
[];
}
allLanguagesByRegionAndScript
[
regionGroup
][
region
][
scriptGroup
][
script
].
push
(
language
);
}
}
return
allLanguagesByRegionAndScript
;
};
/**
* Returns all regions in a region group.
* @param groupNum int
* @return array of strings
*/
$
.
uls
.
data
.
getRegionsInGroup
=
function
(
groupNum
)
{
var
region
,
regionsInGroup
=
[];
for
(
region
in
$
.
uls
.
data
.
regiongroups
)
{
if
(
$
.
uls
.
data
.
regiongroups
[
region
]
===
groupNum
)
{
regionsInGroup
.
push
(
region
);
}
}
return
regionsInGroup
;
};
/**
* Returns the script group of a script or 'Other' if it doesn't
* belong to any group.
* @param script string Script code
* @return string script group name
*/
$
.
uls
.
data
.
getGroupOfScript
=
function
(
script
)
{
var
scriptGroup
;
for
(
scriptGroup
in
$
.
uls
.
data
.
scriptgroups
)
{
if
(
$
.
inArray
(
script
,
$
.
uls
.
data
.
scriptgroups
[
scriptGroup
]
)
!==
-
1
)
{
return
scriptGroup
;
}
}
return
'Other'
;
};
/**
* Returns the script group of a language.
* @param language string Language code
* @return string script group name
*/
$
.
uls
.
data
.
getScriptGroupOfLanguage
=
function
(
language
)
{
return
$
.
uls
.
data
.
getGroupOfScript
(
$
.
uls
.
data
.
getScript
(
language
)
);
};
/**
* A callback for sorting languages by autonym.
* Can be used as an argument to a sort function.
* @param a string Language code
* @param b string Language code
*/
$
.
uls
.
data
.
sortByAutonym
=
function
(
a
,
b
)
{
var
autonymA
=
$
.
uls
.
data
.
getAutonym
(
a
)
||
a
,
autonymB
=
$
.
uls
.
data
.
getAutonym
(
b
)
||
b
;
return
(
autonymA
.
toLowerCase
()
<
autonymB
.
toLowerCase
()
)
?
-
1
:
1
;
};
/**
* Check if a language is right-to-left.
* @param language string Language code
* @return boolean
*/
$
.
uls
.
data
.
isRtl
=
function
(
language
)
{
return
$
.
inArray
(
$
.
uls
.
data
.
getScript
(
language
),
$
.
uls
.
data
.
rtlscripts
)
!==
-
1
;
};
/**
* Return the direction of the language
* @param language string Language code
* @return string
*/
$
.
uls
.
data
.
getDir
=
function
(
language
)
{
return
$
.
uls
.
data
.
isRtl
(
language
)
?
'rtl'
:
'ltr'
;
};
/**
* Returns the languages spoken in a territory.
* @param territory string Territory code
* @return list of language codes
*/
$
.
uls
.
data
.
getLanguagesInTerritory
=
function
(
territory
)
{
return
$
.
uls
.
data
.
territories
[
territory
];
};
/**
* Adds a language in run time and sets its options as provided.
* If the target option is provided, the language is defined as a redirect.
* Other possible options are script, regions and autonym.
*
* @param code string New language code.
* @param options Object Language properties.
* @return list of language codes
*/
$
.
uls
.
data
.
addLanguage
=
function
(
code
,
options
)
{
if
(
options
.
target
)
{
$
.
uls
.
data
.
languages
[
code
]
=
[
options
.
target
];
}
else
{
$
.
uls
.
data
.
languages
[
code
]
=
[
options
.
script
,
options
.
regions
,
options
.
autonym
];
}
};
/**
* Removes a language from the langdb in run time.
*
* @param code string Language code to delete.
* @return true if the language was removed, false otherwise.
*/
$
.
uls
.
data
.
deleteLanguage
=
function
(
code
)
{
if
(
$
.
uls
.
data
.
languages
[
code
]
)
{
delete
$
.
uls
.
data
.
languages
[
code
];
return
true
;
}
return
false
;
};
}
(
jQuery
)
);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 19, 08:35 (2 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
a0/6f/f55551746174f1be1562e2e4e5cb
Default Alt Text
jquery.uls.data.utils.js (12 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment