Skip to content

Instantly share code, notes, and snippets.

@bambooom
Last active June 22, 2020 11:45
Show Gist options
  • Select an option

  • Save bambooom/f90c48005709e598ec1f678630c69a9c to your computer and use it in GitHub Desktop.

Select an option

Save bambooom/f90c48005709e598ec1f678630c69a9c to your computer and use it in GitHub Desktop.

Revisions

  1. bambooom revised this gist Jun 22, 2020. No changes.
  2. bambooom revised this gist Jun 22, 2020. 1 changed file with 16 additions and 4 deletions.
    20 changes: 16 additions & 4 deletions shuffle-douban-isay.user.js
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    // ==UserScript==
    // @name Shuffle iSay
    // @namespace https://www.douban.com/people/MoNoMilky/
    // @version 0.1
    // @version 0.2
    // @description Your brain is strange and strong, interesting.
    // @author Bambooom
    // @match https://*.douban.com/*
    @@ -33,7 +33,7 @@
    reorderBtn2.type = 'button';
    reorderBtn2.style.cssText = 'height: 30px;line-height: 28px;padding: 0;width: 66px;border-radius: 3px;'
    + 'cursor: pointer;outline: none;border: 1px solid #c0c0c0;margin-right: 10px;';
    reorderBtn2.onclick = btnClick('#comments textarea.form-area');
    reorderBtn2.onclick = btnClick('#comments textarea.form-area', true);
    }

    // reshare with comments
    @@ -57,11 +57,23 @@
    });
    }

    function btnClick(selector) {
    function btnClick(selector, isReply = false) {
    return function() {
    let textArea = document.querySelector(selector);
    let sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    let shuffledText = sentencize(sourceText);
    textArea.value = shuffledText;
    textArea.textContent = shuffledText;
    if (isReply) {
    textArea.defaultValue = shuffledText;
    let e = new Event('input', { bubbles: true});
    e.simulated = true;
    let tracker = textArea._valueTracker;
    if (tracker) {
    tracker.stopTracking(); // seems React's related thing, https://github.com/facebook/react/issues/11488#issuecomment-347775628
    }
    textArea.dispatchEvent(e);
    }
    };
    }

  3. bambooom renamed this gist Feb 10, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  4. bambooom revised this gist Feb 10, 2020. 1 changed file with 38 additions and 22 deletions.
    60 changes: 38 additions & 22 deletions shuffle-douban-isay.js
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@
    // @name Shuffle iSay
    // @namespace https://www.douban.com/people/MoNoMilky/
    // @version 0.1
    // @description Your brain is actually strange and strong.
    // @description Your brain is strange and strong, interesting.
    // @author Bambooom
    // @match https://*.douban.com/*
    // @grant none
    @@ -11,44 +11,60 @@
    (function() {
    'use strict';

    // post a status
    var btnContainer = document.querySelector('#db-isay .btn');
    var submitBtn = document.querySelector('#db-isay .btn .bn-submit');
    var reorderBtn = document.createElement('span');
    btnContainer.insertBefore(reorderBtn, submitBtn);
    reorderBtn.classList.add('bn-flat');
    reorderBtn.textContent = '乱序';
    reorderBtn.style.cssText = 'padding: 4px 6px; margin-right: 4px; cursor: pointer';
    if (btnContainer) {
    let submitBtn = document.querySelector('#db-isay .btn .bn-submit');
    let reorderBtn = document.createElement('span');
    btnContainer.insertBefore(reorderBtn, submitBtn);
    reorderBtn.classList.add('bn-flat');
    reorderBtn.textContent = '乱序';
    reorderBtn.style.cssText = 'padding: 4px 6px; margin-right: 4px; cursor: pointer';
    reorderBtn.onclick = btnClick('#db-isay textarea');
    }

    reorderBtn.onclick = function () {
    var textArea = document.querySelector('#db-isay textarea');
    var sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    };
    // reply a comment to a status
    var commentContainer = document.querySelector('.comment-editor .form-foot-item:last-child');
    if (commentContainer) {
    var commentSubmitBtn = document.querySelector('.comment-editor .comment-form-btn');
    var reorderBtn2 = document.createElement('button');
    commentContainer.insertBefore(reorderBtn2, commentSubmitBtn);
    reorderBtn2.textContent = '乱序';
    reorderBtn2.type = 'button';
    reorderBtn2.style.cssText = 'height: 30px;line-height: 28px;padding: 0;width: 66px;border-radius: 3px;'
    + 'cursor: pointer;outline: none;border: 1px solid #c0c0c0;margin-right: 10px;';
    reorderBtn2.onclick = btnClick('#comments textarea.form-area');
    }

    // reshare with comments
    var reshareBtns = document.querySelectorAll('.btn-reshare');
    for (let i = 0; i < reshareBtns.length; i++) {
    reshareBtns[i].addEventListener('click', function() {
    let timerId = setInterval(() => {
    if (document.querySelector('.reshare-form')) {
    var reshareFooter = document.querySelector('.reshare-form .reshare-footer');
    var reshareSubmit = document.querySelector('.reshare-form .reshare-footer .reshare-btn');
    var reorderBtn2 = document.createElement('button');
    reshareFooter.insertBefore(reorderBtn2, reshareSubmit);
    reorderBtn2.textContent = '乱序';
    reorderBtn2.type = 'button';
    reorderBtn2.style.cssText = 'width: 5em; height: 30px; ling-height: 30px; text-align: center;'
    var reorderBtn3 = document.createElement('button');
    reshareFooter.insertBefore(reorderBtn3, reshareSubmit);
    reorderBtn3.textContent = '乱序';
    reorderBtn3.type = 'button';
    reorderBtn3.style.cssText = 'width: 5em; height: 30px; ling-height: 30px; text-align: center;'
    + 'vertical-align: middle; border: none; margin-right: 10px; border-radius: 3px;cursor: pointer;';
    reorderBtn2.onclick = function () {
    var reshareTextArea = document.querySelector('.reshare-form textarea');
    var sourceText = reshareTextArea.value;
    reshareTextArea.value = sentencize(sourceText);
    };
    reorderBtn3.onclick = btnClick('.reshare-form textarea');
    clearInterval(timerId);
    }
    }, 100);
    });
    }

    function btnClick(selector) {
    return function() {
    let textArea = document.querySelector(selector);
    let sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    };
    }

    function tokenize(txt) {
    let tokenList = [], token = '';
    for (let i = 0; i < txt.length; i++) {
  5. bambooom revised this gist Feb 10, 2020. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions shuffle-douban-isay.js
    Original file line number Diff line number Diff line change
    @@ -17,9 +17,7 @@
    btnContainer.insertBefore(reorderBtn, submitBtn);
    reorderBtn.classList.add('bn-flat');
    reorderBtn.textContent = '乱序';
    reorderBtn.style.padding = '4px 6px';
    reorderBtn.style.marginRight = '4px';
    reorderBtn.style.cursor = 'pointer';
    reorderBtn.style.cssText = 'padding: 4px 6px; margin-right: 4px; cursor: pointer';

    reorderBtn.onclick = function () {
    var textArea = document.querySelector('#db-isay textarea');
    @@ -38,6 +36,8 @@
    reshareFooter.insertBefore(reorderBtn2, reshareSubmit);
    reorderBtn2.textContent = '乱序';
    reorderBtn2.type = 'button';
    reorderBtn2.style.cssText = 'width: 5em; height: 30px; ling-height: 30px; text-align: center;'
    + 'vertical-align: middle; border: none; margin-right: 10px; border-radius: 3px;cursor: pointer;';
    reorderBtn2.onclick = function () {
    var reshareTextArea = document.querySelector('.reshare-form textarea');
    var sourceText = reshareTextArea.value;
  6. bambooom revised this gist Feb 10, 2020. 1 changed file with 27 additions and 11 deletions.
    38 changes: 27 additions & 11 deletions shuffle-douban-isay.js
    Original file line number Diff line number Diff line change
    @@ -21,11 +21,33 @@
    reorderBtn.style.marginRight = '4px';
    reorderBtn.style.cursor = 'pointer';

    var reshareFooter = document.querySelector('.reshare-form .reshare-footer');
    var reshareSubmit = document.querySelector('.reshare-form .reshare-footer .reshare-btn');
    var reorderBtn2 = document.createElement('button');
    reshareFooter.insertBefore(reorderBtn2, reshareSubmit);
    reorderBtn2.textContent = '乱序';
    reorderBtn.onclick = function () {
    var textArea = document.querySelector('#db-isay textarea');
    var sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    };

    var reshareBtns = document.querySelectorAll('.btn-reshare');
    for (let i = 0; i < reshareBtns.length; i++) {
    reshareBtns[i].addEventListener('click', function() {
    let timerId = setInterval(() => {
    if (document.querySelector('.reshare-form')) {
    var reshareFooter = document.querySelector('.reshare-form .reshare-footer');
    var reshareSubmit = document.querySelector('.reshare-form .reshare-footer .reshare-btn');
    var reorderBtn2 = document.createElement('button');
    reshareFooter.insertBefore(reorderBtn2, reshareSubmit);
    reorderBtn2.textContent = '乱序';
    reorderBtn2.type = 'button';
    reorderBtn2.onclick = function () {
    var reshareTextArea = document.querySelector('.reshare-form textarea');
    var sourceText = reshareTextArea.value;
    reshareTextArea.value = sentencize(sourceText);
    };
    clearInterval(timerId);
    }
    }, 100);
    });
    }

    function tokenize(txt) {
    let tokenList = [], token = '';
    @@ -93,10 +115,4 @@
    }
    return result.join('');
    }

    reorderBtn.onclick = function () {
    var textArea = document.querySelector('#db-isay textarea');
    var sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    };
    })();
  7. bambooom created this gist Feb 10, 2020.
    102 changes: 102 additions & 0 deletions shuffle-douban-isay.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,102 @@
    // ==UserScript==
    // @name Shuffle iSay
    // @namespace https://www.douban.com/people/MoNoMilky/
    // @version 0.1
    // @description Your brain is actually strange and strong.
    // @author Bambooom
    // @match https://*.douban.com/*
    // @grant none
    // ==/UserScript==

    (function() {
    'use strict';

    var btnContainer = document.querySelector('#db-isay .btn');
    var submitBtn = document.querySelector('#db-isay .btn .bn-submit');
    var reorderBtn = document.createElement('span');
    btnContainer.insertBefore(reorderBtn, submitBtn);
    reorderBtn.classList.add('bn-flat');
    reorderBtn.textContent = '乱序';
    reorderBtn.style.padding = '4px 6px';
    reorderBtn.style.marginRight = '4px';
    reorderBtn.style.cursor = 'pointer';

    var reshareFooter = document.querySelector('.reshare-form .reshare-footer');
    var reshareSubmit = document.querySelector('.reshare-form .reshare-footer .reshare-btn');
    var reorderBtn2 = document.createElement('button');
    reshareFooter.insertBefore(reorderBtn2, reshareSubmit);
    reorderBtn2.textContent = '乱序';

    function tokenize(txt) {
    let tokenList = [], token = '';
    for (let i = 0; i < txt.length; i++) {
    let char = txt[i];
    if (/[a-zA-Z0-9]/.test(char)) {
    token += char;
    } else {
    if (token !== '') {
    tokenList.push(token);
    token = '';
    }
    tokenList.push(char);
    }
    }
    if (token !== '') {
    tokenList.push(token);
    }
    return tokenList;
    }

    function choose(choices) {
    var index = Math.floor(Math.random() * choices.length);
    return choices[index];
    }

    function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
    j = Math.floor(Math.random() * (i + 1));
    x = a[i];
    a[i] = a[j];
    a[j] = x;
    }
    return a;
    }

    function reorder(tokenList) {
    let nGrams = [2, 3], i = 0, reordered = [];
    while (i < tokenList.length) {
    let nGram = choose(nGrams);
    let j = Math.min(i + nGram, tokenList.length);
    nGram = tokenList.slice(i, j);
    reordered = reordered.concat(shuffle(nGram));
    i = j;
    }
    return reordered;
    }

    function sentencize(text) {
    let result = [];
    let part = '';
    for(let i = 0; i < text.length; i++) {
    let char = text[i];
    if (/[,:;?\.\s]/.test(char)) {
    result = result.concat(reorder(tokenize(part)));
    result.push(char);
    part = '';
    } else {
    part += char;
    }
    }
    if (part !== '') {
    result = result.concat(reorder(tokenize(part)));
    }
    return result.join('');
    }

    reorderBtn.onclick = function () {
    var textArea = document.querySelector('#db-isay textarea');
    var sourceText = textArea.value;
    textArea.value = sentencize(sourceText);
    };
    })();