Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4119124
ext.translate.statsbar.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
ext.translate.statsbar.js
View Options
/*!
* Translate language statistics bar - jQuery plugin.
*
* @author Niklas Laxström
* @author Santhosh Thottingal
* @license GPL-2.0-or-later
* @since 2012-11-30
*/
/*
* Usage:
* $( '<div>' ).languagestatsbar( {
* language: 'fi',
* group: 'core'
* } );
* The status bar will be rendered to the newly created div. Or use any container.
*/
(
function
()
{
'use strict'
;
var
LanguageStatsBar
=
function
(
container
,
options
)
{
this
.
$container
=
$
(
container
);
this
.
group
=
options
.
group
;
this
.
language
=
options
.
language
;
this
.
onlyLoadCurrentGroupData
=
options
.
onlyLoadCurrentGroupData
;
this
.
$statsBar
=
null
;
this
.
elements
=
null
;
this
.
init
();
};
LanguageStatsBar
.
prototype
=
{
init
:
function
()
{
this
.
loadStats
().
done
(
this
.
render
.
bind
(
this
)
);
},
/**
* Listen for the change events and update the statsbar
*/
listen
:
function
()
{
var
statsbar
=
this
;
statsbar
.
$statsBar
.
on
(
'change'
,
function
(
event
,
to
,
from
)
{
// This updates the value in mw.translate.languagestats as a reference to
// the object is returned here.
var
groupLanguageStats
=
statsbar
.
getGroupStatsWithFallback
();
// Changing a proofread message does not create a new translation
if
(
to
===
'translated'
&&
from
!==
'proofread'
)
{
groupLanguageStats
.
translated
++
;
}
if
(
to
===
'proofread'
)
{
groupLanguageStats
.
proofread
++
;
}
if
(
to
===
'fuzzy'
)
{
groupLanguageStats
.
fuzzy
++
;
}
if
(
from
===
'fuzzy'
)
{
groupLanguageStats
.
fuzzy
--
;
}
if
(
from
===
'proofread'
)
{
groupLanguageStats
.
proofread
--
;
}
// Proofreading a message does not remove translation
if
(
from
===
'translated'
&&
to
!==
'proofread'
)
{
groupLanguageStats
.
translated
--
;
}
// Update the stats bar
statsbar
.
update
();
}
);
statsbar
.
$container
.
on
(
{
mouseenter
:
function
()
{
statsbar
.
elements
.
$info
.
removeClass
(
'hide'
);
},
mouseleave
:
function
()
{
statsbar
.
elements
.
$info
.
addClass
(
'hide'
);
}
}
);
},
render
:
function
()
{
this
.
$statsBar
=
$
(
'<div>'
)
.
addClass
(
'tux-statsbar'
)
.
data
(
'group'
,
this
.
group
);
this
.
elements
=
{
$proofread
:
$
(
'<span>'
).
addClass
(
'tux-proofread'
),
$translated
:
$
(
'<span>'
).
addClass
(
'tux-translated'
),
$fuzzy
:
$
(
'<span>'
).
addClass
(
'tux-fuzzy'
),
$untranslated
:
$
(
'<span>'
).
addClass
(
'tux-untranslated'
),
$info
:
$
(
'<div>'
).
addClass
(
'tux-statsbar-info hide'
)
};
this
.
update
();
this
.
$statsBar
.
append
(
[
// Append needs an array instead of an object
this
.
elements
.
$proofread
,
this
.
elements
.
$translated
,
this
.
elements
.
$fuzzy
,
this
.
elements
.
$untranslated
,
this
.
elements
.
$info
]
);
this
.
$container
.
append
(
this
.
$statsBar
);
this
.
listen
();
},
update
:
function
()
{
var
stats
=
this
.
getGroupStatsWithFallback
();
var
proofread
=
100
*
stats
.
proofread
/
stats
.
total
;
// Proofread messages are also translated, so remove those for
// the bar showing only translated count.
var
translated
=
stats
.
translated
-
stats
.
proofread
;
translated
=
100
*
translated
/
stats
.
total
;
var
fuzzy
=
100
*
stats
.
fuzzy
/
stats
.
total
;
var
untranslated
=
100
-
proofread
-
translated
-
fuzzy
;
this
.
elements
.
$proofread
[
0
].
style
.
width
=
proofread
+
'%'
;
this
.
elements
.
$translated
[
0
].
style
.
width
=
translated
+
'%'
;
this
.
elements
.
$fuzzy
[
0
].
style
.
width
=
fuzzy
+
'%'
;
this
.
elements
.
$untranslated
[
0
].
style
.
width
=
untranslated
+
'%'
;
translated
=
!
translated
?
0
:
translated
+
proofread
;
proofread
=
!
proofread
?
0
:
proofread
;
if
(
fuzzy
)
{
this
.
elements
.
$info
.
text
(
mw
.
msg
(
'translate-statsbar-tooltip-with-fuzzy'
,
translated
.
toFixed
(),
proofread
.
toFixed
(),
fuzzy
.
toFixed
()
)
);
}
else
{
this
.
elements
.
$info
.
text
(
mw
.
msg
(
'translate-statsbar-tooltip'
,
translated
.
toFixed
(),
proofread
.
toFixed
()
)
);
}
},
getGroupStatsWithFallback
:
function
()
{
var
statsData
=
mw
.
translate
.
languagestats
[
this
.
language
]
||
[];
for
(
var
i
=
0
;
i
<
statsData
.
length
;
i
++
)
{
if
(
statsData
[
i
].
group
===
this
.
group
)
{
return
statsData
[
i
];
}
}
return
this
.
getEmptyStats
();
},
loadStats
:
function
()
{
if
(
this
.
onlyLoadCurrentGroupData
)
{
return
mw
.
translate
.
loadMessageGroupStatsForItem
(
this
.
language
,
this
.
group
);
}
else
{
return
mw
.
translate
.
loadMessageGroupStatsForLanguage
(
this
.
language
);
}
},
getEmptyStats
:
function
()
{
return
{
proofread
:
0
,
total
:
0
,
fuzzy
:
0
,
translated
:
0
};
}
};
/*
* languagestatsbar PLUGIN DEFINITION
*/
$
.
fn
.
languagestatsbar
=
function
(
options
)
{
return
this
.
each
(
function
()
{
var
$this
=
$
(
this
),
data
=
$this
.
data
(
'languagestatsbar'
);
if
(
!
data
)
{
$this
.
data
(
'languagestatsbar'
,
new
LanguageStatsBar
(
this
,
options
)
);
}
}
);
};
$
.
fn
.
languagestatsbar
.
Constructor
=
LanguageStatsBar
;
mw
.
translate
=
mw
.
translate
||
{};
}()
);
File Metadata
Details
Attached
Mime Type
text/x-asm
Expires
Wed, Aug 19, 03:10 (2 w, 1 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
07/44/000284575bb59475b6cdf6f818b0
Default Alt Text
ext.translate.statsbar.js (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment