$query_data = [
'fields'=>[
'TITLE'=>'Заявка с сайта',
'STATUS_ID'=> 'NEW',
'ASSIGNED_BY_ID' = 14
],
'params'=>['REGISTER_SONET_EVENT'=>'Y']
];
$('#add-image').click(function(e) {
e.preventDefault();
var image = wp.media({
title: 'Upload Image',
multiple: false
}).open()
.on('select', function(e){
var uploaded_image = image.state().get('selection').first();
console.log(uploaded_image);
var image_url = uploaded_image.toJSON().url;
});
});
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/balloon-block/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/balloon-block/translations/ru.js"></script>
<script>
const textarea = document.querySelector( '#editor' );
BalloonEditor.create( textarea , {
language: 'ru',
removePlugins: [ 'Table' ],
toolbar: [ 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote' ]
})
.then( editor => {
window.editor = editor;
editor.model.document.on( 'change:data', ( evt, data ) => {
console.log( data );
$('textarea#tickets-editor').html( editor.getData() );
} );
} )
.catch( error => {
console.error( 'There was a problem initializing the editor.', error );
} );
</script>
.then( editor => {...}
код добавить:.then( editor => {
window.editor = editor;
editor.model.document.on( 'change:data', ( evt, data ) => {
console.log( data );
$('textarea#tickets-editor').html( editor.getData() );
} );
} )
<html>
<head>
<meta charset="utf-8">
<title>Визуализатор</title>
<style>
#canvas{
position: absolute;
top: 50px;
left: 0px;
background: #333;
}
#progress{
position: absolute;
top: 50px;
left: 0px;
background: rgba(255, 155, 0, 0.5);
width: 0px;
height: 256px;
}
</style>
</head>
<body bgcolor=#444>
<audio id=audio src="sound.mp3" controls></audio>
<canvas id=canvas width=512 height=256></canvas>
<div id=progress></div>
<script>
var audio = document.getElementById("audio");
var ctx = canvas.getContext("2d");
var color_L = "#7cf", color_R = "#f7c"; // Цвета осциллограмм левого и правого стереоканалов
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
audio.onplay = function(){b = setInterval(function(){progress.style.width = Math.floor(audio.currentTime / audio.duration * canvas.width) + "px"}, 100)};
audio.onended = function(){
this.currentTime = 0;
clearInterval(b);
progress.style.width = "0px";
}
var source = audioCtx.createBufferSource();
var request = new XMLHttpRequest();
request.open('GET', audio.src, true);
request.responseType = 'arraybuffer';
request.onload = function(){
var audioData = request.response;
audioCtx.decodeAudioData(audioData, function(buffer){
source.buffer = buffer;
data_L = buffer.getChannelData(0);
data_R = buffer.getChannelData(1); // Если аудиофайл моно - поменяйте в этой сроке единицу на ноль.
// При несоответствии количества стереоканалов - ошибка в консоли и код не работает.
for(var i = 0; i < data_L.length; i++){
var x = Math.floor(i / data_L.length * canvas.width);
var L = data_L[i] * canvas.height / 4;
var R = data_R[i] * canvas.height / 4;
if(Math.floor(i / 16) == i / 16){ // Число 16 для больших аудиофайлов лучше побольше. Нужно подбирать.
ctx.fillStyle = color_L;
ctx.fillRect(x, canvas.height * 0.25 + L, 1, -L);
ctx.fillStyle = color_R;
ctx.fillRect(x, canvas.height * 0.75 + R, 1, -R);
}
}
},
function(e){"Error with decoding audio data" + e.err});
}
request.send();
canvas.onmousedown = progress.onmousedown = function(e){
progress.style.width = e.pageX + "px";
audio.currentTime = e.pageX / canvas.width * audio.duration;
}
canvas.ondblclick = function(){audio.play()};
ctx.fillStyle = color_L;
ctx.fillRect(0, canvas.height * 0.25, canvas.width, 1);
ctx.fillStyle = color_R;
ctx.fillRect(0, canvas.height * 0.75, canvas.width, 1);
</script>
</body>
</html>
<?php foreach ($arResult["ITEMS"] as $arItem): ?>
<?
$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
?>
<div id="<?= $this->GetEditAreaId($arItem['ID']); ?>">
</div>
<?php endforeach; ?>
name
. Посмотреть значения можно так:Object.fromEntries([...formData.entries()]);
cloneNode()
сработает только если слушатели прописаны прямо в атрибутах элемента <a onclick="alert('Habr')">click me</a>
addEventListener()
скопировать можно примерно никак.function myClickHandler(event) {
// что-то сделать по поводу клика
}
element1.addEventListener('click', myClickHandler);
element2.addEventListener('click', myClickHandler);
element3.addEventListener('click', myClickHandler);
<div id="parent">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
и слушать клики на div#parent qemu-img dd -O raw if=file.qcow2 of=file.raw
.mkdir fs ; sudo mount file.raw fs
. Если там таблица разделов, можно каким-нибудь kpartx создать устройства для каждого из разделов и примонтировать нужные:$ mkdir fs ; sudo kpartx -av file.raw
add map loop0p1 (254:4): 0 65536 linear 7:0 2048
add map loop0p2 (254:5): 0 2029568 linear 7:0 67584
$ sudo mount /dev/mapper/loop0p2 fs
/^[^()]*(\([^()]*(\([^()]*(\([^()]*\))*[^()]*\))*[^()]*\))*(?<unclosed>\([^()]*(\([^()]*(\([^()]*\))*[^()]*\))*[^()]*)*[^()]*(\([^()]*(\([^()]*(\([^()]*\))*[^()]*\))*[^()]*\))*[^()]*$/
const anySymbols = `[^()]*`
const closedRegexPattern = (depth) => {
if(depth < 1)
return anySymbols
return `\\((${anySymbols}${closedRegexPattern(depth-1)})*${anySymbols}\\)`
}
const unclosedCatcherRegexPattern = (depth) => {
const unclosedPart = `(?<unclosed>\\((${anySymbols}${closedRegexPattern(depth-1)})*${anySymbols})*`
return `^${anySymbols}${closedRegexPattern(depth)}${unclosedPart}${closedRegexPattern(depth)}${anySymbols}$`
}
console.log(unclosedCatcherRegexPattern(150))
watch('section.filter_values.param')
deep: true
. Тогда он будет рекурсивно отслеживать все свойства на любом уровне вложенности.