const { createHigherOrderComponent } = wp.compose
const { InspectorControls } = wp.editor
const { PanelBody, ToggleControl } = wp.components
const el = wp.element.createElement
// описания для состояния
const attributes = {
enableVoting: {
default: false,
type: 'boolean'
}
}
function addAttributes (settings, name) {
if (name !== 'core/gallery') {
return settings
}
Object.assign(settings.attributes, attributes)
// возвращаем тот же объект, а не клон как предлагают в некоторых источниках!!!
return settings
}
const withInspectorControls = createHigherOrderComponent((BlockEdit) => {
return (props) => {
const { attributes, setAttributes } = props
return el(wp.element.Fragment, {},
el(BlockEdit, props),
props.name === 'core/gallery' && (
el(InspectorControls, null,
el(PanelBody, null,
el(ToggleControl, {
label: 'Enable voting',
checked: attributes.enableVoting,
onChange: () => {
setAttributes({ enableVoting: !attributes.enableVoting })
}
})
)
)
)
)
}
}, 'withInspectorControl')
const addExtraData = (props, blockType, attributes) => {
if (blockType.name !== 'core/gallery') {
return props
}
let classes = props.className.split(' ')
if (attributes.enableVoting) {
!classes.includes('is-voting') && classes.push('is-voting')
} else {
classes = classes.filter(className => className !== 'is-voting')
}
props.className = classes.join(' ')
// возвращаем тот же объект, а не клон как предлагают в некоторых источниках!!!
return props
}
wp.hooks.addFilter('blocks.registerBlockType', 'godreams/gallery', addAttributes)
wp.hooks.addFilter('editor.BlockEdit', 'godreams/gallery', withInspectorControls)
wp.hooks.addFilter('blocks.getSaveContent.extraProps', 'godreams/gallery', addExtraData)
.done(function(data) {
// ...
$.fancybox(data, {
beforeShow: function () {
var $btn = // тут вы смотрите в this и там найдете свойство в виде jquery выборки в котором будет ваш контент
$btn.on('click', function () {
// ваши действия
})
}
})
// ...
})
<select id="jq-select2" name="select" multiple="multiple">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
<option value="4">D</option>
</select>
var $select = $('#jq-select2');
// Индекс сортировки
var sortIndex = 0;
var select2Instance = $select.select2({
// Явно определяем сортировку элементов в dropdown, иначе сортировка,
// которая отрабатывает в обработчике события selecting, будет
// переопределят и вывод и в dropdown. Чтоб понять о чем речь
// можно закомментить данную опцию.
sorter: function (data) {
return data.sort(function (a, b) {
if (Number(a.id) > Number(b.id)) return 1;
else if (Number(a.id) < Number(b.id)) return -1;
return 0;
});
}
}).data().select2;
// Событие когда выбрали элемен в dropdown (перед вставкой в select2)
select2Instance.on('selecting', function (e) {
// Увеличиваем индекс сортировки и привайваем ноде
// в виде нового свойства объекта (лучше в dataset запихать)
e.args.data.element.sortIndex = ++sortIndex;
// Получвем все option из select`а
var $options = $select.find('option');
// Сортируем все option`ы по индексу сортировки
$options.sort(function (a, b) {
if (~~a.sortIndex > ~~b.sortIndex) return 1;
else if (~~a.sortIndex < ~~b.sortIndex) return -1;
return 0;
});
// Очищаем select от option`ов и аппендим отсортированные
$select.empty().append($options);
});
RewriteEngine On
RewriteRule ^user/(.+)$ /profile.php?username=$1 [L] # все запросы user/* будет обрабатывать profile.php
RewriteCond %{REQUEST_FILENAME}\.php -f # если {query}.php
RewriteRule ^(.*)$ $1.php # то {query} будет обрабатывать {query}.php
Route::get('/{link}', function ($link) {
return Links::whereLink($link)->get(); # вернет объект
});
Route::get('/{link}', function ($link) {
return $link;
});
Route::get('/{link}', function ($link) {
$data = Links::where('link', '=', $link)->get(); # вернет объект
var_dump($data); # посмотреть вывод
return $data;
});
<?php
# routing.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false;
} else {
include __DIR__ . '/index.php';
}
php -S localhost:8000 routing.php