Browse Source

Bump v0.14.6

pull/961/head v0.14.6
Artur Arseniev 8 years ago
parent
commit
1efe55fcf2
  1. 291
      dist/grapes.js
  2. 6
      dist/grapes.min.js
  3. 2
      package-lock.json
  4. 2
      package.json

291
dist/grapes.js

@ -4398,11 +4398,13 @@ var Component = Backbone.Model.extend(_Styleable2.default).extend({
if (em && em.getConfig('avoidInlineStyle')) {
prop = (0, _underscore.isString)(prop) ? this.parseStyle(prop) : prop;
prop = _extends({}, prop, this.get('style'));
var state = this.get('state');
var cc = em.get('CssComposer');
var propOrig = this.getStyle();
this.rule = cc.setIdRule(this.getId(), prop, _extends({}, opts, { state: state }));
var diff = (0, _mixins.shallowDiff)(propOrig, prop);
this.set('style', {}, { silent: 1 });
(0, _underscore.keys)(diff).forEach(function (pr) {
return _this3.trigger('change:style:' + pr);
});
@ -4768,10 +4770,15 @@ var Component = Backbone.Model.extend(_Styleable2.default).extend({
var attributes = this.getAttrToHTML();
for (var attr in attributes) {
var value = attributes[attr];
var val = attributes[attr];
var value = (0, _underscore.isString)(val) ? val.replace(/"/g, '"') : val;
if (!(0, _underscore.isUndefined)(value)) {
attrs.push(attr + '="' + value + '"');
if ((0, _underscore.isBoolean)(value)) {
value && attrs.push(attr);
} else {
attrs.push(attr + '="' + value + '"');
}
}
}
@ -17739,12 +17746,14 @@ module.exports = {
var u = 'px';
bStyle.display = 'block';
var canvasPos = canvas.getCanvasView().getPosition();
var badgeH = badge ? badge.offsetHeight : 0;
var badgeW = badge ? badge.offsetWidth : 0;
var top = pos.top - badgeH < canvasPos.top ? canvasPos.top : pos.top - badgeH;
var left = pos.left + badgeW < canvasPos.left ? canvasPos.left : pos.left;
bStyle.top = top + u;
bStyle.left = left + u;
if (canvasPos) {
var badgeH = badge ? badge.offsetHeight : 0;
var badgeW = badge ? badge.offsetWidth : 0;
var top = pos.top - badgeH < canvasPos.top ? canvasPos.top : pos.top - badgeH;
var left = pos.left + badgeW < canvasPos.left ? canvasPos.left : pos.left;
bStyle.top = top + u;
bStyle.left = left + u;
}
},
@ -17966,10 +17975,12 @@ module.exports = {
elPos: elPos,
event: 'toolbarPosUpdate'
});
var leftPos = pos.left + pos.elementWidth - pos.targetWidth;
toolbarStyle.top = pos.top + unit;
toolbarStyle.left = (leftPos < 0 ? 0 : leftPos) + unit;
toolbarStyle.display = origDisp;
if (pos) {
var leftPos = pos.left + pos.elementWidth - pos.targetWidth;
toolbarStyle.top = pos.top + unit;
toolbarStyle.left = (leftPos < 0 ? 0 : leftPos) + unit;
toolbarStyle.display = origDisp;
}
},
@ -21952,24 +21963,6 @@ module.exports = Backbone.View.extend({
videoNode.src = fileURL
*/
/*
// Show local video files, http://jsfiddle.net/dsbonev/cCCZ2/embedded/result,js,html,css/
var URL = window.URL || window.webkitURL
var file = this.files[0]
var type = file.type
var videoNode = document.createElement('video');
var canPlay = videoNode.canPlayType(type) // can use also for 'audio' types
if (canPlay === '') canPlay = 'no'
var message = 'Can play type "' + type + '": ' + canPlay
var isError = canPlay === 'no'
displayMessage(message, isError)
if (isError) {
return
}
var fileURL = URL.createObjectURL(file)
videoNode.src = fileURL
*/
// If it's an image, try to find its size
if (type === 'image') {
var data = {
@ -22520,11 +22513,10 @@ module.exports = Backbone.Collection.extend({
var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (typeof models === 'string') {
var cssc = this.em.get('CssComposer');
var parsed = this.em.get('Parser').parseHtml(models);
models = parsed.html;
var cssc = this.em.get('CssComposer');
if (parsed.css && cssc) {
var avoidUpdateStyle = opt.avoidUpdateStyle;
@ -22572,18 +22564,20 @@ module.exports = Backbone.View.extend({
/**
* Add to collection
* @param {Object} Model
*
* @return void
* @param {Model} model
* @param {Collection} coll
* @param {Object} opts
* @private
* */
addTo: function addTo(model) {
var coll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var em = this.config.em;
var i = this.collection.indexOf(model);
this.addToCollection(model, null, i);
if (em && !model.opt.temporary) {
em.trigger('add:component', model); // @deprecated
if (em && !opts.temporary) {
em.trigger('component:add', model);
}
},
@ -23689,7 +23683,7 @@ module.exports = function () {
plugins: plugins,
// Will be replaced on build
version: '0.14.5',
version: '0.14.6',
/**
* Initializes an editor based on passed options
@ -24951,8 +24945,8 @@ module.exports = Backbone.Model.extend({
}
});
sm.store(store, function () {
clb && clb();
sm.store(store, function (res) {
clb && clb(res);
_this4.set('changesCount', 0);
_this4.trigger('storage:store', store);
});
@ -26125,6 +26119,7 @@ module.exports = Backbone.View.extend({
if (!dropContent) {
// Putting `avoidStore` here will make the UndoManager behave wrong
opts.temporary = 1;
modelTemp = targetCollection.add({}, _extends({}, opts));
if (model) {
@ -31928,17 +31923,22 @@ module.exports = function (config) {
var add = [];
var result = [];
var sels = str.split(',');
for (var i = 0, len = sels.length; i < len; i++) {
var sel = sels[i].trim();
// Will accept only concatenated classes and last
// class might be with state (eg. :hover), nothing else.
if (/^(\.{1}[\w\-]+)+(:{1,2}[\w\-()]+)?$/gi.test(sel)) {
// Can also accept SINGLE ID selectors, eg. `#myid`, `#myid:hover`
// Composed are not valid: `#myid.some-class`, `#myid.some-class:hover`
if (/^(\.{1}[\w\-]+)+(:{1,2}[\w\-()]+)?$/gi.test(sel) || /^(#{1}[\w\-]+){1}(:{1,2}[\w\-()]+)?$/gi.test(sel)) {
var cls = sel.split('.').filter(Boolean);
result.push(cls);
} else {
add.push(sel);
}
}
return {
result: result,
add: add
@ -32093,59 +32093,65 @@ module.exports = function (config) {
"use strict";
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /**
* Selectors in GrapesJS are used in CSS Composer inside Rules and in Components as classes. To get better this concept let's take
* a look at this code:
*
* ```css
* span > #send-btn.btn{
* ...
* }
* ```
* ```html
* <span>
* <button id="send-btn" class="btn"></button>
* </span>
* ```
*
* In this scenario we get:
* span -> selector of type `tag`
* send-btn -> selector of type `id`
* btn -> selector of type `class`
*
* So, for example, being `btn` the same class entity it'll be easier to refactor and track things.
*
* Before using methods you should get first the module from the editor instance, in this way:
*
* ```js
* var selectorManager = editor.SelectorManager;
* ```
*
* @module SelectorManager
* @param {Object} config Configurations
* @param {Array<Object>} [config.selectors=[]] Default selectors
* @param {Array<Object>} [config.states=[]] Default states
* @param {String} [config.label='Classes'] Classes label
* @param {String} [config.statesLabel='- State -'] The empty state label
* @return {this}
* @example
* ...
* {
* selectors: [
* {name:'myselector1'},
* ...
* ],
* states: [{
* name: 'hover', label: 'Hover'
* },{
* name: 'active', label: 'Click'
* }],
* statesLabel: '- Selecte State -',
* }
*/
var _underscore = __webpack_require__(1);
var isId = function isId(str) {
return (0, _underscore.isString)(str) && str[0] == '#';
}; /**
* Selectors in GrapesJS are used in CSS Composer inside Rules and in Components as classes. To get better this concept let's take
* a look at this code:
*
* ```css
* span > #send-btn.btn{
* ...
* }
* ```
* ```html
* <span>
* <button id="send-btn" class="btn"></button>
* </span>
* ```
*
* In this scenario we get:
* span -> selector of type `tag`
* send-btn -> selector of type `id`
* btn -> selector of type `class`
*
* So, for example, being `btn` the same class entity it'll be easier to refactor and track things.
*
* Before using methods you should get first the module from the editor instance, in this way:
*
* ```js
* var selectorManager = editor.SelectorManager;
* ```
*
* @module SelectorManager
* @param {Object} config Configurations
* @param {Array<Object>} [config.selectors=[]] Default selectors
* @param {Array<Object>} [config.states=[]] Default states
* @param {String} [config.label='Classes'] Classes label
* @param {String} [config.statesLabel='- State -'] The empty state label
* @return {this}
* @example
* ...
* {
* selectors: [
* {name:'myselector1'},
* ...
* ],
* states: [{
* name: 'hover', label: 'Hover'
* },{
* name: 'active', label: 'Click'
* }],
* statesLabel: '- Selecte State -',
* }
*/
var isClass = function isClass(str) {
return (0, _underscore.isString)(str) && str[0] == '.';
};
module.exports = function (config) {
var c = config || {},
defaults = __webpack_require__(89),
@ -32219,25 +32225,30 @@ module.exports = function (config) {
* @param {String} name Selector name
* @param {Object} opts Selector options
* @param {String} [opts.label=''] Label for the selector, if it's not provided the label will be the same as the name
* @param {String} [opts.type='class'] Type of the selector. At the moment, only 'class' is available
* @param {String} [opts.type=1] Type of the selector. At the moment, only 'class' (1) is available
* @return {Model}
* @example
* var selector = selectorManager.add('selectorName');
* // Same as
* var selector = selectorManager.add('selectorName', {
* type: 'class',
* type: 1,
* label: 'selectorName'
* });
* */
add: function add(name) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) == 'object') {
if ((0, _underscore.isObject)(name)) {
opts = name;
} else {
opts.name = name;
}
if (isId(opts.name)) {
opts.name = opts.name.substr(1);
opts.type = Selector.TYPE_ID;
}
if (opts.label && !opts.name) {
opts.name = Selector.escapeName(opts.label);
}
@ -32288,6 +32299,10 @@ module.exports = function (config) {
get: function get(name) {
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Selector.TYPE_CLASS;
if (isId(name)) {
name = name.substr(1);
type = Selector.TYPE_ID;
}
return selectors.where({ name: name, type: type })[0];
},
@ -36381,16 +36396,18 @@ module.exports = function () {
event: 'rteToolbarPosUpdate'
});
if (config.adjustToolbar) {
// Move the toolbar down when the top canvas edge is reached
if (pos.top <= pos.canvasTop) {
pos.top = pos.elementTop + pos.elementHeight;
if (pos) {
if (config.adjustToolbar) {
// Move the toolbar down when the top canvas edge is reached
if (pos.top <= pos.canvasTop) {
pos.top = pos.elementTop + pos.elementHeight;
}
}
}
var toolbarStyle = toolbar.style;
toolbarStyle.top = pos.top + un;
toolbarStyle.left = pos.left + un;
var toolbarStyle = toolbar.style;
toolbarStyle.top = pos.top + un;
toolbarStyle.left = pos.left + un;
}
},
@ -41942,7 +41959,10 @@ module.exports = {
labelPlhHref: 'eg. https://google.com',
// Default options for the target input
optionsTarget: [{ value: '', name: 'This window' }, { value: '_blank', name: 'New window' }]
optionsTarget: [{ value: '', name: 'This window' }, { value: '_blank', name: 'New window' }],
// Text to show in case no element selected
textNoElement: 'Select an element before using Trait Manager'
};
/***/ }),
@ -44405,6 +44425,7 @@ module.exports = function () {
getTargetToElementDim: function getTargetToElementDim(target, element, options) {
var opts = options || {};
var canvasPos = CanvasView.getPosition();
if (!canvasPos) return;
var pos = opts.elPos || CanvasView.getElementPos(element);
var toRight = options.toRight || 0;
var targetHeight = opts.targetHeight || target.offsetHeight;
@ -45088,7 +45109,9 @@ module.exports = Backbone.View.extend({
* @private
*/
getPosition: function getPosition() {
var bEl = this.frame.el.contentDocument.body;
var doc = this.frame.el.contentDocument;
if (!doc) return;
var bEl = doc.body;
var fo = this.getFrameOffset();
var co = this.getCanvasOffset();
return {
@ -45116,8 +45139,12 @@ module.exports = Backbone.View.extend({
// In editor, I make use of setTimeout as during the append process of elements
// those will not be available immediatly, therefore 'item' variable
var script = document.createElement('script');
script.innerText = '\n setTimeout(function() {\n var item = document.getElementById(\'' + id + '\');\n if (!item) return;\n (function(){\n ' + model.getScriptString() + ';\n }.bind(item))()\n }, 1);';
view.scriptContainer.get(0).appendChild(script);
script.innerHTML = '\n setTimeout(function() {\n var item = document.getElementById(\'' + id + '\');\n if (!item) return;\n (function(){\n ' + model.getScriptString() + ';\n }.bind(item))()\n }, 1);';
// #873
// Adding setTimeout will make js components work on init of the editor
setTimeout(function () {
return view.scriptContainer.get(0).appendChild(script);
}, 0);
},
@ -46323,33 +46350,64 @@ module.exports = {
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(Backbone) {
var $ = Backbone.$;
var $ = __webpack_require__(0).$;
module.exports = {
run: function run(editor, sender) {
this.sender = sender;
var config = editor.Config;
var pfx = config.stylePrefix;
var tm = editor.TraitManager;
var panelC;
if (!this.obj) {
if (!this.$cn) {
var tmView = tm.getTraitsViewer();
var confTm = tm.getConfig();
this.obj = $('<div></div>').append('<div class="' + pfx + 'traits-label">' + confTm.labelContainer + '</div>').get(0);
this.obj.appendChild(tmView.render().el);
this.$cn = $('<div></div>');
this.$cn2 = $('<div></div>');
this.$cn.append(this.$cn2);
this.$header = $('<div>').append('<div class="' + confTm.stylePrefix + 'header">' + confTm.textNoElement + '</div>');
this.$cn.append(this.$header);
this.$cn2.append('<div class="' + pfx + 'traits-label">' + confTm.labelContainer + '</div>');
this.$cn2.append(tmView.render().el);
var panels = editor.Panels;
if (!panels.getPanel('views-container')) panelC = panels.addPanel({ id: 'views-container' });else panelC = panels.getPanel('views-container');
panelC.set('appendContent', this.obj).trigger('change:appendContent');
panelC.set('appendContent', this.$cn.get(0)).trigger('change:appendContent');
this.target = editor.getModel();
this.listenTo(this.target, 'change:selectedComponent', this.toggleTm);
}
this.obj.style.display = 'block';
this.toggleTm();
},
/**
* Toggle Trait Manager visibility
* @private
*/
toggleTm: function toggleTm() {
var sender = this.sender;
if (sender && sender.get && !sender.get('active')) return;
if (this.target.get('selectedComponent')) {
this.$cn2.show();
this.$header.hide();
} else {
this.$cn2.hide();
this.$header.show();
}
},
stop: function stop() {
if (this.obj) this.obj.style.display = 'none';
this.$cn2 && this.$cn2.hide();
this.$header && this.$header.hide();
}
};
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))
/***/ }),
/* 201 */
@ -47418,6 +47476,7 @@ module.exports = Backbone.View.extend({
var label = this.model.get('label');
el.className += ' ' + className + ' ' + pfx + 'one-bg ' + pfx + 'four-color-h';
el.innerHTML = '<div class="' + className + '-label">' + label + '</div>';
el.title = el.textContent.trim();
(0, _mixins.hasDnd)(this.em) && el.setAttribute('draggable', true);
return this;
}

6
dist/grapes.min.js

File diff suppressed because one or more lines are too long

2
package-lock.json

@ -1,6 +1,6 @@
{
"name": "grapesjs",
"version": "0.14.5",
"version": "0.14.6",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

2
package.json

@ -1,7 +1,7 @@
{
"name": "grapesjs",
"description": "Free and Open Source Web Builder Framework",
"version": "0.14.5",
"version": "0.14.6",
"author": "Artur Arseniev",
"license": "BSD-3-Clause",
"homepage": "http://grapesjs.com",

Loading…
Cancel
Save