Browse Source

* dev

pull/612/merge
Lebedev Konstantin 9 years ago
parent
commit
af383bd277
  1. 104
      Sortable.html
  2. 13
      ng-sortable.js

104
Sortable.html

@ -7,6 +7,7 @@
</template>
</dom-module>
<script>
'use strict';
Polymer({
is: "sortable-js",
@ -34,12 +35,12 @@
scroll : {}
},
created() {
created: function() {
// override default DOM property behavior
Object.defineProperties(this, {
draggable: { get() { return this._draggable || this.getAttribute("draggable") || ">*"}, set(value) { this._draggable = value; this.draggableChanged(value)} },
scroll: { get() { return this._scroll || JSON.parse(this.getAttribute("scroll") || "true") }, set(value) { this._scroll = value; this.scrollChanged(value)} }
})
draggable: { get: function() { return this._draggable || this.getAttribute("draggable") || ">*";}, set: function(value) { this._draggable = value; this.draggableChanged(value);} },
scroll: { get: function() { return this._scroll || JSON.parse(this.getAttribute("scroll") || "true"); }, set: function(value) { this._scroll = value; this.scrollChanged(value);} }
});
},
attached: function() {
@ -55,117 +56,116 @@
// <span>hello</span>
// <template is="dom-if">
// <tempalte is="dom-repeat">
this.initialize();
},
detached: function() {
this.destroy()
this.destroy();
},
initialize: function() {
var templates = this.querySelectorAll("template[is='dom-repeat']");
var template = templates[templates.length-1];
var templates = this.querySelectorAll("template[is='dom-repeat']")
var template = templates[templates.length-1]
var options = {}
var options = {};
Object.keys(this.properties).forEach(function(key) {
options[key] = this[key]
});
options[key] = this[key];
}.bind(this));
var _this = this;
var eventCallbacks = {
onUpdate: function (e) {
if (template) {
if(manuallyHandleUpdateEvents) {
template.items.splice(e.newIndex, 0, template.items.splice(e.oldIndex, 1)[0]);
} else {
template.splice("items", e.newIndex, 0, template.splice("items", e.oldIndex, 1)[0])
template.splice("items", e.newIndex, 0, template.splice("items", e.oldIndex, 1)[0]);
}
}
this.fire("update", e)
_this.fire("update", e);
},
onAdd: function(e) {
if (template) {
var froms = e.from.querySelectorAll("template[is='dom-repeat']")
var from = froms[froms.length-1]
var item = from.items[e.oldIndex]
template.splice("items", e.newIndex, 0, item)
var froms = e.from.querySelectorAll("template[is='dom-repeat']");
var from = froms[froms.length-1];
var item = from.items[e.oldIndex];
template.splice("items", e.newIndex, 0, item);
}
this.fire("add", e)
_this.fire("add", e);
},
onRemove: function(e) {
if (template) {
template.splice("items", e.oldIndex, 1)[0]
template.splice("items", e.oldIndex, 1)[0];
}
this.fire("remove", e)
_this.fire("remove", e);
},
onChoose: function(e) {
this.fire("choose", e)
_this.fire("choose", e);
},
onStart: function(e) {
this.fire("start", e)
_this.fire("start", e);
},
onEnd: function(e) {
this.fire("end", e)
_this.fire("end", e);
},
onSort: function(e) {
this.fire("sort", e)
_this.fire("sort", e);
},
onFilter: function(e) {
this.fire("filter", e)
_this.fire("filter", e);
},
onMove: function(e) {
this.fire("move", e)
_this.fire("move", e);
},
onClone: function(e) {
this.fire("clone", e)
_this.fire("clone", e);
}
};
Object.keys(eventCallbacks).forEach(function(name){
options[name] = eventCallbacks[name];
});
this.sortable = Sortable.create(this, options);
},
destroy: function() {
if(this.sortable) {
this.sortable.destroy()
this.sortable.destroy();
}
},
groupChanged : function(value) { this.sortable && this.sortable.option("group", value) },
sortChanged : function(value) { this.sortable && this.sortable.option("sort", value) },
disabledChanged : function(value) { this.sortable && this.sortable.option("disabled", value) },
storeChanged : function(value) { this.sortable && this.sortable.option("store", value) },
handleChanged : function(value) { this.sortable && this.sortable.option("handle", value) },
scrollChanged : function(value) { this.sortable && this.sortable.option("scroll", value) },
scrollSensitivityChanged : function(value) { this.sortable && this.sortable.option("scrollSensitivity", value) },
scrollSpeedChanged : function(value) { this.sortable && this.sortable.option("scrollSpeed", value) },
draggableChanged : function(value) { this.sortable && this.sortable.option("draggable", value) },
ghostClassChanged : function(value) { this.sortable && this.sortable.option("ghostClass", value) },
chosenClassChanged : function(value) { this.sortable && this.sortable.option("chosenClass", value) },
ignoreChanged : function(value) { this.sortable && this.sortable.option("ignore", value) },
filterChanged : function(value) { this.sortable && this.sortable.option("filter", value) },
animationChanged : function(value) { this.sortable && this.sortable.option("animation", value) },
dropBubbleChanged : function(value) { this.sortable && this.sortable.option("dropBubble", value) },
dragoverBubbleChanged : function(value) { this.sortable && this.sortable.option("dragoverBubble", value) },
dataIdAttrChanged : function(value) { this.sortable && this.sortable.option("dataIdAttr", value) },
delayChanged : function(value) { this.sortable && this.sortable.option("delay", value) },
forceFallbackChanged : function(value) { this.sortable && this.sortable.option("forceFallback", value) },
fallbackClassChanged : function(value) { this.sortable && this.sortable.option("fallbackClass", value) },
fallbackOnBodyChanged : function(value) { this.sortable && this.sortable.option("fallbackOnBody", value) }
})
groupChanged : function(value) { this.sortable && this.sortable.option("group", value); },
sortChanged : function(value) { this.sortable && this.sortable.option("sort", value); },
disabledChanged : function(value) { this.sortable && this.sortable.option("disabled", value); },
storeChanged : function(value) { this.sortable && this.sortable.option("store", value); },
handleChanged : function(value) { this.sortable && this.sortable.option("handle", value); },
scrollChanged : function(value) { this.sortable && this.sortable.option("scroll", value); },
scrollSensitivityChanged : function(value) { this.sortable && this.sortable.option("scrollSensitivity", value); },
scrollSpeedChanged : function(value) { this.sortable && this.sortable.option("scrollSpeed", value); },
draggableChanged : function(value) { this.sortable && this.sortable.option("draggable", value); },
ghostClassChanged : function(value) { this.sortable && this.sortable.option("ghostClass", value); },
chosenClassChanged : function(value) { this.sortable && this.sortable.option("chosenClass", value); },
ignoreChanged : function(value) { this.sortable && this.sortable.option("ignore", value); },
filterChanged : function(value) { this.sortable && this.sortable.option("filter", value); },
animationChanged : function(value) { this.sortable && this.sortable.option("animation", value); },
dropBubbleChanged : function(value) { this.sortable && this.sortable.option("dropBubble", value); },
dragoverBubbleChanged : function(value) { this.sortable && this.sortable.option("dragoverBubble", value); },
dataIdAttrChanged : function(value) { this.sortable && this.sortable.option("dataIdAttr", value); },
delayChanged : function(value) { this.sortable && this.sortable.option("delay", value); },
forceFallbackChanged : function(value) { this.sortable && this.sortable.option("forceFallback", value); },
fallbackClassChanged : function(value) { this.sortable && this.sortable.option("fallbackClass", value); },
fallbackOnBodyChanged : function(value) { this.sortable && this.sortable.option("fallbackOnBody", value); }
});
</script>

13
ng-sortable.js

@ -37,6 +37,10 @@
var removed,
nextSibling;
function getNgRepeatExpression(node) {
return node.getAttribute('ng-repeat') || node.getAttribute('data-ng-repeat') || node.getAttribute('x-ng-repeat');
}
// Export
return {
restrict: 'AC',
@ -45,18 +49,15 @@
compile: function ($element, $attr) {
var ngRepeat = [].filter.call($element[0].childNodes, function (node) {
return (
(node.nodeType === 1) &&
(node.attributes['ng-repeat'])
);
return node.nodeType === Node.ELEMENT_NODE && getNgRepeatExpression(node);
})[0];
if (!ngRepeat) {
return;
}
var expression = ngRepeat.attributes['ng-repeat'].nodeValue;
var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
var match = getNgRepeatExpression(ngRepeat)
.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
if (!match) {
return;

Loading…
Cancel
Save