.. -*- coding: utf-8 -*- .. role:: sref(numref) .. role:: xref(numref) .. Copyright (C) 2025, Wolfgang Scherer, .. This file is part of Netflix More More Info. .. Permission is granted to copy, distribute and/or modify this document .. under the terms of the GNU Free Documentation License, Version 1.3 .. or any later version published by the Free Software Foundation; .. with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. .. A copy of the license is included in the section entitled "GNU .. Free Documentation License". .. inline comments (with du_comment_role) .. role:: rem(comment) .. role:: html(raw) :format: html .. role:: shx(code) :language: sh .. rst-class:: narrow xmedium xlarge xhuge xultra ################################################## :rem:`|||:sec:|||`\ Netflix More More Info ################################################## .. . (progn (forward-line 1) (snip-insert "rst_b.peek-a-boo" t t "rst") (insert "")) .. >>CODD Introduction .. >>CODD Chapter #. Create a bookmark for the Javascript link `Netflix MMI`_. #. On a Netflix page click on the bookmark for `Netflix MMI`_ #. Click any ``More Info`` or ``Episodes & Info`` button. #. When loading a new Netflix page, the bookmark must be activated again. The titles shown in the ``Collection`` and ``More Like This`` sections are augmented with an additional ``More Info`` link. There is also a browser extension available, which loads the Javascript code automatically: - `Netflix More More Info – Get this Extension for 🦊 Firefox (en-US) `_ - `Netflix More More Info - Chrome Web Store `_ .. figctr:: Screenshots +----------------------------------------+----------------------------------------+ | Standard View | More More Info View | +========================================+========================================+ | .. image:: _static/netflix-mmi-000.jpg | .. image:: _static/netflix-mmi-001.jpg | +----------------------------------------+----------------------------------------+ .. :ide: SQUEEZE & QUOTE Netflix More More Info .. . (progn (forward-line 1) (search-forward ":") (let ((b (point))) (forward-line 1) (delete-region b (1- (point)))) (forward-char -1) (insert " ") (shell-command (concat "echo 'var search_type = \"tv\";' | python3 js-to-link.py - netflix-more-more-info/inject-info-links.js") t)) .. _`Netflix MMI`: javascript:%28function%28%29%7Bvar%20a%3D%22tv%22%3Bvar%20b%3D%60%0A.videoMetadata--container-container%20%3E%20div:last-child%20%7B%0A%20%20display:%20flex%3B%0A%7D%0A.videoMetadata--container-container%20%3E%20div:last-child%20%3E%20div%20%7B%0A%20%20margin-left:%200.2em%3B%0A%7D%60%3Bvar%20c%3D%22color-supplementary%20hasIcon%20round%20ltr-11vo9g5%22%3Bvar%20d%3Dnull%3Bfunction%20e%28%29%7Bif%28%21document.querySelector%28%22style.videoMetadata--more-info.namdcas%22%29%29%7Bstyle_sheet%3Ddocument.createElement%28%22style%22%29%3Bstyle_sheet.setAttribute%28%22class%22%2C%22videoMetadata--more-info%20namdcas%22%29%3Bstyle_sheet.innerText%3Db%3Bdocument.head.appendChild%28style_sheet%29%3B%7Dif%28%21d%29%7Bvar%20a%3Ddocument.querySelector%28%27button%5Bdata-uia%3D%22add-to-my-list%22%5D%2C%20button%5Bdata-uia%3D%22add-to-my-list-added%22%5D%2C%20button%5Bdata-uia%3D%22audio-toggle-unmuted%22%5D%27%29%3Bif%28a%21%3D%3Dnull%29d%3Da.getAttribute%28%27class%27%29%3B%7D%7Dvar%20f%3D0%3Bvar%20g%3Dnull%3Bfunction%20h%28%29%7Bif%28g%29%7Bwindow.clearTimeout%28g%29%3Bg%3Dnull%3B%7De%28%29%3Bdocument.querySelectorAll%28%22.titleCard--container%22%29.forEach%28function%28a%29%7Bif%28a.className%3D%3D%3D%22titleCard--container%22%29a.className%3Da.className%2B%27%20more-like-this-item%27%3B%7D%29%3Bvar%20a%3D0%3Bdocument.querySelectorAll%28%22.more-like-this-item%2C%20.title-group-item%22%29.forEach%28function%28b%29%7Bvar%20e%2Cf%2Cg%2Ch%2Ci%2Cj%2Ck%2Cl%3Bif%28b.querySelector%28%22.videoMetadata--more-info.namdcas%22%29%21%3D%3Dnull%29return%3Btry%7Bj%3Db.querySelector%28%22.videoMetadata--container-container%20%3E%20div:last-child%22%29%3Bif%28%21j%29%7Bi%3Db.querySelector%28%22.titleCard--metadataWrapper%20%3E%20div:first-child%22%29%3Bif%28%21i%29return%3Bi.setAttribute%28%22class%22%2C%22videoMetadata--container-container%22%29%3Bj%3Ddocument.createElement%28%22div%22%29%3Bi.append%28j%29%3B%7Df%3Db.querySelector%28%22%5Bdata-ui-tracking-context%5D%22%29%3Bf%3Df.getAttribute%28%22data-ui-tracking-context%22%29%3Bf%3DdecodeURIComponent%28f%29%3Bf%3DJSON.parse%28f%29%3Bg%3D%22https://www.netflix.com/browse%3Fjbv%3D%22%2Bf.video_id.toString%28%29%3Bh%3Ddocument.createElement%28%22div%22%29%3Bh.setAttribute%28%22class%22%2C%22videoMetadata--more-info%20ltr-79elbk%20namdcas%22%29%3Bk%3Dh%3Bl%3Ddocument.createElement%28%22a%22%29%3Bl.setAttribute%28%22data-uia%22%2C%22billboard-more-info%22%29%3Bl.setAttribute%28%22aria-label%22%2C%22More%20Info%22%29%3Bl.setAttribute%28%22role%22%2C%22link%22%29%3Bl.setAttribute%28%22href%22%2Cnew%20URL%28g%29%29%3Bk.appendChild%28l%29%3Bk%3Dl%3Bl%3Ddocument.createElement%28%22button%22%29%3Bl.setAttribute%28%22class%22%2C%28d%3Fd:c%29%29%3Bl.setAttribute%28%22type%22%2C%22button%22%29%3Bk.appendChild%28l%29%3Bk%3Dl%3Bl%3Ddocument.createElement%28%22div%22%29%3Bl.setAttribute%28%22class%22%2C%22small%20ltr-18dhnor%22%29%3Bl.setAttribute%28%22role%22%2C%22presentation%22%29%3Bk.appendChild%28l%29%3Bk%3Dl%3Bl%3Ddocument.createElement%28%22div%22%29%3Bl.setAttribute%28%22class%22%2C%22ltr-1ksxkn9%22%29%3Bk.appendChild%28l%29%3Bk%3Dl%3Bl%3Ddocument.createElement%28%22div%22%29%3Bl.style.minWidth%3D%221.8rem%22%3Bl.style.minHeight%3D%221.8rem%22%3Bl.style.textAlign%3D%22center%22%3Bl.appendChild%28document.createTextNode%28%22i%22%29%29%3Bk.appendChild%28l%29%3Bj.append%28h%29%3Ba%2B%3D1%3B%7Dcatch%28m%29%7Bconsole.log%28%22exception%201:%20%22%2Cm%29%3B%7D%7D%29%3Bconsole.log%28%22elements_annotated:%22%2Ca%29%3Bif%28%21a%29%7Bf%2B%3D1000%3Bf%3Df%3E30000%3F30000:f%3Bg%3Dwindow.setTimeout%28h%2Cf%29%3B%7Delse%20f%3D0%3B%7Dvar%20i%3D%5B%22billboard-more-info%22%2C%22expand-to-detail-button%22%5D%3Bdocument.addEventListener%28%22click%22%2Cfunction%28a%29%7Bvar%20b%3Da.target.attributes%5B%27data-uia%27%5D%3Bvar%20c%3Db%3Fi.includes%28b.value%29:false%3Bif%28c%29%7Bf%3D0%3Bh%28%29%3B%7D%7D%2C%7Bcapture:true%7D%29%3Bdocument.addEventListener%28%22keydown%22%2Cfunction%28a%29%7Bif%28a.altKey%7C%7Ca.ctrlKey%7C%7Ca.isComposing%7C%7Ca.metaKey%7C%7Ca.shiftKey%29return%3Bvar%20b%3Da.key%3Bif%28b%3D%3D%3D%22%23%22%29%7Bh%28%29%3Ba.preventDefault%28%29%3Breturn%3B%7D%7D%29%3Bh%28%29%3B%7D%29%28%29 .. >>CODD Conclusion .. >>CODD Appendix A .. \|:here:| .. >>CODD Notes .. ================================================== .. :rem:`|||:sec:|||`\ Footnotes .. ================================================== :html:`
` .. \[#] .. \|:info:| put local references here .. \|:info:| put local definitions here .. include:: doc_defs.inc .. include:: abbrev_defs.inc .. include:: doc_defs_combined.inc .. .. \||<-snap->|| doc_standalone .. include:: doc/doc_defs_secret.inc .. \||<-snap->|| doc_standalone .. \||<-snap->|| not_doc_standalone .. include:: doc_defs_secret.inc .. \||<-snap->|| not_doc_standalone .. _`Wolfgang Scherer`: wolfgang.scherer@gmx.de