Merge branch 'dev' into pr_2165

This commit is contained in:
Nick O'Leary
2019-07-10 09:30:48 +01:00
282 changed files with 4009 additions and 1538 deletions

View File

@@ -168,7 +168,7 @@
once: {value:false},
onceDelay: {value:0.1}
},
icon: "inject.png",
icon: "inject.svg",
inputs:0,
outputs:1,
outputLabels: function(index) {

View File

@@ -11,57 +11,18 @@
<input type="checkbox" id="node-input-uncaught" style="display: inline-block; width: auto; vertical-align: top; margin-left: 30px; margin-right: 5px;">
<label for="node-input-uncaught" style="width: auto" data-i18n="catch.label.uncaught"></label>
</div>
<div class="form-row node-input-target-row" style="display: none;">
<div id="node-input-catch-target-container-div" style="min-height: 100px;position: relative; box-sizing: border-box; border-radius: 2px; height: 180px; border: 1px solid #ccc;overflow:hidden; ">
<div style="box-sizing: border-box; line-height: 20px; font-size: 0.8em; border-bottom: 1px solid #ddd; height: 20px;">
<input type="checkbox" data-i18n="[title]catch.label.selectAll" id="node-input-target-node-checkbox-all" style="width: 30px; margin: 0 2px 1px 2px;">
<div style="display: inline-block;"><a id="node-input-target-sort-label" href="#" data-i18n="[title]catch.label.sortByLabel"><span data-i18n="catch.label.node"></span> <i class="node-input-catch-sort-label-a fa fa-caret-down"></i><i class="node-input-catch-sort-label-d fa fa-caret-up"></i></a></div>
<div style="position: absolute; right: 10px; width: 50px; display: inline-block; text-align: right;"><a id="node-input-target-sort-type" href="#" data-i18n="[title]catch.label.sortByType"><i class="node-input-catch-sort-sublabel-a fa fa-caret-down"></i><i class="node-input-catch-sort-sublabel-d fa fa-caret-up"></i> <span data-i18n="catch.label.type"></span></a></div>
</div>
<div style="background: #fbfbfb; box-sizing: border-box; position:absolute; top:20px;bottom:0;left:0px;right:0px; overflow-y: scroll; overflow-x: hidden;">
<ul id="node-input-catch-target-container" style=" list-style-type:none; margin: 0;"></ul>
</div>
</div>
<div class="form-row node-input-target-row">
<button id="node-input-catch-target-select" class="red-ui-button" data-i18n="common.label.selectNodes"></button>
</div>
<div class="form-row node-input-target-row node-input-target-list-row" style="min-height: 100px">
<div id="node-input-catch-target-container-div"></div>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name">
</div>
</script>
<style>
#node-input-catch-target-container {
position: relative;
}
#node-input-catch-target-container li {
padding: 2px 5px;
background: none;
font-size: 0.8em;
margin:0;
white-space: nowrap;
}
#node-input-catch-target-container li label {
margin-bottom: 0;
width: 100%;
}
#node-input-catch-target-container li label input {
vertical-align: top;
width:15px;
margin-right: 10px;
}
#node-input-catch-target-container li:hover,
#node-input-catch-target-container li:hover .node-input-target-node-sublabel {
background: #f0f0f0;
}
.node-input-target-node-sublabel {
position:absolute;
right: 0px;
padding-right: 10px;
padding-left: 10px;
font-size: 0.8em;
background: #fbfbfb;
}
</style>
<script type="text/javascript">
RED.nodes.registerType('catch',{
category: 'input',
@@ -73,7 +34,7 @@
},
inputs:0,
outputs:1,
icon: "alert.png",
icon: "alert.svg",
label: function() {
if (this.name) {
return this.name;
@@ -87,146 +48,108 @@
return this.name?"node_label_italic":"";
},
oneditprepare: function() {
var nodeList = $("#node-input-catch-target-container");
var node = this;
this.resize = function() {
var rows = $("#dialog-form>div:not(.node-input-target-row)");
var scope = node.scope || [];
this._resize = function() {
var rows = $("#dialog-form>div:not(.node-input-target-list-row)");
var height = $("#dialog-form").height();
for (var i=0;i<rows.length;i++) {
height -= $(rows[i]).outerHeight(true);
}
var editorRow = $("#dialog-form>div.node-input-target-row");
height -= (parseInt(editorRow.css("marginTop"))+parseInt(editorRow.css("marginBottom")));
$("#node-input-catch-target-container-div").css("height",height+"px");
var editorRow = $("#dialog-form>div.node-input-target-list-row");
editorRow.css("height",height+"px");
};
function createNodeList() {
var scope = node.scope || [];
nodeList.empty();
var dirList = $("#node-input-catch-target-container-div").css({width: "100%", height: "100%"})
.treeList({multi:true}).on("treelistitemmouseover", function(e, item) {
item.node.highlighted = true;
item.node.dirty = true;
RED.view.redraw();
}).on("treelistitemmouseout", function(e, item) {
item.node.highlighted = false;
item.node.dirty = true;
RED.view.redraw();
})
var candidateNodes = RED.nodes.filterNodes({z:node.z});
var allChecked = true;
var items = [];
var nodeItemMap = {};
var candidateNodes = RED.nodes.filterNodes({z:node.z});
var allChecked = true;
candidateNodes.forEach(function(n) {
if (n.id === node.id) {
return;
}
var isChecked = scope.indexOf(n.id) !== -1;
allChecked = allChecked && isChecked;
var container = $('<li/>',{class:"node-input-target-node"});
var row = $('<label/>',{for:"node-input-target-node-"+n.id}).appendTo(container);
$('<input>',{type:"checkbox",class:"node-input-target-node-checkbox",id:"node-input-target-node-"+n.id})
.data('node-id',n.id)
.prop('checked', isChecked)
.appendTo(row);
container.on('mouseover',function(e) {
n.highlighted = true;
n.dirty = true;
RED.view.redraw();
});
container.on('mouseout',function(e) {
n.highlighted = false;
n.dirty = true;
RED.view.redraw();
});
var labelSpan = $('<span>');
var nodeDef = RED.nodes.getType(n.type);
var label;
var sublabel;
if (nodeDef) {
var l = nodeDef.label;
label = (typeof l === "function" ? l.call(n) : l)||"";
sublabel = n.type;
if (sublabel.indexOf("subflow:") === 0) {
var subflowId = sublabel.substring(8);
var subflow = RED.nodes.subflow(subflowId);
sublabel = "subflow : "+subflow.name;
}
}
if (!nodeDef || !label) {
label = n.type;
}
$('<span>',{class:"node-input-target-node-label",style:"white-space:nowrap"}).text(label).appendTo(row);
if (sublabel) {
$('<span>',{class:"node-input-target-node-sublabel"}).text(sublabel).appendTo(row);
}
container.appendTo(nodeList);
});
$(".node-input-target-node-checkbox").on("change", function() {
if (!this.checked) {
$("#node-input-target-node-checkbox-all").prop('checked',false);
}
});
$("#node-input-target-node-checkbox-all").prop('checked',allChecked);
sortNodeList('label');
}
function sortNodeList(sortOn) {
var currentSort = nodeList.data('currentSort');
var currentSortOrder = nodeList.data('currentSortOrder');
if (!currentSort) {
currentSort = sortOn;
currentSortOrder = 'a';
} else {
if (currentSort === sortOn) {
currentSortOrder = (currentSortOrder === 'a'?'d':'a');
} else {
currentSortOrder = 'a';
}
currentSort = sortOn;
candidateNodes.forEach(function(n) {
if (n.id === node.id) {
return;
}
nodeList.data('currentSort',currentSort);
nodeList.data('currentSortOrder',currentSortOrder);
var isChecked = scope.indexOf(n.id) !== -1;
$("#node-input-catch-target-container-div .fa").hide();
$(".node-input-catch-sort-"+currentSort+"-"+currentSortOrder).show();
allChecked = allChecked && isChecked;
var nodeDef = RED.nodes.getType(n.type);
var label;
var sublabel;
if (nodeDef) {
var l = nodeDef.label;
label = (typeof l === "function" ? l.call(n) : l)||"";
sublabel = n.type;
if (sublabel.indexOf("subflow:") === 0) {
var subflowId = sublabel.substring(8);
var subflow = RED.nodes.subflow(subflowId);
sublabel = "subflow : "+subflow.name;
}
}
if (!nodeDef || !label) {
label = n.type;
}
nodeItemMap[n.id] = {
node: n,
label: label,
sublabel: sublabel,
selected: isChecked
};
items.push(nodeItemMap[n.id]);
});
dirList.treeList('data',items);
var items = nodeList.find("li").get();
items.sort(function(a,b) {
var labelA = $(a).find(".node-input-target-node-"+currentSort).text().toLowerCase();
var labelB = $(b).find(".node-input-target-node-"+currentSort).text().toLowerCase();
if (labelA < labelB) { return currentSortOrder==='a'?-1:1; }
if (labelA > labelB) { return currentSortOrder==='a'?1:-1; }
return 0;
});
$.each(items, function(i, li){
nodeList.append(li);
});
}
$("#node-input-target-sort-label").on("click", function(e) {
$("#node-input-catch-target-select").on("click", function(e) {
e.preventDefault();
sortNodeList('label');
});
$("#node-input-target-sort-type").on("click", function(e) {
e.preventDefault();
sortNodeList('sublabel');
});
$("#node-input-target-node-checkbox-all").on("change", function() {
$(".node-input-target-node-checkbox").prop('checked',this.checked);
});
var preselected = dirList.treeList('selected').map(function(n) {return n.node.id});
RED.tray.hide();
RED.view.selectNodes({
selected: preselected,
onselect: function(selection) {
RED.tray.show();
var newlySelected = {};
selection.forEach(function(n) {
newlySelected[n.id] = true;
if (nodeItemMap[n.id]) {
nodeItemMap[n.id].treeList.select(true);
}
})
preselected.forEach(function(id) {
if (!newlySelected[id]) {
nodeItemMap[id].treeList.select(false);
}
})
},
oncancel: function() {
RED.tray.show();
},
filter: function(n) {
return n.id !== node.id;
}
});
})
$("#node-input-scope-select").on("change", function(e) {
var scope = $(this).val();
if (scope === "target") {
createNodeList();
$(".node-input-target-row").show();
$(".node-input-uncaught-row").hide();
} else {
$(".node-input-target-row").hide();
$(".node-input-uncaught-row").show();
}
node.resize();
node._resize();
});
if (this.scope === null) {
$("#node-input-scope-select").val("all");
@@ -241,17 +164,11 @@
this.scope = null;
} else {
$("#node-input-uncaught").prop("checked",false);
var node = this;
node.scope = [];
$(".node-input-target-node-checkbox").each(function(n) {
if ($(this).prop("checked")) {
node.scope.push($(this).data('node-id'));
}
});
this.scope = $("#node-input-catch-target-container-div").treeList('selected').map(function(i) { return i.node.id})
}
},
oneditresize: function(size) {
this.resize();
this._resize();
}
});
</script>

View File

@@ -7,17 +7,11 @@
<option value="target" data-i18n="status.scope.selected"></options>
</select>
</div>
<div class="form-row node-input-target-row" style="display: none;">
<div id="node-input-status-target-container-div" style=" min-height: 100px;position: relative; box-sizing: border-box; border-radius: 2px; height: 180px; border: 1px solid #ccc;overflow:hidden; ">
<div style="box-sizing: border-box; line-height: 20px; font-size: 0.8em; border-bottom: 1px solid #ddd; height: 20px;">
<input type="checkbox" data-i18n="[title]status.label.selectAll" id="node-input-target-node-checkbox-all" style="width: 30px; margin: 0 2px 1px 2px;">
<div style="display: inline-block;"><a id="node-input-target-sort-label" href="#" data-i18n="[title]status.label.sortByLabel"><span data-i18n="status.label.node"></span> <i class="node-input-status-sort-label-a fa fa-caret-down"></i><i class="node-input-status-sort-label-d fa fa-caret-up"></i></a></div>
<div style="position: absolute; right: 10px; width: 50px; display: inline-block; text-align: right;"><a id="node-input-target-sort-type" href="#" data-i18n="[title]status.label.sortByType"><i class="node-input-status-sort-sublabel-a fa fa-caret-down"></i><i class="node-input-status-sort-sublabel-d fa fa-caret-up"></i> <span data-i18n="status.label.type"></span></a></div>
</div>
<div style="background: #fbfbfb; box-sizing: border-box; position:absolute; top:20px;bottom:0;left:0px;right:0px; overflow-y: scroll; overflow-x: hidden;">
<ul id="node-input-status-target-container" style=" list-style-type:none; margin: 0;"></ul>
</div>
</div>
<div class="form-row node-input-target-row">
<button id="node-input-status-target-select" class="red-ui-button" data-i18n="common.label.selectNodes"></button>
</div>
<div class="form-row node-input-target-row node-input-target-list-row" style="min-height: 100px">
<div id="node-input-status-target-container-div"></div>
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
@@ -25,50 +19,17 @@
</div>
</script>
<style>
#node-input-status-target-container {
position: relative;
}
#node-input-status-target-container li {
padding: 2px 5px;
background: none;
font-size: 0.8em;
margin:0;
white-space: nowrap;
}
#node-input-status-target-container li label {
margin-bottom: 0;
width: 100%;
}
#node-input-status-target-container li label input {
vertical-align: top;
width:15px;
margin-right: 10px;
}
#node-input-status-target-container li:hover,
#node-input-status-target-container li:hover .node-input-target-node-sublabel {
background: #f0f0f0;
}
.node-input-target-node-sublabel {
position:absolute;
right: 0px;
padding-right: 10px;
padding-left: 10px;
font-size: 0.8em;
background: #fbfbfb;
}
</style>
<script type="text/javascript">
RED.nodes.registerType('status',{
category: 'input',
color:"#c0edc0",
color:"#d9f4fd",
defaults: {
name: {value:""},
scope: {value:null}
},
inputs:0,
outputs:1,
icon: "alert.png",
icon: "alert.svg",
label: function() {
return this.name||(this.scope?this._("status.statusNodes",{number:this.scope.length}):this._("status.status"));
},
@@ -76,142 +37,105 @@
return this.name?"node_label_italic":"";
},
oneditprepare: function() {
var nodeList = $("#node-input-status-target-container");
var node = this;
this.resize = function() {
var rows = $("#dialog-form>div:not(.node-input-target-row)");
var scope = node.scope || [];
this._resize = function() {
var rows = $("#dialog-form>div:not(.node-input-target-list-row)");
var height = $("#dialog-form").height();
for (var i=0;i<rows.length;i++) {
height -= $(rows[i]).outerHeight(true);
}
var editorRow = $("#dialog-form>div.node-input-target-row");
height -= (parseInt(editorRow.css("marginTop"))+parseInt(editorRow.css("marginBottom")));
$("#node-input-status-target-container-div").css("height",height+"px");
var editorRow = $("#dialog-form>div.node-input-target-list-row");
editorRow.css("height",height+"px");
};
function createNodeList() {
var scope = node.scope || [];
nodeList.empty();
var dirList = $("#node-input-status-target-container-div").css({width: "100%", height: "100%"})
.treeList({multi:true}).on("treelistitemmouseover", function(e, item) {
item.node.highlighted = true;
item.node.dirty = true;
RED.view.redraw();
}).on("treelistitemmouseout", function(e, item) {
item.node.highlighted = false;
item.node.dirty = true;
RED.view.redraw();
})
var candidateNodes = RED.nodes.filterNodes({z:node.z});
var allChecked = true;
var items = [];
var nodeItemMap = {};
var candidateNodes = RED.nodes.filterNodes({z:node.z});
var allChecked = true;
candidateNodes.forEach(function(n) {
if (n.id === node.id) {
return;
}
var isChecked = scope.indexOf(n.id) !== -1;
allChecked = allChecked && isChecked;
var container = $('<li/>',{class:"node-input-target-node"});
var row = $('<label/>',{for:"node-input-target-node-"+n.id}).appendTo(container);
$('<input>',{type:"checkbox",class:"node-input-target-node-checkbox",id:"node-input-target-node-"+n.id})
.data('node-id',n.id)
.prop('checked', isChecked)
.appendTo(row);
container.on('mouseover',function(e) {
n.highlighted = true;
n.dirty = true;
RED.view.redraw();
});
container.on('mouseout',function(e) {
n.highlighted = false;
n.dirty = true;
RED.view.redraw();
});
var labelSpan = $('<span>');
var nodeDef = RED.nodes.getType(n.type);
var label;
var sublabel;
if (nodeDef) {
var l = nodeDef.label;
label = (typeof l === "function" ? l.call(n) : l)||"";
sublabel = n.type;
if (sublabel.indexOf("subflow:") === 0) {
var subflowId = sublabel.substring(8);
var subflow = RED.nodes.subflow(subflowId);
sublabel = "subflow : "+subflow.name;
}
}
if (!nodeDef || !label) {
label = n.type;
}
$('<span>',{class:"node-input-target-node-label",style:"white-space:nowrap"}).text(label).appendTo(row);
if (sublabel) {
$('<span>',{class:"node-input-target-node-sublabel"}).text(sublabel).appendTo(row);
}
container.appendTo(nodeList);
});
$(".node-input-target-node-checkbox").on("change", function() {
if (!this.checked) {
$("#node-input-target-node-checkbox-all").prop('checked',false);
}
});
$("#node-input-target-node-checkbox-all").prop('checked',allChecked);
sortNodeList('label');
}
function sortNodeList(sortOn) {
var currentSort = nodeList.data('currentSort');
var currentSortOrder = nodeList.data('currentSortOrder');
if (!currentSort) {
currentSort = sortOn;
currentSortOrder = 'a';
} else {
if (currentSort === sortOn) {
currentSortOrder = (currentSortOrder === 'a'?'d':'a');
} else {
currentSortOrder = 'a';
}
currentSort = sortOn;
candidateNodes.forEach(function(n) {
if (n.id === node.id) {
return;
}
nodeList.data('currentSort',currentSort);
nodeList.data('currentSortOrder',currentSortOrder);
var isChecked = scope.indexOf(n.id) !== -1;
$("#node-input-status-target-container-div .fa").hide();
$(".node-input-status-sort-"+currentSort+"-"+currentSortOrder).show();
allChecked = allChecked && isChecked;
var nodeDef = RED.nodes.getType(n.type);
var label;
var sublabel;
if (nodeDef) {
var l = nodeDef.label;
label = (typeof l === "function" ? l.call(n) : l)||"";
sublabel = n.type;
if (sublabel.indexOf("subflow:") === 0) {
var subflowId = sublabel.substring(8);
var subflow = RED.nodes.subflow(subflowId);
sublabel = "subflow : "+subflow.name;
}
}
if (!nodeDef || !label) {
label = n.type;
}
nodeItemMap[n.id] = {
node: n,
label: label,
sublabel: sublabel,
selected: isChecked
};
items.push(nodeItemMap[n.id]);
});
dirList.treeList('data',items);
var items = nodeList.find("li").get();
items.sort(function(a,b) {
var labelA = $(a).find(".node-input-target-node-"+currentSort).text().toLowerCase();
var labelB = $(b).find(".node-input-target-node-"+currentSort).text().toLowerCase();
if (labelA < labelB) { return currentSortOrder==='a'?-1:1; }
if (labelA > labelB) { return currentSortOrder==='a'?1:-1; }
return 0;
});
$.each(items, function(i, li) {
nodeList.append(li);
});
}
$("#node-input-target-sort-label").on("click", function(e) {
$("#node-input-status-target-select").on("click", function(e) {
e.preventDefault();
sortNodeList('label');
});
$("#node-input-target-sort-type").on("click", function(e) {
e.preventDefault();
sortNodeList('sublabel');
});
$("#node-input-target-node-checkbox-all").on("change", function() {
$(".node-input-target-node-checkbox").prop('checked',this.checked);
});
var preselected = dirList.treeList('selected').map(function(n) {return n.node.id});
RED.tray.hide();
RED.view.selectNodes({
selected: preselected,
onselect: function(selection) {
RED.tray.show();
var newlySelected = {};
selection.forEach(function(n) {
newlySelected[n.id] = true;
if (nodeItemMap[n.id]) {
nodeItemMap[n.id].treeList.select(true);
}
})
preselected.forEach(function(id) {
if (!newlySelected[id]) {
nodeItemMap[id].treeList.select(false);
}
})
},
oncancel: function() {
RED.tray.show();
},
filter: function(n) {
return n.id !== node.id;
}
});
})
$("#node-input-scope-select").on("change", function(e) {
var scope = $(this).val();
if (scope === "target") {
createNodeList();
$(".node-input-target-row").show();
} else {
$(".node-input-target-row").hide();
}
node.resize();
node._resize();
});
if (this.scope === null) {
$("#node-input-scope-select").val("all");
@@ -225,17 +149,11 @@
if (scope === 'all') {
this.scope = null;
} else {
var node = this;
node.scope = [];
$(".node-input-target-node-checkbox").each(function(n) {
if ($(this).prop("checked")) {
node.scope.push($(this).data('node-id'));
}
});
this.scope = $("#node-input-status-target-container-div").treeList('selected').map(function(i) { return i.node.id})
}
},
oneditresize: function(size) {
this.resize();
this._resize();
}
});
</script>

View File

@@ -65,7 +65,7 @@
color:"#87a980",
inputs:1,
outputs:0,
icon: "debug.png",
icon: "debug.svg",
align: "right",
button: {
toggle: "active",
@@ -205,6 +205,7 @@
}
};
RED.events.on("project:change", this.clearMessageList);
RED.actions.add("core:clear-debug-messages", function() { RED.debug.clearMessageList(true) });
$("#red-ui-sidebar-debug-open").on("click", function(e) {
e.preventDefault();
@@ -246,7 +247,8 @@
RED.sidebar.removeTab("debug");
RED.events.off("workspace:change", this.refreshMessageList);
window.removeEventListener("message",this.handleWindowMessage);
RED.actions.remove("core:show-debug");
RED.actions.remove("core:show-debug-tab");
RED.actions.remove("core:clear-debug-messages");
delete RED._debug;
},

View File

@@ -170,7 +170,7 @@
},
inputs:0,
outputs:1,
icon: "link-out.png",
icon: "link-out.svg",
outputLabels: function(i) {
return this.name||this._("link.linkIn");
},
@@ -200,7 +200,7 @@
align:"right",
inputs:1,
outputs:0,
icon: "link-out.png",
icon: "link-out.svg",
inputLabels: function(i) {
return this.name||this._("link.linkOut");
},

View File

@@ -73,7 +73,7 @@
this._("exec.label.retcode")
][i];
},
icon: "arrow-in.png",
icon: "arrow-in.svg",
align: "right",
label: function() {
return this.name||this.command||(this.useSpawn=="true"?this._("exec.spawn"):this._("exec.exec"));

View File

@@ -27,11 +27,11 @@
name: {value:""},
func: {value:"\nreturn msg;"},
outputs: {value:1},
noerr: {value:0,required:true,validate:function(v) { return ((!v) || (v === 0)) ? true : false; }}
noerr: {value:0,required:true,validate:function(v) { return !v; }}
},
inputs:1,
outputs:1,
icon: "function.png",
icon: "function.svg",
label: function() {
return this.name||this._("function.function");
},
@@ -75,10 +75,13 @@
type:"function", // the type of object the library is for
editor:this.editor, // the field name the main text body goes to
mode:"ace/mode/nrjavascript",
fields:['name','outputs']
fields:['name','outputs'],
ext:"js"
});
this.editor.focus();
RED.popover.tooltip($("#node-function-expand-js"), RED._("node-red:common.label.expand"));
$("#node-function-expand-js").on("click", function(e) {
e.preventDefault();
var value = that.editor.getValue();

View File

@@ -9,14 +9,6 @@
<input type="text" id="node-input-field" placeholder="payload" style="width:250px;">
<input type="hidden" id="node-input-fieldType">
</div>
<div class="form-row">
<label for="node-input-syntax"><i class="fa fa-code"></i> <span data-i18n="template.label.syntax"></span></label>
<select id="node-input-syntax" style="width:180px;">
<option value="mustache" data-i18n="template.label.mustache"></option>
<option value="plain" data-i18n="template.label.plain"></option>
</select>
</div>
<div class="form-row" style="position: relative; margin-bottom: 0px;">
<label for="node-input-template"><i class="fa fa-file-code-o"></i> <span data-i18n="template.label.template"></span></label>
<input type="hidden" id="node-input-template" autofocus="autofocus">
@@ -32,11 +24,19 @@
<option value="yaml">YAML</option>
<option value="text" data-i18n="template.label.none"></option>
</select>
<button id="node-template-expand-editor" class="red-ui-button red-ui-button-small"><i class="fa fa-expand"></i></button>
</div>
</div>
<div class="form-row node-text-editor-row">
<div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-template-editor" ></div>
</div>
<div class="form-row">
<label for="node-input-syntax"><i class="fa fa-code"></i> <span data-i18n="template.label.syntax"></span></label>
<select id="node-input-syntax" style="width:180px;">
<option value="mustache" data-i18n="template.label.mustache"></option>
<option value="plain" data-i18n="template.label.plain"></option>
</select>
</div>
<div class="form-row">
<label for="node-input-output"><i class="fa fa-long-arrow-right"></i> <span data-i18n="template.label.output"></span></label>
<select id="node-input-output" style="width:180px;">
@@ -63,7 +63,7 @@
},
inputs:1,
outputs:1,
icon: "template.png",
icon: "template.svg",
label: function() {
return this.name||this._("template.template");;
},
@@ -95,10 +95,11 @@
value: $("#node-input-template").val()
});
RED.library.create({
url:"functions", // where to get the data from
type:"function", // the type of object the library is for
url:"templates", // where to get the data from
type:"template", // the type of object the library is for
editor:that.editor, // the field name the main text body goes to
fields:['name','outputs']
fields:['name','format','output','syntax'],
ext: "txt"
});
this.editor.focus();
@@ -109,6 +110,24 @@
v: Date.now()
});
});
RED.popover.tooltip($("#node-template-expand-editor"), RED._("node-red:common.label.expand"));
$("#node-template-expand-editor").on("click", function(e) {
e.preventDefault();
var value = that.editor.getValue();
RED.editor.editText({
mode: $("#node-input-format").val(),
value: value,
width: "Infinity",
cursor: that.editor.getCursorPosition(),
complete: function(v,cursor) {
that.editor.setValue(v, -1);
that.editor.gotoLine(cursor.row+1,cursor.column,false);
setTimeout(function() {
that.editor.focus();
},300);
}
})
})
},
oneditsave: function() {
$("#node-input-template").val(this.editor.getValue());

View File

@@ -114,7 +114,7 @@
},
inputs:1,
outputs:1,
icon: "timer.png",
icon: "timer.svg",
label: function() {
if (this.name) {
return this.name;

View File

@@ -87,7 +87,7 @@
},
inputs:1,
outputs:1,
icon: "trigger.png",
icon: "trigger.svg",
label: function() {
if (this.duration > 0) {
return this.name|| this._("trigger.label.trigger")+" "+this.duration+this.units;

View File

@@ -20,7 +20,7 @@
},
inputs:0,
outputs:0,
icon: "comment.png",
icon: "comment.svg",
label: function() {
return this.name||this._("comment.comment");
},

View File

@@ -400,48 +400,47 @@ RED.debug = (function() {
}
function processDebugMessage(o) {
var msg = document.createElement("div");
var msg = $("<div/>");
var sourceNode = o._source;
msg.onmouseenter = function() {
$(msg).addClass('red-ui-debug-msg-hover');
msg.on("mouseenter", function() {
msg.addClass('red-ui-debug-msg-hover');
if (o._source) {
config.messageMouseEnter(o._source.id);
if (o._source._alias) {
config.messageMouseEnter(o._source._alias);
}
}
};
msg.onmouseleave = function() {
$(msg).removeClass('red-ui-debug-msg-hover');
});
msg.on("mouseleave", function() {
msg.removeClass('red-ui-debug-msg-hover');
if (o._source) {
config.messageMouseLeave(o._source.id);
if (o._source._alias) {
config.messageMouseLeave(o._source._alias);
}
}
};
});
var name = sanitize(((o.name?o.name:o.id)||"").toString());
var topic = sanitize((o.topic||"").toString());
var property = sanitize(o.property?o.property:'');
var payload = o.msg;
var format = sanitize((o.format||"").toString());
msg.className = 'red-ui-debug-msg'+(o.level?(' red-ui-debug-msg-level-'+o.level):'')+
msg.attr("class", 'red-ui-debug-msg'+(o.level?(' red-ui-debug-msg-level-'+o.level):'')+
(sourceNode?(
" red-ui-debug-msg-node-"+sourceNode.id.replace(/\./g,"_")+
(sourceNode.z?" red-ui-debug-msg-flow-"+sourceNode.z.replace(/\./g,"_"):"")
):"");
):""));
if (sourceNode) {
$(msg).data('source',sourceNode.id);
msg.data('source',sourceNode.id);
if (filterType === "filterCurrent" && activeWorkspace) {
if (sourceNode.z && sourceNode.z.replace(/\./g,"_") !== activeWorkspace) {
$(msg).addClass('hide');
msg.addClass('hide');
}
} else if (filterType === 'filterSelected'){
if (!!filteredNodes[sourceNode.id]) {
$(msg).addClass('hide');
msg.addClass('hide');
}
}
}
@@ -481,7 +480,7 @@ RED.debug = (function() {
errorLvl = 30;
errorLvlType = 'warn';
}
$(msg).addClass('red-ui-debug-msg-level-' + errorLvl);
msg.addClass('red-ui-debug-msg-level-' + errorLvl);
$('<span class="red-ui-debug-msg-topic">function : (' + errorLvlType + ')</span>').appendTo(metaRow);
} else {
var tools = $('<span class="red-ui-debug-msg-tools button-group"></span>').appendTo(metaRow);

View File

@@ -4,7 +4,7 @@
<link rel="stylesheet" href="../../vendor/font-awesome/css/font-awesome.min.css">
<title>Node-RED Debug Tools</title>
</head>
<body class="red-ui-debug-window">
<body class="red-ui-editor red-ui-debug-window">
</body>
<script src="../../vendor/vendor.js"></script>
<script src="../../red/red.min.js"></script>

View File

@@ -57,7 +57,7 @@
color:"#d8bfd8",
inputs:0,
outputs:1,
icon: "bridge.png",
icon: "bridge.svg",
label: function() {
return this.name||this.topic||"mqtt";
},
@@ -118,7 +118,7 @@
color:"#d8bfd8",
inputs:1,
outputs:0,
icon: "bridge.png",
icon: "bridge.svg",
align: "right",
label: function() {
return this.name||this.topic||"mqtt";

View File

@@ -77,7 +77,7 @@
},
inputs:0,
outputs:1,
icon: "white-globe.png",
icon: "white-globe.svg",
label: function() {
if (this.name) {
return this.name;
@@ -152,7 +152,7 @@
inputs:1,
outputs:0,
align: "right",
icon: "white-globe.png",
icon: "white-globe.svg",
label: function() {
return this.name||("http"+(this.statusCode?" ("+this.statusCode+")":""));
},

View File

@@ -23,6 +23,7 @@ module.exports = function(RED) {
var cors = require('cors');
var onHeaders = require('on-headers');
var typer = require('content-type');
var mediaTyper = require('media-typer');
var isUtf8 = require('is-utf8');
var hashSum = require("hash-sum");
@@ -36,18 +37,22 @@ module.exports = function(RED) {
var checkUTF = false;
if (req.headers['content-type']) {
var parsedType = typer.parse(req.headers['content-type'])
if (parsedType.type === "text") {
isText = true;
} else if (parsedType.subtype === "xml" || parsedType.suffix === "xml") {
isText = true;
} else if (parsedType.type !== "application") {
isText = false;
} else if (parsedType.subtype !== "octet-stream") {
checkUTF = true;
} else {
// applicatino/octet-stream
isText = false;
var contentType = typer.parse(req.headers['content-type'])
if (contentType.type) {
var parsedType = mediaTyper.parse(contentType.type);
if (parsedType.type === "text") {
isText = true;
} else if (parsedType.subtype === "xml" || parsedType.suffix === "xml") {
isText = true;
} else if (parsedType.type !== "application") {
isText = false;
} else if (parsedType.subtype !== "octet-stream") {
checkUTF = true;
} else {
// applicatino/octet-stream
isText = false;
}
}
}

View File

@@ -49,12 +49,13 @@
<label for="node-input-useAuth" style="width: 70%;"><span data-i18n="httpin.basicauth"></span></label>
<div style="margin-left: 20px" class="node-input-useAuth-row hide">
<div class="form-row">
<label for="node-input-authType"><i class="fa fa-user-secret "></i> <span data-i18n="httpin.label.authType"></span></label>
<select type="text" id="node-input-authType" style="width:70%;">
<label for="node-input-authType-select"><i class="fa fa-user-secret "></i> <span data-i18n="httpin.label.authType"></span></label>
<select type="text" id="node-input-authType-select" style="width:70%;">
<option value="basic" data-i18n="httpin.basic"></option>
<option value="digest" data-i18n="httpin.digest"></option>
<option value="bearer" data-i18n="httpin.bearer"></option>
</select>
<input type="hidden" id="node-input-authType">
</div>
<div class="form-row node-input-basic-row">
<label for="node-input-user"><i class="fa fa-user"></i> <span data-i18n="common.label.username"></span></label>
@@ -102,7 +103,7 @@
url:{value:"",validate:function(v) { return (v.trim().length === 0) || (v.indexOf("://") === -1) || (v.trim().indexOf("http") === 0)} },
tls: {type:"tls-config",required: false},
proxy: {type:"http proxy",required: false},
authType: {value: "basic"}
authType: {value: ""}
},
credentials: {
user: {type:"text"},
@@ -117,7 +118,7 @@
obj: this._("httpin.label.jsonObject")
}[this.ret]);
},
icon: "white-globe.png",
icon: "white-globe.svg",
label: function() {
return this.name||this._("httpin.httpreq");
},
@@ -130,7 +131,7 @@
$(".node-input-useAuth-row").show();
// Nodes (< version 0.20.x) with credentials but without authentication type, need type 'basic'
if (!$('#node-input-authType').val()) {
$('#node-input-authType').val('basic');
$("#node-input-authType-select").val('basic').trigger("change");
}
} else {
$(".node-input-useAuth-row").hide();
@@ -139,12 +140,14 @@
$('#node-input-password').val('');
}
});
$("#node-input-authType").on("change", function() {
if ($(this).val() == "basic" || $(this).val() == "digest") {
$("#node-input-authType-select").on("change", function() {
var val = $(this).val();
$("#node-input-authType").val(val);
if (val === "basic" || val === "digest") {
$(".node-input-basic-row").show();
$('#node-span-password').show();
$('#node-span-token').hide();
} else if ($(this).val() == "bearer") {
} else if (val === "bearer") {
$(".node-input-basic-row").hide();
$('#node-span-password').hide();
$('#node-span-token').show();
@@ -158,8 +161,9 @@
$(".node-input-paytoqs-row").hide();
}
});
if (this.credentials.user || this.credentials.has_password) {
if (this.authType) {
$('#node-input-useAuth').prop('checked', true);
$("#node-input-authType-select").val(this.authType);
} else {
$('#node-input-useAuth').prop('checked', false);
}

View File

@@ -94,10 +94,10 @@ module.exports = function(RED) {
opts.maxRedirects = 21;
opts.jar = request.jar();
opts.proxy = null;
if (msg.requestTimeout) {
if (msg.requestTimeout !== undefined) {
if (isNaN(msg.requestTimeout)) {
node.warn(RED._("httpin.errors.timeout-isnan"));
} else if (msg.requestTimeout < 0) {
} else if (msg.requestTimeout < 1) {
node.warn(RED._("httpin.errors.timeout-isnegative"));
} else {
opts.timeout = msg.requestTimeout;
@@ -203,8 +203,28 @@ module.exports = function(RED) {
var payload = null;
if (method !== 'GET' && method !== 'HEAD' && typeof msg.payload !== "undefined") {
if (opts.headers['content-type'] == 'multipart/form-data' && typeof payload === "object") {
opts.formData = msg.payload;
if (opts.headers['content-type'] == 'multipart/form-data' && typeof msg.payload === "object") {
opts.formData = {};
for (var opt in msg.payload) {
if (msg.payload.hasOwnProperty(opt)) {
var val = msg.payload[opt];
if (val !== undefined && val !== null) {
if (typeof val === 'string' || Buffer.isBuffer(val)) {
opts.formData[opt] = val;
} else if (typeof val === 'object' && val.hasOwnProperty('value')) {
// Treat as file to upload - ensure it has an options object
// as request complains if it doesn't
if (!val.hasOwnProperty('options')) {
val.options = {};
}
opts.formData[opt] = val;
} else {
opts.formData[opt] = JSON.stringify(val);
}
}
}
}
} else {
if (typeof msg.payload === "string" || Buffer.isBuffer(msg.payload)) {
payload = msg.payload;

View File

@@ -106,7 +106,7 @@
color:"rgb(215, 215, 160)",
inputs:0,
outputs:1,
icon: "white-globe.png",
icon: "white-globe.svg",
labelStyle: function() {
return this.name?"node_label_italic":"";
},
@@ -125,7 +125,7 @@
color:"rgb(215, 215, 160)",
inputs:1,
outputs:0,
icon: "white-globe.png",
icon: "white-globe.svg",
align: "right",
labelStyle: function() {
return this.name?"node_label_italic":"";

View File

@@ -178,6 +178,9 @@ module.exports = function(RED) {
if (this.wholemsg) {
try {
msg = JSON.parse(data);
if (typeof msg !== "object" && !Array.isArray(msg) && (msg !== null)) {
msg = { payload:msg };
}
}
catch(err) {
msg = { payload:data };
@@ -194,20 +197,23 @@ module.exports = function(RED) {
}
WebSocketListenerNode.prototype.broadcast = function(data) {
try {
if (this.isServer) {
for (let client in this._clients) {
if (this._clients.hasOwnProperty(client)) {
if (this.isServer) {
for (let client in this._clients) {
if (this._clients.hasOwnProperty(client)) {
try {
this._clients[client].send(data);
} catch(err) {
this.warn(RED._("websocket.errors.send-error")+" "+client+" "+err.toString())
}
}
}
else {
this.server.send(data);
}
}
catch(e) { // swallow any errors
this.warn("ws:"+i+" : "+e);
else {
try {
this.server.send(data);
} catch(err) {
this.warn(RED._("websocket.errors.send-error")+" "+err.toString())
}
}
}

View File

@@ -42,7 +42,7 @@
color:"BurlyWood",
inputs:0,
outputs:1,
icon: "watch.png",
icon: "watch.svg",
label: function() {
return this.name||this.files||this._("watch.watch");
},

View File

@@ -72,7 +72,7 @@
},
inputs:0,
outputs:1,
icon: "bridge-dash.png",
icon: "bridge-dash.svg",
label: function() {
return this.name || "tcp:"+(this.host?this.host+":":"")+this.port;
},
@@ -155,7 +155,7 @@
},
inputs:1,
outputs:0,
icon: "bridge-dash.png",
icon: "bridge-dash.svg",
align: "right",
label: function() {
return this.name || "tcp:"+(this.host?this.host+":":"")+this.port;
@@ -226,7 +226,7 @@
},
inputs:1,
outputs:1,
icon: "bridge-dash.png",
icon: "bridge-dash.svg",
label: function() {
return this.name || "tcp:"+(this.server?this.server+":":"")+this.port;
},

View File

@@ -70,7 +70,7 @@
},
inputs:0,
outputs:1,
icon: "bridge-dash.png",
icon: "bridge-dash.svg",
label: function() {
if (this.multicast=="false") {
return this.name||"udp "+this.port;
@@ -173,7 +173,7 @@
},
inputs:1,
outputs:0,
icon: "bridge-dash.png",
icon: "bridge-dash.svg",
align: "right",
label: function() {
return this.name||"udp "+(this.addr+":"+this.port);

View File

@@ -117,7 +117,7 @@
return label;
}
},
icon: "switch.png",
icon: "switch.svg",
label: function() {
return this.name||this._("switch.switch");
},
@@ -128,7 +128,7 @@
var node = this;
var previousValueType = {value:"prev",label:this._("inject.previous"),hasValue:false};
$("#node-input-property").typedInput({default:this.propertyType||'msg',types:['msg','flow','global','jsonata']});
$("#node-input-property").typedInput({default:this.propertyType||'msg',types:['msg','flow','global','jsonata','env']});
var outputCount = $("#node-input-outputs").val("{}");
var andLabel = this._("switch.and");

View File

@@ -28,7 +28,7 @@
},
inputs: 1,
outputs: 1,
icon: "swap.png",
icon: "swap.svg",
label: function() {
function prop2name(type, key) {
var result = RED.utils.parseContextKey(key);

View File

@@ -52,7 +52,7 @@
},
inputs: 1,
outputs: 1,
icon: "range.png",
icon: "range.svg",
label: function() {
if (this.minout !== "" && this.maxout !== "") { return this.name||this.minout + " - " + this.maxout; }
else { return this.name||this._("range.range"); }

View File

@@ -61,7 +61,7 @@
},
inputs:1,
outputs:1,
icon: "split.png",
icon: "split.svg",
label: function() {
return this.name||this._("split.split");
},
@@ -218,7 +218,7 @@
},
inputs:1,
outputs:1,
icon: "join.png",
icon: "join.svg",
label: function() {
return this.name||this._("join.join");
},

View File

@@ -572,6 +572,8 @@ module.exports = function(RED) {
}
}
if (msg.hasOwnProperty("reset")) { if (inflight[partId]) { delete inflight[partId] }; return; }
if ((payloadType === 'object') && (propertyKey === null || propertyKey === undefined || propertyKey === "")) {
if (node.mode === "auto") {
node.warn("Message missing 'msg.parts.key' property - cannot add to object");
@@ -590,7 +592,6 @@ module.exports = function(RED) {
return;
}
if (msg.hasOwnProperty("reset")) { if (inflight[partid]) { delete inflight[partId] } return; }
if (!inflight.hasOwnProperty(partId)) {
if (payloadType === 'object' || payloadType === 'merged') {
inflight[partId] = {
@@ -627,11 +628,13 @@ module.exports = function(RED) {
var group = inflight[partId];
if (payloadType === 'buffer') {
inflight[partId].bufferLen += property.length;
if (property !== undefined) {
inflight[partId].bufferLen += property.length;
}
}
if (payloadType === 'object') {
group.payload[propertyKey] = property;
group.currentCount = (group.currentCount || 0) + 1;
group.currentCount = Object.keys(group.payload).length;
} else if (payloadType === 'merged') {
if (Array.isArray(property) || typeof property !== 'object') {
if (!msg.hasOwnProperty("complete")) {

View File

@@ -75,7 +75,7 @@
},
inputs:1,
outputs:1,
icon: "sort.png",
icon: "sort.svg",
label: function() {
return this.name||this._("sort.sort");
},

View File

@@ -81,7 +81,7 @@
},
inputs:1,
outputs:1,
icon: "batch.png",
icon: "batch.svg",
label: function() {
return this.name||this._("batch.batch");;
},

View File

@@ -24,7 +24,7 @@
</div>
<hr align="middle"/>
<div class="form-row">
<label style="width:100%; border-bottom:1px solid #eee;"><span data-i18n="csv.label.c2o"></span></label>
<label style="width:100%;"><span data-i18n="csv.label.c2o"></span></label>
</div>
<div class="form-row" style="padding-left:20px;">
<label><i class="fa fa-sign-in"></i> <span data-i18n="csv.label.input"></span></label>
@@ -42,7 +42,7 @@
</select>
</div>
<div class="form-row" style="margin-top:20px">
<label style="width:100%; border-bottom:1px solid #eee;"><span data-i18n="csv.label.o2c"></span></label>
<label style="width:100%;"><span data-i18n="csv.label.o2c"></span></label>
</div>
<div class="form-row" style="padding-left:20px;">
<label><i class="fa fa-sign-in"></i> <span data-i18n="csv.label.output"></span></label>
@@ -78,7 +78,7 @@
},
inputs:1,
outputs:1,
icon: "parser-csv.png",
icon: "parser-csv.svg",
label: function() {
return this.name||"csv";
},

View File

@@ -49,7 +49,7 @@
},
inputs:1,
outputs:1,
icon: "parser-html.png",
icon: "parser-html.svg",
label: function() {
return this.name||this.tag||"html";
},

View File

@@ -18,7 +18,7 @@
</div>
<hr align="middle"/>
<div class="form-row node-json-to-json-options">
<label style="width:100%; border-bottom: 1px solid #eee;"><span data-i18n="json.label.o2j"></span></label>
<label style="width:100%;"><span data-i18n="json.label.o2j"></span></label>
</div>
<div class="form-row node-json-to-json-options" style="padding-left: 20px;">
<input style="width:20px; vertical-align:top; margin-right: 5px;" type="checkbox" id="node-input-pretty"><label style="width: auto;" for="node-input-pretty" data-i18n="json.label.pretty"></span>
@@ -37,7 +37,7 @@
},
inputs:1,
outputs:1,
icon: "parser-json.png",
icon: "parser-json.svg",
label: function() {
return this.name||"json";
},

View File

@@ -10,7 +10,7 @@
</div>
<hr align="middle"/>
<div class="form-row">
<label style="width:100%; border-bottom: 1px solid #eee;"><span data-i18n="xml.label.x2o"></span></label>
<label style="width:100%;"><span data-i18n="xml.label.x2o"></span></label>
</div>
<div class="form-row" style="padding-left: 20px;">
<label style="width:250px;" for="node-input-attr" data-i18n="xml.label.represent"></label> <input type="text" id="node-input-attr" style="text-align:center; width:40px" placeholder="$">
@@ -32,7 +32,7 @@
},
inputs:1,
outputs:1,
icon: "parser-xml.png",
icon: "parser-xml.svg",
label: function() {
return this.name||"xml";
},

View File

@@ -20,7 +20,7 @@
},
inputs:1,
outputs:1,
icon: "parser-yaml.png",
icon: "parser-yaml.svg",
label: function() {
return this.name||"yaml";
},

View File

@@ -205,7 +205,7 @@
color:"BurlyWood",
inputs:1,
outputs:1,
icon: "file-out.png",
icon: "file-out.svg",
label: function() {
if (this.overwriteFile === "delete") {
return this.name||this._("file.label.deletelabel",{file:this.filename});
@@ -273,7 +273,7 @@
outputLabels: function(i) {
return (this._((this.format === "utf8") ? "file.label.utf8String" : "file.label.binaryBuffer"));
},
icon: "file-in.png",
icon: "file-in.svg",
label: function() {
return this.name||this.filename||this._("file.label.filelabel");
},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-216.74 -415.04) scale(.62143)" fill="#fff"><path d="M371.3 683.97l1.61-1.61H389l1.61 1.61-3.219 40.23-3.218 3.218h-6.437l-3.219-3.218z"/><rect x="372.91" y="735.47" width="16.092" height="16.092" ry="3.017" color="#000"/></g></svg>

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M18 5v12H7v26h11v12l14-25z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-width=".612"><path d="M34.001 27.987l-4 .004v3.997l4-.01M40.001 27.987l-4 .004v3.997l4-.01M26.001 29.987l-7-7.986v15.986M34.001 13.987l-4 .004v3.997l4-.01M40.001 13.987l-4 .004v3.997l4-.01M34.001 41.988l-4 .003v3.997l4-.01M40.001 41.988l-4 .003v3.997l4-.01M8.001 27.987l-4 .004v3.997l4-.01M14.001 27.987l-4 .004v3.997l4-.01M8.001 19.987l-4 .004v3.997l4-.01M14.001 19.987l-4 .004v3.997l4-.01M8.001 35.987l-4 .004v3.997l4-.01M14.001 35.987l-4 .004v3.997l4-.01"/></g></svg>

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M19.924 6.61c4.372 5.433 7.182 13.893 7.182 23.397 0 9.493-2.804 17.946-7.167 23.379m-4.294-38.39c5.645 9.417 7.172 20.944.024 29.993m-4.36-21.661c1.338 1.459 2.215 3.906 2.215 6.68 0 2.571-.755 4.863-1.931 6.346" fill="none" stroke="#fff" stroke-dasharray="14.096, 3.524" stroke-width="3.524"/></svg>

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M19.924 6.61c4.372 5.433 7.182 13.893 7.182 23.397 0 9.493-2.804 17.946-7.167 23.379m-4.294-38.39c5.645 9.417 7.172 20.944.024 29.993m-4.36-21.661c1.338 1.459 2.215 3.906 2.215 6.68 0 2.571-.755 4.863-1.931 6.346" fill="none" stroke="#fff" stroke-width="3.224"/></svg>

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M20 12a18 18 0 0 0-3.494.36l-1.428 5.715-5.06-3.036a18 18 0 0 0-4.946 4.917l3.045 5.078-5.765 1.442A18 18 0 0 0 2 30a18 18 0 0 0 .345 3.434l5.775 1.444-3.072 5.12a18 18 0 0 0 4.893 4.924l5.137-3.083 1.455 5.82A18 18 0 0 0 20 48a18 18 0 0 0 3.47-.353l1.452-5.807 5.128 3.076a18 18 0 0 0 4.905-4.913l-3.074-5.124 5.783-1.446A18 18 0 0 0 38 30a18 18 0 0 0-.367-3.529l-5.75-1.437 3.041-5.069a18 18 0 0 0-4.937-4.928l-5.065 3.038-1.433-5.728A18 18 0 0 0 20 12zm0 9a9 9 0 0 1 9 9 9 9 0 0 1-9 9 9 9 0 0 1-9-9 9 9 0 0 1 9-9z" color="#000" fill="#fff" opacity=".98" style="isolation:auto;mix-blend-mode:normal"/></svg>

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M36.19 28.6c0 6.088-7.289 11.024-16.28 11.024a23.98 23.98 0 0 1-2.982-.185c-1.272-.159-7.933 7.526-13.113 6.53.18-2.004 8.18-6.004 5.87-8.79C5.993 35.16 3.63 32.066 3.63 28.6c0-6.088 7.289-11.024 16.28-11.024 8.991 0 16.28 4.936 16.28 11.024z" fill="#fff" stroke="#868686" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" style="isolation:auto;mix-blend-mode:normal"/></svg>

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 459 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-355 -704.36)"><ellipse transform="matrix(1.2868 0 0 1.9263 -64.444 -607.56)" cx="341.25" cy="688.61" rx="9.84" ry="3.25" color="#000" fill="#fff"/><path d="M387.32 750.48c0 1.949-5.669 5.879-12.662 5.879s-12.662-3.93-12.662-5.879v-27.043c0 1.949 5.669 6.242 12.662 6.242s12.662-4.293 12.662-6.242v27.043" color="#000" fill="#fff"/></g></svg>

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M10.004 14.499h20M10.004 46.503h20M10.004 22.5h20M10.004 30.501h20M10.004 38.502h20" stroke="#fff" stroke-width="2.9997000000000003"/></svg>

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M20 32.96l-18-18h36z"/><path d="M2 20.36l18 18 18-18v26.1H2z"/></g></svg>

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#b85c5c" stroke="#000"><path color="#000" d="M-.01-.004h39.998v60H-.01z" fill="none" stroke="none"/><g transform="translate(-450.266 -585.37)"><rect x="464.27" y="625.37" width="12" height="12" ry="2.4" color="#000" fill="#fff" stroke="none"/><g fill="none" stroke="#fff" stroke-width="4"><path d="M461.27 618.87l5.5-2.5h7l5.5 2.5M459.27 608.87l5.5-2.5h11l5.5 2.5M457.27 598.87l5.5-2.5h15l5.5 2.5"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path color="#000" fill="none" d="M0-.04h40v60H0z"/><g fill="#fff"><path d="M5 9.96h14v16h9v7H18v10h10v7H5z"/><path d="M22 9.96l13 13H22z"/><path d="M28 25.96h7v6l5 6-4.987 6-.013 6h-7l10-12z" fill-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path color="#000" fill="none" d="M0-.04h40v60H0z"/><g fill="#fff"><path d="M5 9.96h14v16h16v24H5v-7h5v7l10-12-10-12v7H5z"/><path d="M22 9.96l13 13H22z"/></g><path d="M5 30.96H0v14h5v-2H2v-10h3z" fill="#fff" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M5 10h14v16h16v24H5z"/><path d="M22 10l13 13H22z"/></g></svg>

After

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M30.999 31.005v-3h-6.762s.812-12.397 1.162-14 .597-3.35 2.628-3.103 1.971 3.103 1.971 3.103l4.862-.016s-.783-3.984-2.783-5.984-7.946-1.7-9.633.03c-1.687 1.73-2.302 5.065-2.597 6.422-.588 4.5-.854 9.027-1.248 13.547h-8.6v3H18.1s-.812 12.398-1.162 14-.597 3.35-2.628 3.103-1.972-3.102-1.972-3.102l-4.862.015s.783 3.985 2.783 5.985c2 2 7.946 1.699 9.634-.031 1.687-1.73 2.302-5.065 2.597-6.422.587-4.5.854-9.027 1.248-13.547z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 502 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-width=".857"><path d="M17.997 8.998l-5.972.072-4.028 43.928 5.914.072z"/><path d="M6 16.999l-1 6 31 1 1-6z"/><path d="M31.996 8.998l-5.971.072-4.029 43.928 5.914.072z"/><path d="M3.998 37.004l-1 6 31 1 1-6z"/></g></svg>

After

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M18 5v12H7v9h15v-7l6 11-6 12v-8H7v9h11v12l14-25z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M40.001 39.99l-.032-19.955-11.967.017v19.983l12-.046M8.001 28.027l-4 .004v3.997l4-.01M14.001 28.027l-4 .004v3.997l4-.01M25.001 30.027l-7-7.986v15.986M8.001 20.027l-4 .004v3.996l4-.01M14.001 20.027l-4 .004v3.996l4-.01M8.001 36.027l-4 .004v3.997l4-.01M14.001 36.027l-4 .004v3.997l4-.01" fill="#fff" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(.78737 0 0 .78793 -271.294 -529.99)" stroke="#fff" fill="none"><ellipse transform="matrix(1.4924 0 0 1.4616 -59.491 -343.46)" cx="287.75" cy="715.86" rx="10.75" ry="12" color="#000" stroke-width="4.071"/><path d="M362.5 717.86v15.5c6.371 2.128 8.712 2.003 15 0v-15.5" stroke-linejoin="round" stroke-width="5.01"/><path d="M366.5 717.86l1-12h5l1 12" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.006"/></g></svg>

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M7 38.98v3.983h11v12l13-23H19l-.463.017c-1.28 4.048-5.066 6.983-9.537 6.983zm12-11.017h12l-13-23v12H7V20.9l2 .064c4.467 0 8.25 2.93 9.534 6.972zM6.95 24.22a6 6 0 1 1-.083 11.456" fill="#fff" style="isolation:auto;mix-blend-mode:normal"/></svg>

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 413 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M26.001 7.034l-22 .043v45.958h32v-36zm-14.838 14h2.838v15.001h-3V25.738c-1.027.96-2.606 1.114-4 1.574V24.76c.734-.24 1.53-.706 2.39-1.373.861-.673 1.452-1.457 1.772-2.351zm15.948 0c1.448 0 2.824.392 3.65 1.173.828.78 1.24 1.751 1.24 2.912 0 .66-.12 1.29-.36 1.89a7.143 7.143 0 0 1-1.05 1.872c-.34.433-.952 1.057-1.84 1.87-.886.815-1.687 1.355-1.927 1.622-.233.267-.423.408-.57.662h5.748v3H21.98c.107-.987.427-2.192.96-3.072.534-.887 1.825-2.06 3.4-3.522 1.267-1.18 1.972-1.982 2.259-2.402.387-.58.402-1.154.402-1.721 0-.627.008-1.108-.332-1.441-.333-.34-1.035-.51-1.629-.51-.587 0-1.053.178-1.4.531-.347.354-.546 1.316-.6 2.137h-3.039c.167-1.548.928-3.315 1.809-3.989.88-.673 1.98-1.011 3.3-1.011zM17.002 33.036h3v1.928c0 .814-.073 1.455-.213 1.922-.14.473-.407.898-.8 1.271-.387.374-.88.666-1.481.88l-.549-1.161c.567-.187.969-.443 1.21-.77.24-.327.367-.503.38-1.07h-1.547z" fill="#fff" stroke="none" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M26.001 7.034l-22 .043v45.958h32v-36zm-13 13l3 2-6 8 6 8.001-3 2-7-10zm13 0l7 10-7 10.001-3-2 6-8-6-8z" fill="#fff" stroke="none" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M26.001 7.034l-22 .043v45.958h32v-36zm-9.17 10.002h1.197v3.11c-.974 0-2.1.057-2.381.17a1.146 1.146 0 0 0-.606.493c-.131.217-.197.593-.197 1.131 0 .546-.04 1.583-.119 3.11-.044.858-.158 1.556-.342 2.093-.184.53-.421.968-.71 1.315-.281.347-.716.705-1.303 1.078.517.295.939.642 1.263 1.04.334.391.588.869.764 1.433.175.563.29 1.318.342 2.263a86.9 86.9 0 0 1 .092 2.756c0 .573.07.972.21 1.198.14.225.35.395.631.507.29.122 1.408.182 2.356.182v3.121H16.83c-1.185 0-2.093-.095-2.725-.285a3.69 3.69 0 0 1-1.604-.924 3.3 3.3 0 0 1-.869-1.613c-.149-.633-.224-1.634-.224-3.004 0-1.596-.07-2.633-.21-3.11-.192-.693-.487-1.187-.882-1.482-.386-.303-2.509-.539-3.316-.582v-3c.64-.035 2.649-.19 2.974-.346.324-.156.605-.417.842-.781.237-.373.398-.836.486-1.39.07-.417.106-1.143.106-2.175 0-1.682.08-2.852.238-3.511.158-.668.443-1.201.855-1.6.413-.408 1.012-.729 1.801-.963.535-.156 3.677-.234 2.527-.234zm5.157 0h1.197c1.15 0 1.993.078 2.528.234.79.234 1.388.555 1.8.963.413.399.698.932.856 1.6.158.659.238 1.83.238 3.511 0 1.032.036 1.758.106 2.174.087.555.25 1.018.486 1.39.237.365.517.626.842.782.324.156 2.333.311 2.973.346v3c-.807.043-2.93.278-3.315.582-.395.295-.69.789-.883 1.482-.14.477-.209 1.514-.209 3.11 0 1.37-.075 2.37-.224 3.004-.15.641-.44 1.18-.87 1.613a3.69 3.69 0 0 1-1.603.924c-.632.19-3.909.285-2.725.285h-1.197v-3.121c.947 0 2.066-.06 2.356-.182.28-.112.49-.282.63-.508.14-.225.211-.625.211-1.197 0-.399.03-1.316.092-2.756.053-.945.166-1.7.342-2.264.175-.563.43-1.041.764-1.431a4.434 4.434 0 0 1 1.263-1.041c-.587-.373-1.022-.731-1.302-1.078-.29-.347-.527-.786-.711-1.315-.185-.537-.298-1.235-.342-2.094-.08-1.526-.12-2.563-.12-3.109 0-.538-.065-.914-.197-1.13a1.146 1.146 0 0 0-.605-.495c-.28-.113-1.407-.17-2.38-.17z" fill="#fff" stroke="none" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 393 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M26.001 7.034l-22 .043v45.958h32v-36zm-13 13l3 2-6 8 6 8.001-3 2-7-10zm13 0l7 10-7 10.001-3-2 6-8-6-8z" fill="#fff" stroke="none" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 423 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M26.001 6.987l-22 .043v45.958h32V16.987zM10.567 19.362h5.352c.768 0 1.282.104 1.543.313.273.208.41.573.41 1.093 0 .521-.163.886-.488 1.094-.313.209-.892.313-1.739.313h-.644l4.726 8.477 4.903-8.477h-.801c-.703 0-1.191-.104-1.465-.313-.273-.208-.41-.573-.41-1.094 0-.546.117-.918.352-1.113.234-.195.826-.293 1.777-.293h3.594c.99 0 1.62.104 1.894.313.287.195.43.56.43 1.093 0 .521-.143.886-.43 1.094-.273.209-.8.313-1.582.313h-.312l-6.64 11.387v6.211h2.85c1.003 0 1.641.098 1.915.293.286.182.43.534.43 1.055 0 .534-.144.905-.43 1.113-.274.195-.834.293-1.68.293h-9.277c-.847 0-1.406-.098-1.68-.293-.273-.208-.41-.58-.41-1.113 0-.521.15-.873.45-1.055.312-.195.95-.293 1.913-.293h2.832V33.29l-6.504-11.114h-.332c-.781 0-1.315-.104-1.601-.312-.287-.209-.43-.573-.43-1.094 0-.482.117-.833.351-1.055.248-.234.626-.351 1.133-.351z" fill="#fff" stroke="none" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M8.003 42.007h5v-18h-5zM8.003 20.006h5v-5h-5zM25 52.007h8v-29h-8zM25 15.01h8v-8h-8z" fill="#fff" stroke="none"/><path d="M15.819 15.639l6.293-2.517M15.19 42.385l7.236 3.775" fill="none" stroke="#fff" stroke-width="1.25862"/></svg>

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 482 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-width=".138"><path d="M20.21 20.98c2.096-.023 4.694 1.562 4.683 3.058-.01 1.32-1.824 2.39-4.667 2.37-2.784-.034-4.656-1.344-4.65-2.623.005-1.053 2.271-2.866 4.634-2.805zM13.07 21.87c.469-.009.954.028 1.449.111 1.458.245-6.99 7.623-7.12 5.977-.116-3.756 2.39-6.027 5.671-6.088zM26.91 21.99c3.28.061 5.787 2.33 5.67 6.086-.13 1.645-8.577-5.73-7.119-5.975a7.83 7.83 0 0 1 1.449-.111zM25.76 26.59c1.56.143 3.143 1.08 4.175 2.643 1.652 2.5 1.27 5.656-.855 7.048-2.125 1.392-5.185.492-6.837-2.008-1.652-2.5-1.269-5.656.855-7.048.797-.522 1.725-.72 2.662-.635zM14.7 26.84c.937-.086 1.865.113 2.661.635 2.125 1.392 2.508 4.548.856 7.048-1.652 2.5-4.712 3.397-6.837 2.005-2.124-1.392-2.507-4.545-.855-7.045 1.032-1.563 2.614-2.5 4.175-2.643zM33.05 29.6a.728.728 0 0 1 .204.026c3.806 2.173 3.145 7.01 1.092 8.66-1.808.804-3.29-8.653-1.296-8.686zM6.95 29.73c1.994.033.512 9.49-1.296 8.687-2.053-1.651-2.714-6.486 1.092-8.66a.738.738 0 0 1 .204-.027zM20.3 36.23c2.832-.014 5.141 2.093 5.156 4.704v.049c.015 2.61-2.269 4.738-5.1 4.752-2.832.014-5.141-2.09-5.156-4.701a2.996 2.996 0 0 1 0-.051c-.015-2.611 2.268-4.74 5.1-4.753zM31.66 38.02c.4-.011.777.102 1.115.364.91.907 1.443 4.32-.15 6.366-2.195 3.045-5.165 3.164-6.272 2.316-1.157-1.092-.274-4.482 1.313-6.34 1.361-1.538 2.793-2.675 3.994-2.706zM8.65 38.74c1.29.055 2.836 1.076 4.099 2.54 1.466 1.768 2.135 4.872.91 5.788-1.157.698-3.968.409-5.967-2.463-1.347-2.409-1.175-4.86-.229-5.58a2.07 2.07 0 0 1 1.187-.285zM20.35 47.21c2.06-.09 4.824.663 4.83 1.662.033.97-2.508 3.163-4.967 3.12-2.547.11-5.045-2.085-5.012-2.846-.038-1.116 3.102-1.987 5.149-1.936zM35.13 11.03c-.569 7.356-7.409 14.128-11.629 6.971 1.363-1.52 3.853-3.306 8.133-5.513-3.33 1.132-6.335 2.64-8.85 4.716-5.838-4.296 4.734-9.675 12.346-6.174z"/><path d="M5.42 11.03c.569 7.356 7.409 14.128 11.629 6.971-1.363-1.52-3.853-3.306-8.133-5.513 3.33 1.132 6.335 2.64 8.85 4.716 5.838-4.296-4.734-9.675-12.346-6.174z"/></g></svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 47.5h4l.04-34.995L19.5 12.5v35h11v-35h5" fill="none" stroke="#fff" stroke-linecap="square" stroke-width="5"/></svg>

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 793 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M20.001 19.955l-7.5-8.178-7.5 8.178h5v28h5v-28zM35.001 39.955l-7.5 8.177-7.5-8.177h5v-28h5v28z" fill="#fff" stroke-width=".531"/></svg>

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M16.001 39.99l-.032-19.957-11.968.017v19.983l12-.045M34.001 28.027l-4 .004v3.997l4-.01M40.001 28.027l-4 .004v3.997l4-.01M27.001 30.027l-7-7.986v15.986M34.001 20.027l-4 .004v3.997l4-.01M40.001 20.027l-4 .004v3.997l4-.01M34.001 36.027l-4 .004v3.997l4-.01M40.001 36.027l-4 .004v3.997l4-.01" fill="#fff" stroke-width=".612"/></svg>

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><path d="M25 25.94h7c.58 0 1-.42 1-1v-2c0-.58-.42-1-1-1h-7c-.58 0-1 .42-1 1v2c0 .58.42 1 1 1zm-17 12h7c.58 0 1-.42 1-1v-2c0-.58-.42-1-1-1H8c-.58 0-1 .42-1 1v2c0 .58.42 1 1 1zm-.416 11C5.624 48.94 4 47.315 4 45.356V14.522c0-1.96 1.625-3.582 3.584-3.582h24.832c1.96 0 3.584 1.623 3.584 3.582v30.834c0 1.96-1.625 3.584-3.584 3.584zM32 36.94H19c0 2.19-1.81 4-4 4H7v4.416c0 .35.235.584.584.584h24.832c.35 0 .584-.235.584-.584v-8.417zm1-2v-6h-8c-2.19 0-4-1.81-4-4h-1c-4.333-.002-8.667.004-13 0v6h8c2.19 0 4 1.81 4 4h13zm0-16v-4.418c0-.35-.235-.582-.584-.582H7.584c-.35 0-.584.233-.584.582v8.417c4.333.002 8.667.001 13 .001h1c0-2.19 1.81-4 4-4h8z" color="#000" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

View File

@@ -0,0 +1 @@
<svg width="40" height="60" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="M12.787 26.432L9.5 18.003h-4.5v-5h8l2.286 6.286m5.357 14.286l3.357 8.428h4v-8l7 10.5-7 10.5v-8h-7.5l-2.357-6.286"/><path d="M13.001 47.003l10.857-29h4.143v8l7-10.5-7-10.5v8h-7.5l-11 29h-4.5v5z"/></g></svg>

After

Width:  |  Height:  |  Size: 292 B

Some files were not shown because too many files have changed in this diff Show More