mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	use custom color picker instead of color input type
This commit is contained in:
		@@ -948,6 +948,120 @@ RED.editor = (function() {
 | 
			
		||||
        searchInput.trigger("focus");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function createColorPicker(colorRow, color) {
 | 
			
		||||
        var colorSpec = $("<span/>", {
 | 
			
		||||
            class: "red-ui-subflow-color-spec"
 | 
			
		||||
        }).appendTo(colorRow);
 | 
			
		||||
        var colorButton = $("<label/>").appendTo(colorSpec);
 | 
			
		||||
        var colorIcon = $("<span><i class='fa fa-caret-down'/> </span>").css({
 | 
			
		||||
            width: "30px",
 | 
			
		||||
            height: "20px",
 | 
			
		||||
            "padding-left": "15px",
 | 
			
		||||
            "padding-right": "5px"
 | 
			
		||||
        }).appendTo(colorButton);
 | 
			
		||||
        var colorDisp = $("<label/>").css({
 | 
			
		||||
            width: "40px",
 | 
			
		||||
            height: "20px",
 | 
			
		||||
            margin: "6px",
 | 
			
		||||
            "vertical-align": "middle",
 | 
			
		||||
            "background-color": color
 | 
			
		||||
        }).appendTo(colorButton);
 | 
			
		||||
        var selector = $("<input/>", {
 | 
			
		||||
            id: "red-ui-editor-node-color",
 | 
			
		||||
            type: "text",
 | 
			
		||||
            value: color
 | 
			
		||||
        }).css({
 | 
			
		||||
            width: "150px",
 | 
			
		||||
            border: "none"
 | 
			
		||||
        }).appendTo(colorSpec);
 | 
			
		||||
 | 
			
		||||
        selector.on("change", function (e) {
 | 
			
		||||
            var color = selector.val();
 | 
			
		||||
            colorDisp.css({
 | 
			
		||||
                "background-color": color
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
        selector.hover(function (e) {
 | 
			
		||||
            selector.css({
 | 
			
		||||
                "border": "solid 1px #ccc"
 | 
			
		||||
            });
 | 
			
		||||
        }, function() {
 | 
			
		||||
            selector.css({
 | 
			
		||||
                "border": "none"
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        colorButton.on("click", function (e) {
 | 
			
		||||
            var recommendedColors = [
 | 
			
		||||
                "#3FADB5", "#87A980", "#A6BBCF",
 | 
			
		||||
                "#AAAA66", "#C0C0C0", "#C0DEED",
 | 
			
		||||
                "#C7E9C0", "#D7D7A0", "#D8BFD8",
 | 
			
		||||
                "#DAC4B4", "#DEB887", "#DEBD5C",
 | 
			
		||||
                "#E2D96E", "#E6E0F8", "#E7E7AE",
 | 
			
		||||
                "#E9967A", "#F3B567", "#FDD0A2",
 | 
			
		||||
                "#FDF0C2", "#FFAAAA", "#FFCC66",
 | 
			
		||||
                "#FFF0F0", "#FFFFFF"
 | 
			
		||||
            ];
 | 
			
		||||
            var numColors = recommendedColors.length;
 | 
			
		||||
            var width = 58;
 | 
			
		||||
            var height = 28;
 | 
			
		||||
            var picker = $("<div/>", {
 | 
			
		||||
                class: "red-ui-color-picker"
 | 
			
		||||
            }).css({
 | 
			
		||||
                width: (width*4)+"px",
 | 
			
		||||
                height: Math.ceil(numColors/4)*height+"+px"
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var pickerBackground = $('<div>').css({
 | 
			
		||||
                position: "absolute",
 | 
			
		||||
                top: 0,
 | 
			
		||||
                bottom: 0,
 | 
			
		||||
                left: 0,
 | 
			
		||||
                right: 0,
 | 
			
		||||
                zIndex: 20
 | 
			
		||||
            }).appendTo("body");
 | 
			
		||||
            var colorPos = colorDisp.offset();
 | 
			
		||||
            picker.css({
 | 
			
		||||
                top: (colorPos.top +32) +"px",
 | 
			
		||||
                left: (colorPos.left -20) +"px"
 | 
			
		||||
            }).appendTo("body");
 | 
			
		||||
 | 
			
		||||
            function hide() {
 | 
			
		||||
                pickerBackground.remove();
 | 
			
		||||
                picker.remove();
 | 
			
		||||
                RED.keyboard.remove("escape");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var count = 0;
 | 
			
		||||
            var row = null;
 | 
			
		||||
            recommendedColors.forEach(function (col) {
 | 
			
		||||
                if ((count % 4) == 0) {
 | 
			
		||||
                    row = $("<div/>").appendTo(picker);
 | 
			
		||||
                }
 | 
			
		||||
                var button = $("<button/>", {
 | 
			
		||||
                }).css({
 | 
			
		||||
                    width: "50px",
 | 
			
		||||
                    height: "20px",
 | 
			
		||||
                    margin: "4px",
 | 
			
		||||
                    backgroundColor: col,
 | 
			
		||||
                    "border-style": "none"
 | 
			
		||||
                }).appendTo(row);
 | 
			
		||||
                button.on("click",  function (e) {
 | 
			
		||||
                    e.preventDefault();
 | 
			
		||||
                    hide();
 | 
			
		||||
                    selector.val(col);
 | 
			
		||||
                    selector.change();
 | 
			
		||||
                });
 | 
			
		||||
                count++;
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            RED.keyboard.add("*", "escape", hide);
 | 
			
		||||
            pickerBackground.on("mousedown", hide);
 | 
			
		||||
            pickerBackground.show();
 | 
			
		||||
            picker.show();
 | 
			
		||||
        });                
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function buildAppearanceForm(container,node) {
 | 
			
		||||
        var dialogForm = $('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(container);
 | 
			
		||||
 | 
			
		||||
@@ -1003,38 +1117,13 @@ RED.editor = (function() {
 | 
			
		||||
 | 
			
		||||
        if (node.type === "subflow") {
 | 
			
		||||
            // subflow template can select its color
 | 
			
		||||
            var color = node.color ? node.color : "#E9967A";
 | 
			
		||||
            var colorRow = $("<div/>", {
 | 
			
		||||
                class: "form-row"
 | 
			
		||||
            }).appendTo(dialogForm);
 | 
			
		||||
            $("<label/>").text(RED._("editor.color")).appendTo(colorRow);
 | 
			
		||||
            var selector = $("<input/>", {
 | 
			
		||||
                id: "red-ui-editor-node-color",
 | 
			
		||||
                type: "color",
 | 
			
		||||
                value: "#E9967A",
 | 
			
		||||
                list: "red-ui-editor-node-colors"
 | 
			
		||||
            }).css({
 | 
			
		||||
                width: "100px"
 | 
			
		||||
            }).appendTo(colorRow);
 | 
			
		||||
            var colors = $("<datalist id='red-ui-editor-node-colors'>").appendTo(colorRow);
 | 
			
		||||
            var recommendedColors = [
 | 
			
		||||
                "#3FADB5", "#87A980", "#A6BBCF",
 | 
			
		||||
                "#AAAA66", "#C0C0C0", "#C0DEED",
 | 
			
		||||
                "#C7E9C0", "#D7D7A0", "#D8BFD8",
 | 
			
		||||
                "#DAC4B4", "#DEB887", "#DEBD5C",
 | 
			
		||||
                "#E2D96E", "#E6E0F8", "#E7E7AE",
 | 
			
		||||
                "#E9967A", "#F3B567", "#FDD0A2",
 | 
			
		||||
                "#FDF0C2", "#FFAAAA", "#FFCC66",
 | 
			
		||||
                "#FFF0F0", "#FFFFFF"
 | 
			
		||||
            ];
 | 
			
		||||
            recommendedColors.forEach(function (col) {
 | 
			
		||||
                var opt = $("<option>").appendTo(colors);
 | 
			
		||||
                opt.val(col);
 | 
			
		||||
            });
 | 
			
		||||
            if (node.color) {
 | 
			
		||||
                selector.val(node.color);
 | 
			
		||||
            }
 | 
			
		||||
            selector.change();
 | 
			
		||||
        }        
 | 
			
		||||
            createColorPicker(colorRow, color);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $('<div class="form-row"><span data-i18n="editor.portLabels"></span></div>').appendTo(dialogForm);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -579,3 +579,23 @@ button.red-ui-button-small
 | 
			
		||||
button.red-ui-toggleButton.toggle {
 | 
			
		||||
    text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.red-ui-color-picker {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    border: 1px solid $primary-border-color;
 | 
			
		||||
    box-shadow: 0 1px 6px -3px black;
 | 
			
		||||
    background: $secondary-background;
 | 
			
		||||
    z-Index: 21;
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.red-ui-subflow-color-spec {
 | 
			
		||||
    width: fit-content;
 | 
			
		||||
    height: fit-content;
 | 
			
		||||
    padding-top: 8px;
 | 
			
		||||
    padding-bottom: 10px;
 | 
			
		||||
    padding-left: 0px;
 | 
			
		||||
    padding-right: 0px;
 | 
			
		||||
    border: solid 1px $primary-border-color;
 | 
			
		||||
    border-radius: 2px;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user