first
This commit is contained in:
21
wp-content/plugins/svg-support/js/cstm.js.multiselect.js
Normal file
21
wp-content/plugins/svg-support/js/cstm.js.multiselect.js
Normal file
@@ -0,0 +1,21 @@
|
||||
jQuery( document ).ready(function($) {
|
||||
|
||||
sanitize_svg_option_check();
|
||||
|
||||
$('#sanitize_svg_option input').change(function(){
|
||||
sanitize_svg_option_check();
|
||||
});
|
||||
|
||||
function sanitize_svg_option_check() {
|
||||
var sanitize_svg_option = $('#sanitize_svg_option input').is(':checked');
|
||||
|
||||
if(sanitize_svg_option) {
|
||||
$('#sanitize_svg_option_sction').slideDown("slow");
|
||||
}
|
||||
else {
|
||||
$('#sanitize_svg_option_sction').slideUp("slow");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
75
wp-content/plugins/svg-support/js/gutenberg-filters.js
Normal file
75
wp-content/plugins/svg-support/js/gutenberg-filters.js
Normal file
@@ -0,0 +1,75 @@
|
||||
"use strict"
|
||||
|
||||
const el = wp.element.createElement;
|
||||
const withState = wp.compose.withState;
|
||||
const withSelect = wp.data.withSelect;
|
||||
const withDispatch = wp.data.withDispatch;
|
||||
|
||||
wp.hooks.addFilter(
|
||||
'editor.PostFeaturedImage',
|
||||
'bodhi-svgs-featured-image/render-inline-image-checkbox',
|
||||
wrapPostFeaturedImage
|
||||
);
|
||||
|
||||
function wrapPostFeaturedImage( OriginalComponent ) {
|
||||
return function( props ) {
|
||||
return (
|
||||
el(
|
||||
wp.element.Fragment,
|
||||
{},
|
||||
'',
|
||||
el(
|
||||
OriginalComponent,
|
||||
props
|
||||
),
|
||||
el(
|
||||
composedCheckBox
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class CheckBoxCustom extends React.Component {
|
||||
render() {
|
||||
const {
|
||||
meta,
|
||||
updateInlineFeaturedSvg,
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
el(
|
||||
wp.components.CheckboxControl,
|
||||
{
|
||||
label: "Render this SVG inline (Advanced)",
|
||||
checked: meta.inline_featured_image,
|
||||
onChange:
|
||||
( value ) => {
|
||||
this.setState( { isChecked: value } );
|
||||
updateInlineFeaturedSvg( value, meta );
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const composedCheckBox = wp.compose.compose( [
|
||||
withState( ( value ) => { isChecked: value } ),
|
||||
withSelect( ( select ) => {
|
||||
const currentMeta = select( 'core/editor' ).getCurrentPostAttribute( 'meta' );
|
||||
const editedMeta = select( 'core/editor' ).getEditedPostAttribute( 'meta' );
|
||||
return {
|
||||
meta: { ...currentMeta, ...editedMeta },
|
||||
};
|
||||
} ),
|
||||
withDispatch( ( dispatch ) => ( {
|
||||
updateInlineFeaturedSvg( value, meta ) {
|
||||
meta = {
|
||||
...meta,
|
||||
inline_featured_image: value,
|
||||
};
|
||||
dispatch( 'core/editor' ).editPost( { meta } );
|
||||
},
|
||||
} ) ),
|
||||
] )( CheckBoxCustom );
|
643
wp-content/plugins/svg-support/js/jquery.dropdown.js
Normal file
643
wp-content/plugins/svg-support/js/jquery.dropdown.js
Normal file
@@ -0,0 +1,643 @@
|
||||
;
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
function noop() { }
|
||||
|
||||
function throttle(func, wait, options) {
|
||||
var context, args, result;
|
||||
var timeout = null;
|
||||
// 上次执行时间点
|
||||
var previous = 0;
|
||||
if (!options) options = {};
|
||||
// 延迟执行函数
|
||||
var later = function () {
|
||||
// 若设定了开始边界不执行选项,上次执行时间始终为0
|
||||
previous = options.leading === false ? 0 : new Date().getTime();
|
||||
timeout = null;
|
||||
result = func.apply(context, args);
|
||||
if (!timeout) context = args = null;
|
||||
};
|
||||
return function () {
|
||||
var now = new Date().getTime();
|
||||
// 首次执行时,如果设定了开始边界不执行选项,将上次执行时间设定为当前时间。
|
||||
if (!previous && options.leading === false) previous = now;
|
||||
// 延迟执行时间间隔
|
||||
var remaining = wait - (now - previous);
|
||||
context = this;
|
||||
args = arguments;
|
||||
// 延迟时间间隔remaining小于等于0,表示上次执行至此所间隔时间已经超过一个时间窗口
|
||||
// remaining大于时间窗口wait,表示客户端系统时间被调整过
|
||||
if (remaining <= 0 || remaining > wait) {
|
||||
clearTimeout(timeout);
|
||||
timeout = null;
|
||||
previous = now;
|
||||
result = func.apply(context, args);
|
||||
if (!timeout) context = args = null;
|
||||
//如果延迟执行不存在,且没有设定结尾边界不执行选项
|
||||
} else if (!timeout && options.trailing !== false) {
|
||||
timeout = setTimeout(later, remaining);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
var isSafari = function () {
|
||||
var ua = navigator.userAgent.toLowerCase();
|
||||
if (ua.indexOf('safari') !== -1) {
|
||||
return ua.indexOf('chrome') > -1 ? false : true;
|
||||
}
|
||||
}();
|
||||
|
||||
var settings = {
|
||||
readonly: false,
|
||||
minCount: 0,
|
||||
minCountErrorMessage: '',
|
||||
limitCount: Infinity,
|
||||
limitCountErrorMessage: '',
|
||||
input: '<input type="text" maxLength="20" placeholder="Search...">',
|
||||
data: [],
|
||||
searchable: true,
|
||||
searchNoData: '<li style="color:#ddd">No Results.</li>',
|
||||
init: noop,
|
||||
choice: noop,
|
||||
extendProps: []
|
||||
};
|
||||
|
||||
var KEY_CODE = {
|
||||
up: 38,
|
||||
down: 40,
|
||||
enter: 13
|
||||
};
|
||||
|
||||
var EVENT_SPACE = {
|
||||
click: 'click.iui-dropdown',
|
||||
focus: 'focus.iui-dropdown',
|
||||
keydown: 'keydown.iui-dropdown',
|
||||
keyup: 'keyup.iui-dropdown'
|
||||
};
|
||||
|
||||
var ALERT_TIMEOUT_PERIOD = 1000;
|
||||
|
||||
// 创建模板
|
||||
function createTemplate() {
|
||||
var isLabelMode = this.isLabelMode;
|
||||
var searchable = this.config.searchable;
|
||||
var templateSearch = searchable ? '<span class="dropdown-search">' + this.config.input + '</span>' : '';
|
||||
|
||||
return isLabelMode ? '<div class="dropdown-display-label"><div class="dropdown-chose-list">' + templateSearch + '</div></div><div class="dropdown-main">{{ul}}</div>' : '<a href="javascript:;" class="dropdown-display" tabindex="0"><span class="dropdown-chose-list"></span><a href="javascript:;" class="dropdown-clear-all" tabindex="0">\xD7</a></a><div class="dropdown-main">' + templateSearch + '{{ul}}</div>';
|
||||
}
|
||||
|
||||
// 小于minCount提示的元素
|
||||
function minItemsAlert() {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $el = _dropdown.$el;
|
||||
var $alert = $el.find('.dropdown-minItem-alert');
|
||||
var alertMessage = _config.minCountErrorMessage;
|
||||
clearTimeout(_dropdown.itemCountAlertTimer);
|
||||
|
||||
if ($alert.length === 0) {
|
||||
if (!alertMessage) {
|
||||
alertMessage = '\u6700\u4f4e\u9009\u62e9' + _config.minCount + '\u4E2A';
|
||||
}
|
||||
$alert = $('<div class="dropdown-minItem-alert">' + alertMessage + '</div>');
|
||||
}
|
||||
|
||||
$el.append($alert);
|
||||
_dropdown.itemCountAlertTimer = setTimeout(function () {
|
||||
$el.find('.dropdown-minItem-alert').remove();
|
||||
}, ALERT_TIMEOUT_PERIOD);
|
||||
}
|
||||
|
||||
// 超出限制提示
|
||||
function maxItemAlert() {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $el = _dropdown.$el;
|
||||
var $alert = $el.find('.dropdown-maxItem-alert');
|
||||
var alertMessage = _config.limitCountErrorMessage;
|
||||
clearTimeout(_dropdown.itemLimitAlertTimer);
|
||||
|
||||
if ($alert.length === 0) {
|
||||
if (!alertMessage) {
|
||||
alertMessage = '\u6700\u591A\u53EF\u9009\u62E9' + _config.limitCount + '\u4E2A';
|
||||
}
|
||||
$alert = $('<div class="dropdown-maxItem-alert">' + alertMessage + '</div>');
|
||||
}
|
||||
|
||||
$el.append($alert);
|
||||
_dropdown.itemLimitAlertTimer = setTimeout(function () {
|
||||
$el.find('.dropdown-maxItem-alert').remove();
|
||||
}, ALERT_TIMEOUT_PERIOD);
|
||||
}
|
||||
|
||||
// select-option 转 ul-li
|
||||
function selectToDiv(str) {
|
||||
var result = str || '';
|
||||
// 移除select标签
|
||||
result = result.replace(/<select[^>]*>/gi, '').replace('</select>', '');
|
||||
// 移除 optgroup 结束标签
|
||||
result = result.replace(/<\/optgroup>/gi, '');
|
||||
result = result.replace(/<optgroup[^>]*>/gi, function (matcher) {
|
||||
var groupName = /label="(.[^"]*)"(\s|>)/.exec(matcher);
|
||||
var groupId = /data\-group\-id="(.[^"]*)"(\s|>)/.exec(matcher);
|
||||
return '<li class="dropdown-group" data-group-id="' + (groupId ? groupId[1] : '') + '">' + (groupName ? groupName[1] : '') + '</li>';
|
||||
});
|
||||
result = result.replace(/<option(.*?)<\/option>/gi, function (matcher) {
|
||||
// var value = /value="?([\w\u4E00-\u9FA5\uF900-\uFA2D]+)"?/.exec(matcher);
|
||||
var value = $(matcher).val();
|
||||
var name = />(.*)<\//.exec(matcher);
|
||||
// 强制要求html中使用selected/disabled,而不是selected="selected","disabled="disabled"
|
||||
var isSelected = matcher.indexOf('selected') > -1 ? true : false;
|
||||
var isDisabled = matcher.indexOf('disabled') > -1 ? true : false;
|
||||
var extendAttr = ''
|
||||
var extendProps = matcher.replace(/data-(\w+)="?(.[^"]+)"?/g, function ($1) {
|
||||
extendAttr += $1 + ' '
|
||||
});
|
||||
return '<li ' + (isDisabled ? ' disabled' : ' tabindex="0"') + ' data-value="' + (value || '') + '" class="dropdown-option ' + (isSelected ? 'dropdown-chose' : '') + '" ' + extendAttr + '>' + (name ? name[1] : '') + '</li>';
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// object-data 转 select-option
|
||||
function objectToSelect(data) {
|
||||
var dropdown = this;
|
||||
var map = {};
|
||||
var result = '';
|
||||
var name = [];
|
||||
var selectAmount = 0;
|
||||
var extendProps = dropdown.config.extendProps;
|
||||
|
||||
if (!data || !data.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$.each(data, function (index, val) {
|
||||
// disable 权重高于 selected
|
||||
var hasGroup = val.groupId;
|
||||
var isDisabled = val.disabled ? ' disabled' : '';
|
||||
var isSelected = val.selected && !isDisabled ? ' selected' : '';
|
||||
var extendAttr = ''
|
||||
$.each(extendProps, function (index, value) {
|
||||
if (val[value]) {
|
||||
extendAttr += 'data-' + value + '="' + val[value] + '" '
|
||||
}
|
||||
})
|
||||
var temp = '<option' + isDisabled + isSelected + ' value="' + val.id + '" ' + extendAttr + '>' + val.name + '</option>';
|
||||
if (isSelected) {
|
||||
name.push('<span class="dropdown-selected">' + val.name + '<i class="del" data-id="' + val.id + '"></i></span>');
|
||||
selectAmount++;
|
||||
}
|
||||
// 判断是否有分组
|
||||
if (hasGroup) {
|
||||
if (map[val.groupId]) {
|
||||
map[val.groupId] += temp;
|
||||
} else {
|
||||
// &janking& just a separator
|
||||
map[val.groupId] = val.groupName + '&janking&' + temp;
|
||||
}
|
||||
} else {
|
||||
map[index] = temp;
|
||||
}
|
||||
});
|
||||
|
||||
$.each(map, function (index, val) {
|
||||
var option = val.split('&janking&');
|
||||
// 判断是否有分组
|
||||
if (option.length === 2) {
|
||||
var groupName = option[0];
|
||||
var items = option[1];
|
||||
result += '<optgroup label="' + groupName + '" data-group-id="' + index + '">' + items + '</optgroup>';
|
||||
} else {
|
||||
result += val;
|
||||
}
|
||||
});
|
||||
|
||||
return [result, name, selectAmount];
|
||||
}
|
||||
|
||||
// select-option 转 object-data
|
||||
//
|
||||
function selectToObject(el) {
|
||||
var $select = el;
|
||||
var result = [];
|
||||
|
||||
function readOption(key, el) {
|
||||
var $option = $(el);
|
||||
this.id = $option.prop('value');
|
||||
this.name = $option.text();
|
||||
this.disabled = $option.prop('disabled');
|
||||
this.selected = $option.prop('selected');
|
||||
}
|
||||
|
||||
$.each($select.children(), function (key, el) {
|
||||
var tmp = {};
|
||||
var tmpGroup = {};
|
||||
var $el = $(el);
|
||||
if (el.nodeName === 'OPTGROUP') {
|
||||
tmpGroup.groupId = $el.data('groupId');
|
||||
tmpGroup.groupName = $el.attr('label');
|
||||
$.each($el.children(), $.proxy(readOption, tmp));
|
||||
$.extend(tmp, tmpGroup);
|
||||
} else {
|
||||
$.each($el, $.proxy(readOption, tmp));
|
||||
}
|
||||
result.push(tmp);
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
var action = {
|
||||
show: function (event) {
|
||||
event.stopPropagation();
|
||||
var _dropdown = this;
|
||||
$(document).trigger('click.dropdown');
|
||||
_dropdown.$el.addClass('active');
|
||||
},
|
||||
search: throttle(function (event) {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $el = _dropdown.$el;
|
||||
var $input = $(event.target);
|
||||
var intputValue = $input.val();
|
||||
var data = _dropdown.config.data;
|
||||
var result = [];
|
||||
if (event.keyCode > 36 && event.keyCode < 41) {
|
||||
return;
|
||||
}
|
||||
$.each(data, function (key, value) {
|
||||
if ((value.groupName && value.groupName.toLowerCase().indexOf(intputValue.toLowerCase()) > -1) || value.name.toLowerCase().indexOf(intputValue.toLowerCase()) > -1 || '' + value.id === '' + intputValue) {
|
||||
result.push(value);
|
||||
}
|
||||
});
|
||||
$el.find('ul').html(selectToDiv(objectToSelect.call(_dropdown, result)[0]) || _config.searchNoData);
|
||||
}, 300),
|
||||
control: function (event) {
|
||||
var keyCode = event.keyCode;
|
||||
var KC = KEY_CODE;
|
||||
var index = 0;
|
||||
var direct;
|
||||
var itemIndex;
|
||||
var $items;
|
||||
if (keyCode === KC.down || keyCode === KC.up) {
|
||||
// 方向
|
||||
direct = keyCode === KC.up ? -1 : 1;
|
||||
$items = this.$el.find('[tabindex]');
|
||||
itemIndex = $items.index($(document.activeElement));
|
||||
// 初始
|
||||
if (itemIndex === -1) {
|
||||
index = direct + 1 ? -1 : 0;
|
||||
} else {
|
||||
index = itemIndex;
|
||||
}
|
||||
// 确认位序
|
||||
index = index + direct;
|
||||
// 最后位循环
|
||||
if (index === $items.length) {
|
||||
index = 0;
|
||||
}
|
||||
$items.eq(index).focus();
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
multiChoose: function (event, status) {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $select = _dropdown.$select;
|
||||
var $target = $(event.target);
|
||||
var value = $target.attr('data-value');
|
||||
var hasSelected = $target.hasClass('dropdown-chose');
|
||||
var selectedName = [];
|
||||
var selectedProp;
|
||||
|
||||
if ($target.hasClass('dropdown-display')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasSelected) {
|
||||
$target.removeClass('dropdown-chose');
|
||||
_dropdown.selectAmount--;
|
||||
} else {
|
||||
if (_dropdown.selectAmount < _config.limitCount) {
|
||||
$target.addClass('dropdown-chose');
|
||||
_dropdown.selectAmount++;
|
||||
} else {
|
||||
maxItemAlert.call(_dropdown);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
_dropdown.name = [];
|
||||
|
||||
$.each(_config.data, function (key, item) {
|
||||
if ('' + item.id === '' + value) {
|
||||
selectedProp = item;
|
||||
item.selected = hasSelected ? false : true;
|
||||
}
|
||||
if (item.selected) {
|
||||
selectedName.push(item.name);
|
||||
_dropdown.name.push('<span class="dropdown-selected">' + item.name + '<i class="del" data-id="' + item.id + '"></i></span>');
|
||||
}
|
||||
});
|
||||
|
||||
$select.find('option[value="' + value + '"]').prop('selected', hasSelected ? false : true);
|
||||
|
||||
if (hasSelected && _dropdown.selectAmount < _config.minCount) {
|
||||
minItemsAlert.call(_dropdown);
|
||||
}
|
||||
|
||||
_dropdown.$choseList.find('.dropdown-selected').remove();
|
||||
_dropdown.$choseList.prepend(_dropdown.name.join(''));
|
||||
_dropdown.$el.find('.dropdown-display').attr('title', selectedName.join(','));
|
||||
_config.choice.call(_dropdown, event, selectedProp);
|
||||
},
|
||||
singleChoose: function (event) {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $el = _dropdown.$el;
|
||||
var $select = _dropdown.$select;
|
||||
var $target = $(event.target);
|
||||
var value = $target.attr('data-value');
|
||||
var hasSelected = $target.hasClass('dropdown-chose');
|
||||
|
||||
if ($target.hasClass('dropdown-chose') || $target.hasClass('dropdown-display')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
_dropdown.name = [];
|
||||
|
||||
|
||||
$el.removeClass('active').find('li').not($target).removeClass('dropdown-chose');
|
||||
|
||||
$target.toggleClass('dropdown-chose');
|
||||
$.each(_config.data, function (key, item) {
|
||||
// id 有可能是数字也有可能是字符串,强制全等有弊端 2017-03-20 22:19:21
|
||||
item.selected = false;
|
||||
if ('' + item.id === '' + value) {
|
||||
item.selected = hasSelected ? 0 : 1;
|
||||
if (item.selected) {
|
||||
_dropdown.name.push('<span class="dropdown-selected">' + item.name + '<i class="del" data-id="' + item.id + '"></i></span>');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$select.find('option[value="' + value + '"]').prop('selected', true);
|
||||
|
||||
_dropdown.name.push('<span class="placeholder">' + _dropdown.placeholder + '</span>');
|
||||
_dropdown.$choseList.html(_dropdown.name.join(''));
|
||||
_config.choice.call(_dropdown, event);
|
||||
},
|
||||
del: function (event) {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
var $target = $(event.target);
|
||||
var id = $target.data('id');
|
||||
// 2017-03-23 15:58:50 测试
|
||||
// 10000条数据测试删除,耗时 ~3ms
|
||||
$.each(_dropdown.name, function (key, value) {
|
||||
if (value.indexOf('data-id="' + id + '"') !== -1) {
|
||||
_dropdown.name.splice(key, 1);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
$.each(_dropdown.config.data, function (key, item) {
|
||||
if ('' + item.id == '' + id) {
|
||||
item.selected = false;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
_dropdown.selectAmount--;
|
||||
_dropdown.$el.find('[data-value="' + id + '"]').removeClass('dropdown-chose');
|
||||
_dropdown.$el.find('[value="' + id + '"]').prop('selected', false).removeAttr('selected');
|
||||
$target.closest('.dropdown-selected').remove();
|
||||
_config.choice.call(_dropdown, event);
|
||||
|
||||
return false;
|
||||
},
|
||||
clearAll: function (event) {
|
||||
var _dropdown = this;
|
||||
var _config = _dropdown.config;
|
||||
event && event.preventDefault();
|
||||
console.log(this)
|
||||
this.$choseList.find('.del').each(function (index, el) {
|
||||
$(el).trigger('click');
|
||||
});
|
||||
|
||||
if (_config.minCount > 0) {
|
||||
minItemsAlert.call(_dropdown);
|
||||
}
|
||||
|
||||
this.$el.find('.dropdown-display').removeAttr('title');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
function Dropdown(options, el) {
|
||||
this.$el = $(el);
|
||||
this.$select = this.$el.find('select');
|
||||
this.placeholder = this.$select.attr('placeholder');
|
||||
this.config = options;
|
||||
this.name = [];
|
||||
this.isSingleSelect = !this.$select.prop('multiple');
|
||||
this.selectAmount = 0;
|
||||
this.itemLimitAlertTimer = null;
|
||||
this.isLabelMode = this.config.multipleMode === 'label';
|
||||
this.init();
|
||||
}
|
||||
|
||||
Dropdown.prototype = {
|
||||
init: function () {
|
||||
var _this = this;
|
||||
var _config = _this.config;
|
||||
var $el = _this.$el;
|
||||
_this.$select.hide();
|
||||
// 判断dropdown是否单选,是否token模式
|
||||
$el.addClass(_this.isSingleSelect ? 'dropdown-single' : _this.isLabelMode ? 'dropdown-multiple-label' : 'dropdown-multiple');
|
||||
|
||||
if (_config.data.length === 0) {
|
||||
_config.data = selectToObject(_this.$select);
|
||||
}
|
||||
|
||||
var processResult = objectToSelect.call(_this, _config.data);
|
||||
|
||||
_this.name = processResult[1];
|
||||
_this.selectAmount = processResult[2];
|
||||
_this.$select.html(processResult[0]);
|
||||
_this.renderSelect();
|
||||
// disabled权重高于readonly
|
||||
_this.changeStatus(_config.disabled ? 'disabled' : _config.readonly ? 'readonly' : false);
|
||||
|
||||
_this.config.init();
|
||||
},
|
||||
// 渲染 select 为 dropdown
|
||||
renderSelect: function (isUpdate, isCover) {
|
||||
var _this = this;
|
||||
var $el = _this.$el;
|
||||
var $select = _this.$select;
|
||||
var elemLi = selectToDiv($select.prop('outerHTML'));
|
||||
var template;
|
||||
|
||||
if (isUpdate) {
|
||||
$el.find('ul')[isCover ? 'html' : 'append'](elemLi);
|
||||
} else {
|
||||
template = createTemplate.call(_this).replace('{{ul}}', '<ul>' + elemLi + '</ul>');
|
||||
$el.append(template).find('ul').removeAttr('style class');
|
||||
}
|
||||
|
||||
if (isCover) {
|
||||
_this.name = [];
|
||||
_this.$el.find('.dropdown-selected').remove();
|
||||
_this.$select.val('');
|
||||
}
|
||||
|
||||
_this.$choseList = $el.find('.dropdown-chose-list');
|
||||
|
||||
if (!_this.isLabelMode) {
|
||||
_this.$choseList.html($('<span class="placeholder"></span>').text(_this.placeholder));
|
||||
}
|
||||
|
||||
_this.$choseList.prepend(_this.name ? _this.name.join('') : []);
|
||||
},
|
||||
bindEvent: function () {
|
||||
var _this = this;
|
||||
var $el = _this.$el;
|
||||
var openHandle = isSafari ? EVENT_SPACE.click : EVENT_SPACE.focus;
|
||||
|
||||
$el.on(EVENT_SPACE.click, function (event) {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
$el.on(EVENT_SPACE.click, '.del', $.proxy(action.del, _this));
|
||||
|
||||
// show
|
||||
if (_this.isLabelMode) {
|
||||
$el.on(EVENT_SPACE.click, '.dropdown-display-label', function () {
|
||||
$el.find('input').focus();
|
||||
});
|
||||
if (_this.config.searchable) {
|
||||
$el.on(EVENT_SPACE.focus, 'input', $.proxy(action.show, _this));
|
||||
} else {
|
||||
$el.on(EVENT_SPACE.click, $.proxy(action.show, _this));
|
||||
}
|
||||
$el.on(EVENT_SPACE.keydown, 'input', function (event) {
|
||||
if (event.keyCode === 8 && this.value === '' && _this.name.length) {
|
||||
$el.find('.del').eq(-1).trigger('click');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$el.on(openHandle, '.dropdown-display', $.proxy(action.show, _this));
|
||||
$el.on(openHandle, '.dropdown-clear-all', $.proxy(action.clearAll, _this));
|
||||
}
|
||||
|
||||
// 搜索
|
||||
$el.on(EVENT_SPACE.keyup, 'input', $.proxy(action.search, _this));
|
||||
|
||||
// 按下enter键设置token
|
||||
$el.on(EVENT_SPACE.keyup, function (event) {
|
||||
var keyCode = event.keyCode;
|
||||
var KC = KEY_CODE;
|
||||
if (keyCode === KC.enter) {
|
||||
$.proxy(_this.isSingleSelect ? action.singleChoose : action.multiChoose, _this, event)();
|
||||
}
|
||||
});
|
||||
|
||||
// 按下上下键切换token
|
||||
$el.on(EVENT_SPACE.keydown, $.proxy(action.control, _this));
|
||||
|
||||
$el.on(EVENT_SPACE.click, 'li[tabindex]', $.proxy(_this.isSingleSelect ? action.singleChoose : action.multiChoose, _this));
|
||||
},
|
||||
unbindEvent: function () {
|
||||
var _this = this;
|
||||
var $el = _this.$el;
|
||||
var openHandle = isSafari ? EVENT_SPACE.click : EVENT_SPACE.focus;
|
||||
|
||||
$el.off(EVENT_SPACE.click);
|
||||
$el.off(EVENT_SPACE.click, '.del');
|
||||
|
||||
// show
|
||||
if (_this.isLabelMode) {
|
||||
$el.off(EVENT_SPACE.click, '.dropdown-display-label');
|
||||
$el.off(EVENT_SPACE.focus, 'input');
|
||||
$el.off(EVENT_SPACE.keydown, 'input');
|
||||
} else {
|
||||
$el.off(openHandle, '.dropdown-display');
|
||||
$el.off(openHandle, '.dropdown-clear-all');
|
||||
}
|
||||
// 搜索
|
||||
$el.off(EVENT_SPACE.keyup, 'input');
|
||||
// 按下enter键设置token
|
||||
$el.off(EVENT_SPACE.keyup);
|
||||
// 按下上下键切换token
|
||||
$el.off(EVENT_SPACE.keydown);
|
||||
$el.off(EVENT_SPACE.click, '[tabindex]');
|
||||
},
|
||||
changeStatus: function (status) {
|
||||
var _this = this;
|
||||
if (status === 'readonly') {
|
||||
_this.unbindEvent();
|
||||
} else if (status === 'disabled') {
|
||||
_this.$select.prop('disabled', true);
|
||||
_this.unbindEvent();
|
||||
} else {
|
||||
_this.$select.prop('disabled', false);
|
||||
_this.bindEvent();
|
||||
}
|
||||
},
|
||||
update: function (data, isCover) {
|
||||
var _this = this;
|
||||
var _config = _this.config;
|
||||
var $el = _this.$el;
|
||||
var _isCover = isCover || false;
|
||||
|
||||
if (Object.prototype.toString.call(data) !== '[object Array]') {
|
||||
return;
|
||||
}
|
||||
|
||||
_config.data = _isCover ? data.slice(0) : _config.data.concat(data);
|
||||
|
||||
var processResult = objectToSelect.call(_this, _config.data);
|
||||
|
||||
_this.name = processResult[1];
|
||||
_this.selectAmount = processResult[2];
|
||||
_this.$select.html(processResult[0]);
|
||||
_this.renderSelect(true, _isCover);
|
||||
},
|
||||
destroy: function () {
|
||||
this.unbindEvent();
|
||||
this.$el.children().not('select').remove();
|
||||
this.$el.removeClass('dropdown-single dropdown-multiple-label dropdown-multiple');
|
||||
this.$select.show();
|
||||
},
|
||||
choose: function (values, status) {
|
||||
var valArr = Object.prototype.toString.call(values) === '[object Array]' ? values : [values];
|
||||
var _this = this;
|
||||
var _status = status !== void 0 ? !!status : true
|
||||
$.each(valArr, function (index, value) {
|
||||
var $target = _this.$el.find('[data-value="' + value + '"]');
|
||||
var targetStatus = $target.hasClass('dropdown-chose');
|
||||
if (targetStatus !== _status) {
|
||||
$target.trigger(EVENT_SPACE.click, status || true)
|
||||
}
|
||||
});
|
||||
},
|
||||
reset: function () {
|
||||
action.clearAll.call(this)
|
||||
}
|
||||
};
|
||||
|
||||
$(document).on('click.dropdown', function () {
|
||||
$('.dropdown-single,.dropdown-multiple,.dropdown-multiple-label').removeClass('active');
|
||||
});
|
||||
|
||||
$.fn.dropdown = function (options) {
|
||||
this.each(function (index, el) {
|
||||
$(el).data('dropdown', new Dropdown($.extend(true, {}, settings, options), el));
|
||||
});
|
||||
return this;
|
||||
}
|
||||
})(jQuery);
|
1
wp-content/plugins/svg-support/js/min/cstm.js.multiselect-min.js
vendored
Normal file
1
wp-content/plugins/svg-support/js/min/cstm.js.multiselect-min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(document).ready((function($){function i(){var i;$("#sanitize_svg_option input").is(":checked")?$("#sanitize_svg_option_sction").slideDown("slow"):$("#sanitize_svg_option_sction").slideUp("slow")}i(),$("#sanitize_svg_option input").change((function(){i()}))}));
|
1
wp-content/plugins/svg-support/js/min/gutenberg-filters-min.js
vendored
Normal file
1
wp-content/plugins/svg-support/js/min/gutenberg-filters-min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";function wrapPostFeaturedImage(e){return function(t){return el(wp.element.Fragment,{},"",el(e,t),el(composedCheckBox))}}const el=wp.element.createElement,withState=wp.compose.withState,withSelect=wp.data.withSelect,withDispatch=wp.data.withDispatch;wp.hooks.addFilter("editor.PostFeaturedImage","bodhi-svgs-featured-image/render-inline-image-checkbox",wrapPostFeaturedImage);class CheckBoxCustom extends React.Component{render(){const{meta:e,updateInlineFeaturedSvg:t}=this.props;return el(wp.components.CheckboxControl,{label:"Render this SVG inline (Advanced)",checked:e.inline_featured_image,onChange:o=>{this.setState({isChecked:o}),t(o,e)}})}}const composedCheckBox=wp.compose.compose([withState((e=>{})),withSelect((e=>{const t=undefined,o=undefined;return{meta:{...e("core/editor").getCurrentPostAttribute("meta"),...e("core/editor").getEditedPostAttribute("meta")}}})),withDispatch((e=>({updateInlineFeaturedSvg(t,o){o={...o,inline_featured_image:t},e("core/editor").editPost({meta:o})}})))])(CheckBoxCustom);
|
1
wp-content/plugins/svg-support/js/min/jquery.dropdown-min.js
vendored
Normal file
1
wp-content/plugins/svg-support/js/min/jquery.dropdown-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
wp-content/plugins/svg-support/js/min/svgs-inline-min.js
vendored
Normal file
1
wp-content/plugins/svg-support/js/min/svgs-inline-min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(document).ready((function($){function t(t){var e=t.attr("id"),i=t.attr("class"),s=t.attr("src");s.endsWith("svg")&&$.get(s,(function(s){var n=$(s).find("svg"),a=n.attr("id");void 0===e?void 0===a?(e="svg-replaced-"+r,n=n.attr("id",e)):e=a:n=n.attr("id",e),void 0!==i&&(n=n.attr("class",i+" replaced-svg svg-replaced-"+r)),n=n.removeAttr("xmlns:a"),"on"==frontSanitizationEnabled&&""!=n[0].outerHTML&&(n=DOMPurify.sanitize(n[0].outerHTML)),t.replaceWith(n),$(document).trigger("svg.loaded",[e]),r++}),"xml")}let r=0;(bodhisvgsInlineSupport=function(){if("true"===ForceInlineSVGActive&&jQuery("img").each((function(){void 0!==jQuery(this).attr("src")&&!1!==jQuery(this).attr("src")&&jQuery(this).attr("src").match(/\.(svg)/)&&(jQuery(this).hasClass(cssTarget.ForceInlineSVG)||jQuery(this).addClass(cssTarget.ForceInlineSVG))})),String.prototype.endsWith||(String.prototype.endsWith=function(t,r){var e=this.toString();("number"!=typeof r||!isFinite(r)||Math.floor(r)!==r||r>e.length)&&(r=e.length),r-=t.length;var i=e.lastIndexOf(t,r);return-1!==i&&i===r}),String.prototype.endsWith=function(t){var r=this.length-t.length;return r>=0&&this.lastIndexOf(t)===r},"true"===ForceInlineSVGActive)var r="img."!==cssTarget.Bodhi?cssTarget.Bodhi:".style-svg";else var r="img."!==cssTarget?cssTarget:".style-svg";r=r.replace("img",""),$(r).each((function(r){void 0!==$(this).attr("src")&&!1!==$(this).attr("src")?t($(this)):$(this).find("img").each((function(r){void 0!==$(this).attr("src")&&!1!==$(this).attr("src")&&t($(this))}))}))})()}));
|
1
wp-content/plugins/svg-support/js/min/svgs-inline-vanilla-min.js
vendored
Normal file
1
wp-content/plugins/svg-support/js/min/svgs-inline-vanilla-min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
document.addEventListener("DOMContentLoaded",(function(e){function t(e){if("IMG"===e.nodeName){var t=e.id,n=e.classList,i=e.src;if(i.endsWith("svg")){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(4==r.readyState&&200==r.status){let o;data=r.responseText;const d=undefined;var i,a=(i=(new DOMParser).parseFromString(data,"text/html").getElementsByTagName("svg")[0]).id;if(void 0===t?void 0===a?(t="svg-replaced-"+s,i.setAttribute("id",t)):t=a:i.setAttribute("id",t),void 0!==n&&i.setAttribute("class",n+" replaced-svg svg-replaced-"+s),i.removeAttribute("xmlns:a"),"on"==frontSanitizationEnabled&&""!=i.outerHTML){var i=DOMPurify.sanitize(i.outerHTML);e.outerHTML=i}else e.replaceWith(i);s++}},r.open("GET",i,!1),r.send(null)}}}function n(e){if(e.childNodes.length>0)for(var s=0;s<e.childNodes.length;s++){var i;if("IMG"==e.childNodes[s].nodeName)t(e.childNodes[s]);else n(e.childNodes[s])}}let s=0;(bodhisvgsInlineSupport=function(){if("true"===ForceInlineSVGActive)for(var e=document.getElementsByTagName("img"),s=0;s<e.length;s++)void 0!==e[s].src&&e[s].src.match(/\.(svg)/)&&(e[s].classList.contains(cssTarget.ForceInlineSVG)||e[s].classList.add(cssTarget.ForceInlineSVG));if(String.prototype.endsWith||(String.prototype.endsWith=function(e,t){var n=this.toString();("number"!=typeof t||!isFinite(t)||Math.floor(t)!==t||t>n.length)&&(t=n.length),t-=e.length;var s=n.lastIndexOf(e,t);return-1!==s&&s===t}),String.prototype.endsWith=function(e){var t=this.length-e.length;return t>=0&&this.lastIndexOf(e)===t},"true"===ForceInlineSVGActive)var i="img."!==cssTarget.Bodhi?cssTarget.ForceInlineSVG:"style-svg";else var i="img."!==cssTarget?cssTarget:"style-svg";i=i.replace("img.","");for(var e=document.getElementsByClassName(i),s=0;s<e.length;s++){var r;if(void 0===e[s].src)n(e[s]);else t(e[s])}})()}));
|
184
wp-content/plugins/svg-support/js/svgs-inline-vanilla.js
Normal file
184
wp-content/plugins/svg-support/js/svgs-inline-vanilla.js
Normal file
@@ -0,0 +1,184 @@
|
||||
// wait for document to be ready
|
||||
document.addEventListener("DOMContentLoaded", function(event) {
|
||||
|
||||
let bodhisvgsReplacements = 0;
|
||||
|
||||
function bodhisvgsReplace(img) {
|
||||
|
||||
// must be an image
|
||||
if( img.nodeName !== 'IMG' ){
|
||||
return;
|
||||
}
|
||||
|
||||
var imgID = img.id;
|
||||
var imgClass = img.classList;
|
||||
var imgURL = img.src;
|
||||
|
||||
// must be svg
|
||||
if( !imgURL.endsWith('svg') ){
|
||||
return;
|
||||
}
|
||||
|
||||
var xmlHttp = new XMLHttpRequest();
|
||||
xmlHttp.onreadystatechange = function() {
|
||||
|
||||
if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
|
||||
|
||||
data = xmlHttp.responseText;
|
||||
|
||||
let parser = new DOMParser();
|
||||
const doc = parser.parseFromString(data, 'text/html');
|
||||
|
||||
// get svg now
|
||||
var svg = doc.getElementsByTagName('svg')[0];
|
||||
|
||||
var svgID = svg.id;
|
||||
|
||||
// Add replaced image's ID to the new SVG if necessary
|
||||
if( typeof imgID === 'undefined' ){
|
||||
if( typeof svgID === 'undefined' ) {
|
||||
imgID = 'svg-replaced-'+bodhisvgsReplacements;
|
||||
svg.setAttribute('id', imgID);
|
||||
} else {
|
||||
imgID = svgID;
|
||||
}
|
||||
} else {
|
||||
svg.setAttribute('id', imgID);
|
||||
}
|
||||
|
||||
// Add replaced image's classes to the new SVG
|
||||
if(typeof imgClass !== 'undefined') {
|
||||
svg.setAttribute('class', imgClass+' replaced-svg svg-replaced-'+bodhisvgsReplacements);
|
||||
}
|
||||
|
||||
// Remove any invalid XML tags as per http://validator.w3.org
|
||||
svg.removeAttribute('xmlns:a');
|
||||
|
||||
if(frontSanitizationEnabled == 'on' && svg["outerHTML"] != "") { // Is sanitization enabled?
|
||||
var svg = DOMPurify.sanitize(svg.outerHTML); // Sanitize SVG code via DOMPurify library
|
||||
img.outerHTML = svg; // Replacing img tag with new SVG sanitized content
|
||||
}
|
||||
else {
|
||||
// Replace image with new SVG
|
||||
img.replaceWith(svg);
|
||||
}
|
||||
|
||||
bodhisvgsReplacements++;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
xmlHttp.open("GET", imgURL, false);
|
||||
xmlHttp.send(null);
|
||||
|
||||
}
|
||||
|
||||
function bodhisvgsIterator(node) {
|
||||
|
||||
if( node.childNodes.length > 0 ){
|
||||
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
|
||||
if( node.childNodes[i].nodeName == 'IMG' ){
|
||||
|
||||
// its an image... replace it too
|
||||
var img = node.childNodes[i];
|
||||
bodhisvgsReplace(img);
|
||||
|
||||
}else{
|
||||
|
||||
// go to another level
|
||||
bodhisvgsIterator(node.childNodes[i]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Wrap in IIFE so that it can be called again later as bodhisvgsInlineSupport();
|
||||
(bodhisvgsInlineSupport = function() {
|
||||
|
||||
// If force inline SVG option is active then add class
|
||||
if ( ForceInlineSVGActive === 'true' ) {
|
||||
|
||||
var allImages = document.getElementsByTagName('img'); // find all images on page
|
||||
|
||||
// loop on images
|
||||
for(var i = 0; i < allImages.length ; i++) {
|
||||
|
||||
if( typeof allImages[i].src !== 'undefined' ){
|
||||
|
||||
// check if it has svg
|
||||
if( allImages[i].src.match(/\.(svg)/) ){
|
||||
|
||||
// add our class - if not already added
|
||||
if( !allImages[i].classList.contains(cssTarget.ForceInlineSVG) ){
|
||||
|
||||
// add class now
|
||||
allImages[i].classList.add(cssTarget.ForceInlineSVG);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Polyfill to support all ye old browsers
|
||||
// delete when not needed in the future
|
||||
if (!String.prototype.endsWith) {
|
||||
String.prototype.endsWith = function(searchString, position) {
|
||||
var subjectString = this.toString();
|
||||
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
|
||||
position = subjectString.length;
|
||||
}
|
||||
position -= searchString.length;
|
||||
var lastIndex = subjectString.lastIndexOf(searchString, position);
|
||||
return lastIndex !== -1 && lastIndex === position;
|
||||
};
|
||||
} // end polyfill
|
||||
|
||||
// Another snippet to support IE11
|
||||
String.prototype.endsWith = function(pattern) {
|
||||
var d = this.length - pattern.length;
|
||||
return d >= 0 && this.lastIndexOf(pattern) === d;
|
||||
};
|
||||
// End snippet to support IE11
|
||||
|
||||
// Check to see if user set alternate class
|
||||
if ( ForceInlineSVGActive === 'true' ) {
|
||||
var target = ( cssTarget.Bodhi !== 'img.' ? cssTarget.ForceInlineSVG : 'style-svg' );
|
||||
} else {
|
||||
var target = ( cssTarget !== 'img.' ? cssTarget : 'style-svg' );
|
||||
}
|
||||
|
||||
// remove .img from class
|
||||
target = target.replace("img.","");
|
||||
|
||||
var allImages = document.getElementsByClassName(target); // find all images with force svg class
|
||||
|
||||
for(var i = 0; i < allImages.length ; i++) {
|
||||
|
||||
if( typeof allImages[i].src == 'undefined' ){ // not an image
|
||||
|
||||
bodhisvgsIterator(allImages[i]);
|
||||
|
||||
}else{
|
||||
|
||||
var img = allImages[i];
|
||||
bodhisvgsReplace(img);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})(); // Execute immediately
|
||||
|
||||
});
|
142
wp-content/plugins/svg-support/js/svgs-inline.js
Normal file
142
wp-content/plugins/svg-support/js/svgs-inline.js
Normal file
@@ -0,0 +1,142 @@
|
||||
jQuery(document).ready(function ($) {
|
||||
|
||||
let bodhisvgsReplacements = 0;
|
||||
|
||||
function bodhisvgsReplace(img) {
|
||||
|
||||
var imgID = img.attr('id');
|
||||
var imgClass = img.attr('class');
|
||||
var imgURL = img.attr('src');
|
||||
|
||||
// Set svg size to the original img size
|
||||
// var imgWidth = $img.attr('width');
|
||||
// var imgHeight = $img.attr('height');
|
||||
|
||||
if (!imgURL.endsWith('svg')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.get(imgURL, function(data) {
|
||||
|
||||
// Get the SVG tag, ignore the rest
|
||||
var $svg = $(data).find('svg');
|
||||
|
||||
var svgID = $svg.attr('id');
|
||||
|
||||
// Add replaced image's ID to the new SVG if necessary
|
||||
if(typeof imgID === 'undefined') {
|
||||
if(typeof svgID === 'undefined') {
|
||||
imgID = 'svg-replaced-'+bodhisvgsReplacements;
|
||||
$svg = $svg.attr('id', imgID);
|
||||
} else {
|
||||
imgID = svgID;
|
||||
}
|
||||
} else {
|
||||
$svg = $svg.attr('id', imgID);
|
||||
}
|
||||
|
||||
// Add replaced image's classes to the new SVG
|
||||
if(typeof imgClass !== 'undefined') {
|
||||
$svg = $svg.attr('class', imgClass+' replaced-svg svg-replaced-'+bodhisvgsReplacements);
|
||||
}
|
||||
|
||||
// Remove any invalid XML tags as per http://validator.w3.org
|
||||
$svg = $svg.removeAttr('xmlns:a');
|
||||
|
||||
if(frontSanitizationEnabled == 'on' && $svg[0]['outerHTML'] != "") { // Is sanitization enabled?
|
||||
$svg = DOMPurify.sanitize($svg[0]['outerHTML']); // Sanitize SVG code via DOMPurify library
|
||||
}
|
||||
|
||||
// Add size attributes
|
||||
// $svg = $svg.attr('width', imgWidth);
|
||||
// $svg = $svg.attr('height', imgHeight);
|
||||
|
||||
// Replace image with new SVG
|
||||
img.replaceWith($svg);
|
||||
|
||||
$(document).trigger('svg.loaded', [imgID]);
|
||||
|
||||
bodhisvgsReplacements++;
|
||||
|
||||
}, 'xml');
|
||||
|
||||
}
|
||||
|
||||
// Wrap in IIFE so that it can be called again later as bodhisvgsInlineSupport();
|
||||
(bodhisvgsInlineSupport = function() {
|
||||
|
||||
// If force inline SVG option is active then add class
|
||||
if ( ForceInlineSVGActive === 'true' ) {
|
||||
|
||||
// Find all SVG inside img and add class if it hasn't got it
|
||||
jQuery('img').each(function() {
|
||||
|
||||
// Check if the SRC attribute is present at all
|
||||
if ( typeof jQuery(this).attr('src') !== typeof undefined && jQuery(this).attr('src') !== false) {
|
||||
|
||||
// Pick only those with the extension we want
|
||||
if ( jQuery(this).attr('src').match(/\.(svg)/) ) {
|
||||
|
||||
// Add our class name
|
||||
if ( !jQuery(this).hasClass(cssTarget.ForceInlineSVG) ) {
|
||||
jQuery(this).addClass(cssTarget.ForceInlineSVG);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Polyfill to support all ye old browsers
|
||||
// delete when not needed in the future
|
||||
if (!String.prototype.endsWith) {
|
||||
String.prototype.endsWith = function(searchString, position) {
|
||||
var subjectString = this.toString();
|
||||
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
|
||||
position = subjectString.length;
|
||||
}
|
||||
position -= searchString.length;
|
||||
var lastIndex = subjectString.lastIndexOf(searchString, position);
|
||||
return lastIndex !== -1 && lastIndex === position;
|
||||
};
|
||||
} // end polyfill
|
||||
|
||||
// Another snippet to support IE11
|
||||
String.prototype.endsWith = function(pattern) {
|
||||
var d = this.length - pattern.length;
|
||||
return d >= 0 && this.lastIndexOf(pattern) === d;
|
||||
};
|
||||
// End snippet to support IE11
|
||||
|
||||
// Check to see if user set alternate class
|
||||
if ( ForceInlineSVGActive === 'true' ) {
|
||||
var target = ( cssTarget.Bodhi !== 'img.' ? cssTarget.Bodhi : '.style-svg' );
|
||||
} else {
|
||||
var target = ( cssTarget !== 'img.' ? cssTarget : '.style-svg' );
|
||||
}
|
||||
|
||||
target = target.replace("img","");
|
||||
|
||||
$(target).each(function(index){
|
||||
|
||||
// if image then send for replacement
|
||||
if ( typeof $(this).attr('src') !== typeof undefined && $(this).attr('src') !== false) {
|
||||
bodhisvgsReplace($(this));
|
||||
}else{
|
||||
|
||||
// look for svg children and send for replacement
|
||||
$(this).find("img").each(function(i){
|
||||
|
||||
if( typeof $(this).attr('src') !== typeof undefined && $(this).attr('src') !== false ){
|
||||
bodhisvgsReplace($(this));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
})(); // Execute immediately
|
||||
|
||||
});
|
Reference in New Issue
Block a user