brandizzi icon

Untitled

brandizzi | PRO | 07/19/16 09:44:20 PM UTC | 0 ⭐ | 739 👁️ | Never ⏰ | []
JavaScript |

7.44 KB

|

None

|

0 👍

/

0 👎

// ==UserScript==
// @name        Liferay's Social Office forums revamp
// @namespace   in.liferay.com brandizzi
// @include     https://in.liferay.com/*
// @include     https://dev.liferay.com/*
// @version     1
// @grant       none
// ==/UserScript==
 
var fromCamelCaseToDashSeparated = function(str) {
    return str.replace(/([a-z][A-Z])/g, function (g) {
        return g[0] + '-' + g[1].toLowerCase();
    });
}
 
var GlobalStyleSheet = function() {
    this.title = Math.random().toString(36);
    this.element = document.createElement('style');
    this.element.title = this.title;
    getChildByTag(document, 'head').appendChild(this.element);
 
    for (var i in document.styleSheets) {
        var styleSheet = document.styleSheets[i];
 
        if (styleSheet.title == this.title) {
            this.styleSheet = styleSheet;
            this.styleSheet.disbled = false;
        }
    }
}
 
GlobalStyleSheet.prototype.addRule = function(selector, properties) {
    var rule = selector + ' {\n';
 
    for (var k in properties) {
        var value = properties[k];
        var property;
 
        if (k == 'cssFloat') {
            property = 'float';
        } else {
            property = fromCamelCaseToDashSeparated(k);
        }
 
        rule += '    ' + property + ': ' + value + ';\n';
    }
 
    rule += '}\n\n';
 
    this.styleSheet.insertRule(rule, this.styleSheet.cssRules.length);
}
 
var convertToSpan = function(item) {
    var span = document.createElement('span');
 
    while (item.childNodes.length > 0) {
        span.appendChild(item.childNodes[0]);
    }
 
    return span;
}
 
var getChildByClass = function(node, clazz, index) {
    if (typeof index == "undefined") {
        index = 0;
    }
    return node.getElementsByClassName(clazz)[index];
}
 
var getChildByTag = function(node, tag, index) {
    if (typeof index == "undefined") {
        index = 0;
    }
    return node.getElementsByTagName(tag)[index];
}
 
var setStyle = function(node, style) {
    for (var k in style) {
        node.style[k] = style[k];
    }
}
 
var deleteNode = function(node) {
    node.parentNode.removeChild(node);
}
 
var moveControls = function(destination, controls, acc) {
    for (var j=0; j<controls.length; j++) {
        var control = controls[j];
        var lis = control.getElementsByTagName('li');
 
        for (var k=0; k < lis.length; k++) {
            var li = lis[k];
            var span = getChildByTag(li, 'span');
 
            acc.push(span);
            destination.appendChild(span);
        }
    }
}
 
document.moveQuickReply = function(messageId) {
    var message = document.getElementById(messageId);
    var messageContainer = message.parentNode;
    var quickReplyDiv = document.getElementById('_19_addQuickReplyDiv');
 
    // There is an "a" element with the same id, should take the table.
    message = document.evaluate(
        ".//table[@id='" + messageId + "']",
        messageContainer, null, XPathResult.ANY_TYPE, null
    ).iterateNext();
 
    messageContainer.insertBefore(quickReplyDiv, message.nextElementSibling);
}
 
var messageContainers = document.getElementsByClassName('message-container');
 
