@@ -31,24 +31,48 @@ var TargetingPairs = {
3131 return ( tagMeta . tags || '' ) . split ( ',' ) ;
3232 } ,
3333
34+ /**
35+ * Gets index of article position in reading list
36+ *
37+ * @param HTMLElement adContainer the ad container currently being filled
38+ * @param object kinjaMeta kinja-specific post meta
39+ */
40+ getArticlePosition : function ( adContainer , kinjaMeta ) {
41+ if ( document && adContainer && kinjaMeta . pageType === "permalink" && ! ( kinjaMeta . post && kinjaMeta . post . isFeatured ) ) {
42+ var readingListPostIds = Array . from ( document . getElementsByClassName ( 'js_reading-list-item' ) ) . map ( post => post . dataset . postId ) ;
43+
44+ if ( readingListPostIds . length > 0 ) {
45+ var readingListItem = adContainer . closest ( '.js_reading-list-item' ) ;
46+ if ( readingListItem ) {
47+ var currentPostId = readingListItem . dataset . postId ;
48+ return readingListPostIds . indexOf ( currentPostId ) + 2 ;
49+ }
50+ }
51+ }
52+
53+ return 1 ;
54+ } ,
55+
3456 /**
3557 * Constructs associative array of targeting pairs from post meta
3658 *
3759 * @param Window scope the window to use for the kinja meta info.
3860 *
3961 */
40- buildTargetingPairs : function ( scope , positionTargeting ) {
62+ buildTargetingPairs : function ( scope , positionTargeting , adContainer ) {
4163 var kinjaMeta = scope . kinja . meta ,
4264 post = scope . kinja . postMeta || { } ,
4365 content = scope . kinja . postContentRatings || [ ] ,
4466 experimentVariation = Experiments . getExperimentVariation ( scope ) ,
4567 experimentId = Experiments . getExperimentId ( scope ) ,
4668 socialTargeting , key ,
47- targeting = { } ;
69+ targeting = { } ,
70+ articlePosition = TargetingPairs . getArticlePosition ( adContainer , kinjaMeta ) ;
4871
4972 // Begin slot level params AKA 'scp'
5073 targeting . slotOptions = {
5174 // Standard targeting options
75+ article_position : articlePosition ,
5276 pos : positionTargeting || null ,
5377 postId : post ? post . postId : null ,
5478 socialReferrer : SocialReferrer . getSocialReferrer ( ) ,
@@ -78,17 +102,18 @@ var TargetingPairs = {
78102 *
79103 * @param string forcedAdZone forced ad zone, if any
80104 * @param Window scope the window to use for the kinja meta info.
105+ * @param element adContainer optional ad container to determine positioning
81106 *
82107 */
83- getTargetingPairs : function ( forcedAdZone , positionTargeting ) {
108+ getTargetingPairs : function ( forcedAdZone , positionTargeting , adContainer ) {
84109 if ( forcedAdZone && ! window . kinja ) {
85110 return { pageOptions : { forcedAdZone : forcedAdZone } } ;
86111 }
87112 if ( ! window . kinja ) {
88113 return { } ;
89114 }
90115
91- var targetingOptions = this . buildTargetingPairs ( window , positionTargeting ) ;
116+ var targetingOptions = this . buildTargetingPairs ( window , positionTargeting , adContainer ) ;
92117
93118 targetingOptions . pageOptions . forcedAdZone = forcedAdZone || false ;
94119
0 commit comments