> For the complete documentation index, see [llms.txt](https://docs.adnuntius.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.adnuntius.com/adnuntius-advertising/requesting-ads/intro/adn-utility.md).

# Utility Methods

adn.js provides utility methods that can be used in your creative's layouts to help you with its design.

The following methods can each be called from within a layout and provide the described functionality. The methods have been written specifically to work on as wide an array of browsers as possible.

## adn.util.isNumber(value)

Whether the passed-in value is a finite number. Returns `true` or `false`.

## adn.util.isInteger(value)

Whether the passed-in value is an integer. Returns `true` or `false`.

## adn.util.isArray(value)

Whether the passed-in value is an array. Returns `true` or `false`.

## adn.util.isObject(value)

Whether the passed-in value is an object. Returns `true` or `false`. Arrays and `null` return `false` and are not considered an object.

## adn.util.isTrue(value)

Whether the passed-in value is considered true. Returns `true` or `false`.

Both the string value `'true'` and the boolean value `true` will return `true` here.

## adn.util.isFunction(value)

Whether the passed-in value is a function. Returns `true` or `false`.

## adn.util.isString(value)

Whether the passed-in value is a string. Returns `true` or `false`.

## adn.util.isStringWithChars(value)

Whether the passed-in value is a string with at least one character that is not blank space. Returns `true` or `false`.

## adn.util.isDefined(value)

Whether the passed-in value is defined. Returns `true` or `false`. Returns `false` for any value that is either `undefined` or `null`, otherwise `true`.

## adn.util.isLoopable(value)

Whether the passed-in value can be iterated over. Returns `true` or `false`. Returns `true` for any array, HTML collection or NodeList.

## adn.util.isTopWindow()

Whether the current window is the top window (not an Iframe). Returns `true` or `false`.

## adn.util.hasProperties(obj)

Whether the passed-in object has at least one property of its own. Returns `true` or `false`. If the passed-in parameter is not an object, will return `false`.

## adn.util.noop

Not a method as such -- is a property that contains an empty function that can be used to do nothing wherever a function is required.

## adn.util.dimension(value)

Returns the passed-in value as a string representation of dimensions in pixels.

Here are some examples:

* `12` returns `'12px'`
* `'12'` returns `'12px'`
* `'12px'` returns `'12px'`
* `'12%'` returns `'12%'`
* Every other value passed in that is neither a number nor a string will be returned unaffected

## adn.util.trim(value)

Returns the passed-in value with any blank space at the beginning or end of the string removed. If not a string, returns the passed-in value unaffected.

## adn.util.endsWith(value, endValue)

Whether the passed-in value ends with the passed-in endValue. Returns `true` or `false`. If either the passed-in value or endValue is not a string, will return `false`.

## adn.util.getFrameElement()

Returns the current window's frame element. Wraps `window.frameElement` around a try-catch block to handle any browser cross-domain access restrictions.

## adn.util.createDelegate(instance, method)

Returns a delegate function that can be used with extra supplied arguments. Here's an example of how it works:

```
adn.util.createDelegate(this, function(firstArg, secondArg, thirdArg) {
  console.log(firstArg); // outputs whatever the consumer of this delegate passes in
  console.log(secondArg); // outputs "anotherParam"
  console.log(thirdArg); // outputs 12
}, "anotherParam", 12)
```

## adn.util.addEventListener(object, eventName, handler)

Adds an event listener for the supplied event on the object and calls the handler function. Here's an example of how it works:

```
adn.util.addEventListener(window, 'load', function(e) {
  console.log("This is the handler being called", e);
});
```

## adn.util.detachEventListener(object, eventName, handler)

Removes the event listener for the supplied event and the handler on the object. Here's an example of how it works:

```
adn.util.detachEventListener(window, 'load', predefinedHandlerFunctionToBeDetached);
```

## adn.util.getWindowSize()

Gets the viewport's size. Returns an object like the following: `{width: 1000, height: 1500}`

## adn.util.getWindowDims()

Gets the viewport's size. Works just like `adn.util.getWindowSize` but returns: `{w: 1000, h: 1500}`

## adn.util.getScrollPos()

Gets the window's current scroll position. Returns an object like the following: `{left: 10, top: 1500}`

## adn.util.getElementPosition(element)

Gets the element's position in the page. Returns an object like the following: `{left: 10, top: 1500}`

## adn.util.getElementDimensions(element)

Gets the element's dimensions. Returns an object like the following: `{w: 200, h: 300}`

## adn.util.forEach(collection, callback)

Loops through the supplied collection and calls the callback on every item.

Works on anything that is iterable, i.e. any object, array, HTML Collection and NodeList.

Here's two examples of how it works:

```
adn.util.forEach({a: 'b', c: 'd'}, function(value, key) {
  console.log("Key", key);
  console.log("Value", value);
});
adn.util.forEach(['a','b'], function(entry, i) {
  console.log(entry + " is found at index " + i);
});
```

## adn.util.filter(collection, callback)

Returns an array of values that have passed the filter according to the callback.

Works on anything that is iterable, i.e. any object, array, HTML Collection and NodeList, but will return an array.

Here's two examples of how it works:

```
adn.util.filter({a: 'b', c: 'd', e: 'f'}, function(value, key) {
  return key === 'a' || value === 'f';
}); // returns ['b', 'f'];

adn.util.filter(['a', 'b', 'd'], function(entry, i) {
  return entry === 'a' || i === 2;
}); // returns ['a', 'd'];
```

## adn.util.find(collection, callback)

Returns the first value found to match the conditions in the callback.

Works on anything that is iterable, i.e. any object, array, HTML Collection and NodeList, and will return a value. Returns `null` if no match is found according to the callback criteria.

Here's two examples of how it works:

```
adn.util.find({a: 'b', c: 'd', e: 'f'}, function(value, key) {
  return key === 'a';
}); // returns 'b';

adn.util.find(['a', 'b', 'd'], function(entry, i) {
  return entry === 'b';
}); // returns 'b';
```

## adn.util.hasValue(collection, value)

Whether the collection contains any element with the passed-in value.

Works on anything that is iterable, i.e. any object, array, HTML Collection and NodeList. Returns `true` or `false`.

Here's two examples of how it works:

```
adn.util.hasValue({a: 'b', c: 'd', e: 'f'}, 'f'); // returns true;

adn.util.hasValue(['a', 'b', 'd'], 'd'); // returns 'd';
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.adnuntius.com/adnuntius-advertising/requesting-ads/intro/adn-utility.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
