mirror of https://github.com/artf/grapesjs.git
nocodeframeworkdrag-and-dropsite-buildersite-generatortemplate-builderui-builderweb-builderweb-builder-frameworkwebsite-builderno-codepage-builder
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
315 lines
8.5 KiB
315 lines
8.5 KiB
import { isObject, isString, each, isUndefined } from 'underscore';
|
|
|
|
export default ({ $, Backbone }) => {
|
|
// if (Backbone) {
|
|
// const ViewProt = Backbone.View.prototype;
|
|
// const eventNsMap = {};
|
|
// ViewProt.eventNsMap = eventNsMap;
|
|
|
|
// ViewProt.delegate = function(eventName, selector, listener) {
|
|
// const vid = '.delegateEvents' + this.cid;
|
|
// this.$el.on(eventName, selector, listener);
|
|
// //return this;
|
|
// let eventMap = eventNsMap[vid];
|
|
|
|
// if (!eventMap) {
|
|
// eventMap = [];
|
|
// eventNsMap[vid] = eventMap;
|
|
// }
|
|
|
|
// eventMap.push({ eventName, selector, listener });
|
|
// return this;
|
|
// };
|
|
|
|
// ViewProt.undelegateEvents = function() {
|
|
// const vid = '.delegateEvents' + this.cid;
|
|
// if (this.$el) {
|
|
// //this.$el.off(); return this;
|
|
// let eventMap = eventNsMap[vid];
|
|
|
|
// if (eventMap) {
|
|
// eventMap.forEach(({ eventName, selector, listener }) => {
|
|
// this.$el.off(eventName);
|
|
// });
|
|
// }
|
|
|
|
// delete eventNsMap[vid];
|
|
// }
|
|
// return this;
|
|
// };
|
|
|
|
// ViewProt.undelegate = function(ev, sel, list) {
|
|
// const vid = '.delegateEvents' + this.cid;
|
|
// //this.$el.off(ev, sel, list); return this;
|
|
// let eventMap = eventNsMap[vid];
|
|
|
|
// if (eventMap) {
|
|
// eventMap.forEach(({ eventName, selector, listener }) => {
|
|
// if (eventName == ev && selector == sel) {
|
|
// this.$el.off(eventName);
|
|
// }
|
|
// });
|
|
// delete eventNsMap[vid];
|
|
// }
|
|
|
|
// return this;
|
|
// };
|
|
// }
|
|
|
|
if ($ && $.prototype.constructor.name !== 'jQuery') {
|
|
const fn = $.fn;
|
|
|
|
// const splitNamespace = function(name) {
|
|
// const namespaceArray = name.split('.');
|
|
// return name.indexOf('.') !== 0
|
|
// ? [namespaceArray[0], namespaceArray.slice(1)]
|
|
// : [null, namespaceArray];
|
|
// };
|
|
|
|
// const on = $.prototype.on;
|
|
// const off = $.prototype.off;
|
|
// const trigger = $.prototype.trigger;
|
|
// const offset = $.prototype.offset;
|
|
// const getEvents = eventName => eventName.split(/[,\s]+/g);
|
|
// const getNamespaces = eventName => eventName.split('.');
|
|
|
|
// fn.on = function(eventName, delegate, callback, runOnce) {
|
|
// if (typeof eventName == 'string') {
|
|
// const events = getEvents(eventName);
|
|
|
|
// if (events.length == 1) {
|
|
// eventName = events[0];
|
|
// let namespaces = getNamespaces(eventName);
|
|
|
|
// if (eventName.indexOf('.') !== 0) {
|
|
// eventName = namespaces[0];
|
|
// }
|
|
|
|
// namespaces = namespaces.slice(1);
|
|
|
|
// if (namespaces.length) {
|
|
// //console.log('Found event with namespaces', namespaces, eventName, delegate, this);
|
|
// const cashNs = this.data('_cashNs') || [];
|
|
// // cashNs[namespace]
|
|
// this.data('_cashNs', namespaces); // for each ns need to store '.store' => eventName, delegate, callback
|
|
// }
|
|
|
|
// return on.call(this, eventName, delegate, callback, runOnce);
|
|
// } else {
|
|
// events.forEach(eventName =>
|
|
// this.on(eventName, delegate, callback, runOnce)
|
|
// );
|
|
// return this;
|
|
// }
|
|
// } else {
|
|
// return on.call(this, eventName, delegate, callback, runOnce);
|
|
// }
|
|
// };
|
|
|
|
// fn.off = function(eventName, callback) {
|
|
// if (typeof eventName == 'string') {
|
|
// const events = getEvents(eventName);
|
|
|
|
// if (events.length == 1) {
|
|
// eventName = events[0];
|
|
// let namespaces = getNamespaces(eventName);
|
|
|
|
// if (eventName.indexOf('.') !== 0) {
|
|
// eventName = namespaces[0];
|
|
// }
|
|
|
|
// namespaces = namespaces.slice(1);
|
|
|
|
// if (namespaces.length) {
|
|
// // Have to off only with the same namespace
|
|
// }
|
|
|
|
// return off.call(this, eventName, callback);
|
|
// } else {
|
|
// events.forEach(eventName => this.off(eventName, callback));
|
|
// return this;
|
|
// }
|
|
// } else {
|
|
// return off.call(this, eventName, callback);
|
|
// }
|
|
// };
|
|
|
|
// fn.trigger = function(eventName, data) {
|
|
// if (eventName instanceof $.Event) {
|
|
// return this.trigger(eventName.type, data);
|
|
// }
|
|
|
|
// if (typeof eventName == 'string') {
|
|
// const events = getEvents(eventName);
|
|
|
|
// if (events.length == 1) {
|
|
// eventName = events[0];
|
|
// let namespaces = getNamespaces(eventName);
|
|
|
|
// if (eventName.indexOf('.') !== 0) {
|
|
// eventName = namespaces[0];
|
|
// }
|
|
|
|
// namespaces = namespaces.slice(1);
|
|
|
|
// if (namespaces.length) {
|
|
// // have to trigger with same namespaces and eventName
|
|
// }
|
|
|
|
// return trigger.call(this, eventName, data);
|
|
// } else {
|
|
// events.forEach(eventName => this.trigger(eventName, data));
|
|
// return this;
|
|
// }
|
|
// } else {
|
|
// return trigger.call(this, eventName, data);
|
|
// }
|
|
// };
|
|
|
|
// Additional helpers
|
|
|
|
fn.hide = function() {
|
|
return this.css('display', 'none');
|
|
};
|
|
|
|
fn.show = function() {
|
|
return this.css('display', 'block');
|
|
};
|
|
|
|
fn.focus = function() {
|
|
const el = this.get(0);
|
|
el && el.focus();
|
|
return this;
|
|
};
|
|
|
|
// For SVGs in IE
|
|
// (fn.removeClass = function(c) {
|
|
// if (!arguments.length) {
|
|
// return this.attr('class', '');
|
|
// }
|
|
// const classes = isString(c) && c.match(/\S+/g);
|
|
// return classes
|
|
// ? this.each(function(el) {
|
|
// each(classes, function(c) {
|
|
// if (el.classList) {
|
|
// el.classList.remove(c);
|
|
// } else {
|
|
// const val = el.className;
|
|
// const bval = el.className.baseVal;
|
|
|
|
// if (!isUndefined(bval)) {
|
|
// val.baseVal = bval.replace(c, '');
|
|
// } else {
|
|
// el.className = val.replace(c, '');
|
|
// }
|
|
// }
|
|
// });
|
|
// })
|
|
// : this;
|
|
// }),
|
|
// (fn.remove = function() {
|
|
// return this.each(node => {
|
|
// return node.parentNode && node.parentNode.removeChild(node);
|
|
// });
|
|
// }),
|
|
|
|
// For spectrum compatibility
|
|
|
|
fn.bind = function(ev, h) {
|
|
return this.on(ev, h);
|
|
};
|
|
|
|
fn.unbind = function(ev, h) {
|
|
if (isObject(ev)) {
|
|
for (let name in ev) {
|
|
ev.hasOwnProperty(name) && this.off(name, ev[name]);
|
|
}
|
|
|
|
return this;
|
|
} else {
|
|
return this.off(ev, h);
|
|
}
|
|
};
|
|
|
|
fn.click = function(h) {
|
|
return h ? this.on('click', h) : this.trigger('click');
|
|
};
|
|
|
|
fn.change = function(h) {
|
|
return h ? this.on('change', h) : this.trigger('change');
|
|
};
|
|
|
|
fn.keydown = function(h) {
|
|
return h ? this.on('keydown', h) : this.trigger('keydown');
|
|
};
|
|
|
|
fn.delegate = function(selector, events, data, handler) {
|
|
if (!handler) {
|
|
handler = data;
|
|
}
|
|
|
|
return this.on(events, selector, function(e) {
|
|
e.data = data;
|
|
handler(e);
|
|
});
|
|
};
|
|
|
|
fn.scrollLeft = function() {
|
|
let el = this.get(0);
|
|
el = el.nodeType == 9 ? el.defaultView : el;
|
|
let win = el instanceof Window ? el : null;
|
|
return win ? win.pageXOffset : el.scrollLeft || 0;
|
|
};
|
|
|
|
fn.scrollTop = function() {
|
|
let el = this.get(0);
|
|
el = el.nodeType == 9 ? el.defaultView : el;
|
|
let win = el instanceof Window ? el : null;
|
|
return win ? win.pageYOffset : el.scrollTop || 0;
|
|
};
|
|
|
|
const offset = $.prototype.offset;
|
|
fn.offset = function(coords) {
|
|
let top, left;
|
|
|
|
if (coords) {
|
|
top = coords.top;
|
|
left = coords.left;
|
|
}
|
|
|
|
if (typeof top != 'undefined') {
|
|
this.css('top', `${top}px`);
|
|
}
|
|
if (typeof left != 'undefined') {
|
|
this.css('left', `${left}px`);
|
|
}
|
|
|
|
return offset.call(this);
|
|
};
|
|
|
|
$.map = function(items, clb) {
|
|
const ar = [];
|
|
|
|
for (var i = 0; i < items.length; i++) {
|
|
ar.push(clb(items[i], i));
|
|
}
|
|
|
|
return ar;
|
|
};
|
|
|
|
const indexOf = Array.prototype.indexOf;
|
|
|
|
$.inArray = function(val, arr, i) {
|
|
return arr == null ? -1 : indexOf.call(arr, val, i);
|
|
};
|
|
|
|
$.Event = function(src, props) {
|
|
if (!(this instanceof $.Event)) {
|
|
return new $.Event(src, props);
|
|
}
|
|
|
|
this.type = src;
|
|
this.isDefaultPrevented = () => false;
|
|
};
|
|
}
|
|
};
|
|
|