for (var i=0; i < messageContainers.length; i++) {
    var messageContainer = messageContainers[i];
    var message = getChildByClass(messageContainer, 'thread-message-view');
 
    var row = getChildByTag(message, 'tr');
 
    var userInfo = getChildByTag(row, 'td', 0);
    var content = getChildByTag(row, 'td', 1);
 
    var userActionItems = [];
 
    var threadTop = getChildByClass(message, 'thread-top');
    var feedbackControls = threadTop.getElementsByClassName('edit-controls');
    var feedbackDiv = document.createElement('div');
 
    moveControls(feedbackDiv, feedbackControls, userActionItems);
 
    var flags = getChildByClass(message, 'taglib-flags');
    var flagsSpan = getChildByTag(flags, 'span');
 
    userActionItems.push(flagsSpan);
    feedbackDiv.appendChild(flagsSpan);
 
    var thumbs = getChildByClass(message, 'thumbs');
    var rating = getChildByTag(thumbs, 'div');
    var ratingSpan = convertToSpan(rating)
 
    var ratingInputContainer = getChildByClass(ratingSpan, 'rating-input-container');
    var ratingLabel = getChildByClass(ratingSpan, 'rating-label');
 
    userActionItems.push(ratingSpan);
    feedbackDiv.appendChild(ratingSpan);
 
    var threadBottom = getChildByClass(message, 'thread-bottom');
    var editControls = threadBottom.getElementsByClassName('edit-controls');
    var editDiv = document.createElement('div');
 
    moveControls(editDiv, editControls, userActionItems);
 
    var subject = getChildByClass(threadTop, 'subject');
 
    var taglibUserDisplay = getChildByClass(userInfo, 'taglib-user-display');
    var userProfileImage = getChildByClass(taglibUserDisplay, 'user-profile-image');
    var avatar = getChildByClass(userProfileImage, 'avatar');
    var userName = getChildByClass(taglibUserDisplay, 'user-name');
 
 
 
    userInfo.appendChild(subject);
    userInfo.appendChild(feedbackDiv);
    userInfo.appendChild(editDiv);
 
    var messageAttachments = getChildByClass(content, 'message-attachments');
    if (typeof messageAttachments != "undefined") {
        var h3 = getChildByTag(messageAttachments, 'h3');
 
        h3.style.lineHeight = '1em';
        userInfo.appendChild(messageAttachments);
    }
 
    for (var j in userActionItems) {
        setStyle(userActionItems[j], {
            margin: '0.5em 1em 0 0',
            display: 'inline-block'
        });
    }
 
    setStyle(messageContainer, {borderStyle: 'none'});
 
    setStyle(message, {width: '70%', marginLeft: '10%'});
 
    setStyle(userInfo, {
        minWidth: '300px',
        width: '25%',
        minHeight: '280px',
        display: 'table-cell',
        position: 'relative',
        fontSize: '90%',
        marginLeft: '5%'
    });
 
    setStyle(userProfileImage, {
        display: 'block',
        maxWidth: '100%',
        height: 'auto',
        textAlign: 'left'
    });
 
    setStyle(userName, {
        display: 'block',
        position: 'relative',
        textAlign: 'left',
        marginLeft: '0',
        left: '0',
        top: '0'
    });
 
    setStyle(avatar, {width: '100px'});
 
    setStyle(ratingInputContainer, {display: 'none'});
 
    setStyle(ratingLabel, {display: 'inline-block'});
 
    setStyle(row, {display: 'table-row'});
 
    setStyle(subject, {marginTop: '1em'});
 
    setStyle(content, {
        display: 'table-cell',
        width: '70%',
        marginLeft: '5%',
        fontSize: '120%'
    });
 
    var globalStyleSheet = new GlobalStyleSheet();
 
    globalStyleSheet.addRule('#_19_addQuickReplyDiv', {
        width: '46%',
        marginLeft: '33%'
    });
    globalStyleSheet.addRule('#_19_addQuickReplyDiv .control-label', {
        display: 'none'
    });
 
 
    var floatContainer = getChildByClass(content, 'float-container');
 
    deleteNode(threadBottom);
    deleteNode(floatContainer);
 
    var hr = document.createElement('hr');
    messageContainer.appendChild(hr);
 
/*  // Some day, maybe...
    var quickReply = document.evaluate(
        ".//a[starts-with(@href, 'javascript:_19_addQuickReply')]",
        feedbackDiv, null, XPathResult.ANY_TYPE, null
    ).iterateNext();
 
    quickReply.href = quickReply.href.replace('javascript:',
        'javascript:document.moveQuickReply("' + message.id + '");'
    );*/
}

Comments