Skip to content

Instantly share code, notes, and snippets.

@stoffeastrom
Last active February 11, 2024 23:00
Show Gist options
  • Save stoffeastrom/351569c3bad333bb555682f9a9810bcc to your computer and use it in GitHub Desktop.
Save stoffeastrom/351569c3bad333bb555682f9a9810bcc to your computer and use it in GitHub Desktop.
Aurelia Gist TypeScript Sortable Simple
<template>
<ul class="lui-list group"
oa-sortable="items.bind: items; allowed-drag-selector.bind: '.lui-icon--handle'; axis.bind: 'y'">
<li class="lui-list__item"
repeat.for="item of items"
oa-sortable-item="item.bind: item"
draggable="false">
<span class="lui-list__aside lui-icon lui-icon--small lui-icon--handle"></span>
<span class="lui-list__text">${item.name}</span>
<span class="lui-list__aside">
<span class="lui-list__aside lui-icon lui-icon--small"></span>
</span>
</li>
</ul>
</template>
export class App {
public items = Array.from(Array(11), (_, i) => i).map((i) => {
return {
name: i
};
});
}
System.config({
//use typescript for compilation
transpiler: 'typescript',
//typescript compiler options
typescriptOptions: {
emitDecoratorMetadata: true
},
//map tells the System loader where to look for things
map: {
'typescript': 'https://unpkg.com/[email protected]/lib/typescript.js',
'tslib': 'https://unpkg.com/tslib',
'aurelia-binding': 'https://unpkg.com/aurelia-binding/dist/amd/aurelia-binding.js',
'aurelia-bootstrapper': 'https://unpkg.com/aurelia-bootstrapper/dist/amd/aurelia-bootstrapper.js',
'aurelia-dependency-injection': 'https://unpkg.com/aurelia-dependency-injection/dist/amd/aurelia-dependency-injection.js',
'aurelia-event-aggregator': 'https://unpkg.com/aurelia-event-aggregator/dist/amd/aurelia-event-aggregator.js',
'aurelia-framework': 'https://unpkg.com/aurelia-framework/dist/amd/aurelia-framework.js',
'aurelia-history': 'https://unpkg.com/aurelia-history/dist/amd/aurelia-history.js',
'aurelia-history-browser': 'https://unpkg.com/aurelia-history-browser/dist/amd/aurelia-history-browser.js',
'aurelia-loader': 'https://unpkg.com/aurelia-loader/dist/amd/aurelia-loader.js',
'aurelia-loader-default': 'https://unpkg.com/aurelia-loader-default/dist/amd/aurelia-loader-default.js',
'aurelia-logging': 'https://unpkg.com/aurelia-logging/dist/amd/aurelia-logging.js',
'aurelia-logging-console': 'https://unpkg.com/aurelia-logging-console/dist/amd/aurelia-logging-console.js',
'aurelia-metadata': 'https://unpkg.com/aurelia-metadata/dist/amd/aurelia-metadata.js',
'aurelia-pal': 'https://unpkg.com/aurelia-pal/dist/amd/aurelia-pal.js',
'aurelia-pal-browser': 'https://unpkg.com/aurelia-pal-browser/dist/amd/aurelia-pal-browser.js',
'aurelia-path': 'https://unpkg.com/aurelia-path/dist/amd/aurelia-path.js',
'aurelia-polyfills': 'https://unpkg.com/aurelia-polyfills/dist/amd/aurelia-polyfills.js',
'aurelia-router': 'https://unpkg.com/aurelia-router/dist/amd/aurelia-router.js',
'aurelia-route-recognizer': 'https://unpkg.com/aurelia-route-recognizer/dist/amd/aurelia-route-recognizer.js',
'aurelia-task-queue': 'https://unpkg.com/aurelia-task-queue/dist/amd/aurelia-task-queue.js',
'aurelia-templating': 'https://unpkg.com/aurelia-templating/dist/amd/aurelia-templating.js',
'aurelia-templating-binding': 'https://unpkg.com/aurelia-templating-binding/dist/amd/aurelia-templating-binding.js',
'aurelia-templating-resources': 'https://unpkg.com/aurelia-templating-resources/dist/amd',
'aurelia-templating-router': 'https://unpkg.com/aurelia-templating-router/dist/amd',
'oribella-framework': 'https://unpkg.com/oribella-framework/dist/amd',
'oribella': 'https://unpkg.com/oribella/dist/amd',
'oribella-aurelia-sortable': 'https://unpkg.com/oribella-aurelia-sortable/dist/amd'
},
packages: {
'.': {
defaultExtension: 'ts'
},
'aurelia-templating-resources': { main: 'aurelia-templating-resources.js' },
'aurelia-templating-router': { main: 'aurelia-templating-router.js' },
'oribella-framework': { main: 'oribella-framework.js' },
'oribella': { main: 'oribella.js' },
'oribella-aurelia-sortable': { main: 'oribella-aurelia-sortable.js' }
}
});
<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta charset="utf-8">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta http-equiv="cleartype" content="on">
<link rel="stylesheet" href="https://unpkg.com/leonardo-ui/dist/leonardo-ui.min.css" type="text/css" />
<link rel="stylesheet" href="styles.css" type="text/css" />
<style>
</style>
</head>
<body aurelia-app="main">
<script src="https://unpkg.com/[email protected]/dist/system.js"></script>
<script src="config.js"></script>
<script>
function patchDefaultLoader(DefaultLoader) {
// fix issue where the map function was using `System.map[id] = source`
// https://github.com/aurelia/loader-default/blob/1.0.0/src/index.js#L222
DefaultLoader.prototype.map = function(id, source) {
// System.map[id] = source; // <--- original
System.config({ map: { [id]: source } }); // <--- fix
};
}
System.import('aurelia-loader-default')
.then(({ DefaultLoader }) => patchDefaultLoader(DefaultLoader))
.then(() => System.import('aurelia-bootstrapper'));
</script>
</body>
</html>
import { Aurelia } from 'aurelia-framework';
import { PLATFORM } from 'aurelia-pal';
export function configure(aurelia: Aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging()
.plugin(PLATFORM.moduleName('oribella-aurelia-sortable'));
aurelia.start().then(() => aurelia.setRoot(PLATFORM.moduleName('app')));
}
@font-face {
font-family: "LUI icons";
src: url(https://unpkg.com/[email protected]/dist/lui-icons.woff) format('woff'), url(https://unpkg.com/[email protected]/dist/lui-icons.ttf) format('truetype');
}
@import url(https://fonts.googleapis.com/css?family=Noto+Sans:400,700);
@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro);
html,
body {
margin: 0;
padding: 0;
height: 100%;
}
body {
font-family: 'Noto Sans', sans-serif;
font-size: 14px;
color: #595959;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.lui-icon--handle {
display: flex;
align-items: center;
justify-content: center;
height: 28px;
min-width: 24px;
touch-action: none;
}
li {
list-style: none;
text-align: center;
}
* {
user-select: none;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment