summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThai Tran <tqtran@us.ibm.com>2015-01-14 17:43:59 -0800
committerThai Tran <tqtran@us.ibm.com>2015-01-14 17:43:59 -0800
commit322d85b797b9f97b1f2073d4e2f7a3dd1ec50bcc (patch)
treec3ee8faa97cab58a3b97ccf7f49809065adc3a92
downloadxstatic-angular-lrdragndrop-322d85b797b9f97b1f2073d4e2f7a3dd1ec50bcc.tar.gz
Initial commit.
-rw-r--r--MANIFEST.in7
-rw-r--r--PKG-INFO25
-rw-r--r--README.txt14
-rw-r--r--setup.py27
-rw-r--r--xstatic/__init__.py1
-rw-r--r--xstatic/pkg/__init__.py1
-rw-r--r--xstatic/pkg/angular_irdragndrop/__init__.py57
-rw-r--r--xstatic/pkg/angular_irdragndrop/data/irdragndrop.js184
8 files changed, 316 insertions, 0 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..397d3ca
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,7 @@
+include README.txt
+recursive-include xstatic/pkg/angular_irdragndrop *
+
+global-exclude *.pyc
+global-exclude *.pyo
+global-exclude *.orig
+global-exclude *.rej
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..151a3d7
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,25 @@
+Metadata-Version: 1.0
+Name: XStatic-angular-irdragndrop
+Version: 1.0.2
+Summary: irdragndrop 1.0.2 (XStatic packaging standard)
+Home-page: https://github.com/lorenzofox3/lrDragNDrop
+Author: Thai Tran
+Author-email: tqtran@us.ibm.com
+License: MIT
+Description:
+ XStatic-angular-IrDragNDrop
+ -------------------
+
+ IrDragNDrop javascript library packaged for setuptools (easy_install) / pip.
+
+ This package is intended to be used by **any** project that needs these files.
+
+ It intentionally does **not** provide any extra code except some metadata
+ **nor** has any extra requirements. You MAY use some minimal support code from
+ the XStatic base package, if you like.
+
+ You can find more info about the xstatic packaging way in the package
+ `XStatic`.
+
+Keywords: drag-n-drop angular table irdragndrop xstatic
+Platform: any
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..86be7eb
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,14 @@
+
+XStatic-angular-IrDragNDrop
+-------------------
+
+IrDragNDrop javascript library packaged for setuptools (easy_install) / pip.
+
+This package is intended to be used by **any** project that needs these files.
+
+It intentionally does **not** provide any extra code except some metadata
+**nor** has any extra requirements. You MAY use some minimal support code from
+the XStatic base package, if you like.
+
+You can find more info about the xstatic packaging way in the package
+`XStatic`.
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..d7ecd21
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,27 @@
+
+from xstatic.pkg import angular_smart_table as xs
+
+# The README.txt file should be written in reST so that PyPI can use
+# it to generate your project's PyPI page.
+long_description = open('README.txt').read()
+
+from setuptools import setup, find_packages
+
+setup(
+ name=xs.PACKAGE_NAME,
+ version=xs.PACKAGE_VERSION,
+ description=xs.DESCRIPTION,
+ long_description=long_description,
+ classifiers=xs.CLASSIFIERS,
+ keywords=xs.KEYWORDS,
+ maintainer=xs.MAINTAINER,
+ maintainer_email=xs.MAINTAINER_EMAIL,
+ license=xs.LICENSE,
+ url=xs.HOMEPAGE,
+ platforms=xs.PLATFORMS,
+ packages=find_packages(),
+ namespace_packages=['xstatic', 'xstatic.pkg', ],
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=[],
+)
diff --git a/xstatic/__init__.py b/xstatic/__init__.py
new file mode 100644
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/__init__.py b/xstatic/pkg/__init__.py
new file mode 100644
index 0000000..de40ea7
--- /dev/null
+++ b/xstatic/pkg/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
diff --git a/xstatic/pkg/angular_irdragndrop/__init__.py b/xstatic/pkg/angular_irdragndrop/__init__.py
new file mode 100644
index 0000000..0a1dbb4
--- /dev/null
+++ b/xstatic/pkg/angular_irdragndrop/__init__.py
@@ -0,0 +1,57 @@
+
+"""
+XStatic resource package
+
+See package 'XStatic' for documentation and basic tools.
+"""
+
+# official name, upper/lowercase allowed, no spaces
+DISPLAY_NAME = 'IrDragNDrop'
+
+# name used for PyPi
+PACKAGE_NAME = 'XStatic-%s' % DISPLAY_NAME
+
+NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar')
+ # please use a all-lowercase valid python
+ # package name
+
+VERSION = '1.0.2' # version of the packaged files, please use the upstream
+ # version number
+BUILD = '0' # our package build number, so we can release new builds
+ # with fixes for xstatic stuff.
+PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi
+
+DESCRIPTION = "%s %s (XStatic packaging standard)" % (DISPLAY_NAME, VERSION)
+
+PLATFORMS = 'any'
+CLASSIFIERS = []
+KEYWORDS = 'drag-n-drop angular table irdragndrop xstatic'
+
+# XStatic-* package maintainer:
+MAINTAINER = 'Thai Tran'
+MAINTAINER_EMAIL = 'tqtran@us.ibm.com'
+
+# this refers to the project homepage of the stuff we packaged:
+HOMEPAGE = 'https://github.com/lorenzofox3/lrDragNDrop'
+
+# this refers to all files:
+LICENSE = '(same as %s)' % DISPLAY_NAME
+
+from os.path import join, dirname
+BASE_DIR = join(dirname(__file__), 'data')
+# linux package maintainers just can point to their file locations like this:
+#BASE_DIR = '/usr/share/javascript/' + NAME
+
+# location of the Javascript file that's the entry point for this package, if
+# one exists, relative to BASE_DIR
+MAIN='irdragndrop.js'
+
+LOCATIONS = {
+ # CDN locations (if no public CDN exists, use an empty dict)
+ # if value is a string, it is a base location, just append relative
+ # path/filename. if value is a dict, do another lookup using the
+ # relative path/filename you want.
+ # your relative path/filenames should usually be without version
+ # information, because either the base dir/url is exactly for this
+ # version or the mapping will care for accessing this version.
+}
diff --git a/xstatic/pkg/angular_irdragndrop/data/irdragndrop.js b/xstatic/pkg/angular_irdragndrop/data/irdragndrop.js
new file mode 100644
index 0000000..2b7c383
--- /dev/null
+++ b/xstatic/pkg/angular_irdragndrop/data/irdragndrop.js
@@ -0,0 +1,184 @@
+(function (ng) {
+ 'use strict';
+
+ function isJqueryEventDataTransfer(){
+ return window.jQuery && (-1 == window.jQuery.event.props.indexOf('dataTransfer'));
+ }
+
+ if (isJqueryEventDataTransfer()) {
+ window.jQuery.event.props.push('dataTransfer');
+ }
+
+ var module = ng.module('lrDragNDrop', []);
+
+ module.service('lrDragStore', ['$document', function (document) {
+
+ var store = {};
+
+ this.hold = function hold(key, item, collectionFrom, safe) {
+ store[key] = {
+ item: item,
+ collection: collectionFrom,
+ safe: safe === true
+ }
+ };
+
+ this.get = function (namespace) {
+ var
+ modelItem = store[namespace], itemIndex;
+
+ if (modelItem) {
+ itemIndex = modelItem.collection.indexOf(modelItem.item);
+ return modelItem.safe === true ? modelItem.item : modelItem.collection.splice(itemIndex, 1)[0];
+ } else {
+ return null;
+ }
+ };
+
+ this.clean = function clean() {
+ store = {};
+ };
+
+ this.isHolding = function (namespace) {
+ return store[namespace] !== undefined;
+ };
+
+ document.bind('dragend', this.clean);
+ }]);
+
+ module.service('lrDragHelper', function () {
+ var th = this;
+
+ th.parseRepeater = function(scope, attr) {
+ var
+ repeatExpression = attr.ngRepeat,
+ match;
+
+ if (!repeatExpression) {
+ throw Error('this directive must be used with ngRepeat directive');
+ }
+ match = repeatExpression.match(/^(.*\sin).(\S*)/);
+ if (!match) {
+ throw Error("Expected ngRepeat in form of '_item_ in _collection_' but got '" +
+ repeatExpression + "'.");
+ }
+
+ return scope.$eval(match[2]);
+ };
+
+ th.lrDragSrcDirective = function(store, safe) {
+ return function compileFunc(el, iattr) {
+ iattr.$set('draggable', true);
+ return function linkFunc(scope, element, attr) {
+ var
+ collection,
+ key = (safe === true ? attr.lrDragSrcSafe : attr.lrDragSrc ) || 'temp';
+
+ if(attr.lrDragData) {
+ scope.$watch(attr.lrDragData, function (newValue) {
+ collection = newValue;
+ });
+ } else {
+ collection = th.parseRepeater(scope, attr);
+ }
+
+ element.bind('dragstart', function (evt) {
+ store.hold(key, collection[scope.$index], collection, safe);
+ if(angular.isDefined(evt.dataTransfer)) {
+ evt.dataTransfer.setData('text/html', null); //FF/jQuery fix
+ }
+ });
+ }
+ }
+ }
+ });
+
+ module.directive('lrDragSrc', ['lrDragStore', 'lrDragHelper', function (store, dragHelper) {
+ return{
+ compile: dragHelper.lrDragSrcDirective(store)
+ };
+ }]);
+
+ module.directive('lrDragSrcSafe', ['lrDragStore', 'lrDragHelper', function (store, dragHelper) {
+ return{
+ compile: dragHelper.lrDragSrcDirective(store, true)
+ };
+ }]);
+
+ module.directive('lrDropTarget', ['lrDragStore', 'lrDragHelper', '$parse', function (store, dragHelper, $parse) {
+ return {
+ link: function (scope, element, attr) {
+
+ var
+ collection,
+ key = attr.lrDropTarget || 'temp',
+ classCache = null;
+
+ function isAfter(x, y) {
+ //check if below or over the diagonal of the box element
+ return (element[0].offsetHeight - x * element[0].offsetHeight / element[0].offsetWidth) < y;
+ }
+
+ function resetStyle() {
+ if (classCache !== null) {
+ element.removeClass(classCache);
+ classCache = null;
+ }
+ }
+
+ if(attr.lrDragData) {
+ scope.$watch(attr.lrDragData, function (newValue) {
+ collection = newValue;
+ });
+ } else {
+ collection = dragHelper.parseRepeater(scope, attr);
+ }
+
+ element.bind('drop', function (evt) {
+ var
+ collectionCopy = ng.copy(collection),
+ item = store.get(key),
+ dropIndex, i, l;
+ if (item !== null) {
+ dropIndex = scope.$index;
+ dropIndex = isAfter(evt.offsetX, evt.offsetY) ? dropIndex + 1 : dropIndex;
+ //srcCollection=targetCollection => we may need to apply a correction
+ if (collectionCopy.length > collection.length) {
+ for (i = 0, l = Math.min(dropIndex, collection.length - 1); i <= l; i++) {
+ if (!ng.equals(collectionCopy[i], collection[i])) {
+ dropIndex = dropIndex - 1;
+ break;
+ }
+ }
+ }
+ scope.$apply(function () {
+ collection.splice(dropIndex, 0, item);
+ var fn = $parse(attr.lrDropSuccess) || ng.noop;
+ fn(scope, {e: evt, item: item, collection: collection});
+ });
+ evt.preventDefault();
+ resetStyle();
+ store.clean();
+ }
+ });
+
+ element.bind('dragleave', resetStyle);
+
+ element.bind('dragover', function (evt) {
+ var className;
+ if (store.isHolding(key)) {
+ className = isAfter(evt.offsetX, evt.offsetY) ? 'lr-drop-target-after' : 'lr-drop-target-before';
+ if (classCache !== className && classCache !== null) {
+ element.removeClass(classCache);
+ }
+ if (classCache !== className) {
+ element.addClass(className);
+ }
+ classCache = className;
+ }
+ evt.preventDefault();
+ });
+ }
+ };
+ }]);
+})(angular); \ No newline at end of file