first commit
@@ -0,0 +1,246 @@
|
||||
/*!
|
||||
* The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/)
|
||||
* Copyright (c) 2016 Edson Hilios
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
(function(factory) {
|
||||
"use strict";
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define([ "jquery" ], factory);
|
||||
} else {
|
||||
factory(jQuery);
|
||||
}
|
||||
})(function($) {
|
||||
"use strict";
|
||||
var instances = [], matchers = [], defaultOptions = {
|
||||
precision: 100,
|
||||
elapse: false,
|
||||
defer: false
|
||||
};
|
||||
matchers.push(/^[0-9]*$/.source);
|
||||
matchers.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source);
|
||||
matchers.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source);
|
||||
matchers = new RegExp(matchers.join("|"));
|
||||
function parseDateString(dateString) {
|
||||
if (dateString instanceof Date) {
|
||||
return dateString;
|
||||
}
|
||||
if (String(dateString).match(matchers)) {
|
||||
if (String(dateString).match(/^[0-9]*$/)) {
|
||||
dateString = Number(dateString);
|
||||
}
|
||||
if (String(dateString).match(/\-/)) {
|
||||
dateString = String(dateString).replace(/\-/g, "/");
|
||||
}
|
||||
return new Date(dateString);
|
||||
} else {
|
||||
throw new Error("Couldn't cast `" + dateString + "` to a date object.");
|
||||
}
|
||||
}
|
||||
var DIRECTIVE_KEY_MAP = {
|
||||
Y: "years",
|
||||
m: "months",
|
||||
n: "daysToMonth",
|
||||
d: "daysToWeek",
|
||||
w: "weeks",
|
||||
W: "weeksToMonth",
|
||||
H: "hours",
|
||||
M: "minutes",
|
||||
S: "seconds",
|
||||
D: "totalDays",
|
||||
I: "totalHours",
|
||||
N: "totalMinutes",
|
||||
T: "totalSeconds"
|
||||
};
|
||||
function escapedRegExp(str) {
|
||||
var sanitize = str.toString().replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
|
||||
return new RegExp(sanitize);
|
||||
}
|
||||
function strftime(offsetObject) {
|
||||
return function(format) {
|
||||
var directives = format.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);
|
||||
if (directives) {
|
||||
for (var i = 0, len = directives.length; i < len; ++i) {
|
||||
var directive = directives[i].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/), regexp = escapedRegExp(directive[0]), modifier = directive[1] || "", plural = directive[3] || "", value = null;
|
||||
directive = directive[2];
|
||||
if (DIRECTIVE_KEY_MAP.hasOwnProperty(directive)) {
|
||||
value = DIRECTIVE_KEY_MAP[directive];
|
||||
value = Number(offsetObject[value]);
|
||||
}
|
||||
if (value !== null) {
|
||||
if (modifier === "!") {
|
||||
value = pluralize(plural, value);
|
||||
}
|
||||
if (modifier === "") {
|
||||
if (value < 10) {
|
||||
value = "0" + value.toString();
|
||||
}
|
||||
}
|
||||
format = format.replace(regexp, value.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
format = format.replace(/%%/, "%");
|
||||
return format;
|
||||
};
|
||||
}
|
||||
function pluralize(format, count) {
|
||||
var plural = "s", singular = "";
|
||||
if (format) {
|
||||
format = format.replace(/(:|;|\s)/gi, "").split(/\,/);
|
||||
if (format.length === 1) {
|
||||
plural = format[0];
|
||||
} else {
|
||||
singular = format[0];
|
||||
plural = format[1];
|
||||
}
|
||||
}
|
||||
if (Math.abs(count) > 1) {
|
||||
return plural;
|
||||
} else {
|
||||
return singular;
|
||||
}
|
||||
}
|
||||
var Countdown = function(el, finalDate, options) {
|
||||
this.el = el;
|
||||
this.$el = $(el);
|
||||
this.interval = null;
|
||||
this.offset = {};
|
||||
this.options = $.extend({}, defaultOptions);
|
||||
this.instanceNumber = instances.length;
|
||||
instances.push(this);
|
||||
this.$el.data("countdown-instance", this.instanceNumber);
|
||||
if (options) {
|
||||
if (typeof options === "function") {
|
||||
this.$el.on("update.countdown", options);
|
||||
this.$el.on("stoped.countdown", options);
|
||||
this.$el.on("finish.countdown", options);
|
||||
} else {
|
||||
this.options = $.extend({}, defaultOptions, options);
|
||||
}
|
||||
}
|
||||
this.setFinalDate(finalDate);
|
||||
if (this.options.defer === false) {
|
||||
this.start();
|
||||
}
|
||||
};
|
||||
$.extend(Countdown.prototype, {
|
||||
start: function() {
|
||||
if (this.interval !== null) {
|
||||
clearInterval(this.interval);
|
||||
}
|
||||
var self = this;
|
||||
this.update();
|
||||
this.interval = setInterval(function() {
|
||||
self.update.call(self);
|
||||
}, this.options.precision);
|
||||
},
|
||||
stop: function() {
|
||||
clearInterval(this.interval);
|
||||
this.interval = null;
|
||||
this.dispatchEvent("stoped");
|
||||
},
|
||||
toggle: function() {
|
||||
if (this.interval) {
|
||||
this.stop();
|
||||
} else {
|
||||
this.start();
|
||||
}
|
||||
},
|
||||
pause: function() {
|
||||
this.stop();
|
||||
},
|
||||
resume: function() {
|
||||
this.start();
|
||||
},
|
||||
remove: function() {
|
||||
this.stop.call(this);
|
||||
instances[this.instanceNumber] = null;
|
||||
delete this.$el.data().countdownInstance;
|
||||
},
|
||||
setFinalDate: function(value) {
|
||||
this.finalDate = parseDateString(value);
|
||||
},
|
||||
update: function() {
|
||||
if (this.$el.closest("html").length === 0) {
|
||||
this.remove();
|
||||
return;
|
||||
}
|
||||
var hasEventsAttached = $._data(this.el, "events") !== undefined, now = new Date(), newTotalSecsLeft;
|
||||
newTotalSecsLeft = this.finalDate.getTime() - now.getTime();
|
||||
newTotalSecsLeft = Math.ceil(newTotalSecsLeft / 1e3);
|
||||
newTotalSecsLeft = !this.options.elapse && newTotalSecsLeft < 0 ? 0 : Math.abs(newTotalSecsLeft);
|
||||
if (this.totalSecsLeft === newTotalSecsLeft || !hasEventsAttached) {
|
||||
return;
|
||||
} else {
|
||||
this.totalSecsLeft = newTotalSecsLeft;
|
||||
}
|
||||
this.elapsed = now >= this.finalDate;
|
||||
this.offset = {
|
||||
seconds: this.totalSecsLeft % 60,
|
||||
minutes: Math.floor(this.totalSecsLeft / 60) % 60,
|
||||
hours: Math.floor(this.totalSecsLeft / 60 / 60) % 24,
|
||||
days: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,
|
||||
daysToWeek: Math.floor(this.totalSecsLeft / 60 / 60 / 24) % 7,
|
||||
daysToMonth: Math.floor(this.totalSecsLeft / 60 / 60 / 24 % 30.4368),
|
||||
weeks: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7),
|
||||
weeksToMonth: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 7) % 4,
|
||||
months: Math.floor(this.totalSecsLeft / 60 / 60 / 24 / 30.4368),
|
||||
years: Math.abs(this.finalDate.getFullYear() - now.getFullYear()),
|
||||
totalDays: Math.floor(this.totalSecsLeft / 60 / 60 / 24),
|
||||
totalHours: Math.floor(this.totalSecsLeft / 60 / 60),
|
||||
totalMinutes: Math.floor(this.totalSecsLeft / 60),
|
||||
totalSeconds: this.totalSecsLeft
|
||||
};
|
||||
if (!this.options.elapse && this.totalSecsLeft === 0) {
|
||||
this.stop();
|
||||
this.dispatchEvent("finish");
|
||||
} else {
|
||||
this.dispatchEvent("update");
|
||||
}
|
||||
},
|
||||
dispatchEvent: function(eventName) {
|
||||
var event = $.Event(eventName + ".countdown");
|
||||
event.finalDate = this.finalDate;
|
||||
event.elapsed = this.elapsed;
|
||||
event.offset = $.extend({}, this.offset);
|
||||
event.strftime = strftime(this.offset);
|
||||
this.$el.trigger(event);
|
||||
}
|
||||
});
|
||||
$.fn.countdown = function() {
|
||||
var argumentsArray = Array.prototype.slice.call(arguments, 0);
|
||||
return this.each(function() {
|
||||
var instanceNumber = $(this).data("countdown-instance");
|
||||
if (instanceNumber !== undefined) {
|
||||
var instance = instances[instanceNumber], method = argumentsArray[0];
|
||||
if (Countdown.prototype.hasOwnProperty(method)) {
|
||||
instance[method].apply(instance, argumentsArray.slice(1));
|
||||
} else if (String(method).match(/^[$A-Z_][0-9A-Z_$]*$/i) === null) {
|
||||
instance.setFinalDate.call(instance, method);
|
||||
instance.start();
|
||||
} else {
|
||||
$.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi, method));
|
||||
}
|
||||
} else {
|
||||
new Countdown(this, argumentsArray[0], argumentsArray[1]);
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
/*!
|
||||
* The Final Countdown for jQuery v2.2.0 (http://hilios.github.io/jQuery.countdown/)
|
||||
* Copyright (c) 2016 Edson Hilios
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
* this software and associated documentation files (the "Software"), to deal in
|
||||
* the Software without restriction, including without limitation the rights to
|
||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){"use strict";function b(a){if(a instanceof Date)return a;if(String(a).match(g))return String(a).match(/^[0-9]*$/)&&(a=Number(a)),String(a).match(/\-/)&&(a=String(a).replace(/\-/g,"/")),new Date(a);throw new Error("Couldn't cast `"+a+"` to a date object.")}function c(a){var b=a.toString().replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");return new RegExp(b)}function d(a){return function(b){var d=b.match(/%(-|!)?[A-Z]{1}(:[^;]+;)?/gi);if(d)for(var f=0,g=d.length;f<g;++f){var h=d[f].match(/%(-|!)?([a-zA-Z]{1})(:[^;]+;)?/),j=c(h[0]),k=h[1]||"",l=h[3]||"",m=null;h=h[2],i.hasOwnProperty(h)&&(m=i[h],m=Number(a[m])),null!==m&&("!"===k&&(m=e(l,m)),""===k&&m<10&&(m="0"+m.toString()),b=b.replace(j,m.toString()))}return b=b.replace(/%%/,"%")}}function e(a,b){var c="s",d="";return a&&(a=a.replace(/(:|;|\s)/gi,"").split(/\,/),1===a.length?c=a[0]:(d=a[0],c=a[1])),Math.abs(b)>1?c:d}var f=[],g=[],h={precision:100,elapse:!1,defer:!1};g.push(/^[0-9]*$/.source),g.push(/([0-9]{1,2}\/){2}[0-9]{4}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g.push(/[0-9]{4}([\/\-][0-9]{1,2}){2}( [0-9]{1,2}(:[0-9]{2}){2})?/.source),g=new RegExp(g.join("|"));var i={Y:"years",m:"months",n:"daysToMonth",d:"daysToWeek",w:"weeks",W:"weeksToMonth",H:"hours",M:"minutes",S:"seconds",D:"totalDays",I:"totalHours",N:"totalMinutes",T:"totalSeconds"},j=function(b,c,d){this.el=b,this.$el=a(b),this.interval=null,this.offset={},this.options=a.extend({},h),this.instanceNumber=f.length,f.push(this),this.$el.data("countdown-instance",this.instanceNumber),d&&("function"==typeof d?(this.$el.on("update.countdown",d),this.$el.on("stoped.countdown",d),this.$el.on("finish.countdown",d)):this.options=a.extend({},h,d)),this.setFinalDate(c),this.options.defer===!1&&this.start()};a.extend(j.prototype,{start:function(){null!==this.interval&&clearInterval(this.interval);var a=this;this.update(),this.interval=setInterval(function(){a.update.call(a)},this.options.precision)},stop:function(){clearInterval(this.interval),this.interval=null,this.dispatchEvent("stoped")},toggle:function(){this.interval?this.stop():this.start()},pause:function(){this.stop()},resume:function(){this.start()},remove:function(){this.stop.call(this),f[this.instanceNumber]=null,delete this.$el.data().countdownInstance},setFinalDate:function(a){this.finalDate=b(a)},update:function(){if(0===this.$el.closest("html").length)return void this.remove();var b,c=void 0!==a._data(this.el,"events"),d=new Date;b=this.finalDate.getTime()-d.getTime(),b=Math.ceil(b/1e3),b=!this.options.elapse&&b<0?0:Math.abs(b),this.totalSecsLeft!==b&&c&&(this.totalSecsLeft=b,this.elapsed=d>=this.finalDate,this.offset={seconds:this.totalSecsLeft%60,minutes:Math.floor(this.totalSecsLeft/60)%60,hours:Math.floor(this.totalSecsLeft/60/60)%24,days:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToWeek:Math.floor(this.totalSecsLeft/60/60/24)%7,daysToMonth:Math.floor(this.totalSecsLeft/60/60/24%30.4368),weeks:Math.floor(this.totalSecsLeft/60/60/24/7),weeksToMonth:Math.floor(this.totalSecsLeft/60/60/24/7)%4,months:Math.floor(this.totalSecsLeft/60/60/24/30.4368),years:Math.abs(this.finalDate.getFullYear()-d.getFullYear()),totalDays:Math.floor(this.totalSecsLeft/60/60/24),totalHours:Math.floor(this.totalSecsLeft/60/60),totalMinutes:Math.floor(this.totalSecsLeft/60),totalSeconds:this.totalSecsLeft},this.options.elapse||0!==this.totalSecsLeft?this.dispatchEvent("update"):(this.stop(),this.dispatchEvent("finish")))},dispatchEvent:function(b){var c=a.Event(b+".countdown");c.finalDate=this.finalDate,c.elapsed=this.elapsed,c.offset=a.extend({},this.offset),c.strftime=d(this.offset),this.$el.trigger(c)}}),a.fn.countdown=function(){var b=Array.prototype.slice.call(arguments,0);return this.each(function(){var c=a(this).data("countdown-instance");if(void 0!==c){var d=f[c],e=b[0];j.prototype.hasOwnProperty(e)?d[e].apply(d,b.slice(1)):null===String(e).match(/^[$A-Z_][0-9A-Z_$]*$/i)?(d.setFinalDate.call(d,e),d.start()):a.error("Method %s does not exist on jQuery.countdown".replace(/\%s/gi,e))}else new j(this,b[0],b[1])})}});
|
||||
@@ -0,0 +1,298 @@
|
||||
// Styles shared between snow and bubble
|
||||
|
||||
controlHeight = 24px
|
||||
inputPaddingWidth = 5px
|
||||
inputPaddingHeight = 3px
|
||||
|
||||
colorItemMargin = 2px
|
||||
colorItemSize = 16px
|
||||
colorItemsPerRow = 7
|
||||
|
||||
|
||||
.ql-{themeName}.ql-toolbar, .ql-{themeName} .ql-toolbar
|
||||
&:after
|
||||
clear: both
|
||||
content: ''
|
||||
display: table
|
||||
|
||||
button
|
||||
background: none
|
||||
border: none
|
||||
cursor: pointer
|
||||
display: inline-block
|
||||
float: left
|
||||
height: controlHeight
|
||||
outline: none
|
||||
padding: inputPaddingHeight inputPaddingWidth
|
||||
width: controlHeight + (inputPaddingWidth - inputPaddingHeight)*2
|
||||
|
||||
svg
|
||||
float: left
|
||||
height: 100%
|
||||
|
||||
input.ql-image[type=file]
|
||||
display: none
|
||||
|
||||
button:hover, button.ql-active,
|
||||
.ql-picker-label:hover, .ql-picker-label.ql-active,
|
||||
.ql-picker-item:hover, .ql-picker-item.ql-selected
|
||||
color: activeColor
|
||||
.ql-fill, .ql-stroke.ql-fill
|
||||
fill: activeColor
|
||||
.ql-stroke, .ql-stroke-mitter
|
||||
stroke: activeColor
|
||||
|
||||
|
||||
.ql-{themeName}
|
||||
box-sizing: border-box
|
||||
*
|
||||
box-sizing: border-box
|
||||
|
||||
.ql-hidden
|
||||
display: none
|
||||
.ql-out-bottom, .ql-out-top
|
||||
visibility: hidden
|
||||
|
||||
.ql-tooltip
|
||||
position: absolute
|
||||
a
|
||||
cursor: pointer
|
||||
text-decoration: none
|
||||
|
||||
.ql-formats
|
||||
&:after
|
||||
clear: both
|
||||
content: ''
|
||||
display: table
|
||||
display: inline-block
|
||||
vertical-align: middle
|
||||
|
||||
.ql-toolbar.{themeName}
|
||||
|
||||
.ql-stroke
|
||||
fill: none
|
||||
stroke: inactiveColor
|
||||
stroke-linecap: round
|
||||
stroke-linejoin: round
|
||||
stroke-width: 2
|
||||
.ql-stroke-mitter
|
||||
fill: none
|
||||
stroke: inactiveColor
|
||||
stroke-mitterlimit: 10
|
||||
stroke-width: 2
|
||||
|
||||
.ql-fill, .ql-stroke.ql-fill
|
||||
fill: inactiveColor
|
||||
|
||||
.ql-empty
|
||||
fill: none
|
||||
.ql-even
|
||||
fill-rule: evenodd
|
||||
.ql-thin, .ql-stroke.ql-thin
|
||||
stroke-width: 1
|
||||
.ql-transparent
|
||||
opacity: 0.4
|
||||
|
||||
.ql-direction
|
||||
svg:last-child
|
||||
display: none
|
||||
.ql-direction.ql-active
|
||||
svg:last-child
|
||||
display: inline
|
||||
svg:first-child
|
||||
display: none
|
||||
|
||||
.ql-editor
|
||||
h1
|
||||
font-size: 2em
|
||||
h2
|
||||
font-size: 1.5em
|
||||
h3
|
||||
font-size: 1.17em
|
||||
h4
|
||||
font-size: 1em
|
||||
h5
|
||||
font-size: 0.83em
|
||||
h6
|
||||
font-size: 0.67em
|
||||
a
|
||||
text-decoration: underline
|
||||
blockquote
|
||||
border-left: 4px solid #ccc
|
||||
margin-bottom: 5px
|
||||
margin-top: 5px
|
||||
padding-left: 16px
|
||||
code, pre
|
||||
background-color: #f0f0f0
|
||||
border-radius: 3px
|
||||
pre
|
||||
white-space: pre-wrap
|
||||
margin-bottom: 5px
|
||||
margin-top: 5px
|
||||
padding: 5px 10px
|
||||
code
|
||||
font-size: 85%
|
||||
padding-bottom: 2px
|
||||
padding-top: 2px
|
||||
&:before, &:after
|
||||
content: "\00a0"
|
||||
letter-spacing: -2px
|
||||
pre.ql-syntax
|
||||
background-color: #23241f
|
||||
color: #f8f8f2;
|
||||
overflow: visible
|
||||
img
|
||||
max-width: 100%
|
||||
|
||||
.ql-picker
|
||||
color: inactiveColor
|
||||
display: inline-block
|
||||
float: left
|
||||
font-size: 14px
|
||||
font-weight: 500
|
||||
height: controlHeight
|
||||
position: relative
|
||||
vertical-align: middle
|
||||
.ql-picker-label
|
||||
cursor: pointer
|
||||
display: inline-block
|
||||
height: 100%
|
||||
padding-left: 8px
|
||||
padding-right: 2px
|
||||
position: relative
|
||||
width: 100%
|
||||
&::before
|
||||
display: inline-block
|
||||
line-height: 22px
|
||||
.ql-picker-options
|
||||
background-color: backgroundColor
|
||||
display: none
|
||||
min-width: 100%
|
||||
padding: 4px 8px
|
||||
position: absolute
|
||||
white-space: nowrap
|
||||
.ql-picker-item
|
||||
cursor: pointer
|
||||
display: block
|
||||
padding-bottom: 5px
|
||||
padding-top: 5px
|
||||
.ql-picker.ql-expanded
|
||||
.ql-picker-label
|
||||
color: borderColor
|
||||
z-index: 2
|
||||
.ql-fill
|
||||
fill: borderColor
|
||||
.ql-stroke
|
||||
stroke: borderColor
|
||||
.ql-picker-options
|
||||
display: block
|
||||
margin-top: -1px
|
||||
top: 100%
|
||||
z-index: 1
|
||||
|
||||
.ql-color-picker, .ql-icon-picker
|
||||
width: controlHeight + 4
|
||||
.ql-picker-label
|
||||
padding: 2px 4px
|
||||
svg
|
||||
right: 4px
|
||||
.ql-icon-picker
|
||||
.ql-picker-options
|
||||
padding: 4px 0px
|
||||
.ql-picker-item
|
||||
height: controlHeight
|
||||
width: controlHeight
|
||||
padding: 2px 4px
|
||||
.ql-color-picker
|
||||
.ql-picker-options
|
||||
padding: inputPaddingHeight inputPaddingWidth
|
||||
width: (colorItemSize + 2*colorItemMargin) * colorItemsPerRow + 2*inputPaddingWidth + 2 // +2 for the border
|
||||
.ql-picker-item
|
||||
border: 1px solid transparent
|
||||
float: left
|
||||
height: colorItemSize
|
||||
margin: colorItemMargin
|
||||
padding: 0px
|
||||
width: colorItemSize
|
||||
.ql-picker-item.ql-primary-color
|
||||
margin-bottom: toolbarPadding
|
||||
|
||||
.ql-picker:not(.ql-color-picker):not(.ql-icon-picker)
|
||||
svg
|
||||
position: absolute
|
||||
margin-top: -9px
|
||||
right: 0
|
||||
top: 50%
|
||||
width: 18px
|
||||
|
||||
.ql-picker.ql-header, .ql-picker.ql-font, .ql-picker.ql-size
|
||||
.ql-picker-label[data-label]:not([data-label='']),
|
||||
.ql-picker-item[data-label]:not([data-label=''])
|
||||
&::before
|
||||
content: attr(data-label)
|
||||
|
||||
.ql-picker.ql-header
|
||||
width: 98px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Normal'
|
||||
for num in (1..6)
|
||||
.ql-picker-label[data-value=\"{num}\"]::before,
|
||||
.ql-picker-item[data-value=\"{num}\"]::before
|
||||
content: 'Heading ' + num
|
||||
.ql-picker-item[data-value="1"]::before
|
||||
font-size: 2em
|
||||
.ql-picker-item[data-value="2"]::before
|
||||
font-size: 1.5em
|
||||
.ql-picker-item[data-value="3"]::before
|
||||
font-size: 1.17em
|
||||
.ql-picker-item[data-value="4"]::before
|
||||
font-size: 1em
|
||||
.ql-picker-item[data-value="5"]::before
|
||||
font-size: 0.83em
|
||||
.ql-picker-item[data-value="6"]::before
|
||||
font-size: 0.67em
|
||||
|
||||
.ql-picker.ql-font
|
||||
width: 108px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Sans Serif'
|
||||
.ql-picker-label[data-value=serif]::before,
|
||||
.ql-picker-item[data-value=serif]::before
|
||||
content: 'Serif'
|
||||
.ql-picker-label[data-value=monospace]::before,
|
||||
.ql-picker-item[data-value=monospace]::before
|
||||
content: 'Monospace'
|
||||
.ql-picker-item[data-value=serif]::before
|
||||
font-family: Georgia, Times New Roman, serif;
|
||||
.ql-picker-item[data-value=monospace]::before
|
||||
font-family: Monaco, Courier New, monospace;
|
||||
|
||||
.ql-picker.ql-size
|
||||
width: 98px
|
||||
.ql-picker-label::before,
|
||||
.ql-picker-item::before
|
||||
content: 'Normal'
|
||||
.ql-picker-label[data-value=small]::before,
|
||||
.ql-picker-item[data-value=small]::before
|
||||
content: 'Small'
|
||||
.ql-picker-label[data-value=large]::before,
|
||||
.ql-picker-item[data-value=large]::before
|
||||
content: 'Large'
|
||||
.ql-picker-label[data-value=huge]::before,
|
||||
.ql-picker-item[data-value=huge]::before
|
||||
content: 'Huge'
|
||||
.ql-picker-item[data-value=small]::before
|
||||
font-size: 10px
|
||||
.ql-picker-item[data-value=large]::before
|
||||
font-size: 18px
|
||||
.ql-picker-item[data-value=huge]::before
|
||||
font-size: 32px
|
||||
|
||||
.ql-color-picker.ql-background
|
||||
.ql-picker-item
|
||||
background-color: #fff;
|
||||
.ql-color-picker.ql-color
|
||||
.ql-picker-item
|
||||
background-color: #000;
|
||||
@@ -0,0 +1,11 @@
|
||||
themeName = 'bubble'
|
||||
activeColor = #fff
|
||||
borderColor = #777
|
||||
backgroundColor = #444
|
||||
inactiveColor = #ccc
|
||||
shadowColor = #ddd
|
||||
textColor = #fff
|
||||
|
||||
@import './core'
|
||||
@import './base'
|
||||
@import './bubble/*'
|
||||
@@ -0,0 +1,14 @@
|
||||
arrowWidth = 6px
|
||||
|
||||
.ql-bubble
|
||||
.ql-toolbar
|
||||
.ql-formats
|
||||
margin: 8px 12px 8px 0px
|
||||
.ql-formats:first-child
|
||||
margin-left: 12px
|
||||
|
||||
.ql-color-picker
|
||||
svg
|
||||
margin: 1px
|
||||
.ql-picker-item.ql-selected, .ql-picker-item:hover
|
||||
border-color: activeColor
|
||||
@@ -0,0 +1,46 @@
|
||||
arrowWidth = 6px
|
||||
|
||||
.ql-bubble
|
||||
.ql-tooltip
|
||||
background-color: backgroundColor
|
||||
border-radius: 25px
|
||||
color: textColor
|
||||
margin-top: 10px
|
||||
.ql-tooltip-arrow
|
||||
border-bottom: arrowWidth solid backgroundColor
|
||||
border-left: arrowWidth solid transparent
|
||||
border-right: arrowWidth solid transparent
|
||||
content: " "
|
||||
display: block
|
||||
left: 50%
|
||||
margin-left: -1 * arrowWidth
|
||||
position: absolute
|
||||
top: -1 * arrowWidth
|
||||
|
||||
.ql-tooltip.ql-editing
|
||||
.ql-tooltip-editor
|
||||
display: block
|
||||
.ql-formats
|
||||
visibility: hidden
|
||||
|
||||
.ql-tooltip-editor
|
||||
display: none
|
||||
input[type=text]
|
||||
background: transparent
|
||||
border: none
|
||||
color: textColor
|
||||
font-size: 13px
|
||||
height: 100%
|
||||
outline: none
|
||||
padding: 10px 20px
|
||||
position: absolute
|
||||
width: 100%
|
||||
a
|
||||
&:before
|
||||
color: inactiveColor
|
||||
content: "\00D7"
|
||||
font-size: 16px
|
||||
font-weight: bold
|
||||
top: 10px
|
||||
position: absolute
|
||||
right: 20px
|
||||
@@ -0,0 +1,155 @@
|
||||
// Styles necessary for Quill
|
||||
|
||||
LIST_STYLE = decimal lower-alpha lower-roman
|
||||
LIST_STYLE_WIDTH = 1.2em
|
||||
LIST_STYLE_MARGIN = 0.3em
|
||||
LIST_STYLE_OUTER_WIDTH = LIST_STYLE_MARGIN + LIST_STYLE_WIDTH
|
||||
MAX_INDENT = 9
|
||||
|
||||
resets(arr)
|
||||
unquote('list-' + join(' list-', arr))
|
||||
|
||||
.ql-container
|
||||
box-sizing: border-box
|
||||
font-family: Helvetica, Arial, sans-serif
|
||||
font-size: 13px
|
||||
height: 100%
|
||||
margin: 0px
|
||||
position: relative
|
||||
|
||||
.ql-clipboard
|
||||
left: -100000px
|
||||
height: 1px
|
||||
overflow-y: hidden
|
||||
position: absolute
|
||||
top: 50%
|
||||
p
|
||||
margin: 0
|
||||
padding: 0
|
||||
|
||||
.ql-editor
|
||||
box-sizing: border-box
|
||||
cursor: text
|
||||
line-height: 1.42
|
||||
height: 100%
|
||||
outline: none
|
||||
overflow-y: auto
|
||||
padding: 12px 15px
|
||||
tab-size: 4
|
||||
-moz-tab-size: 4
|
||||
text-align: left
|
||||
white-space: pre-wrap
|
||||
word-wrap: break-word
|
||||
|
||||
p, ol, ul, pre, blockquote, h1, h2, h3, h4, h5, h6
|
||||
margin: 0
|
||||
padding: 0
|
||||
counter-reset: resets(1..MAX_INDENT)
|
||||
ol, ul
|
||||
padding-left: 1.5em
|
||||
ol > li, ul > li
|
||||
list-style-type: none
|
||||
ul > li::before
|
||||
content: '\25CF'
|
||||
li::before
|
||||
display: inline-block
|
||||
margin-right: LIST_STYLE_MARGIN
|
||||
text-align: right
|
||||
white-space: nowrap
|
||||
width: LIST_STYLE_WIDTH
|
||||
li:not(.ql-direction-rtl)::before
|
||||
margin-left: -1*LIST_STYLE_OUTER_WIDTH
|
||||
ol, ul
|
||||
li
|
||||
padding-left: LIST_STYLE_OUTER_WIDTH
|
||||
ol
|
||||
li
|
||||
counter-reset: resets(1..MAX_INDENT)
|
||||
counter-increment: unquote('list-' + num)
|
||||
&:before
|
||||
content: unquote('counter(list-' + num + ', ' + LIST_STYLE[0] + ')') '. '
|
||||
for num in (1..MAX_INDENT)
|
||||
li.ql-indent-{num}
|
||||
counter-increment: unquote('list-' + num)
|
||||
&:before
|
||||
content: unquote('counter(list-' + num + ', ' + LIST_STYLE[num%3] + ')') '. '
|
||||
if (num < MAX_INDENT)
|
||||
li.ql-indent-{num}
|
||||
counter-reset: resets((num+1)..MAX_INDENT)
|
||||
for num in (1..MAX_INDENT)
|
||||
.ql-indent-{num}:not(.ql-direction-rtl)
|
||||
padding-left: (3*num)em
|
||||
li.ql-indent-{num}:not(.ql-direction-rtl)
|
||||
padding-left: (3*num + LIST_STYLE_OUTER_WIDTH)em
|
||||
.ql-indent-{num}.ql-direction-rtl.ql-align-right
|
||||
padding-right: (3*num)em
|
||||
li.ql-indent-{num}.ql-direction-rtl.ql-align-right
|
||||
padding-right: (3*num + LIST_STYLE_OUTER_WIDTH)em
|
||||
|
||||
.ql-video
|
||||
display: block
|
||||
max-width: 100%
|
||||
.ql-video.ql-align-center
|
||||
margin: 0 auto
|
||||
.ql-video.ql-align-right
|
||||
margin: 0 0 0 auto
|
||||
|
||||
.ql-bg-black
|
||||
background-color: rgb(0,0,0)
|
||||
.ql-bg-red
|
||||
background-color: rgb(230,0,0)
|
||||
.ql-bg-orange
|
||||
background-color: rgb(255,153,0)
|
||||
.ql-bg-yellow
|
||||
background-color: rgb(255,255,0)
|
||||
.ql-bg-green
|
||||
background-color: rgb(0,138,0)
|
||||
.ql-bg-blue
|
||||
background-color: rgb(0,102,204)
|
||||
.ql-bg-purple
|
||||
background-color: rgb(153,51,255)
|
||||
|
||||
.ql-color-white
|
||||
color: rgb(255,255,255)
|
||||
.ql-color-red
|
||||
color: rgb(230,0,0)
|
||||
.ql-color-orange
|
||||
color: rgb(255,153,0)
|
||||
.ql-color-yellow
|
||||
color: rgb(255,255,0)
|
||||
.ql-color-green
|
||||
color: rgb(0,138,0)
|
||||
.ql-color-blue
|
||||
color: rgb(0,102,204)
|
||||
.ql-color-purple
|
||||
color: rgb(153,51,255)
|
||||
|
||||
.ql-font-serif
|
||||
font-family: Georgia, Times New Roman, serif
|
||||
.ql-font-monospace
|
||||
font-family: Monaco, Courier New, monospace
|
||||
|
||||
.ql-size-small
|
||||
font-size: 0.75em
|
||||
.ql-size-large
|
||||
font-size: 1.5em
|
||||
.ql-size-huge
|
||||
font-size: 2.5em
|
||||
|
||||
.ql-direction-rtl
|
||||
direction: rtl
|
||||
text-align: inherit
|
||||
|
||||
.ql-align-center
|
||||
text-align: center
|
||||
.ql-align-justify
|
||||
text-align: justify
|
||||
.ql-align-right
|
||||
text-align: right
|
||||
|
||||
.ql-editor.ql-blank::before
|
||||
color: rgba(0,0,0,0.6)
|
||||
content: attr(data-placeholder)
|
||||
font-style: italic
|
||||
pointer-events: none
|
||||
position: absolute
|
||||
|
After Width: | Height: | Size: 696 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="14" x2="4" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="12" x2="6" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="3" x2="13" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="9" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 222 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="15" x2="5" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="15" x2="9" y1="4" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 223 B |
@@ -0,0 +1,3 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M6.6,11.4L9,9a1.456,1.456,0,0,1,2.059,2.059L7.971,14.147a2.912,2.912,0,0,1-4.118-4.118l6.177-6.177a2.912,2.912,0,0,1,4.118,4.118"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 199 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<ellipse class="ql-fill" cx="10.5" cy="14" rx="2.5" ry="2"></ellipse>
|
||||
<path class="ql-stroke" d="M12,14V3c0,1.5,3,2.021,3,5"></path>
|
||||
<path class="ql-fill" d="M7,4A5,5,0,0,0,7,14a3.191,3.191,0,0,1,3-2.957V5.023A4.955,4.955,0,0,0,7,4ZM4.06,8.412a0.5,0.5,0,0,1-.49.4,0.485,0.485,0,0,1-.1-0.01,0.5,0.5,0,0,1-.393-0.588A3.98,3.98,0,0,1,6.216,5.079a0.5,0.5,0,0,1,.2.98A2.985,2.985,0,0,0,4.06,8.412ZM7,10A1,1,0,1,1,8,9,1,1,0,0,1,7,10Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 475 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="15" y2="15"></line>
|
||||
<path class="ql-fill ql-stroke" d="M9,8H9a3,3,0,0,1,3,3v0a0,0,0,0,1,0,0H6a0,0,0,0,1,0,0v0A3,3,0,0,1,9,8Z"></path>
|
||||
<path class="ql-even ql-fill" d="M11,5.01C11,6.021,10,9,9,9S7,6.021,7,5.01c0-1.651.292-2.99,2-2.99S11,3.359,11,5.01Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 341 B |
@@ -0,0 +1,52 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-color-label">
|
||||
<polygon points="6 6.868 6 6 5 6 5 7 5.942 7 6 6.868"></polygon>
|
||||
<rect height="1" width="1" x="4" y="4"></rect>
|
||||
<polygon points="6.817 5 6 5 6 6 6.38 6 6.817 5"></polygon>
|
||||
<rect height="1" width="1" x="2" y="6"></rect>
|
||||
<rect height="1" width="1" x="3" y="5"></rect>
|
||||
<rect height="1" width="1" x="4" y="7"></rect>
|
||||
<polygon points="4 11.439 4 11 3 11 3 12 3.755 12 4 11.439"></polygon>
|
||||
<rect height="1" width="1" x="2" y="12"></rect>
|
||||
<rect height="1" width="1" x="2" y="9"></rect>
|
||||
<rect height="1" width="1" x="2" y="15"></rect>
|
||||
<polygon points="4.63 10 4 10 4 11 4.192 11 4.63 10"></polygon>
|
||||
<rect height="1" width="1" x="3" y="8"></rect>
|
||||
<path d="M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z"></path>
|
||||
<path d="M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z"></path>
|
||||
<path d="M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z"></path>
|
||||
<rect height="1" width="1" x="12" y="2"></rect>
|
||||
<rect height="1" width="1" x="11" y="3"></rect>
|
||||
<path d="M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z"></path>
|
||||
<rect height="1" width="1" x="2" y="3"></rect>
|
||||
<rect height="1" width="1" x="6" y="2"></rect>
|
||||
<rect height="1" width="1" x="3" y="2"></rect>
|
||||
<rect height="1" width="1" x="5" y="3"></rect>
|
||||
<rect height="1" width="1" x="9" y="2"></rect>
|
||||
<rect height="1" width="1" x="15" y="14"></rect>
|
||||
<polygon points="13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174"></polygon>
|
||||
<rect height="1" width="1" x="13" y="7"></rect>
|
||||
<rect height="1" width="1" x="15" y="5"></rect>
|
||||
<rect height="1" width="1" x="14" y="6"></rect>
|
||||
<rect height="1" width="1" x="15" y="8"></rect>
|
||||
<rect height="1" width="1" x="14" y="9"></rect>
|
||||
<path d="M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z"></path>
|
||||
<rect height="1" width="1" x="14" y="3"></rect>
|
||||
<polygon points="12 6.868 12 6 11.62 6 12 6.868"></polygon>
|
||||
<rect height="1" width="1" x="15" y="2"></rect>
|
||||
<rect height="1" width="1" x="12" y="5"></rect>
|
||||
<rect height="1" width="1" x="13" y="4"></rect>
|
||||
<polygon points="12.933 9 13 9 13 8 12.495 8 12.933 9"></polygon>
|
||||
<rect height="1" width="1" x="9" y="14"></rect>
|
||||
<rect height="1" width="1" x="8" y="15"></rect>
|
||||
<path d="M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z"></path>
|
||||
<rect height="1" width="1" x="5" y="15"></rect>
|
||||
<path d="M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z"></path>
|
||||
<rect height="1" width="1" x="11" y="15"></rect>
|
||||
<path d="M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z"></path>
|
||||
<rect height="1" width="1" x="14" y="15"></rect>
|
||||
<rect height="1" width="1" x="15" y="11"></rect>
|
||||
</g>
|
||||
<polyline class="ql-stroke" points="5.5 13 9 5 12.5 13"></polyline>
|
||||
<line class="ql-stroke" x1="11.63" x2="6.38" y1="11" y2="11"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-fill ql-stroke" height="3" width="3" x="4" y="5"></rect>
|
||||
<rect class="ql-fill ql-stroke" height="3" width="3" x="11" y="5"></rect>
|
||||
<path class="ql-even ql-fill ql-stroke" d="M7,8c0,4.031-3,5-3,5"></path>
|
||||
<path class="ql-even ql-fill ql-stroke" d="M14,8c0,4.031-3,5-3,5"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 334 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z"></path>
|
||||
<path class="ql-stroke" d="M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 281 B |
@@ -0,0 +1,7 @@
|
||||
<svg class="" viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="5" x2="13" y1="3" y2="3"></line>
|
||||
<line class="ql-stroke" x1="6" x2="9.35" y1="12" y2="3"></line>
|
||||
<line class="ql-stroke" x1="11" x2="15" y1="11" y2="15"></line>
|
||||
<line class="ql-stroke" x1="15" x2="11" y1="11" y2="15"></line>
|
||||
<rect class="ql-fill" height="1" rx="0.5" ry="0.5" width="7" x="2" y="14"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 386 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-even ql-stroke" points="5 7 3 9 5 11"></polyline>
|
||||
<polyline class="ql-even ql-stroke" points="13 7 15 9 13 11"></polyline>
|
||||
<line class="ql-stroke" x1="10" x2="8" y1="5" y2="13"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 243 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-color-label ql-stroke ql-transparent" x1="3" x2="15" y1="15" y2="15"></line>
|
||||
<polyline class="ql-stroke" points="5.5 11 9 3 12.5 11"></polyline>
|
||||
<line class="ql-stroke" x1="11.63" x2="6.38" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 266 B |
@@ -0,0 +1,3 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M9,3C5.686,3,3,5.239,3,8a4.669,4.669,0,0,0,2,3.719V15l3.094-2.063A7.186,7.186,0,0,0,9,13c3.314,0,6-2.239,6-5S12.314,3,9,3Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 193 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke ql-fill" points="3 11 5 9 3 7 3 11"></polygon>
|
||||
<line class="ql-stroke ql-fill" x1="15" x2="11" y1="4" y2="4"></line>
|
||||
<path class="ql-fill" d="M11,3a3,3,0,0,0,0,6h1V3H11Z"></path>
|
||||
<rect class="ql-fill" height="11" width="1" x="11" y="4"></rect>
|
||||
<rect class="ql-fill" height="11" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 377 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke ql-fill" points="15 12 13 10 15 8 15 12"></polygon>
|
||||
<line class="ql-stroke ql-fill" x1="9" x2="5" y1="4" y2="4"></line>
|
||||
<path class="ql-fill" d="M5,3A3,3,0,0,0,5,9H6V3H5Z"></path>
|
||||
<rect class="ql-fill" height="11" width="1" x="5" y="4"></rect>
|
||||
<rect class="ql-fill" height="11" width="1" x="7" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 376 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-stroke" points="7 11 9 13 11 11 7 11"></polygon>
|
||||
<polygon class="ql-stroke" points="7 7 9 5 11 7 7 7"></polygon>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 168 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<circle class="ql-fill" cx="7" cy="7" r="1"></circle>
|
||||
<circle class="ql-fill" cx="11" cy="7" r="1"></circle>
|
||||
<path class="ql-stroke" d="M7,10a2,2,0,0,0,4,0H7Z"></path>
|
||||
<circle class="ql-stroke" cx="9" cy="9" r="6"></circle>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 264 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z"/>
|
||||
<path class="ql-fill" d="M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z"/>
|
||||
<rect class="ql-fill" x="3" y="6" width="12" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 250 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z"/>
|
||||
<path class="ql-fill" d="M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z"/>
|
||||
<rect class="ql-fill" x="2" y="6" width="14" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 248 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z"/>
|
||||
<path class="ql-fill" d="M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z"/>
|
||||
<path class="ql-fill" d="M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z"/>
|
||||
<path class="ql-fill" d="M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z"/>
|
||||
<rect class="ql-fill" x="2" y="6" width="8" height="6" rx="1" ry="1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 393 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z"/>
|
||||
<path class="ql-fill" d="M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z"/>
|
||||
<path class="ql-fill" d="M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z"/>
|
||||
<path class="ql-fill" d="M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z"/>
|
||||
<rect class="ql-fill" x="8" y="6" width="8" height="6" rx="1" ry="1" transform="translate(24 18) rotate(-180)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 429 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<path class="ql-fill" d="M13.636,5.013a4.016,4.016,0,0,0-1.863.472,0.42,0.42,0,0,0-.179.629l0.112,0.214a0.418,0.418,0,0,0,.625.191,2.557,2.557,0,0,1,1.183-.326A0.933,0.933,0,0,1,14.573,7.2V7.338H14.339c-1.272,0-3.325.281-3.325,1.954A1.75,1.75,0,0,0,12.9,11.011a2.072,2.072,0,0,0,1.785-1.078h0.022a1.132,1.132,0,0,0-.022.247V10.4a0.412,0.412,0,0,0,.457.472h0.379A0.416,0.416,0,0,0,15.99,10.4V7.293A2.121,2.121,0,0,0,13.636,5.013Zm0.948,3.4a1.452,1.452,0,0,1-1.305,1.505,0.775,0.775,0,0,1-.859-0.753c0-.854,1.216-0.966,1.93-0.966h0.234V8.416Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 724 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z"></path>
|
||||
<rect class="ql-fill" height="1.6" rx="0.8" ry="0.8" width="5" x="5.15" y="6.2"></rect>
|
||||
<path class="ql-fill" d="M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="6" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke" x1="12" x2="11" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke" x1="3.75" x2="14.75" y1="7" y2="7"></line>
|
||||
<line class="ql-stroke" x1="3.25" x2="14.25" y1="11" y2="11"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 300 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="4" y2="14"></line>
|
||||
<line class="ql-stroke" x1="11" x2="11" y1="4" y2="14"></line>
|
||||
<line class="ql-stroke" x1="11" x2="3" y1="9" y2="9"></line>
|
||||
<path class="ql-stroke ql-thin" d="M15.5,14.5h-2c0-.234,1.85-1.076,1.85-2.234a0.959,0.959,0,0,0-1.85-.109"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 340 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="4" y2="14"></line>
|
||||
<line class="ql-stroke" x1="11" x2="11" y1="4" y2="14"></line>
|
||||
<line class="ql-stroke" x1="11" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke ql-thin" x1="13.5" x2="15.5" y1="14.5" y2="14.5"></line>
|
||||
<path class="ql-fill" d="M14.5,15a0.5,0.5,0,0,1-.5-0.5V12.085l-0.276.138A0.5,0.5,0,0,1,13.053,12c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,15,11.5v3A0.5,0.5,0,0,1,14.5,15Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 499 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="10" width="12" x="3" y="4"></rect>
|
||||
<circle class="ql-fill" cx="6" cy="7" r="1"></circle>
|
||||
<polyline class="ql-even ql-fill" points="5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 254 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-fill ql-stroke" points="3 7 3 11 5 9 3 7"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 299 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="13" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="5" x2="11" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="8" x2="10" y1="14" y2="4"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 224 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="11" y1="7" y2="11"></line>
|
||||
<path class="ql-even ql-stroke" d="M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z"></path>
|
||||
<path class="ql-even ql-stroke" d="M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 431 B |
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="6" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="3" x2="3" y1="14" y2="14"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 411 B |
@@ -0,0 +1,8 @@
|
||||
<svg class="" viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="4" y2="4"></line>
|
||||
<polyline class="ql-stroke" points="3 4 4 5 6 3"></polyline>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="14" y2="14"></line>
|
||||
<polyline class="ql-stroke" points="3 14 4 15 6 13"></polyline>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-stroke" points="3 9 4 10 6 8"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 425 B |
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="7" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke ql-thin" x1="2.5" x2="4.5" y1="5.5" y2="5.5"></line>
|
||||
<path class="ql-fill" d="M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z"></path>
|
||||
<path class="ql-stroke ql-thin" d="M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156"></path>
|
||||
<path class="ql-stroke ql-thin" d="M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 764 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M12,5c0,1.1-2,4-2,4S8,6.1,8,5A2,2,0,0,1,12,5Z"></path>
|
||||
<path class="ql-fill" d="M15.472,2.118a1,1,0,0,0-1.026.05l-1.067.712A3.944,3.944,0,0,1,14,4.869h0v7.6L12,13.8l-2.445-1.63a1,1,0,0,0-1.109,0L6,13.8,4,12.465v-7.6L5.445,5.832a0.992,0.992,0,0,0,.717.144A3.742,3.742,0,0,1,6,5a3.956,3.956,0,0,1,.258-1.374L6,3.8,3.555,2.168A1,1,0,0,0,2,3V13a1,1,0,0,0,.445.832l3,2a1,1,0,0,0,1.109,0L9,14.2l2.445,1.63a1,1,0,0,0,1.109,0l3-2A1,1,0,0,0,16,13V3A1,1,0,0,0,15.472,2.118Z"></path>
|
||||
<path class="ql-fill" d="M12.092,14.938a4.2,4.2,0,0,0-1.936-3.032c-1.125-.656-2.425.738-2.75-0.687A2.036,2.036,0,0,0,5.688,9.656,2.878,2.878,0,0,0,3,8.653V13l3,2,3-2,3,2Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 718 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<circle class="ql-stroke" cx="9" cy="9" r="2"></circle>
|
||||
<path class="ql-stroke" d="M11,14.651A6,6,0,1,1,15,9a2,2,0,0,1-4,0V7"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 170 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="14" y2="14"></line>
|
||||
<line class="ql-stroke" x1="3" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="9" x2="15" y1="9" y2="9"></line>
|
||||
<polyline class="ql-stroke" points="5 7 5 11 3 9 5 7"></polyline>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 291 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-fill ql-stroke" points="12 10 14 12 16 10 12 10"></polygon>
|
||||
<path class="ql-stroke" d="M9.91,13.91A4.6,4.6,0,0,1,9,14a5,5,0,1,1,5-5"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 196 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" transform="translate(20 -7) rotate(90)" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 296 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" width="1" x="13" y="4"></rect>
|
||||
<rect class="ql-fill" height="5" rx="0.5" ry="0.5" transform="translate(20 -7) rotate(90)" width="1" x="13" y="4"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 380 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polyline class="ql-stroke" points="3.5 14 7 4 10.5 14"></polyline>
|
||||
<line class="ql-stroke" x1="9.45" x2="4.55" y1="11" y2="11"></line>
|
||||
<path class="ql-fill" d="M12.09,7.55l1.7-1.473a0.337,0.337,0,0,1,.429,0l1.7,1.473A0.261,0.261,0,0,1,15.7,8H12.3A0.261,0.261,0,0,1,12.09,7.55Z"></path>
|
||||
<path class="ql-fill" d="M12.09,10.45l1.7,1.473a0.337,0.337,0,0,0,.429,0l1.7-1.473A0.261,0.261,0,0,0,15.7,10H12.3A0.261,0.261,0,0,0,12.09,10.45Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 481 B |
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="4" y2="4"></line>
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="9" y2="9"></line>
|
||||
<line class="ql-stroke" x1="10" x2="15" y1="14" y2="14"></line>
|
||||
<polygon class="ql-fill ql-stroke" points="3 5 5 3 7 5 3 5"></polygon>
|
||||
<line class="ql-stroke" x1="5" x2="5" y1="7" y2="5"></line>
|
||||
<polygon class="ql-fill ql-stroke" points="3 13 5 15 7 13 3 13"></polygon>
|
||||
<line class="ql-stroke" x1="5" x2="5" y1="11" y2="13"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 502 B |
@@ -0,0 +1,6 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,8a4,4,0,0,0,8,0"></path>
|
||||
<line class="ql-stroke" x1="6" x2="12" y1="15" y2="15"></line>
|
||||
<line class="ql-stroke" x1="9" x2="9" y1="12" y2="15"></line>
|
||||
<rect class="ql-fill" height="8" rx="2" ry="2" width="4" x="7" y="2"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 297 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<line class="ql-stroke ql-thin" x1="15.5" x2="2.5" y1="8.5" y2="9.5"></line>
|
||||
<path class="ql-fill" d="M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z"></path>
|
||||
<path class="ql-fill" d="M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 543 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z"/>
|
||||
<path class="ql-fill" d="M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 686 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z"/>
|
||||
<path class="ql-fill" d="M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 567 B |
@@ -0,0 +1,5 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke-mitter" height="12" width="12" x="3" y="3"></rect>
|
||||
<line class="ql-stroke-mitter" x1="9" x2="9" y1="3" y2="15"></line>
|
||||
<line class="ql-stroke-mitter" x1="15" x2="3" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 248 B |
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(18 -12) rotate(90)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(21 -9) rotate(90)" width="2" x="14" y="5"></rect>
|
||||
<rect height="2" transform="translate(24 -6) rotate(90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(30 0) rotate(90)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(27 -3) rotate(90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 0) rotate(90)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(9 3) rotate(90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(90)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(15 9) rotate(90)" width="2" x="2" y="11"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-mitter" x1="2" x2="16" y1="15" y2="15"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(15 3) rotate(90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(21 -3) rotate(90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(30 6) rotate(180)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(24 6) rotate(180)" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 6) rotate(180)" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" transform="translate(6 6) rotate(180)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(180)" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" transform="translate(30 30) rotate(180)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(24 30) rotate(180)" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(18 30) rotate(180)" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" transform="translate(6 30) rotate(180)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(12 30) rotate(180)" width="2" x="5" y="14"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-mitter" x1="3" x2="3" y1="16" y2="2"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 24) rotate(180)" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(180)" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,35 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1{opacity:0.4;}
|
||||
.cls-2{fill:#444;}
|
||||
.cls-3{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2px;}
|
||||
</style>
|
||||
</defs>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
</g>
|
||||
<rect class="ql-stroke-mitter" height="12" width="12" x="3" y="3"></rect>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" width="2" x="5" y="2"></rect>
|
||||
<rect height="2" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" width="2" x="11" y="14"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-mitter" x1="15" x2="15" y1="16" y2="2"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 18) rotate(-90)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1,28 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(-12 18) rotate(-90)" width="2" x="2" y="14"></rect>
|
||||
<rect height="2" transform="translate(-9 15) rotate(-90)" width="2" x="2" y="11"></rect>
|
||||
<rect height="2" transform="translate(-6 12) rotate(-90)" width="2" x="2" y="8"></rect>
|
||||
<rect height="2" transform="translate(0 6) rotate(-90)" width="2" x="2" y="2"></rect>
|
||||
<rect height="2" transform="translate(-3 9) rotate(-90)" width="2" x="2" y="5"></rect>
|
||||
<rect height="2" transform="translate(0 30) rotate(-90)" width="2" x="14" y="14"></rect>
|
||||
<rect height="2" transform="translate(3 27) rotate(-90)" width="2" x="14" y="11"></rect>
|
||||
<rect height="2" transform="translate(6 24) rotate(-90)" width="2" x="14" y="8"></rect>
|
||||
<rect height="2" transform="translate(12 18) rotate(-90)" width="2" x="14" y="2"></rect>
|
||||
<rect height="2" transform="translate(9 21) rotate(-90)" width="2" x="14" y="5"></rect>
|
||||
</g>
|
||||
<line class="ql-stroke-mitter" x1="16" x2="2" y1="3" y2="3"></line>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" transform="translate(24 30) rotate(-180)" width="2" x="11" y="14"></rect>
|
||||
<rect height="2" transform="translate(18 30) rotate(-180)" width="2" x="8" y="14"></rect>
|
||||
<rect height="2" transform="translate(12 30) rotate(-180)" width="2" x="5" y="14"></rect>
|
||||
<rect height="2" transform="translate(24 6) rotate(-180)" width="2" x="11" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 6) rotate(-180)" width="2" x="8" y="2"></rect>
|
||||
<rect height="2" transform="translate(18 12) rotate(-180)" width="2" x="8" y="5"></rect>
|
||||
<rect height="2" transform="translate(18 18) rotate(-180)" width="2" x="8" y="8"></rect>
|
||||
<rect height="2" transform="translate(18 24) rotate(-180)" width="2" x="8" y="11"></rect>
|
||||
<rect height="2" transform="translate(3 21) rotate(-90)" width="2" x="11" y="8"></rect>
|
||||
<rect height="2" transform="translate(-3 15) rotate(-90)" width="2" x="5" y="8"></rect>
|
||||
<rect height="2" transform="translate(12 6) rotate(-180)" width="2" x="5" y="2"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,13 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-fill" d="M15.707,7l1.146-1.146a0.5,0.5,0,1,0-.707-0.707L15,6.293,13.854,5.146a0.5,0.5,0,0,0-.707.707L14.293,7,13.146,8.146a0.5,0.5,0,1,0,.707.707L15,7.707l1.146,1.146a0.5,0.5,0,1,0,.707-0.707Z"></path>
|
||||
<path class="ql-fill" d="M6,5H3A1,1,0,0,0,2,6V8A1,1,0,0,0,3,9H6V5Z"></path>
|
||||
<path class="ql-fill" d="M10,5H7V9h3a1,1,0,0,0,1-1V6A1,1,0,0,0,10,5Z"></path>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<path d="M8,11h4V9a1,1,0,0,0-1-1H8v3Z"></path>
|
||||
<path d="M7,11V8H4A1,1,0,0,0,3,9v2H7Z"></path>
|
||||
<path d="M7,12H3v2a1,1,0,0,0,1,1H7V12Z"></path>
|
||||
<path d="M8,12v3h3a1,1,0,0,0,1-1V12H8Z"></path>
|
||||
<path d="M8,6h3a1,1,0,0,0,1-1V3a1,1,0,0,0-1-1H8V6Z"></path>
|
||||
<path d="M4,6H7V2H4A1,1,0,0,0,3,3V5A1,1,0,0,0,4,6Z"></path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 788 B |
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="10" rx="1" ry="1" width="4" x="2" y="6"></rect>
|
||||
<rect height="10" rx="1" ry="1" width="4" x="12" y="6"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill" height="8" rx="1" ry="1" width="4" x="7" y="2"></rect>
|
||||
<path class="ql-fill" d="M9.707,13l1.146-1.146a0.5,0.5,0,0,0-.707-0.707L9,12.293,7.854,11.146a0.5,0.5,0,0,0-.707.707L8.293,13,7.146,14.146a0.5,0.5,0,1,0,.707.707L9,13.707l1.146,1.146a0.5,0.5,0,0,0,.707-0.707Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 508 B |
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-stroke ql-thin ql-transparent">
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="2.5"></rect>
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="12.5"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill ql-stroke ql-thin" height="3" rx="0.5" ry="0.5" width="7" x="8.5" y="7.5"></rect>
|
||||
<line class="ql-stroke ql-thin" x1="6.5" x2="3.5" y1="7.5" y2="10.5"></line>
|
||||
<line class="ql-stroke ql-thin" x1="3.5" x2="6.5" y1="7.5" y2="10.5"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 504 B |
@@ -0,0 +1,13 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<path d="M11,11h4V9a1,1,0,0,0-1-1H11v3Z"></path>
|
||||
<path d="M10,11V8H7A1,1,0,0,0,6,9v2h4Z"></path>
|
||||
<path d="M10,12H6v2a1,1,0,0,0,1,1h3V12Z"></path>
|
||||
<path d="M11,12v3h3a1,1,0,0,0,1-1V12H11Z"></path>
|
||||
<path d="M11,6h3a1,1,0,0,0,1-1V3a1,1,0,0,0-1-1H11V6Z"></path>
|
||||
<path d="M7,6h3V2H7A1,1,0,0,0,6,3V5A1,1,0,0,0,7,6Z"></path>
|
||||
</g>
|
||||
<path class="ql-fill" d="M5,6H4V5a0.5,0.5,0,0,0-.854-0.354l-2,2a0.5,0.5,0,0,0,0,.707l2,2A0.5,0.5,0,0,0,3.5,9.5a0.494,0.494,0,0,0,.191-0.038A0.5,0.5,0,0,0,4,9V8H5A1,1,0,0,0,5,6Z"></path>
|
||||
<path class="ql-fill" d="M15,5H12V9h3a1,1,0,0,0,1-1V6A1,1,0,0,0,15,5Z"></path>
|
||||
<path class="ql-fill" d="M11,5H8A1,1,0,0,0,7,6V8A1,1,0,0,0,8,9h3V5Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 766 B |
@@ -0,0 +1,8 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="10" rx="1" ry="1" width="4" x="12" y="2"></rect>
|
||||
<rect height="10" rx="1" ry="1" width="4" x="2" y="2"></rect>
|
||||
</g>
|
||||
<path class="ql-fill" d="M11.354,4.146l-2-2a0.5,0.5,0,0,0-.707,0l-2,2A0.5,0.5,0,0,0,7,5H8V6a1,1,0,0,0,2,0V5h1A0.5,0.5,0,0,0,11.354,4.146Z"></path>
|
||||
<rect class="ql-fill" height="8" rx="1" ry="1" width="4" x="7" y="8"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 437 B |
@@ -0,0 +1,9 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<g class="ql-fill ql-stroke ql-thin ql-transparent">
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="2.5"></rect>
|
||||
<rect height="3" rx="0.5" ry="0.5" width="7" x="4.5" y="12.5"></rect>
|
||||
</g>
|
||||
<rect class="ql-fill ql-stroke ql-thin" height="3" rx="0.5" ry="0.5" width="7" x="8.5" y="7.5"></rect>
|
||||
<polygon class="ql-fill ql-stroke ql-thin" points="4.5 11 2.5 9 4.5 7 4.5 11"></polygon>
|
||||
<line class="ql-stroke" x1="6" x2="4" y1="9" y2="9"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 499 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="4" width="12" x="3" y="7"></rect>
|
||||
<path class="ql-fill ql-transparent" d="M2,2V16H16V2H2ZM14,14H10V11H8v3H4V4H8V7h2V4h4V14Z"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 201 B |
@@ -0,0 +1,7 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="4" width="12" x="3" y="7"></rect>
|
||||
<path class="ql-fill ql-transparent" d="M2,2V16H16V2H2ZM14,14H10V11H8v3H4V4H8V7h2V4h4V14Z"></path>
|
||||
<line class="ql-stroke" x1="12" x2="12" y1="11" y2="7"></line>
|
||||
<line class="ql-stroke" x1="9" x2="9" y1="11" y2="7"></line>
|
||||
<line class="ql-stroke" x1="6" x2="6" y1="11" y2="7"></line>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 392 B |
@@ -0,0 +1,11 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="12" width="12" x="3" y="3"></rect>
|
||||
<rect class="ql-fill" height="2" width="3" x="5" y="5"></rect>
|
||||
<rect class="ql-fill" height="2" width="4" x="9" y="5"></rect>
|
||||
<g class="ql-fill ql-transparent">
|
||||
<rect height="2" width="3" x="5" y="8"></rect>
|
||||
<rect height="2" width="4" x="9" y="8"></rect>
|
||||
<rect height="2" width="3" x="5" y="11"></rect>
|
||||
<rect height="2" width="4" x="9" y="11"></rect>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 481 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<path class="ql-stroke" d="M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3"></path>
|
||||
<rect class="ql-fill" height="1" rx="0.5" ry="0.5" width="12" x="3" y="15"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 210 B |
@@ -0,0 +1,4 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<polygon class="ql-fill ql-stroke" points="6 10 4 12 2 10 6 10"></polygon>
|
||||
<path class="ql-stroke" d="M8.09,13.91A4.6,4.6,0,0,0,9,14,5,5,0,1,0,4,9"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 192 B |
@@ -0,0 +1,14 @@
|
||||
<svg viewbox="0 0 18 18">
|
||||
<rect class="ql-stroke" height="12" width="12" x="3" y="3"></rect>
|
||||
<rect class="ql-fill" height="12" width="1" x="5" y="3"></rect>
|
||||
<rect class="ql-fill" height="12" width="1" x="12" y="3"></rect>
|
||||
<rect class="ql-fill" height="2" width="8" x="5" y="8"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="5"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="7"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="10"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="3" y="12"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="5"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="7"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="10"></rect>
|
||||
<rect class="ql-fill" height="1" width="3" x="12" y="12"></rect>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 827 B |
@@ -0,0 +1,18 @@
|
||||
themeName = 'snow'
|
||||
activeColor = #06c
|
||||
borderColor = #ccc
|
||||
backgroundColor = #fff
|
||||
inactiveColor = #444
|
||||
shadowColor = #ddd
|
||||
textColor = #444
|
||||
|
||||
@import './core'
|
||||
@import './base'
|
||||
@import './snow/*'
|
||||
|
||||
.ql-snow
|
||||
a
|
||||
color: activeColor
|
||||
|
||||
.ql-container.ql-snow
|
||||
border: 1px solid borderColor
|
||||
@@ -0,0 +1,26 @@
|
||||
.ql-toolbar.ql-snow
|
||||
border: 1px solid borderColor
|
||||
box-sizing: border-box
|
||||
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif
|
||||
padding: 8px
|
||||
|
||||
.ql-formats
|
||||
margin-right: 15px
|
||||
|
||||
.ql-picker-label
|
||||
border: 1px solid transparent
|
||||
.ql-picker-options
|
||||
border: 1px solid transparent
|
||||
box-shadow: rgba(0,0,0,0.2) 0 2px 8px
|
||||
.ql-picker.ql-expanded
|
||||
.ql-picker-label
|
||||
border-color: borderColor
|
||||
.ql-picker-options
|
||||
border-color: borderColor
|
||||
|
||||
.ql-color-picker
|
||||
.ql-picker-item.ql-selected, .ql-picker-item:hover
|
||||
border-color: #000
|
||||
|
||||
.ql-toolbar.ql-snow + .ql-container.ql-snow
|
||||
border-top: 0px;
|
||||
@@ -0,0 +1,54 @@
|
||||
tooltipMargin = 8px
|
||||
|
||||
.ql-snow
|
||||
.ql-tooltip
|
||||
background-color: #fff
|
||||
border: 1px solid borderColor
|
||||
box-shadow: 0px 0px 5px shadowColor
|
||||
color: textColor
|
||||
margin-top: 10px
|
||||
padding: 5px 12px
|
||||
white-space: nowrap
|
||||
&::before
|
||||
content: "Visit URL:"
|
||||
line-height: 26px
|
||||
margin-right: tooltipMargin
|
||||
input[type=text]
|
||||
display: none
|
||||
border: 1px solid borderColor
|
||||
font-size: 13px
|
||||
height: 26px
|
||||
margin: 0px
|
||||
padding: 3px 5px
|
||||
width: 170px
|
||||
a.ql-preview
|
||||
display: inline-block
|
||||
max-width: 200px
|
||||
overflow-x: hidden
|
||||
text-overflow: ellipsis
|
||||
vertical-align: top
|
||||
a.ql-action::after
|
||||
border-right: 1px solid borderColor
|
||||
content: 'Edit'
|
||||
margin-left: tooltipMargin*2
|
||||
padding-right: tooltipMargin
|
||||
a.ql-remove::before
|
||||
content: 'Remove'
|
||||
margin-left: tooltipMargin
|
||||
a
|
||||
line-height: 26px
|
||||
.ql-tooltip.ql-editing
|
||||
a.ql-preview, a.ql-remove
|
||||
display: none
|
||||
input[type=text]
|
||||
display: inline-block
|
||||
a.ql-action::after
|
||||
border-right: 0px
|
||||
content: 'Save'
|
||||
padding-right: 0px
|
||||
.ql-tooltip[data-mode=link]::before
|
||||
content: "Enter link:"
|
||||
.ql-tooltip[data-mode=formula]::before
|
||||
content: "Enter formula:"
|
||||
.ql-tooltip[data-mode=video]::before
|
||||
content: "Enter video:"
|
||||
@@ -0,0 +1,256 @@
|
||||
import extend from 'extend';
|
||||
import Delta from 'rich-text/lib/delta';
|
||||
import Emitter from '../core/emitter';
|
||||
import Keyboard from '../modules/keyboard';
|
||||
import Theme from '../core/theme';
|
||||
import ColorPicker from '../ui/color-picker';
|
||||
import IconPicker from '../ui/icon-picker';
|
||||
import Picker from '../ui/picker';
|
||||
import Tooltip from '../ui/tooltip';
|
||||
import icons from '../ui/icons';
|
||||
|
||||
|
||||
const ALIGNS = [ false, 'center', 'right', 'justify' ];
|
||||
|
||||
const COLORS = [
|
||||
"#000000", "#e60000", "#ff9900", "#ffff00", "#008a00", "#0066cc", "#9933ff",
|
||||
"#ffffff", "#facccc", "#ffebcc", "#ffffcc", "#cce8cc", "#cce0f5", "#ebd6ff",
|
||||
"#bbbbbb", "#f06666", "#ffc266", "#ffff66", "#66b966", "#66a3e0", "#c285ff",
|
||||
"#888888", "#a10000", "#b26b00", "#b2b200", "#006100", "#0047b2", "#6b24b2",
|
||||
"#444444", "#5c0000", "#663d00", "#666600", "#003700", "#002966", "#3d1466"
|
||||
];
|
||||
|
||||
const FONTS = [ false, 'serif', 'monospace' ];
|
||||
|
||||
const HEADERS = [ '1', '2', '3', false ];
|
||||
|
||||
const SIZES = [ 'small', false, 'large', 'huge' ];
|
||||
|
||||
|
||||
class BaseTheme extends Theme {
|
||||
constructor(quill, options) {
|
||||
super(quill, options);
|
||||
let listener = (e) => {
|
||||
if (!document.body.contains(quill.root)) {
|
||||
return document.body.removeEventListener('click', listener);
|
||||
}
|
||||
if (this.tooltip != null && !this.tooltip.root.contains(e.target) &&
|
||||
document.activeElement !== this.tooltip.textbox && !this.quill.hasFocus()) {
|
||||
this.tooltip.hide();
|
||||
}
|
||||
if (this.pickers != null) {
|
||||
this.pickers.forEach(function(picker) {
|
||||
if (!picker.container.contains(e.target)) {
|
||||
picker.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
document.body.addEventListener('click', listener);
|
||||
}
|
||||
|
||||
addModule(name) {
|
||||
let module = super.addModule(name);
|
||||
if (name === 'toolbar') {
|
||||
this.extendToolbar(module);
|
||||
}
|
||||
return module;
|
||||
}
|
||||
|
||||
buildButtons(buttons) {
|
||||
buttons.forEach((button) => {
|
||||
let className = button.getAttribute('class') || '';
|
||||
className.split(/\s+/).forEach((name) => {
|
||||
if (!name.startsWith('ql-')) return;
|
||||
name = name.slice('ql-'.length);
|
||||
if (icons[name] == null) return;
|
||||
if (name === 'direction') {
|
||||
button.innerHTML = icons[name][''] + icons[name]['rtl'];
|
||||
} else if (typeof icons[name] === 'string') {
|
||||
button.innerHTML = icons[name];
|
||||
} else {
|
||||
let value = button.value || '';
|
||||
if (value != null && icons[name][value]) {
|
||||
button.innerHTML = icons[name][value];
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
buildPickers(selects) {
|
||||
this.pickers = selects.map((select) => {
|
||||
if (select.classList.contains('ql-align')) {
|
||||
if (select.querySelector('option') == null) {
|
||||
fillSelect(select, ALIGNS);
|
||||
}
|
||||
return new IconPicker(select, icons.align);
|
||||
} else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {
|
||||
let format = select.classList.contains('ql-background') ? 'background' : 'color';
|
||||
if (select.querySelector('option') == null) {
|
||||
fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');
|
||||
}
|
||||
return new ColorPicker(select, icons[format]);
|
||||
} else {
|
||||
if (select.querySelector('option') == null) {
|
||||
if (select.classList.contains('ql-font')) {
|
||||
fillSelect(select, FONTS);
|
||||
} else if (select.classList.contains('ql-header')) {
|
||||
fillSelect(select, HEADERS);
|
||||
} else if (select.classList.contains('ql-size')) {
|
||||
fillSelect(select, SIZES);
|
||||
}
|
||||
}
|
||||
return new Picker(select);
|
||||
}
|
||||
});
|
||||
let update = () => {
|
||||
this.pickers.forEach(function(picker) {
|
||||
picker.update();
|
||||
});
|
||||
};
|
||||
this.quill.on(Emitter.events.SELECTION_CHANGE, update)
|
||||
.on(Emitter.events.SCROLL_OPTIMIZE, update);
|
||||
}
|
||||
}
|
||||
BaseTheme.DEFAULTS = extend(true, {}, Theme.DEFAULTS, {
|
||||
modules: {
|
||||
toolbar: {
|
||||
handlers: {
|
||||
formula: function(value) {
|
||||
this.quill.theme.tooltip.edit('formula');
|
||||
},
|
||||
image: function(value) {
|
||||
let fileInput = this.container.querySelector('input.ql-image[type=file]');
|
||||
if (fileInput == null) {
|
||||
fileInput = document.createElement('input');
|
||||
fileInput.setAttribute('type', 'file');
|
||||
fileInput.setAttribute('accept', 'image/*');
|
||||
fileInput.classList.add('ql-image');
|
||||
fileInput.addEventListener('change', () => {
|
||||
if (fileInput.files != null && fileInput.files[0] != null) {
|
||||
let reader = new FileReader();
|
||||
reader.onload = (e) => {
|
||||
let range = this.quill.getSelection(true);
|
||||
this.quill.updateContents(new Delta()
|
||||
.retain(range.index)
|
||||
.delete(range.length)
|
||||
.insert({ image: e.target.result })
|
||||
, Emitter.sources.USER);
|
||||
fileInput.value = "";
|
||||
}
|
||||
reader.readAsDataURL(fileInput.files[0]);
|
||||
}
|
||||
});
|
||||
this.container.appendChild(fileInput);
|
||||
}
|
||||
fileInput.click();
|
||||
},
|
||||
video: function(value) {
|
||||
this.quill.theme.tooltip.edit('video');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
class BaseTooltip extends Tooltip {
|
||||
constructor(quill, boundsContainer) {
|
||||
super(quill, boundsContainer);
|
||||
this.textbox = this.root.querySelector('input[type="text"]');
|
||||
this.listen();
|
||||
}
|
||||
|
||||
listen() {
|
||||
this.textbox.addEventListener('keydown', (event) => {
|
||||
if (Keyboard.match(event, 'enter')) {
|
||||
this.save();
|
||||
event.preventDefault();
|
||||
} else if (Keyboard.match(event, 'escape')) {
|
||||
this.cancel();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
cancel() {
|
||||
this.hide();
|
||||
}
|
||||
|
||||
edit(mode = 'link', preview = null) {
|
||||
this.root.classList.remove('ql-hidden');
|
||||
this.root.classList.add('ql-editing');
|
||||
if (preview != null) {
|
||||
this.textbox.value = preview;
|
||||
} else if (mode !== this.root.getAttribute('data-mode')) {
|
||||
this.textbox.value = '';
|
||||
}
|
||||
this.position(this.quill.getBounds(this.quill.selection.savedRange));
|
||||
this.textbox.select();
|
||||
this.textbox.setAttribute('placeholder', this.textbox.getAttribute(`data-${mode}`) || '');
|
||||
this.root.setAttribute('data-mode', mode);
|
||||
}
|
||||
|
||||
restoreFocus() {
|
||||
let scrollTop = this.quill.root.scrollTop;
|
||||
this.quill.focus();
|
||||
this.quill.root.scrollTop = scrollTop;
|
||||
}
|
||||
|
||||
save() {
|
||||
let value = this.textbox.value;
|
||||
switch(this.root.getAttribute('data-mode')) {
|
||||
case 'link':
|
||||
let scrollTop = this.quill.root.scrollTop;
|
||||
if (this.linkRange) {
|
||||
this.quill.formatText(this.linkRange, 'link', value, Emitter.sources.USER);
|
||||
delete this.linkRange;
|
||||
} else {
|
||||
this.restoreFocus();
|
||||
this.quill.format('link', value, Emitter.sources.USER);
|
||||
}
|
||||
this.quill.root.scrollTop = scrollTop;
|
||||
break;
|
||||
case 'video':
|
||||
let match = value.match(/^(https?):\/\/(www\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/) ||
|
||||
value.match(/^(https?):\/\/(www\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);
|
||||
if (match) {
|
||||
value = match[1] + '://www.youtube.com/embed/' + match[3] + '?showinfo=0';
|
||||
} else if (match = value.match(/^(https?):\/\/(www\.)?vimeo\.com\/(\d+)/)) {
|
||||
value = match[1] + '://player.vimeo.com/video/' + match[3] + '/';
|
||||
}
|
||||
// fallthrough
|
||||
case 'formula':
|
||||
let range = this.quill.getSelection(true);
|
||||
let index = range.index + range.length;
|
||||
if (range != null) {
|
||||
this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, Emitter.sources.USER);
|
||||
if (this.root.getAttribute('data-mode') === 'formula') {
|
||||
this.quill.insertText(index + 1, ' ', Emitter.sources.USER);
|
||||
}
|
||||
this.quill.setSelection(index + 2, Emitter.sources.USER);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
this.textbox.value = '';
|
||||
this.hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function fillSelect(select, values, defaultValue = false) {
|
||||
values.forEach(function(value) {
|
||||
let option = document.createElement('option');
|
||||
if (value === defaultValue) {
|
||||
option.setAttribute('selected', 'selected');
|
||||
} else {
|
||||
option.setAttribute('value', value);
|
||||
}
|
||||
select.appendChild(option);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export { BaseTooltip, BaseTheme as default };
|
||||
@@ -0,0 +1,112 @@
|
||||
import extend from 'extend';
|
||||
import Emitter from '../core/emitter';
|
||||
import Keyboard from '../modules/keyboard';
|
||||
import BaseTheme, { BaseTooltip } from './base';
|
||||
import icons from '../ui/icons';
|
||||
import { Range } from '../core/selection';
|
||||
|
||||
|
||||
const TOOLBAR_CONFIG = [
|
||||
['bold', 'italic', 'link'],
|
||||
[{ header: 1 }, { header: 2 }, 'blockquote']
|
||||
];
|
||||
|
||||
class BubbleTheme extends BaseTheme {
|
||||
constructor(quill, options) {
|
||||
if (options.modules.toolbar != null && options.modules.toolbar.container == null) {
|
||||
options.modules.toolbar.container = TOOLBAR_CONFIG;
|
||||
}
|
||||
super(quill, options);
|
||||
this.quill.container.classList.add('ql-bubble');
|
||||
}
|
||||
|
||||
extendToolbar(toolbar) {
|
||||
this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);
|
||||
this.tooltip.root.appendChild(toolbar.container);
|
||||
this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')));
|
||||
this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')));
|
||||
}
|
||||
}
|
||||
BubbleTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {
|
||||
modules: {
|
||||
toolbar: {
|
||||
handlers: {
|
||||
link: function(value) {
|
||||
if (!value) {
|
||||
this.quill.format('link', false);
|
||||
} else {
|
||||
this.quill.theme.tooltip.edit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
class BubbleTooltip extends BaseTooltip {
|
||||
constructor(quill, bounds) {
|
||||
super(quill, bounds);
|
||||
this.quill.on(Emitter.events.EDITOR_CHANGE, (type, range) => {
|
||||
if (type !== Emitter.events.SELECTION_CHANGE) return;
|
||||
if (range != null && range.length > 0) {
|
||||
this.show();
|
||||
// Lock our width so we will expand beyond our offsetParent boundaries
|
||||
this.root.style.left = '0px';
|
||||
this.root.style.width = '';
|
||||
this.root.style.width = this.root.offsetWidth + 'px';
|
||||
let lines = this.quill.scroll.lines(range.index, range.length);
|
||||
if (lines.length === 1) {
|
||||
this.position(this.quill.getBounds(range));
|
||||
} else {
|
||||
let lastLine = lines[lines.length - 1];
|
||||
let index = lastLine.offset(this.quill.scroll);
|
||||
let length = Math.min(lastLine.length() - 1, range.index + range.length - index);
|
||||
let bounds = this.quill.getBounds(new Range(index, length));
|
||||
this.position(bounds);
|
||||
}
|
||||
} else if (document.activeElement !== this.textbox && this.quill.hasFocus()) {
|
||||
this.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
listen() {
|
||||
super.listen();
|
||||
this.root.querySelector('.ql-close').addEventListener('click', (event) => {
|
||||
this.root.classList.remove('ql-editing');
|
||||
});
|
||||
this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {
|
||||
// Let selection be restored by toolbar handlers before repositioning
|
||||
setTimeout(() => {
|
||||
if (this.root.classList.contains('ql-hidden')) return;
|
||||
let range = this.quill.getSelection();
|
||||
if (range != null) {
|
||||
this.position(this.quill.getBounds(range));
|
||||
}
|
||||
}, 1);
|
||||
});
|
||||
}
|
||||
|
||||
cancel() {
|
||||
this.show();
|
||||
}
|
||||
|
||||
position(reference) {
|
||||
let shift = super.position(reference);
|
||||
if (shift === 0) return shift;
|
||||
let arrow = this.root.querySelector('.ql-tooltip-arrow');
|
||||
arrow.style.marginLeft = '';
|
||||
arrow.style.marginLeft = (-1*shift - arrow.offsetWidth/2) + 'px';
|
||||
}
|
||||
}
|
||||
BubbleTooltip.TEMPLATE = [
|
||||
'<span class="ql-tooltip-arrow"></span>',
|
||||
'<div class="ql-tooltip-editor">',
|
||||
'<input type="text" data-formula="e=mc^2" data-link="quilljs.com" data-video="Embed URL">',
|
||||
'<a class="ql-close"></a>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
|
||||
export default BubbleTheme;
|
||||
@@ -0,0 +1,117 @@
|
||||
import extend from 'extend';
|
||||
import Emitter from '../core/emitter';
|
||||
import BaseTheme, { BaseTooltip } from './base';
|
||||
import LinkBlot from '../formats/link';
|
||||
import Picker from '../ui/picker';
|
||||
import { Range } from '../core/selection';
|
||||
|
||||
|
||||
const TOOLBAR_CONFIG = [
|
||||
[{ header: ['1', '2', '3', false] }],
|
||||
['bold', 'italic', 'underline', 'link'],
|
||||
[{ list: 'ordered' }, { list: 'bullet' }],
|
||||
['clean']
|
||||
];
|
||||
|
||||
class SnowTheme extends BaseTheme {
|
||||
constructor(quill, options) {
|
||||
if (options.modules.toolbar != null && options.modules.toolbar.container == null) {
|
||||
options.modules.toolbar.container = TOOLBAR_CONFIG;
|
||||
}
|
||||
super(quill, options);
|
||||
this.quill.container.classList.add('ql-snow');
|
||||
}
|
||||
|
||||
extendToolbar(toolbar) {
|
||||
toolbar.container.classList.add('ql-snow');
|
||||
this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')));
|
||||
this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')));
|
||||
this.tooltip = new SnowTooltip(this.quill, this.options.bounds);
|
||||
if (toolbar.container.querySelector('.ql-link')) {
|
||||
this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function(range, context) {
|
||||
toolbar.handlers['link'].call(toolbar, !context.format.link);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
SnowTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {
|
||||
modules: {
|
||||
toolbar: {
|
||||
handlers: {
|
||||
link: function(value) {
|
||||
if (value) {
|
||||
let range = this.quill.getSelection();
|
||||
if (range == null || range.length == 0) return;
|
||||
let preview = this.quill.getText(range);
|
||||
if (/^\S+@\S+\.\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {
|
||||
preview = 'mailto:' + preview;
|
||||
}
|
||||
let tooltip = this.quill.theme.tooltip;
|
||||
tooltip.edit('link', preview);
|
||||
} else {
|
||||
this.quill.format('link', false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
class SnowTooltip extends BaseTooltip {
|
||||
constructor(quill, bounds) {
|
||||
super(quill, bounds);
|
||||
this.preview = this.root.querySelector('a.ql-preview');
|
||||
}
|
||||
|
||||
listen() {
|
||||
super.listen();
|
||||
this.root.querySelector('a.ql-action').addEventListener('click', (event) => {
|
||||
if (this.root.classList.contains('ql-editing')) {
|
||||
this.save();
|
||||
} else {
|
||||
this.edit('link', this.preview.textContent);
|
||||
}
|
||||
event.preventDefault();
|
||||
});
|
||||
this.root.querySelector('a.ql-remove').addEventListener('click', (event) => {
|
||||
if (this.linkRange != null) {
|
||||
this.restoreFocus();
|
||||
this.quill.formatText(this.linkRange, 'link', false, Emitter.sources.USER);
|
||||
delete this.linkRange;
|
||||
}
|
||||
event.preventDefault();
|
||||
this.hide();
|
||||
});
|
||||
this.quill.on(Emitter.events.SELECTION_CHANGE, (range) => {
|
||||
if (range == null) return;
|
||||
if (range.length === 0) {
|
||||
let [link, offset] = this.quill.scroll.descendant(LinkBlot, range.index);
|
||||
if (link != null) {
|
||||
this.linkRange = new Range(range.index - offset, link.length());
|
||||
let preview = LinkBlot.formats(link.domNode);
|
||||
this.preview.textContent = preview;
|
||||
this.preview.setAttribute('href', preview);
|
||||
this.show();
|
||||
this.position(this.quill.getBounds(this.linkRange));
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.hide();
|
||||
});
|
||||
}
|
||||
|
||||
show() {
|
||||
super.show();
|
||||
this.root.removeAttribute('data-mode');
|
||||
}
|
||||
}
|
||||
SnowTooltip.TEMPLATE = [
|
||||
'<a class="ql-preview" target="_blank" href="about:blank"></a>',
|
||||
'<input type="text" data-formula="e=mc^2" data-link="quilljs.com" data-video="Embed URL">',
|
||||
'<a class="ql-action"></a>',
|
||||
'<a class="ql-remove"></a>'
|
||||
].join('');
|
||||
|
||||
|
||||
export default SnowTheme;
|
||||
@@ -0,0 +1,35 @@
|
||||
import Picker from './picker';
|
||||
|
||||
|
||||
class ColorPicker extends Picker {
|
||||
constructor(select, label) {
|
||||
super(select);
|
||||
this.label.innerHTML = label;
|
||||
this.container.classList.add('ql-color-picker');
|
||||
[].slice.call(this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function(item) {
|
||||
item.classList.add('ql-primary');
|
||||
});
|
||||
}
|
||||
|
||||
buildItem(option) {
|
||||
let item = super.buildItem(option);
|
||||
item.style.backgroundColor = option.getAttribute('value') || '';
|
||||
return item;
|
||||
}
|
||||
|
||||
selectItem(item, trigger) {
|
||||
super.selectItem(item, trigger);
|
||||
let colorLabel = this.label.querySelector('.ql-color-label');
|
||||
let value = item ? item.getAttribute('data-value') || '' : '';
|
||||
if (colorLabel) {
|
||||
if (colorLabel.tagName === 'line') {
|
||||
colorLabel.style.stroke = value;
|
||||
} else {
|
||||
colorLabel.style.fill = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default ColorPicker;
|
||||
@@ -0,0 +1,23 @@
|
||||
import Picker from './picker';
|
||||
|
||||
|
||||
class IconPicker extends Picker {
|
||||
constructor(select, icons) {
|
||||
super(select);
|
||||
this.container.classList.add('ql-icon-picker');
|
||||
[].forEach.call(this.container.querySelectorAll('.ql-picker-item'), (item) => {
|
||||
item.innerHTML = icons[item.getAttribute('data-value') || ''];
|
||||
});
|
||||
this.defaultItem = this.container.querySelector('.ql-selected');
|
||||
this.selectItem(this.defaultItem);
|
||||
}
|
||||
|
||||
selectItem(item, trigger) {
|
||||
super.selectItem(item, trigger);
|
||||
item = item || this.defaultItem;
|
||||
this.label.innerHTML = item.innerHTML;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default IconPicker;
|
||||
@@ -0,0 +1,48 @@
|
||||
module.exports = {
|
||||
'align': {
|
||||
'' : require('../assets/icons/align-left.svg'),
|
||||
'center' : require('../assets/icons/align-center.svg'),
|
||||
'right' : require('../assets/icons/align-right.svg'),
|
||||
'justify' : require('../assets/icons/align-justify.svg')
|
||||
},
|
||||
'background': require('../assets/icons/background.svg'),
|
||||
'blockquote': require('../assets/icons/blockquote.svg'),
|
||||
'bold' : require('../assets/icons/bold.svg'),
|
||||
'clean' : require('../assets/icons/clean.svg'),
|
||||
'code' : require('../assets/icons/code.svg'),
|
||||
'code-block': require('../assets/icons/code.svg'),
|
||||
'color' : require('../assets/icons/color.svg'),
|
||||
'direction' : {
|
||||
'' : require('../assets/icons/direction-ltr.svg'),
|
||||
'rtl' : require('../assets/icons/direction-rtl.svg')
|
||||
},
|
||||
'float': {
|
||||
'center' : require('../assets/icons/float-center.svg'),
|
||||
'full' : require('../assets/icons/float-full.svg'),
|
||||
'left' : require('../assets/icons/float-left.svg'),
|
||||
'right' : require('../assets/icons/float-right.svg')
|
||||
},
|
||||
'formula' : require('../assets/icons/formula.svg'),
|
||||
'header': {
|
||||
'1' : require('../assets/icons/header.svg'),
|
||||
'2' : require('../assets/icons/header-2.svg')
|
||||
},
|
||||
'italic' : require('../assets/icons/italic.svg'),
|
||||
'image' : require('../assets/icons/image.svg'),
|
||||
'indent': {
|
||||
'+1' : require('../assets/icons/indent.svg'),
|
||||
'-1' : require('../assets/icons/outdent.svg')
|
||||
},
|
||||
'link' : require('../assets/icons/link.svg'),
|
||||
'list': {
|
||||
'ordered' : require('../assets/icons/list-ordered.svg'),
|
||||
'bullet' : require('../assets/icons/list-bullet.svg')
|
||||
},
|
||||
'script': {
|
||||
'sub' : require('../assets/icons/subscript.svg'),
|
||||
'super' : require('../assets/icons/superscript.svg'),
|
||||
},
|
||||
'strike' : require('../assets/icons/strike.svg'),
|
||||
'underline' : require('../assets/icons/underline.svg'),
|
||||
'video' : require('../assets/icons/video.svg')
|
||||
};
|
||||
@@ -0,0 +1,116 @@
|
||||
import DropdownIcon from '../assets/icons/dropdown.svg';
|
||||
|
||||
|
||||
class Picker {
|
||||
constructor(select) {
|
||||
this.select = select;
|
||||
this.container = document.createElement('span');
|
||||
this.buildPicker();
|
||||
this.select.style.display = 'none';
|
||||
this.select.parentNode.insertBefore(this.container, this.select);
|
||||
this.label.addEventListener('click', (event) => {
|
||||
this.container.classList.toggle('ql-expanded');
|
||||
});
|
||||
this.select.addEventListener('change', this.update.bind(this));
|
||||
}
|
||||
|
||||
buildItem(option) {
|
||||
let item = document.createElement('span');
|
||||
item.classList.add('ql-picker-item');
|
||||
if (option.hasAttribute('value')) {
|
||||
item.setAttribute('data-value', option.getAttribute('value'));
|
||||
}
|
||||
if (option.textContent) {
|
||||
item.setAttribute('data-label', option.textContent);
|
||||
}
|
||||
item.addEventListener('click', (event) => {
|
||||
this.selectItem(item, true);
|
||||
});
|
||||
return item;
|
||||
}
|
||||
|
||||
buildLabel() {
|
||||
let label = document.createElement('span');
|
||||
label.classList.add('ql-picker-label');
|
||||
label.innerHTML = DropdownIcon;
|
||||
this.container.appendChild(label);
|
||||
return label;
|
||||
}
|
||||
|
||||
buildOptions() {
|
||||
let options = document.createElement('span');
|
||||
options.classList.add('ql-picker-options');
|
||||
[].slice.call(this.select.options).forEach((option) => {
|
||||
let item = this.buildItem(option);
|
||||
options.appendChild(item);
|
||||
if (option.hasAttribute('selected')) {
|
||||
this.selectItem(item);
|
||||
}
|
||||
});
|
||||
this.container.appendChild(options);
|
||||
}
|
||||
|
||||
buildPicker() {
|
||||
[].slice.call(this.select.attributes).forEach((item) => {
|
||||
this.container.setAttribute(item.name, item.value);
|
||||
});
|
||||
this.container.classList.add('ql-picker');
|
||||
this.label = this.buildLabel();
|
||||
this.buildOptions();
|
||||
}
|
||||
|
||||
close() {
|
||||
this.container.classList.remove('ql-expanded');
|
||||
}
|
||||
|
||||
selectItem(item, trigger = false) {
|
||||
let selected = this.container.querySelector('.ql-selected');
|
||||
if (item === selected) return;
|
||||
if (selected != null) {
|
||||
selected.classList.remove('ql-selected');
|
||||
}
|
||||
if (item != null) {
|
||||
item.classList.add('ql-selected');
|
||||
this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);
|
||||
if (item.hasAttribute('data-value')) {
|
||||
this.label.setAttribute('data-value', item.getAttribute('data-value'));
|
||||
} else {
|
||||
this.label.removeAttribute('data-value');
|
||||
}
|
||||
if (item.hasAttribute('data-label')) {
|
||||
this.label.setAttribute('data-label', item.getAttribute('data-label'));
|
||||
} else {
|
||||
this.label.removeAttribute('data-label');
|
||||
}
|
||||
if (trigger) {
|
||||
if (typeof Event === 'function') {
|
||||
this.select.dispatchEvent(new Event('change'));
|
||||
} else if (typeof Event === 'object') { // IE11
|
||||
let event = document.createEvent('Event');
|
||||
event.initEvent('change', true, true);
|
||||
this.select.dispatchEvent(event);
|
||||
}
|
||||
this.close();
|
||||
}
|
||||
} else {
|
||||
this.label.removeAttribute('data-value');
|
||||
this.label.removeAttribute('data-label');
|
||||
}
|
||||
}
|
||||
|
||||
update() {
|
||||
let option;
|
||||
if (this.select.selectedIndex > -1) {
|
||||
let item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];
|
||||
option = this.select.options[this.select.selectedIndex];
|
||||
this.selectItem(item);
|
||||
} else {
|
||||
this.selectItem(null);
|
||||
}
|
||||
let isActive = option != null && option !== this.select.querySelector('option[selected]');
|
||||
this.label.classList.toggle('ql-active', isActive);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default Picker;
|
||||
@@ -0,0 +1,52 @@
|
||||
class Tooltip {
|
||||
constructor(quill, boundsContainer) {
|
||||
this.quill = quill;
|
||||
this.boundsContainer = boundsContainer || document.body;
|
||||
this.root = quill.addContainer('ql-tooltip');
|
||||
this.root.innerHTML = this.constructor.TEMPLATE;
|
||||
let offset = parseInt(window.getComputedStyle(this.root).marginTop);
|
||||
this.quill.root.addEventListener('scroll', () => {
|
||||
this.root.style.marginTop = (-1*this.quill.root.scrollTop) + offset + 'px';
|
||||
this.checkBounds();
|
||||
});
|
||||
this.hide();
|
||||
}
|
||||
|
||||
checkBounds() {
|
||||
this.root.classList.toggle('ql-out-top', this.root.offsetTop <= 0);
|
||||
this.root.classList.remove('ql-out-bottom');
|
||||
this.root.classList.toggle('ql-out-bottom', this.root.offsetTop + this.root.offsetHeight >= this.quill.root.offsetHeight);
|
||||
}
|
||||
|
||||
hide() {
|
||||
this.root.classList.add('ql-hidden');
|
||||
}
|
||||
|
||||
position(reference) {
|
||||
let left = reference.left + reference.width/2 - this.root.offsetWidth/2;
|
||||
let top = reference.bottom + this.quill.root.scrollTop;
|
||||
this.root.style.left = left + 'px';
|
||||
this.root.style.top = top + 'px';
|
||||
let containerBounds = this.boundsContainer.getBoundingClientRect();
|
||||
let rootBounds = this.root.getBoundingClientRect();
|
||||
let shift = 0;
|
||||
if (rootBounds.right > containerBounds.right) {
|
||||
shift = containerBounds.right - rootBounds.right;
|
||||
this.root.style.left = (left + shift) + 'px';
|
||||
}
|
||||
if (rootBounds.left < containerBounds.left) {
|
||||
shift = containerBounds.left - rootBounds.left;
|
||||
this.root.style.left = (left + shift) + 'px';
|
||||
}
|
||||
this.checkBounds();
|
||||
return shift;
|
||||
}
|
||||
|
||||
show() {
|
||||
this.root.classList.remove('ql-editing');
|
||||
this.root.classList.remove('ql-hidden');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default Tooltip;
|
||||