Skip to main content

Introduction

purgetss.ui is the CommonJS runtime generated by purgetss module. It can be used from both Alloy and Titanium Classic; only the way you create and reference views changes.

ProjectGenerated fileLoad it with
Alloyapp/lib/purgetss.ui.jsrequire('purgetss.ui')
ClassicResources/lib/purgetss.ui.jsrequire('lib/purgetss.ui')

Classic paths are relative to Resources/, as described by Titanium's CommonJS module path resolution.

Two authoring models

Alloy examples can use XML, TSS, PurgeTSS classes, <Animation module="purgetss.ui">, controllers, and $.* references. Classic projects do not have those features: create views with Ti.UI.create*() and express every animation with JavaScript objects and native Titanium properties.

For the full Classic setup, see Using purgetss.ui in Titanium Classic.

Installation

Run the command from the root of either project type:

purgetss module

The command selects the correct destination automatically. The generated file is self-contained, so a Classic application does not need PurgeTSS at runtime.

Public exports

ExportPurpose
AnimationPropertiesDirect constructor export for an animation object
createAnimation(args)Factory that creates the same kind of animation object
deviceInfo()Logs Titanium platform and display diagnostics
saveComponent({ source, directory })Renders a view, writes a PNG, and sends it to the photo gallery
AppearancePersists and applies system, light, or dark appearance

Use createAnimation() in Classic application code. Both animation exports return behavior-equivalent objects; <Animation module="purgetss.ui"> remains the idiomatic Alloy form.

Animation model

An animation object holds native Titanium animation properties and exposes 15 methods:

The object can animate position, size, opacity, colors, and a 2D transform. Timing uses native Ti.UI.Animation properties such as duration, delay, curve, repeat, and autoreverse. The module does not add a universal duration default; set duration explicitly whenever visible motion is required.

Stateful animations can define open, close, and complete under animationProperties. Child views can inherit a global children object and override it with their own child, open, close, and complete objects.

Alloy example

app/views/index.xml
<Alloy>
<Window>
<Animation id="fade" module="purgetss.ui" class="open:opacity-100 close:opacity-0 duration-200" />
<View id="card" class="opacity-0" />
</Window>
</Alloy>
app/controllers/index.js
$.fade.open($.card)
$.index.open()

Titanium Classic example

Resources/app.js
const { createAnimation } = require('lib/purgetss.ui')

const window = Ti.UI.createWindow({ backgroundColor: '#0f172a' })
const card = Ti.UI.createView({ width: 160, height: 96, opacity: 0 })
const fade = createAnimation({
duration: 200,
animationProperties: {
open: { opacity: 1 },
close: { opacity: 0 }
}
})

window.add(card)
window.addEventListener('open', () => fade.open(card))
window.open()

Utilities and lifecycle

deviceInfo() only writes diagnostic output. saveComponent() calls both source.toImage() and Ti.Media.saveToPhotoGallery(); check photo-gallery permissions before using it and do not expect a return value or completion callback from the wrapper.

When a window owns draggable views, call undraggable() before releasing them. Also remove app-level or gesture listeners that your application added and drop references to callbacks and views when the window closes. See the Classic lifecycle example.