1/** 2 * spectrum options 3 * - flat : íì ë ìê² í ì§(type: flatê³¼ ëì¼) 4 * - showInput : input ë ¸ì¶ ì¬ë¶ 5 * - allowEmpty : 공백 ê°ë¥ ì¬ë¶ 6 * - showAlpha : í¬ëª ë ë ¸ì¶ ì¬ë¶ 7 * - disabled : ë¹íì±í ì¬ë¶ 8 * - showPalette : íë í¸ ë ¸ì¶ ì¬ë¶ 9 * - palette : 기본 íë í¸ ì¤ì 10 * - showPaletteOnly : í´ë¦ ì ì²ìì íë í¸ë§ ë³´ì´ê² í ì§ ì¬ë¶ 11 * - togglePaletteOnly : íë í¸ ë´ í ê¸ë²í¼ ì¬ë¶ 12 * - togglePaletteLessText : íë í¸ Less í ì¤í¸ 13 * - togglePaletteMoreText : íë í¸ More í ì¤í¸ 14 * - showSelectionPalette : íë í¸ ì ì©ê¸°ë¡ ì¬ì© ì¬ë¶ 15 * - localStorageKey : íë í¸ ì ì©ê¸°ë¡ localStorageì Key ê° 16 * - selectionPalette : íë í¸ ì ì©ê¸°ë¡ ìë ìì± 17 * - maxSelectionSize : íë í¸ ìµë ì ì©ê¸°ë¡ (default: 8) 18 * - hideAfterPaletteSelect : ìì ì í í colorPicker ì¨ê¸¸ ì§ ì¬ë¶ 19 * - clickoutFiresChange : ìì ë³ê²½ í ë°ê¹¥ìì í´ë¦ ì ì íí ê° ë°ìí ì§ ì¬ë¶ 20 * - showInitial : ìì ë³ê²½ ì ê°ì ë³´ì¬ì¤ ì§ ì¬ë¶ 21 * - chooseText : "ì ì©" ë²í¼ í ì¤í¸ 22 * - cancelText : "ì·¨ì" ë²í¼ í ì¤í¸5 23 * - showButtons : ì·¨ì/ì ì© ë²í¼ ë ¸ì¶ ì¬ë¶ 24 * - containerClassName : colorPickerSelector í´ëì¤ ì´ë¦ 25 * - replacerClassName : colorPicker í´ëì¤ ì´ë¦ 26 * - preferredFormat : colorPickerSelector ë ¸ì¶ ë°©ì(color, text, component, flat) 27 * - type : ì ì ì©ì ì¤íí í¨ì(ì ì© ë²í¼ì ëë¬ì¼ í¨) 28 * - change : ì ì ì©ì ì¤íí í¨ì(ì ì© ë²í¼ì ëë¬ì¼ í¨) 29 * - move : ì ì ì©ì ì¤íí í¨ì(ì¤ìê° ë°ì) 30 * - hide : colorPicker ì°½ ë«ì ë ì¤íí í¨ì 31 * - show : colorPicker ì°½ ì´ë¦´ ë ì¤íí í¨ì 32 * - beforeshow : colorPicker ì°½ ì´ê¸° ì ì¤íí í¨ì 33 * - dragstart : ì ëëê·¸ ìì ì ì¤íí í¨ì 34 * - dragstop : ì ëëê·¸ ì¢ ë£ ì ì¤íí í¨ì 35 */ 36const spectrumOption = { 37 showInput: true, 38 allowEmpty: true, 39 showAlpha: false, 40 disabled: false, 41 showPalette: true, 42 showPaletteOnly: false, 43 togglePaletteOnly: false, 44 togglePaletteLessText: 'ì¨ê¸°ê¸°', 45 togglePaletteMoreText: 'ë보기', 46 showSelectionPalette: true, 47 localStorageKey: "clickn.spectrum", 48 hideAfterPaletteSelect: false, 49 clickoutFiresChange: true, 50 showInitial: true, 51 chooseText: "ì ì©", 52 cancelText: "ì·¨ì", 53 showButtons: false, 54 preferredFormat: "hex", 55 type: "text", 56 useDrag: false, 57}; 58 59/** 60 * elementì spectrum ì¤íì ìí í´ë¦ ì´ë²¤í¸ë¥¼ ìì±íë¤. 61 * @param {HTMLElement} el input íê·¸ë¡ ëì´ìë element 62 * @param {function} callback ë³ê²½ë color ê°ì callback í´ì£¼ë í¨ì 63 * @param {object} option spectrumì ì´ê¸°íí ë ì¬ì©í option 64 * @returns {HTMLElement} 65 */ 66function createSpectrum(el, callback = () => { }, option = {}) { 67 /* 68 el.hover(function(){ 69 $(this).attr('style', `background-color: ${color}; border: 2px solid #5a626e !important; border-radius: 3px;`); 70 }, function () { 71 $(this).attr('style', `background-color: ${color}; border: 2px solid white !important; border-radius: 3px;`); 72 });*/ 73 74 if ($('.sp-container').length === 0) { 75 const _this = this; 76 77 el.on('click', () => { 78 //ì¤íí¸ë¼ ìì± 79 el.spectrum({ ...spectrumOption, ...option }); 80 81 el.on("show.spectrum", (_, color) => { 82 redesignSpectrum(el); 83 const fontColor = el.css("color"); 84 const alpha = color ? color._a : 0; 85 if (alpha !== 1) { 86 updateSpectrum(el, null, fontColor); 87 el.spectrum('set', null); 88 } else { 89 updateSpectrum(el, color, fontColor); 90 } 91 customInputValue(); 92 93 el.attr('style', this.borderCss(color, "#000")); 94 el.off('mouseenter mouseleave'); 95 }); 96 97 el.spectrum('show'); 98 99 // ë§ì½ spectrumì ì¶ë ¥ ìì ëì´ê° viewport를 ëì´ê° ë ì¡°ì 100 const spHeight = $('.sp-container').height(); 101 const spOffset = $('.sp-container').offset();
102 const viewportHeight = $(window).height(); 103 if (spHeight + spOffset.top > viewportHeight) { 104 $('.sp-container').css('top', `${spOffset.top - (spHeight + spOffset.top - viewportHeight)}px`); 105 } 106 107 //ì¤íí¸ë¼ ìì ì í ì ì´ë²¤í¸ 108 el.on("move.spectrum", (_, color) => { 109 redesignSpectrum(el); 110 const fontColor = el.css("color"); 111 updateSpectrum(el, color, fontColor); 112 customInputValue(); 113 114 //ìì ì ì© ì ë°ì í¨ì 115 if (callback) { 116 const hexCode = color ? color.toHexString() : 'transparent'; 117 callback(hexCode, "move"); 118 } 119 }); 120 121 el.on("dragstop.spectrum", (_, color) => { 122 //ìì ì ì© ì ë°ì í¨ì 123 if (callback) { 124 const hexCode = color ? color.toHexString() : 'transparent'; 125 callback(hexCode, "dragstop"); 126 } 127 }); 128 129 el.on("dragstart.spectrum", (_, color) => { 130 //ìì ì ì© ì ë°ì í¨ì 131 if (callback) { 132 const hexCode = color ? color.toHexString() : 'transparent'; 133 callback(hexCode, "dragstart"); 134 } 135 }); 136 137 //ì¤íí¸ë¼ ë«í ë ì´ë²¤í¸ 138 el.on("hide.spectrum", (_, color) => { 139 el.off("show.spectrum move.spectrum hide.spectrum"); 140 el.spectrum("destroy"); 141 const fontColor = el.css("color"); 142 updateSpectrum(el, color, fontColor); 143 el.attr('style', this.borderCss(color, "#FFF")); 144 145 const _this = this; 146 el.hover(function(){ 147 $(this).attr('style', _this.borderCss(color, "#5a626e")); 148 }, function () { 149 $(this).attr('style', _this.borderCss(color, "#FFF")); 150 }); 151 }); 152 153 //ëìì¸ ì ì© 154 redesignSpectrum(el); 155 156 // ì¤í¬ì´ë ìì± 157 spoidSpectrum(el, callback); 158 159 return false; 160 }); 161 } 162} 163 164function borderCss(color, borderColor) { 165 let style = `border: 2px solid ${borderColor} !important; border-radius: 3px;`; 166 167 if (!color || color == 'transparent') { 168 style += ` background-repeat:no-repeat;background-size:contain;background-image:url('/images/spectrum/no_color.png');` 169 } else { 170 style += ` background-color: ${color};` 171 } 172 173 return style 174} 175 176/** 177 * spectrum ë´ì input ê°ì 커ì¤í ì¼ë¡ ë³ê²½ 178 */ 179function customInputValue() { 180 // selector - input ë´ì #ì beforeë¡ ì¤¬ê¸° ë문ì # ìì 181 const input = $('div.sp-picker-container > div.sp-flex > div.sp-input-container.sp-cf > input'); 182 const inputValue = input.val(); 183 if (inputValue && inputValue.includes('rgba')) { 184 try { 185 const tmp = inputValue.replace('rgba', '').replaceAll(/[() ;]/g, '').split(','); 186 input.val(tmp.slice(0, 3).map((i) => Number(i).toString(16)).join('')); 187 } catch(e) { 188 input.val(''); 189 } 190 } else { 191 input.val(inputValue ? inputValue.replace('#', '') : inputValue); 192 } 193} 194 195/** 196 * spectrumì ì´ë²¤í¸ í¸ë¤ë¬ë¥¼ íµí´ ë°ì color object를 ì¬ì©í기 ì¬ì´ ë°ì´í°ë¡ ë³ííë¤. 197 * @param {object} color spectrum ì´ë²¤í¸ í¸ë¤ë¬ë¥¼ íµí´ ë°ì color object 198 * @returns {object} 199 * - hex : "ff0000" 200 * - hexString : "#ff0000" 201 * - rgb : {"r":255,"g":0,"b":0} 202 * - rgbString : "rgb(255, 0, 0)" 203 * - hsv : {"h":0,"s":1,"v":1} 204 * - hsvString : "hsv(0, 100%, 100%)" 205 * - hsl : {"h":0,"s":1,"l":0.5} 206 * - hslString : "hsl(0, 100%, 50%)" 207 * - name : "red" 208 */ 209function convertColor(color) { 210 if (color) { 211 return { 212 hex: color.toHex(), 213 hexString: color.toHexString(), 214 rgb: color.toRgb(), 215 rgbString: color.toRgbString(), 216 hsv: color.toHsv(), 217 hsvString: color.toHsvString(), 218 hsl: color.toHsl(), 219 hslString: color.toHslString(), 220 name: color.toName(), 221 } 222 } else { 223 return null; 224 } 225} 226 227 228/** 229 * spectrum ë´ ëìì¸ì ì¬êµ¬ì±íë¤. 230 * - spectrum í¤ë ìì± 231 * - spectrum palette ë´ "ìµê·¼ ì¬ì© 컬ë¬" UI ìì± 232 * - spectrum selector ë´ initial, inputBox, spoid UI ì¬ì¡°í© ë° ìì 233 * @param {HTMLElement} el spectrumì´ ì ì©ëì´ìë element 234 */ 235function redesignSpectrum(el) { 236 /** 237 * color-picker-header 238 */ 239 if ($('.sp-header').length === 0) { 240 $('.sp-palette-container').before($(` 241 <div id="color_picker_selector_header" class="sp-header"> 242 <h2 style="font-size: 16px; color: #333333; font-weight: 700;">ìì ì í</h2> 243 <button class="closeBtn" style="background: url('/images/spectrum/close.png') no-repeat center;"></button> 244 </div> 245 `)); 246 } 247 248 $(".sp-header .closeBtn").on("click", () => { 249 el.spectrum("destroy"); 250 }) 251 252 /** 253 * color-picker-palette 254 */ 255 if ($('.sp-palette.sp-thumb').find($('hr')).length === 0) { 256 const selection = $('.sp-palette-row-selection'); 257 // ìµê·¼ ì¬ì©í 컬ë¬ê° ì¡´ì¬í ê²½ì° ê·¸ ì¤ì rgbaë¡ ì ë ¥ë ë²í¼ë§ ìì 258 if (selection.children().length !== 0) { 259 selection.children().map((_, el) => { 260 if ($(el).attr('data-color').includes('rgba')) { 261 $(el).attr({ 262 'title': 'tranparent', 263 'data-color': '' 264 }); 265 $(el).addClass('sp-clear-display'); 266 $($(el).children()[0]).css('background-color', 'transparent'); 267 } 268 }); 269 } 270 // ë§ì½ ìµê·¼ ì¬ì©í 컬ë¬ê° 8ê° ë¯¸ë§ì¼ ê²½ì° ë¹ ì»¬ë¬ ìì± 271 const selectionLength = selection.children().length; 272 for (let i = 0; i < 8 - selectionLength; i += 1) { 273 selection.append($(`
274 <span class="sp-palette-disable"></span> 275 `)); 276 } 277 $('.sp-palette-row-0').before($('<p style="font-size: 14px; color: #999999; margin: 0 0 3px 3px;">ìµê·¼ ì¬ì© 컬ë¬</p>')); 278 $('.sp-palette-row-0').before(selection); 279 $('.sp-palette-row-0').before($('<hr style="display: block !important; background: #e4e4e4; height: 1px; border: 0; margin: 6px 0;" />')); 280 } 281 282 /** 283 * color-picker-selector 284 */ 285 // ê´ë¦¬ì 모ëì¼ ë í¬ëª ë²í¼ ì ê±° 286 if ($('.auto_keyword').length) { 287 $('.sp-clear.sp-clear-display').remove(); 288 $('.sp-hue').css({ 289 'top': '0', 290 'height': '100%' 291 }); 292 293 // color-picker-selector ë´ì input ê°ì ë¤ì´ê°ë 공백ì ë°©ì§í기 ìí ë¶ë¶ (공백 ì í¬ëª ) 294 $('.sp-input').on('focus', (e) => { 295 $('.sp-input').attr('data-before-value', e.target.value); 296 }); 297 $('.sp-input').on('change', (e) => { 298 if (e.target.value === '') { 299 const color = $('.sp-input').attr('data-before-value'); 300 $('.sp-input').val(color); 301 updateSpectrum(el, color); 302 el.spectrum('set', color); 303 redesignSpectrum(); 304 } else { 305 $('.sp-input').attr('data-before-value', e.target.value); 306 } 307 }); 308 } 309 // initial, input, spoid ì¬ì¡°í© 310 if ($('.sp-flex').length === 0) { 311 $('.sp-top').after($('<div class="sp-flex"></div>')); 312 $('.sp-flex').append($('.sp-initial')); 313 $('.sp-flex').append($('.sp-input-container')); 314 } 315 // initial ìì 316 const arrow = $('<p class="sp-arrow" style="background: url(\'/images/spectrum/arrow.png\') no-repeat center; width: 10px; height: 10px; margin: 0 3px;"></p>'); 317 const init = $('.sp-initial').find($('.sp-thumb-el.sp-thumb-active')); 318 const clear = $('.sp-initial').find($('.sp-thumb-el.sp-clear-display')); 319 const target = init.length ? init : clear; 320 if ($('.sp-palette-row-initial').find($('.sp-arrow')).length === 0 && target.length !== 0) { 321 target[target.length > 1 ? 1 : 0].before(arrow[0]); 322 } 323 const before = $('.sp-palette-row-initial').children().first(); 324 if (before.attr('data-color') && before.attr('data-color').includes('rgba')) { 325 $(before).attr({ 326 'title': 'tranparent', 327 'data-color': '' 328 }); 329 $(before).addClass('sp-clear-display'); 330 $($(before).children()[0]).css('background-color', 'transparent'); 331 } 332 333 // input ë°ì¤ì height ê°ì (admin 모ëììë ì´ë¯¸ heightê° importantë¡ ì ì¸ëì´ì기 ë문) 334 $('.sp-input').attr('style', 'height: 32px !important; padding: 0 5px 0 18px !important; text-align: start;'); 335 336 $('.sp-container').css('transform', 'translate(-40px, 8px)'); 337 $('.sp-dragger').css({ 338 'border': '2px solid white', 339 'border-radius': '50%' 340 }); 341 $('.sp-slider').css({ 342 'border': '2px solid white', 343 'background': 'transparent', 344 'height': '10px', 345 'width': '10px', 346 'left': '-1px', 347 'margin-top': '10px' 348 }); 349} 350 351/** 352 * spectrum color ë³ê²½ì ë°ë¼ í¹ì elementì ë°°ê²½ì ë±ì ë³ê²½íë¤. (label ë°°ê²½ ë³ê²½ ë±) 353 * @param {HTMLElement} el ë³ê²½ë ììì ì ì©í element 354 * @param {string | object | null | undefined} color ë³ê²½ë background ìì 355 * @param {string} fontColor ë³ê²½ë font ìì 356 */ 357function updateSpectrum(el, color, fontColor) { 358 if (color && color!='transparent') { 359 el.css({ 360 "background-color": typeof color === 'string' ? color : color.toHexString(), 361 "background-repeat": "", 362 "background-size": "", 363 "background-image": "", 364 "color": fontColor, 365 }); 366 el.val(color); 367 } else { 368 el.attr('style', `background-repeat:no-repeat;background-size:contain;background-image:url('/images/spectrum/no_color.png');border:2px solid white !important;`); 369 el.val(''); 370 } 371} 372 373/** 374 * spectrum ë´ ì¤í¬ì´ë element ìì± í ìì ì í ì ì¤íí í¨ìë ì¤ííë¤. 375 * @param {HTMLElement} el spectrumì´ ì ì©ëì´ìë element 376 * @param {function} callback ì ì© í ë³ê²½ë ììì callback í´ì£¼ë í¨ì 377 */ 378function spoidSpectrum(el, callback = () => {}) { 379 if ($('.spoid').length === 0) { 380 if (window.EyeDropper) { 381 const eyeDropper = new EyeDropper(); // ë¸ë¼ì°ì ìì 기본 ì ê³µíë ìê¹ ì¤í¬ì´ë ê°ì²´ 382 // ì¤í¬ì´ë ë²í¼ ìì± 383 const spoid = $(`<button class="spoid" style="background: url('/images/spectrum/spoid.png') no-repeat; "></button>`); 384 spoid.on('click', () => eyeDropper.open().then((result) => { 385 el.spectrum('set', result.sRGBHex); 386 redesignSpectrum(el); 387 388 updateSpectrum(el, result.sRGBHex); 389 390 if (callback) { 391 callback(result.sRGBHex, "click"); 392 } 393 394 })); 395 $('.sp-flex').append(spoid); 396 } else { 397 // ë¸ë¼ì°ì ìì EyeDropper()를 ì§ìí´ì£¼ì§ ìì ê²½ì° 398 $('.sp-input-container').css('width', '110px !important'); 399 } 400 } 401} 402 403/** 404 * ìì hexê°ì HSLë¡ ë³í 405 * @param {string} hex hex ê° 406 * @returns {object} 407 */ 408function hexToHSL(hex) { 409 // hexê°ì´ ìë ê°ì´ ë¤ì´ì¬ ê²½ì° 410 const regexHex = /^#?([a-fA-F\d]{2})([a-fA-F\d]{2})([a-fA-F\d]{2})$/gi; 411 const result = regexHex.exec(hex); 412 if (!result) return { h: 0, s: 0, l: 0 }; 413
414 const r = parseInt(result[1], 16) / 255; 415 const g = parseInt(result[2], 16) / 255; 416 const b = parseInt(result[3], 16) / 255; 417 const max = Math.max(r, g, b); 418 const min = Math.min(r, g, b); 419 let h, s, l = (max + min) / 2; 420 if (max === min) { h = s = 0; } 421 else { 422 const d = max - min; 423 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 424 switch (max) { 425 case r: h = (g - b) / d + (g < b ? 6 : 0); break; 426 case g: h = (b - r) / d + 2; break; 427 case b: h = (r - g) / d + 4; break; 428 } 429 h /= 6; 430 } 431 return { h, s, l }; 432} 433 434/** 435 * Froala Editor - Custom buttonì callback í¨ì 436 * @param {object} Object callback ì íìí ë°ì´í° 437 * - el : spectrumì ì ì©í element 438 * - edit : froala editor edit ì ë³´ 439 * - format : froala editor format ì ë³´ 440 * - type : 'color'ì¸ì§ 'background-color'ì¸ì§ 441 * - initColor : ì´ê¸°íí ìì 442 */ 443function spectrumForFECallback({ el, edit, format, type, selection, initColor = '' }) { 444 edit.off(); 445 446 if ($('#color_picker').length !== 0) { 447 el.spectrum('hide'); 448 } 449 if ($('#color_picker_selector').length !== 0) { 450 el.spectrum('hide'); 451 } 452 // $('#main_pannel_frame').contents().find('#customTextColor-1').append(el); 453 $('body').prepend(el);
454 const defaultColor = type === 'color' ? initColor : 'transparent'; 455 el.spectrum({ ...spectrumOption, color: initColor === '' ? defaultColor : initColor }); 456 457 redesignSpectrum(el); 458 el.on('move.spectrum show.spectrum', (_, color) => { 459 const colorString = color ? color.toHexString() : 'transparent'; 460 // ì¤í¬ì´ë ìì± 461 spoidSpectrum(el, (color) => { 462 if (type === 'cell-background-color') { 463 format.setBackground(color); 464 } else { 465 format.applyStyle(type, color); 466 } 467 }); 468 469 redesignSpectrum(el); 470 if (type === 'cell-background-color') { 471 format.setBackground(colorString); 472 } else { 473 format.applyStyle(type, colorString); 474 } 475 476 // ë§ì½ í¬ëª ì¼ ê²½ì° í¬ëª íê² ê°ì ì í 477 if (color && color.toRgb().a === 0) { 478 if (type === 'cell-background-color') { 479 format.setBackground('rgba(0,0,0,0)'); 480 } else { 481 format.applyStyle(type, 'transparent'); 482 } 483 el.spectrum('set', ''); 484 redesignSpectrum(el); 485 } 486 487 customInputValue(); 488 }); 489 el.on('hide.spectrum', () => { 490 el.spectrum('destroy'); 491 $('#color_picker').remove(); 492 $('#color_picker_selector').remove(); 493 $('.sp-container').remove(); 494 edit.on(); 495 }); 496 497 el.spectrum('show'); 498 499 // color_picker_selector dragable 500 if ($('.sp-container').length) { 501 $('#color_picker_selector_header').css('cursor', 'move'); 502 $('.sp-container')[0].id = 'color_picker_selector'; 503 dragElement($('#color_picker_selector')[0]); 504 } 505} 506 507/** 508 * Froala Editor - Custom buttonì refresh í¨ì 509 * @param {HTMLElement} el CSS를 ì ì©í element 510 * @param {object} position custom buttonì position ì ë³´ 511 * @param {boolean} isFirst 첫 ì¶ë ¥ì¸ì§ 512 */ 513function spectrumForFERefresh(el, position) { 514 let x = Math.round(position.x); 515 const y = Math.round(position.y); 516 const width = Math.round(position.width); 517 const height = Math.round(position.height); 518 el.css({ 519 position: 'absolute', 520 top: `${y + 50}px`, 521 left: `${x - 200}px`, 522 transform: `translate(-${width / 2}px, -${height / 2}px)`, 523 }); 524} 525 526/** 527 * paramsë¡ ë°ë element를 ëëê·¸ ê°ë¥íê² ë§ëë í¨ì 528 * @param {HTMLElement} el ëëê·¸ ê°ë¥íê² í element 529 */ 530function dragElement(el) { 531 var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; 532 if ($(`#${el.id}_header`).length) { 533 $(`#${el.id}_header`).on('mousedown', dragMouseDown); 534 } else { 535 el.onmousedown = dragMouseDown; 536 } 537 538 function dragMouseDown(e) { 539 e = e || window.event; 540 e.preventDefault(); 541 542 pos3 = e.clientX; 543 pos4 = e.clientY; 544 document.onmouseup = closeDragElement; 545 document.onmousemove = elementDrag; 546 } 547 548 function elementDrag(e) { 549 e = e || window.event; 550 e.preventDefault(); 551 552 pos1 = pos3 - e.clientX; 553 pos2 = pos4 - e.clientY; 554 pos3 = e.clientX; 555 pos4 = e.clientY; 556 557 el.style.top = (el.offsetTop - pos2) + "px"; 558 el.style.left = (el.offsetLeft - pos1) + "px"; 559 } 560 561 function closeDragElement() { 562 document.onmouseup = null; 563 document.onmousemove = null; 564 } 565 } 566 567 //ì¤íí¸ë¼ ìì 568 function spectrumDestroy() { 569 $(".sp-header .closeBtn").trigger('click'); 570 }
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.