jenkins-bot has submitted this change and it was merged.
Change subject: Offload IPA transform
......................................................................
Offload IPA transform
Had to switch the ipa_button div to a span since using a div caused
layout issues (an ugly line break) right after the assignment of the
HTML section text (pre-transformed by the service).
Not entirely sure why it didn't when we introduced the ipa_button
div during the DOM transformation phase.
Depends: I7c79548c9ea8c9cdc22551dfdc77f8455a514f8c
Change-Id: Iead9d28e55c5e9bcccdd471eba59aa1a3d00a719
---
M app/src/main/assets/bundle.js
A www/js/onclick.js
M www/js/sections.js
M www/js/transforms.js
R www/js/transforms/service/hideIpa.js
5 files changed, 164 insertions(+), 106 deletions(-)
Approvals:
Sniedzielski: Looks good to me, approved
Mholloway: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/app/src/main/assets/bundle.js b/app/src/main/assets/bundle.js
index 8b9b3cd..9363d53 100644
--- a/app/src/main/assets/bundle.js
+++ b/app/src/main/assets/bundle.js
@@ -120,7 +120,7 @@
module.exports = new ActionsHandler();
-},{"./bridge":2,"./utilities":24}],2:[function(require,module,exports){
+},{"./bridge":2,"./utilities":25}],2:[function(require,module,exports){
function Bridge() {
}
@@ -181,7 +181,7 @@
return content;
} );
-},{"./transformer":12}],4:[function(require,module,exports){
+},{"./transformer":13}],4:[function(require,module,exports){
var actions = require('./actions');
var bridge = require('./bridge');
@@ -215,7 +215,7 @@
return content;
} );
-},{"./transformer":12}],6:[function(require,module,exports){
+},{"./transformer":13}],6:[function(require,module,exports){
var bridge = require( "./bridge" );
function addStyleLink( href ) {
@@ -290,7 +290,7 @@
bridge.registerListener( "setDecorOffset", function( payload ) {
transformer.setDecorOffset(payload.offset);
} );
-},{"./bridge":2,"./transformer":12}],8:[function(require,module,exports){
+},{"./bridge":2,"./transformer":13}],8:[function(require,module,exports){
var bridge = require("./bridge");
var loader = require("./loader");
var utilities = require("./utilities");
@@ -374,7 +374,29 @@
setImageBackgroundsForDarkMode: setImageBackgroundsForDarkMode
};
-},{"./bridge":2,"./loader":6,"./utilities":24}],9:[function(require,module,exports){
+},{"./bridge":2,"./loader":6,"./utilities":25}],9:[function(require,module,exports){
+var bridge = require("./bridge");
+
+/*
+OnClick handler function for IPA spans.
+*/
+function ipaClickHandler() {
+ var container = this;
+ bridge.sendMessage( "ipaSpan", { "contents": container.innerHTML });
+}
+
+function addIPAonClick( content ) {
+ var spans = content.querySelectorAll( "span.ipa_button" );
+ for (var i = 0; i < spans.length; i++) {
+ var parent = spans[i].parentNode;
+ parent.onclick = ipaClickHandler;
+ }
+}
+
+module.exports = {
+ addIPAonClick: addIPAonClick
+};
+},{"./bridge":2}],10:[function(require,module,exports){
var bridge = require("./bridge");
bridge.registerListener( "displayPreviewHTML", function( payload ) {
@@ -383,7 +405,7 @@
content.innerHTML = payload.html;
} );
-},{"./bridge":2}],10:[function(require,module,exports){
+},{"./bridge":2}],11:[function(require,module,exports){
var bridge = require("./bridge");
bridge.registerListener( "setDirectionality", function( payload ) {
@@ -399,9 +421,10 @@
html.classList.add( "ui-" + payload.uiDirection );
} );
-},{"./bridge":2}],11:[function(require,module,exports){
+},{"./bridge":2}],12:[function(require,module,exports){
var bridge = require("./bridge");
var transformer = require("./transformer");
+var clickHandlerSetup = require("./onclick");
bridge.registerListener( "clearContents", function() {
clearContents();
@@ -495,15 +518,18 @@
// Content service transformations
if (!window.fromRestBase) {
transformer.transform( "moveFirstGoodParagraphUp" );
+
transformer.transform( "hideRedLinks", content );
transformer.transform( "setMathFormulaImageMaxWidth", content );
transformer.transform( "anchorPopUpMediaTransforms", content );
+ transformer.transform( "hideIPA", content );
+ } else {
+ clickHandlerSetup.addIPAonClick( content );
}
// client only transformations:
transformer.transform( "addDarkModeStyles", content ); // client setting
transformer.transform( "setDivWidth", content ); // offsetWidth
- transformer.transform( "hideIPA", content ); // clickHandler
if (!window.isMainPage) {
transformer.transform( "hideTables", content ); // clickHandler
@@ -579,11 +605,14 @@
transformer.transform( "hideRedLinks", content );
transformer.transform( "setMathFormulaImageMaxWidth", content );
transformer.transform( "anchorPopUpMediaTransforms", content );
+ transformer.transform( "hideIPA", content );
+ } else {
+ clickHandlerSetup.addIPAonClick( content );
}
transformer.transform( "addDarkModeStyles", content ); // client setting
transformer.transform( "setDivWidth", content ); // offsetWidth
- transformer.transform( "hideIPA", content ); // clickHandler
+
transformer.transform( "hideRefs", content ); // clickHandler
if (!window.isMainPage) {
@@ -673,7 +702,7 @@
bridge.sendMessage( "currentSectionResponse", { sectionID:
getCurrentSection() } );
} );
-},{"./bridge":2,"./transformer":12}],12:[function(require,module,exports){
+},{"./bridge":2,"./onclick":9,"./transformer":13}],13:[function(require,module,exports){
function Transformer() {
}
@@ -704,7 +733,7 @@
};
module.exports = new Transformer();
-},{}],13:[function(require,module,exports){
+},{}],14:[function(require,module,exports){
var transformer = require("../transformer");
var night = require("../night");
@@ -713,7 +742,7 @@
night.setImageBackgroundsForDarkMode ( content );
}
} );
-},{"../night":8,"../transformer":12}],14:[function(require,module,exports){
+},{"../night":8,"../transformer":13}],15:[function(require,module,exports){
var transformer = require("../transformer");
var utilities = require("../utilities");
@@ -753,7 +782,7 @@
images[i].addEventListener('load', maybeAddImageOverflowXContainer,
false);
}
} );
-},{"../transformer":12,"../utilities":24}],15:[function(require,module,exports){
+},{"../transformer":13,"../utilities":25}],16:[function(require,module,exports){
var transformer = require("../transformer");
/*
@@ -893,9 +922,88 @@
module.exports = {
handleTableCollapseOrExpandClick: handleTableCollapseOrExpandClick
};
-},{"../transformer":12}],16:[function(require,module,exports){
+},{"../transformer":13}],17:[function(require,module,exports){
var transformer = require("../transformer");
-var bridge = require("../bridge");
+var collapseTables = require("./collapseTables");
+
+transformer.register( "hideRefs", function( content ) {
+ var refLists = content.querySelectorAll( "div.reflist" );
+ for (var i = 0; i < refLists.length; i++) {
+ var caption = "<strong class='app_table_collapsed_caption'>" +
window.string_expand_refs + "</strong>";
+
+ //create the container div that will contain both the original table
+ //and the collapsed version.
+ var containerDiv = document.createElement( 'div' );
+ containerDiv.className = 'app_table_container';
+ refLists[i].parentNode.insertBefore(containerDiv, refLists[i]);
+ refLists[i].parentNode.removeChild(refLists[i]);
+
+ //create the collapsed div
+ var collapsedDiv = document.createElement( 'div' );
+ collapsedDiv.classList.add('app_table_collapsed_container');
+ collapsedDiv.classList.add('app_table_collapsed_open');
+ collapsedDiv.innerHTML = caption;
+
+ //create the bottom collapsed div
+ var bottomDiv = document.createElement( 'div' );
+ bottomDiv.classList.add('app_table_collapsed_bottom');
+ bottomDiv.classList.add('app_table_collapse_icon');
+ bottomDiv.innerHTML = window.string_table_close;
+
+ //add our stuff to the container
+ containerDiv.appendChild(collapsedDiv);
+ containerDiv.appendChild(refLists[i]);
+ containerDiv.appendChild(bottomDiv);
+
+ //give it just a little padding
+ refLists[i].style.padding = "4px";
+
+ //set initial visibility
+ refLists[i].style.display = 'none';
+ collapsedDiv.style.display = 'block';
+ bottomDiv.style.display = 'none';
+
+ //assign click handler to the collapsed divs
+ collapsedDiv.onclick = collapseTables.handleTableCollapseOrExpandClick;
+ bottomDiv.onclick = collapseTables.handleTableCollapseOrExpandClick;
+ }
+} );
+},{"../transformer":13,"./collapseTables":16}],18:[function(require,module,exports){
+var transformer = require("../../transformer");
+
+transformer.register( "anchorPopUpMediaTransforms", function( content ) {
+ // look for video thumbnail containers (divs that have class
"PopUpMediaTransform"),
+ // and enclose them in an anchor that will lead to the correct click
handler...
+ var mediaDivs = content.querySelectorAll( 'div.PopUpMediaTransform' );
+ for ( var i = 0; i < mediaDivs.length; i++ ) {
+ var mediaDiv = mediaDivs[i];
+ var imgTags = mediaDiv.querySelectorAll( 'img' );
+ if (imgTags.length === 0) {
+ continue;
+ }
+ // the first img element is the video thumbnail, and its 'alt'
attribute is
+ // the file name of the video!
+ if (!imgTags[0].getAttribute( 'alt' )) {
+ continue;
+ }
+ // also, we should hide the "Play media" link that appears
under the thumbnail,
+ // since we don't need it.
+ var aTags = mediaDiv.querySelectorAll( 'a' );
+ if (aTags.length > 0) {
+ aTags[0].parentNode.removeChild(aTags[0]);
+ }
+ var containerLink = document.createElement( 'a' );
+ containerLink.setAttribute( 'href', imgTags[0].getAttribute( 'alt' ) );
+ containerLink.classList.add( 'app_media' );
+ mediaDiv.parentNode.insertBefore(containerLink, mediaDiv);
+ mediaDiv.parentNode.removeChild(mediaDiv);
+ containerLink.appendChild(imgTags[0]);
+ }
+} );
+
+},{"../../transformer":13}],19:[function(require,module,exports){
+var transformer = require("../../transformer");
+var bridge = require("../../bridge");
/*
OnClick handler function for IPA spans.
@@ -942,86 +1050,7 @@
containerSpan.onclick = ipaClickHandler;
}
} );
-},{"../bridge":2,"../transformer":12}],17:[function(require,module,exports){
-var transformer = require("../transformer");
-var collapseTables = require("./collapseTables");
-
-transformer.register( "hideRefs", function( content ) {
- var refLists = content.querySelectorAll( "div.reflist" );
- for (var i = 0; i < refLists.length; i++) {
- var caption = "<strong class='app_table_collapsed_caption'>" +
window.string_expand_refs + "</strong>";
-
- //create the container div that will contain both the original table
- //and the collapsed version.
- var containerDiv = document.createElement( 'div' );
- containerDiv.className = 'app_table_container';
- refLists[i].parentNode.insertBefore(containerDiv, refLists[i]);
- refLists[i].parentNode.removeChild(refLists[i]);
-
- //create the collapsed div
- var collapsedDiv = document.createElement( 'div' );
- collapsedDiv.classList.add('app_table_collapsed_container');
- collapsedDiv.classList.add('app_table_collapsed_open');
- collapsedDiv.innerHTML = caption;
-
- //create the bottom collapsed div
- var bottomDiv = document.createElement( 'div' );
- bottomDiv.classList.add('app_table_collapsed_bottom');
- bottomDiv.classList.add('app_table_collapse_icon');
- bottomDiv.innerHTML = window.string_table_close;
-
- //add our stuff to the container
- containerDiv.appendChild(collapsedDiv);
- containerDiv.appendChild(refLists[i]);
- containerDiv.appendChild(bottomDiv);
-
- //give it just a little padding
- refLists[i].style.padding = "4px";
-
- //set initial visibility
- refLists[i].style.display = 'none';
- collapsedDiv.style.display = 'block';
- bottomDiv.style.display = 'none';
-
- //assign click handler to the collapsed divs
- collapsedDiv.onclick = collapseTables.handleTableCollapseOrExpandClick;
- bottomDiv.onclick = collapseTables.handleTableCollapseOrExpandClick;
- }
-} );
-},{"../transformer":12,"./collapseTables":15}],18:[function(require,module,exports){
-var transformer = require("../../transformer");
-
-transformer.register( "anchorPopUpMediaTransforms", function( content ) {
- // look for video thumbnail containers (divs that have class
"PopUpMediaTransform"),
- // and enclose them in an anchor that will lead to the correct click
handler...
- var mediaDivs = content.querySelectorAll( 'div.PopUpMediaTransform' );
- for ( var i = 0; i < mediaDivs.length; i++ ) {
- var mediaDiv = mediaDivs[i];
- var imgTags = mediaDiv.querySelectorAll( 'img' );
- if (imgTags.length === 0) {
- continue;
- }
- // the first img element is the video thumbnail, and its 'alt'
attribute is
- // the file name of the video!
- if (!imgTags[0].getAttribute( 'alt' )) {
- continue;
- }
- // also, we should hide the "Play media" link that appears
under the thumbnail,
- // since we don't need it.
- var aTags = mediaDiv.querySelectorAll( 'a' );
- if (aTags.length > 0) {
- aTags[0].parentNode.removeChild(aTags[0]);
- }
- var containerLink = document.createElement( 'a' );
- containerLink.setAttribute( 'href', imgTags[0].getAttribute( 'alt' ) );
- containerLink.classList.add( 'app_media' );
- mediaDiv.parentNode.insertBefore(containerLink, mediaDiv);
- mediaDiv.parentNode.removeChild(mediaDiv);
- containerLink.appendChild(imgTags[0]);
- }
-} );
-
-},{"../../transformer":12}],19:[function(require,module,exports){
+},{"../../bridge":2,"../../transformer":13}],20:[function(require,module,exports){
var transformer = require("../../transformer");
transformer.register( "hideRedLinks", function( content ) {
@@ -1034,7 +1063,7 @@
redLink.parentNode.replaceChild( replacementSpan, redLink );
}
} );
-},{"../../transformer":12}],20:[function(require,module,exports){
+},{"../../transformer":13}],21:[function(require,module,exports){
var transformer = require("../../transformer");
// Move the first non-empty paragraph (and related elements) to the top of the
section.
@@ -1118,7 +1147,7 @@
}
}
-},{"../../transformer":12}],21:[function(require,module,exports){
+},{"../../transformer":13}],22:[function(require,module,exports){
var transformer = require("../../transformer");
transformer.register( "setMathFormulaImageMaxWidth", function( content ) {
@@ -1135,7 +1164,7 @@
}
}
} );
-},{"../../transformer":12}],22:[function(require,module,exports){
+},{"../../transformer":13}],23:[function(require,module,exports){
var transformer = require("../transformer");
transformer.register( "setDivWidth", function( content ) {
@@ -1153,7 +1182,7 @@
}
}
} );
-},{"../transformer":12}],23:[function(require,module,exports){
+},{"../transformer":13}],24:[function(require,module,exports){
var transformer = require("../transformer");
var utilities = require("../utilities");
@@ -1262,7 +1291,7 @@
images[i].addEventListener('load', maybeWidenImage, false);
}
} );
-},{"../transformer":12,"../utilities":24}],24:[function(require,module,exports){
+},{"../transformer":13,"../utilities":25}],25:[function(require,module,exports){
function hasAncestor( el, tagName ) {
if (el !== null && el.tagName === tagName) {
@@ -1357,4 +1386,4 @@
firstAncestorWithMultipleChildren: firstAncestorWithMultipleChildren
};
-},{}]},{},[2,7,24,12,13,14,15,16,17,22,23,18,19,20,21,1,3,4,5,6,8,9,10,11])
\ No newline at end of file
+},{}]},{},[2,7,25,13,14,15,16,17,23,24,18,19,20,21,22,1,3,4,5,6,8,10,11,12])
\ No newline at end of file
diff --git a/www/js/onclick.js b/www/js/onclick.js
new file mode 100644
index 0000000..d77a829
--- /dev/null
+++ b/www/js/onclick.js
@@ -0,0 +1,21 @@
+var bridge = require("./bridge");
+
+/*
+OnClick handler function for IPA spans.
+*/
+function ipaClickHandler() {
+ var container = this;
+ bridge.sendMessage( "ipaSpan", { "contents": container.innerHTML });
+}
+
+function addIPAonClick( content ) {
+ var spans = content.querySelectorAll( "span.ipa_button" );
+ for (var i = 0; i < spans.length; i++) {
+ var parent = spans[i].parentNode;
+ parent.onclick = ipaClickHandler;
+ }
+}
+
+module.exports = {
+ addIPAonClick: addIPAonClick
+};
\ No newline at end of file
diff --git a/www/js/sections.js b/www/js/sections.js
index d5446e5..361649c 100644
--- a/www/js/sections.js
+++ b/www/js/sections.js
@@ -1,5 +1,6 @@
var bridge = require("./bridge");
var transformer = require("./transformer");
+var clickHandlerSetup = require("./onclick");
bridge.registerListener( "clearContents", function() {
clearContents();
@@ -93,15 +94,18 @@
// Content service transformations
if (!window.fromRestBase) {
transformer.transform( "moveFirstGoodParagraphUp" );
+
transformer.transform( "hideRedLinks", content );
transformer.transform( "setMathFormulaImageMaxWidth", content );
transformer.transform( "anchorPopUpMediaTransforms", content );
+ transformer.transform( "hideIPA", content );
+ } else {
+ clickHandlerSetup.addIPAonClick( content );
}
// client only transformations:
transformer.transform( "addDarkModeStyles", content ); // client setting
transformer.transform( "setDivWidth", content ); // offsetWidth
- transformer.transform( "hideIPA", content ); // clickHandler
if (!window.isMainPage) {
transformer.transform( "hideTables", content ); // clickHandler
@@ -177,11 +181,14 @@
transformer.transform( "hideRedLinks", content );
transformer.transform( "setMathFormulaImageMaxWidth", content );
transformer.transform( "anchorPopUpMediaTransforms", content );
+ transformer.transform( "hideIPA", content );
+ } else {
+ clickHandlerSetup.addIPAonClick( content );
}
transformer.transform( "addDarkModeStyles", content ); // client setting
transformer.transform( "setDivWidth", content ); // offsetWidth
- transformer.transform( "hideIPA", content ); // clickHandler
+
transformer.transform( "hideRefs", content ); // clickHandler
if (!window.isMainPage) {
diff --git a/www/js/transforms.js b/www/js/transforms.js
index b0d4b91..8c854ad 100644
--- a/www/js/transforms.js
+++ b/www/js/transforms.js
@@ -2,7 +2,8 @@
require("./transforms/addImageOverflowContainers");
require("./transforms/service/anchorPopUpMediaTransforms");
require("./transforms/collapseTables");
-require("./transforms/hideIpa");
+require("./transforms/service/hideIpa");
+require("./transforms/clickIpa");
require("./transforms/service/hideRedLinks");
require("./transforms/hideRefs");
require("./transforms/service/relocateFirstParagraph");
diff --git a/www/js/transforms/hideIpa.js b/www/js/transforms/service/hideIpa.js
similarity index 94%
rename from www/js/transforms/hideIpa.js
rename to www/js/transforms/service/hideIpa.js
index c6de0ca..61b83aa 100644
--- a/www/js/transforms/hideIpa.js
+++ b/www/js/transforms/service/hideIpa.js
@@ -1,5 +1,5 @@
-var transformer = require("../transformer");
-var bridge = require("../bridge");
+var transformer = require("../../transformer");
+var bridge = require("../../bridge");
/*
OnClick handler function for IPA spans.
--
To view, visit https://gerrit.wikimedia.org/r/253469
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Iead9d28e55c5e9bcccdd471eba59aa1a3d00a719
Gerrit-PatchSet: 2
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: BearND <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: Sniedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits