diff --git a/rangy/rangy-tests.ts b/rangy/rangy-tests.ts new file mode 100644 index 000000000..b0c6c1cc2 --- /dev/null +++ b/rangy/rangy-tests.ts @@ -0,0 +1,95 @@ +/// + +declare function assertAny(a:any):any; +declare function assertBoolean(b:boolean):any; +declare function assertString(s:string):any; +declare function assertRangyRange(r:RangyRange):any; +declare function getRangyRange():RangyRange; + +function testRangyStatic() { + rangy.addInitListener((rangy:RangyStatic) => { + }); + + rangy.createMissingNativeApi(); + rangy.shim(); + + let nativeRange:Range|TextRange = rangy.createNativeRange(document); + nativeRange = rangy.createNativeRange(window); + nativeRange = rangy.createNativeRange(new HTMLIFrameElement); + nativeRange = rangy.createNativeRange(); + + let rangyRange:RangyRange = rangy.createRange(document); + rangyRange = rangy.createRange(window); + rangyRange = rangy.createRange(new HTMLIFrameElement); + rangyRange = rangy.createRange(); + + rangyRange = rangy.createRangyRange(document); + rangyRange = rangy.createRangyRange(window); + rangyRange = rangy.createRangyRange(new HTMLIFrameElement); + rangyRange = rangy.createRangyRange(); + + let nativeSelection:Selection = rangy.getNativeSelection(window); + nativeSelection = rangy.getNativeSelection(); + + let rangySelection:RangySelection = rangy.getSelection(); + + let initialized:boolean = rangy.initialized; + let supported:boolean = rangy.supported; +} + +function testRangyRange() { + let rangyRange:RangyRange = rangy.createRange(); + + assertBoolean(rangyRange.canSurroundContents()); + rangyRange.collapseAfter(new Node); + rangyRange.collapseBefore(new Node); + rangyRange.collapseToPoint(new Node, 23); + assertAny(rangyRange.compareNode(new Node)); + assertBoolean(rangyRange.containsNode(new Node, true)); + assertBoolean(rangyRange.containsNodeContents(new Node)); + assertBoolean(rangyRange.containsNodeText(new Node)); + assertBoolean(rangyRange.containsNodeText(new Node)); + assertBoolean(rangyRange.containsRange(rangyRange)); + assertBoolean(rangyRange.equals(rangyRange)); + let bookmark:{start:number, end:number} = rangyRange.getBookmark(); + bookmark = rangyRange.getBookmark(new Node); + let doc:Document = rangyRange.getDocument(); + let nodes:Node[] = rangyRange.getNodes(); + nodes = rangyRange.getNodes([new Node]); + nodes = rangyRange.getNodes([new Node], (node:Node) => true); + assertString(rangyRange.inspect()); + assertRangyRange(rangyRange.intersection(rangyRange)); + assertBoolean(rangyRange.intersectsOrTouchesRange(rangyRange)); + assertBoolean(rangyRange.intersectsRange(rangyRange)); + assertBoolean(rangyRange.isValid()); + rangyRange.moveToBookmark({}); + rangyRange.normalizeBoundaries(); + rangyRange.refresh(); + rangyRange.select(); + rangyRange.setStartAndEnd(new Node, 23); + rangyRange.setStartAndEnd(new Node, 23, 42); + rangyRange.setStartAndEnd(new Node, 23, new Node, 42); + rangyRange.splitBoundaries(); + assertString(rangyRange.toHtml()); + assertRangyRange(rangyRange.union(rangyRange)); +} + +function testSelection() { + let selection:RangySelection = rangy.getSelection(); + + selection.detach(); + let ranges:RangyRange[] = selection.getAllRanges(); + selection.getBookmark(new Node); + let nativeTextRange:TextRange = selection.getNativeTextRange(); + assertString(selection.inspect()); + assertBoolean(selection.isBackwards()); + selection.moveToBookmark({}); + var nativeSelection:Selection = selection.nativeSelection; + selection.refresh(); + selection.refresh(true); + selection.restoreRanges({}); + var object:Object = selection.saveRanges(); + selection.setRanges(ranges); + selection.setSingleRange(getRangyRange()); + assertString(selection.toHtml()); +} diff --git a/rangy/rangy.d.ts b/rangy/rangy.d.ts new file mode 100644 index 000000000..16ce2a5a3 --- /dev/null +++ b/rangy/rangy.d.ts @@ -0,0 +1,66 @@ +// Type definitions for Rangy +// Project: https://github.com/timdown/rangy +// Definitions by: Rudolph Gottesheim +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +interface RangyRange extends Range { + setStartAndEnd(startNode:Node, startOffset:number, endNode?:Node, endOffset?:number):any; + setStartAndEnd(startNode:Node, startOffset:number, endOffset:number):any; + canSurroundContents():boolean; + isValid():boolean; + toHtml():string; + compareNode(node:Node):any; + intersectsOrTouchesRange(range:RangyRange):boolean; + intersectsRange(range:RangyRange):boolean; + intersection(range:RangyRange):RangyRange; + union(range:RangyRange):RangyRange; + containsNode(node:Node, partial:boolean):boolean; + containsNodeContents(node:Node):boolean; + containsNodeText(node:Node):boolean; + containsRange(range:RangyRange):boolean; + splitBoundaries():any; + normalizeBoundaries():any; + collapseToPoint(node:Node, offset:number):any; + collapseBefore(node:Node):any; + collapseAfter(node:Node):any; + getNodes(nodeTypes?:any[], filter?:(node:Node) => boolean):Node[]; + getBookmark(containerNode?:Node):{start:number, end:number}; + moveToBookmark(bookmark:Object):any; + getDocument():Document; + inspect():string; + equals(range:RangyRange):boolean; + refresh():any; + select():any; +} + +interface RangySelection extends Selection { + nativeSelection:Selection; + isBackwards():boolean; + refresh(checkForChanges?:boolean):any; + toHtml():string; + getAllRanges():RangyRange[]; + getNativeTextRange():TextRange; + setSingleRange(range:RangyRange):any; + setRanges(ranges:RangyRange[]):any; + getBookmark(containerNode:Node):any; + moveToBookmark(bookmark:Object):any; + saveRanges():Object; + restoreRanges(saved:Object):any; + detach():any; + inspect():string; +} + +interface RangyStatic { + createNativeRange(doc?:Document|Window|HTMLIFrameElement):TextRange|Range; + createRange(doc?:Document|Window|HTMLIFrameElement):RangyRange; + createRangyRange(doc?:Document|Window|HTMLIFrameElement):RangyRange; + getNativeSelection(win?:Window):Selection; + getSelection():RangySelection; + addInitListener(listener:(rangy:RangyStatic) => void):any; + shim():any; + createMissingNativeApi():any; + initialized:boolean; + supported:boolean; +} + +declare var rangy:RangyStatic;