Skip to content

Instantly share code, notes, and snippets.

@pigfoot
Last active January 22, 2020 15:40
Show Gist options
  • Save pigfoot/7fe1385ae52c5641aa4c3cf2212c2fde to your computer and use it in GitHub Desktop.
Save pigfoot/7fe1385ae52c5641aa4c3cf2212c2fde to your computer and use it in GitHub Desktop.
AppleDaily No Member
// ==UserScript==
// @name AppleDaily No Member
// @version 1.0.1
// @description A fork/expansion of the https://addons.mozilla.org/firefox/addon/tw-apple-daily-news-revealer/
// @include /^https?:\/\/.*\.appledaily\.com\/.*$/
// @namespace https://gist.github.com/pigfoot/7fe1385ae52c5641aa4c3cf2212c2fde
// @author pigfoot Chen
// @run-at document-start
// @grant none
// ==/UserScript==
// credit from https://github.com/chuck-lee/tw-apple-daily-news-revealer
var PRESERVE_IDS = [
'playerVideo',
'video_player'
];
var PRESERVE_CLASSES = [
'ndAritcle_headPic',
'ndArticle_margin',
'mediabox',
'article-content',
'articulum'
];
var PRESERVED_DOM_ELEMENTS = {};
function is_fusion_page_desktop()
{
CONTENT_VARIABLE_START_STRING = "Fusion.globalContent=";
inline_script_elements = document.querySelectorAll("script:not([src])");
for (var i = 0; i < inline_script_elements.length; i++) {
inline_script = inline_script_elements[i].text;
content_script_start = inline_script.indexOf(CONTENT_VARIABLE_START_STRING);
if (content_script_start < 0) {
continue;
}
return true;
}
return false
}
function reveal_fusion_page_desktop()
{
document.querySelector(".paywall_fade").style.display = "none";
document.querySelector("#articleOmo").style.display = "none";
document.querySelector("#articleBody").class = "article_body";
document.querySelector("#articleBody").style = "";
}
function reset_overflow_mobile()
{
document.body.style.overflowY = 'auto';
document.body.style.overflowX = 'auto';
var page_role_elements = document.querySelectorAll('[data-role="page"]');
for (var i = 0; i < page_role_elements.length; i++) {
page_role_elements[i].style.overflowY = 'auto';
}
}
function stop_secret_action_mobile()
{
var rehide_interval = XPCNativeWrapper(
window.wrappedJSObject['contentV']
);
if (typeof(rehide_interval) == 'number') {
window.clearInterval(rehide_interval);
}
}
function reveal_content_mobile()
{
stop_secret_action_mobile();
var ndgPayway = document.getElementsByClassName('ndgPayway');
for (var i = 0; i < ndgPayway.length; i++) {
ndgPayway[i].style.display = 'none';
}
// Apple daily sets a timeout to disable scrolling again.
setTimeout(function(){
reset_overflow_mobile();
}, 2500);
}
var debug_div = document.createElement('div');
function debug(message)
{
var debug_p = document.createElement('p');
var debug_message = document.createTextNode(message);
debug_p.appendChild(debug_message);
debug_div.appendChild(debug_p);
}
function show_debug(element)
{
element.appendChild(debug_div);
}
function reveal_video_desktop()
{
var video_data_json = null;
if (PRESERVED_DOM_ELEMENTS['video_player'] !== undefined) {
video_data_json = PRESERVED_DOM_ELEMENTS['video_player'].childNodes[0].dataset['anvp'];
} else if (PRESERVED_DOM_ELEMENTS['playerVideo'] !== undefined) {
video_data_json = PRESERVED_DOM_ELEMENTS['playerVideo'].childNodes[0].lastChild.dataset['anvp'];
}
if (video_data_json === null) {
return;
}
try {
// Reconstruct video content
var video_data = JSON.parse(video_data_json);
var source = document.createElement("source");
source.src = video_data['url'];
source.type = 'video/mp4';
var video = document.createElement('video');
video.style.width = video_data['width'];
video.style.height = video_data['height'];
video.autoplay = false;
video.controls = true;
video.appendChild(source);
video.load();
// Restore video content
var thoracis = document.querySelector('.thoracis');
if (thoracis != null) {
thoracis.appendChild(video);
return;
}
var ndPaywall = document.querySelector('.ndPaywall');
debug(ndPaywall.length);
if (ndPaywall != null) {
ndPaywall.parentNode.insertBefore(video, ndPaywall);
return;
}
} catch (e) {
;
}
}
function stop_secret_action_desktop(secret_element)
{
var parent_element = secret_element.parentNode;
var div_element = document.createElement('div');
div_element.style.display = 'none';
parent_element.replaceChild(div_element, secret_element);
div_element.appendChild(secret_element);
}
function hide_secret_tag_in_destkop_article_element(article_element)
{
var secret_element_tag_name_regex = /[a-zA-Z0-9]{33}-[a-zA-Z0-9]{32}/;
var element_tag_list = article_element.getElementsByTagName("*");
for (var i = 0; i < element_tag_list.length; i++) {
var element = element_tag_list[i];
if (element.tagName.search(secret_element_tag_name_regex) >= 0) {
stop_secret_action_desktop(element);
return article_element;
}
}
}
function reveal_article_desktop()
{
try {
if (PRESERVED_DOM_ELEMENTS['ndArticle_margin'] !== undefined) {
// Find and hide the secret element in the content to bypass content re-hide
var article_element = hide_secret_tag_in_destkop_article_element(
PRESERVED_DOM_ELEMENTS['ndArticle_margin']
);
// Restore article content
var ndArticle_content = document.getElementsByClassName('ndArticle_content')[0];
ndArticle_content.insertBefore(article_element,
ndArticle_content.childNodes[0]);
} else if (PRESERVED_DOM_ELEMENTS['articulum'] !== undefined) {
// Find and hide the secret element in the content to bypass content re-hide
var article_element = hide_secret_tag_in_destkop_article_element(
PRESERVED_DOM_ELEMENTS['articulum']
);
// Restore article content
var abdominis = document.getElementsByClassName('abdominis')[0];
var article = abdominis.getElementsByTagName('article')[0];
abdominis.insertBefore(article_element, article.nextSibling);
} else if (PRESERVED_DOM_ELEMENTS['article-content'] !== undefined) {
// Find and hide the secret element in the content to bypass content re-hide
var article_element = hide_secret_tag_in_destkop_article_element(
PRESERVED_DOM_ELEMENTS['article-content']
);
// Restore article content
var video_player_wrap_element = article_element.getElementsByClassName('video-player-wrap');
for (var i = 0; i < video_player_wrap_element.length; i++) {
video_player_wrap_element[i].style.display = 'none';
}
var ndPaywall = document.getElementsByClassName('ndPaywall')[0];
ndPaywall.parentNode.insertBefore(article_element, ndPaywall.nextSibling);
} else if (is_fusion_page_desktop()) {
reveal_fusion_page_desktop();
}
} catch (e) {
;
}
}
function reveal_content_desktop()
{
var ndPaywall = document.getElementsByClassName('ndPaywall');
for (var i = 0; i < ndPaywall.length; i++) {
ndPaywall[i].style.display = 'none';
}
var ndPaywallVideo = document.getElementsByClassName('ndPaywallVideo');
for (var i = 0; i < ndPaywallVideo.length; i++) {
ndPaywallVideo[i].style.display = 'none';
}
// Restore deleted content
reveal_video_desktop();
reveal_article_desktop();
}
function reveal_content()
{
// Detect site mode.
var isMobile = document.body.classList.contains("ui-mobile-viewport") ||
document.body.style.overflowY != '';
if (isMobile) {
reveal_content_mobile();
return;
}
reveal_content_desktop();
}
document.addEventListener('readystatechange', (event) => {
if (document.readyState == "complete") {
reveal_content();
}
})
function preserve_node(node)
{
for (var i = 0; i < PRESERVE_IDS.length; i++) {
var preserve_id = PRESERVE_IDS[i];
if (node.id == preserve_id) {
PRESERVED_DOM_ELEMENTS[preserve_id] = node.cloneNode(true);
PRESERVED_DOM_ELEMENTS[preserve_id].style.display = 'block';
PRESERVED_DOM_ELEMENTS[preserve_id].style.visibility = 'visible';
return;
}
}
for (var i = 0; i < PRESERVE_CLASSES.length; i++) {
var preserve_class = PRESERVE_CLASSES[i];
if (node.classList.contains(preserve_class)) {
PRESERVED_DOM_ELEMENTS[preserve_class] = node.cloneNode(true);
PRESERVED_DOM_ELEMENTS[preserve_class].style.display = 'block';
PRESERVED_DOM_ELEMENTS[preserve_class].style.visibility = 'visible';
return;
}
}
}
var config = {childList: true, subtree: true};
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type != 'childList') {
return;
}
// Preserve content node
for (var i = 0; i < mutation.removedNodes.length; i++) {
preserve_node(mutation.removedNodes[i]);
}
});
})
observer.observe(document, config);
@pigfoot
Copy link
Author

pigfoot commented Jul 31, 2019

Don't click "Raw" to install otherwise it cannot be updated.
Install: https://gist.github.com/pigfoot/7fe1385ae52c5641aa4c3cf2212c2fde/raw/tw-apple-daily-news-revealer.user.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment