Advertisement
brandizzi

Untitled

Jul 19th, 2016
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        Liferay's Social Office forums revamp
  3. // @namespace   in.liferay.com brandizzi
  4. // @include     https://in.liferay.com/*
  5. // @include     https://dev.liferay.com/*
  6. // @version     1
  7. // @grant       none
  8. // ==/UserScript==
  9.  
  10. var fromCamelCaseToDashSeparated = function(str) {
  11.     return str.replace(/([a-z][A-Z])/g, function (g) {
  12.         return g[0] + '-' + g[1].toLowerCase();
  13.     });
  14. }
  15.  
  16. var GlobalStyleSheet = function() {
  17.     this.title = Math.random().toString(36);
  18.     this.element = document.createElement('style');
  19.     this.element.title = this.title;
  20.     getChildByTag(document, 'head').appendChild(this.element);
  21.  
  22.     for (var i in document.styleSheets) {
  23.         var styleSheet = document.styleSheets[i];
  24.  
  25.         if (styleSheet.title == this.title) {
  26.             this.styleSheet = styleSheet;
  27.             this.styleSheet.disbled = false;
  28.         }
  29.     }
  30. }
  31.  
  32. GlobalStyleSheet.prototype.addRule = function(selector, properties) {
  33.     var rule = selector + ' {\n';
  34.  
  35.     for (var k in properties) {
  36.         var value = properties[k];
  37.         var property;
  38.  
  39.         if (k == 'cssFloat') {
  40.             property = 'float';
  41.         } else {
  42.             property = fromCamelCaseToDashSeparated(k);
  43.         }
  44.  
  45.         rule += '    ' + property + ': ' + value + ';\n';
  46.     }
  47.  
  48.     rule += '}\n\n';
  49.  
  50.     this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length);
  51. }
  52.  
  53. var convertToSpan = function(item) {
  54.     var span = document.createElement('span');
  55.  
  56.     while (item.childNodes.length > 0) {
  57.         span.appendChild(item.childNodes[0]);
  58.     }
  59.  
  60.     return span;
  61. }
  62.  
  63. var getChildByClass = function(node, clazz, index) {
  64.     if (typeof index == "undefined") {
  65.         index = 0;
  66.     }
  67.     return node.getElementsByClassName(clazz)[index];
  68. }
  69.  
  70. var getChildByTag = function(node, tag, index) {
  71.     if (typeof index == "undefined") {
  72.         index = 0;
  73.     }
  74.     return node.getElementsByTagName(tag)[index];
  75. }
  76.  
  77. var setStyle = function(node, style) {
  78.     for (var k in style) {
  79.         node.style[k] = style[k];
  80.     }
  81. }
  82.  
  83. var deleteNode = function(node) {
  84.     node.parentNode.removeChild(node);
  85. }
  86.  
  87. var moveControls = function(destination, controls, acc) {
  88.     for (var j=0; j<controls.length; j++) {
  89.         var control = controls[j];
  90.         var lis = control.getElementsByTagName('li');
  91.  
  92.         for (var k=0; k < lis.length; k++) {
  93.             var li = lis[k];
  94.             var span = getChildByTag(li, 'span');
  95.  
  96.             acc.push(span);
  97.             destination.appendChild(span);
  98.         }
  99.     }
  100. }
  101.  
  102. document.moveQuickReply = function(messageId) {
  103.     var message = document.getElementById(messageId);
  104.     var messageContainer = message.parentNode;
  105.     var quickReplyDiv = document.getElementById('_19_addQuickReplyDiv');
  106.  
  107.     // There is an "a" element with the same id, should take the table.
  108.     message = document.evaluate(
  109.         ".//table[@id='" + messageId + "']",
  110.         messageContainer, null, XPathResult.ANY_TYPE, null
  111.     ).iterateNext();
  112.  
  113.     messageContainer.insertBefore(quickReplyDiv, message.nextElementSibling);
  114. }
  115.  
  116. var messageContainers = document.getElementsByClassName('message-container');
  117.  
  118. for (var i=0; i < messageContainers.length; i++) {
  119.     var messageContainer = messageContainers[i];
  120.     var message = getChildByClass(messageContainer, 'thread-message-view');
  121.  
  122.     var row = getChildByTag(message, 'tr');
  123.  
  124.     var userInfo = getChildByTag(row, 'td', 0);
  125.     var content = getChildByTag(row, 'td', 1);
  126.  
  127.     var userActionItems = [];
  128.  
  129.     var threadTop = getChildByClass(message, 'thread-top');
  130.     var feedbackControls = threadTop.getElementsByClassName('edit-controls');
  131.     var feedbackDiv = document.createElement('div');
  132.  
  133.     moveControls(feedbackDiv, feedbackControls, userActionItems);
  134.  
  135.     var flags = getChildByClass(message, 'taglib-flags');
  136.     var flagsSpan = getChildByTag(flags, 'span');
  137.  
  138.     userActionItems.push(flagsSpan);
  139.     feedbackDiv.appendChild(flagsSpan);
  140.  
  141.     var thumbs = getChildByClass(message, 'thumbs');
  142.     var rating = getChildByTag(thumbs, 'div');
  143.     var ratingSpan = convertToSpan(rating)
  144.  
  145.     var ratingInputContainer = getChildByClass(ratingSpan, 'rating-input-container');
  146.     var ratingLabel = getChildByClass(ratingSpan, 'rating-label');
  147.  
  148.     userActionItems.push(ratingSpan);
  149.     feedbackDiv.appendChild(ratingSpan);
  150.  
  151.     var threadBottom = getChildByClass(message, 'thread-bottom');
  152.     var editControls = threadBottom.getElementsByClassName('edit-controls');
  153.     var editDiv = document.createElement('div');
  154.  
  155.     moveControls(editDiv, editControls, userActionItems);
  156.  
  157.     var subject = getChildByClass(threadTop, 'subject');
  158.  
  159.     var taglibUserDisplay = getChildByClass(userInfo, 'taglib-user-display');
  160.     var userProfileImage = getChildByClass(taglibUserDisplay, 'user-profile-image');
  161.     var avatar = getChildByClass(userProfileImage, 'avatar');
  162.     var userName = getChildByClass(taglibUserDisplay, 'user-name');
  163.  
  164.  
  165.  
  166.     userInfo.appendChild(subject);
  167.     userInfo.appendChild(feedbackDiv);
  168.     userInfo.appendChild(editDiv);
  169.  
  170.     var messageAttachments = getChildByClass(content, 'message-attachments');
  171.     if (typeof messageAttachments != "undefined") {
  172.         var h3 = getChildByTag(messageAttachments, 'h3');
  173.  
  174.         h3.style.lineHeight = '1em';
  175.         userInfo.appendChild(messageAttachments);
  176.     }
  177.  
  178.     for (var j in userActionItems) {
  179.         setStyle(userActionItems[j], {
  180.             margin: '0.5em 1em 0 0',
  181.             display: 'inline-block'
  182.         });
  183.     }
  184.  
  185.     setStyle(messageContainer, {borderStyle: 'none'});
  186.  
  187.     setStyle(message, {width: '70%', marginLeft: '10%'});
  188.  
  189.     setStyle(userInfo, {
  190.         minWidth: '300px',
  191.         width: '25%',
  192.         minHeight: '280px',
  193.         display: 'table-cell',
  194.         position: 'relative',
  195.         fontSize: '90%',
  196.         marginLeft: '5%'
  197.     });
  198.  
  199.     setStyle(userProfileImage, {
  200.         display: 'block',
  201.         maxWidth: '100%',
  202.         height: 'auto',
  203.         textAlign: 'left'
  204.     });
  205.  
  206.     setStyle(userName, {
  207.         display: 'block',
  208.         position: 'relative',
  209.         textAlign: 'left',
  210.         marginLeft: '0',
  211.         left: '0',
  212.         top: '0'
  213.     });
  214.  
  215.     setStyle(avatar, {width: '100px'});
  216.  
  217.     setStyle(ratingInputContainer, {display: 'none'});
  218.  
  219.     setStyle(ratingLabel, {display: 'inline-block'});
  220.  
  221.     setStyle(row, {display: 'table-row'});
  222.  
  223.     setStyle(subject, {marginTop: '1em'});
  224.  
  225.     setStyle(content, {
  226.         display: 'table-cell',
  227.         width: '70%',
  228.         marginLeft: '5%',
  229.         fontSize: '120%'
  230.     });
  231.  
  232.     var globalStyleSheet = new GlobalStyleSheet();
  233.  
  234.     globalStyleSheet.addRule('#_19_addQuickReplyDiv', {
  235.         width: '46%',
  236.         marginLeft: '33%'
  237.     });
  238.     globalStyleSheet.addRule('#_19_addQuickReplyDiv .control-label', {
  239.         display: 'none'
  240.     });
  241.  
  242.  
  243.     var floatContainer = getChildByClass(content, 'float-container');
  244.  
  245.     deleteNode(threadBottom);
  246.     deleteNode(floatContainer);
  247.  
  248.     var hr = document.createElement('hr');
  249.     messageContainer.appendChild(hr);
  250.  
  251. /*  // Some day, maybe...
  252.     var quickReply = document.evaluate(
  253.         ".//a[starts-with(@href, 'javascript:_19_addQuickReply')]",
  254.         feedbackDiv, null, XPathResult.ANY_TYPE, null
  255.     ).iterateNext();
  256.  
  257.     quickReply.href = quickReply.href.replace('javascript:',
  258.         'javascript:document.moveQuickReply("' + message.id + '");'
  259.     );*/
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement