Workflowy Sort

Alphabetically sort open lists in workflowy

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Workflowy Sort
// @namespace    https://workflowy.com
// @version      0.1
// @description  Alphabetically sort open lists in workflowy
// @author       Roland
// @match        https://workflowy.com
// @run-at       document-idle
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // On page load, listen for bullets to populate, then sort them
    var bulletLoaded = setInterval(function(){
        console.log('checking bullets');
        if( document.getElementById('loadingScreen').style.display === 'none' ) {
            console.log('bullets loaded!');
            sortBullets();
            clearInterval(bulletLoaded);
        }
    }, 200);

    // sort bullets on click events (bullet expansion and clicking into a bullet)
    document.addEventListener ("mousedown", autoSort);

    // sort bullets on hotkey press (Ctrl+Shift+S by default)
    document.addEventListener('keydown', keyDownSortBullets);

    function autoSort() {
        $(".bullet, a.content, #expandButton").unbind();
        $('.bullet, a.content').click(function(event){
            setTimeout(function(){
                sortBullets();
                console.log('bullet sort');
            }, 250);
        });
        $('#expandButton').click(function(event){
           // if($(this).attr('data-open-on-last-click') === "true" || typeof $(this).attr('data-open-on-last-click') === 'undefined'){
                setTimeout(function(){
                    sortBullets();
                    console.log('expand sort');
                }, 50);
           // }
        });

    }

    function sortBullets() {
        jQuery.fn.sortDomElements = (function() {
            return function(comparator) {
                return Array.prototype.sort.call(this, comparator).each(function(i) {
                    this.parentNode.appendChild(this);
                });
            };
        })();
        $('div.children').children('.project').sortDomElements(function(a,b){
            var akey = $(a).children('.name').children('.content').text().toLowerCase();
            var bkey = $(b).children('.name').children('.content').text().toLowerCase();
            if (akey == bkey) return 0;
            if (akey < bkey) return -1;
            if (akey > bkey) return 1;
        });
        return true;
    }

    function keyDownSortBullets(e) {
        if(e.ctrlKey && e.shiftKey && e.keyCode === 83){
            e.preventDefault();
            console.log('sorting...');
            sortBullets();
            return false;
            //saveAll();
        }
    }
})();