From eb5c73d199bc436034be1f2ec7ae46a90661e127 Mon Sep 17 00:00:00 2001 From: Dan Dascalescu Date: Sun, 23 Nov 2014 22:53:38 -0800 Subject: [PATCH] Add Meteor.js integration support, http://meteor.com --- .gitignore | 1 + Sortable.js | 3 +++ meteor/package.js | 24 ++++++++++++++++++++++++ meteor/publish.sh | 23 +++++++++++++++++++++++ meteor/runtests.sh | 28 ++++++++++++++++++++++++++++ meteor/test.js | 9 +++++++++ 6 files changed, 88 insertions(+) create mode 100644 meteor/package.js create mode 100755 meteor/publish.sh create mode 100755 meteor/runtests.sh create mode 100644 meteor/test.js diff --git a/.gitignore b/.gitignore index 840d87c..115f20f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules mock.png .*.sw* +.build* diff --git a/Sortable.js b/Sortable.js index 0becb9a..05fef8b 100644 --- a/Sortable.js +++ b/Sortable.js @@ -14,6 +14,9 @@ else if( typeof module != "undefined" && typeof module.exports != "undefined" ){ module.exports = factory(); } + else if( typeof Package !== "undefined" ){ + Sortable = factory(); // export for Meteor.js + } else { window["Sortable"] = factory(); } diff --git a/meteor/package.js b/meteor/package.js new file mode 100644 index 0000000..183fc53 --- /dev/null +++ b/meteor/package.js @@ -0,0 +1,24 @@ +var packageName = 'rubaxa:sortable'; + +Package.describe({ + name: packageName, + summary: 'Sortable (official): minimalist reorderable drag-and-drop lists on modern browsers and touch devices', + version: '0.5.2', + git: 'https://github.com/RubaXa/Sortable.git' +}); + +Package.onUse(function (api) { + api.versionsFrom('0.9.0'); + api.export('Sortable'); + api.addFiles([ + 'Sortable.js' + ], 'client' + ); +}); + +Package.onTest(function (api) { + api.use(packageName, 'client'); + api.use('tinytest', 'client'); + + api.addFiles('meteor/test.js', 'client'); +}); diff --git a/meteor/publish.sh b/meteor/publish.sh new file mode 100755 index 0000000..45c12ba --- /dev/null +++ b/meteor/publish.sh @@ -0,0 +1,23 @@ +# Publish package on Meteor's Atmosphere.js + +# Make sure Meteor is installed, per https://www.meteor.com/install. The curl'ed script is totally safe; takes 2 minutes to read its source and check. +type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; } + +# sanity check: make sure we're in the root directory of the checkout +DIR=$( cd "$( dirname "$0" )" && pwd ) +cd $DIR/.. + +# Meteor expects package.js to be in the root directory of the checkout, so copy it there temporarily +cp meteor/package.js ./ + +# publish package, creating it if it's the first time we're publishing +PACKAGE_NAME=$(grep -i name package.js | head -1 | cut -d "'" -f 2) +PACKAGE_EXISTS=$(meteor search $PACKAGE_NAME 2>/dev/null | wc -l) + +if [ $PACKAGE_EXISTS -gt 0 ]; then + meteor publish +else + meteor publish --create +fi + +rm package.js diff --git a/meteor/runtests.sh b/meteor/runtests.sh new file mode 100755 index 0000000..949462f --- /dev/null +++ b/meteor/runtests.sh @@ -0,0 +1,28 @@ +# Test Meteor package before publishing to Atmosphere.js + +# Make sure Meteor is installed, per https://www.meteor.com/install. The curl'ed script is totally safe; takes 2 minutes to read its source and check. +type meteor >/dev/null 2>&1 || { curl https://install.meteor.com/ | sh; } + +# sanity check: make sure we're in the root directory of the checkout +DIR=$( cd "$( dirname "$0" )" && pwd ) +cd $DIR/.. + +# Meteor expects package.js to be in the root directory of the checkout, so copy it there temporarily +cp meteor/package.js ./ + +# run tests and delete the temporary package.js even if Ctrl+C is pressed +int_trap() { + echo + echo "Tests interrupted." +} + +trap int_trap INT + +meteor test-packages ./ + +PACKAGE_NAME=$(grep -i name package.js | head -1 | cut -d "'" -f 2) +rm -rf ".build.$PACKAGE_NAME" +rm -rf ".build.local-test:$PACKAGE_NAME" +rm versions.json + +rm package.js diff --git a/meteor/test.js b/meteor/test.js new file mode 100644 index 0000000..f7c00a9 --- /dev/null +++ b/meteor/test.js @@ -0,0 +1,9 @@ +'use strict'; + +Tinytest.add('Sortable.is', function (test) { + var items = document.createElement('ul'); + items.innerHTML = '
  • item 1
  • item 2
  • item 3
  • '; + var sortable = new Sortable(items); + test.instanceOf(sortable, Sortable, 'Instantiation OK'); + test.length(sortable.toArray(), 3, 'Three elements'); +});