first commit

This commit is contained in:
2024-07-15 11:28:08 +02:00
commit f52d538ea5
21891 changed files with 6161164 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](https://developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](https://developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](https://developers.elementor.com/)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,16 @@
## Documentation has Moved
This document in now available on [Developer API for Elementor](developers.elementor.com)
### Quick Links
* [Getting Started](https://developers.elementor.com/getting-started/)
* [The Editor](https://developers.elementor.com/elementor-editor/)
* [The Widgets](https://developers.elementor.com/elementor-widgets/)
* [The Controls](https://developers.elementor.com/elementor-controls/)
* [Code Reference](https://code.elementor.com)
* [PHP Hooks](https://code.elementor.com/php-hooks/)
* [JS Hooks](https://code.elementor.com/js-hooks/)
* [Classes](https://code.elementor.com/classes/)
* [Methods](https://code.elementor.com/methods/)
* [Functions](https://code.elementor.com/functions/)

View File

@@ -0,0 +1,174 @@
## API -- `$e.commands`
The new Commands API (since 2.7.0), provides a simple and convenient way to run something in the editor, create a widget, as well as show a notice or undo changes, using JS commands.
The full list of commands, including custom & 3rd commands, is available via: `$e.commands.getAll();`
* **Description**: `$e.commands` API is a manager of all the _commands_, allow you to create custom _commands_ that runs by `$e.run()`, each components have his own unique commands, and all the commands are managed by this **API**.
* **Location**: */core/common/assets/js/components/commands.js*
* **Parent**: `elementorModules.Module`
* **Available commands:** for further information about **all** the commands, please visit [`{$e.commands.getAll()}`](commands-methods/getall.md)**method**.
* **Methods**:
| Method | Params | Returns | Description |
|--------------------------------------|---------------------------------------------------------------------------------------|------------------------------------|-------------------------------------------------------------------------------------|
| `$e.commands.getAll()` | | | Receive all loaded commands.
| `$e.commands.register()` | `{(BaseComponent⎮string)}` *component*, `{String}` command, `{function()}` *callback* | `{Commands}` *$e.commands* | Register new command.
| `$e.commands.getComponent()` | `{String}` *command* | `{BaseComponent)` | Receive Component of the command.
| `$e.commands.is()` | `{String}` *command* | `{Boolean}` | Checks if current running command is the same parameter command.
| `$e.commands.isCurrentFirstTrace()` | `{String}` *command* | `{Boolean}` | Checks if parameter command is the first command in trace that currently running.
| `$e.commands.getCurrent()` | | `{Object}` | Receive currently running components and its commands.
| `$e.commands.getCurrentArgs()` | | `{Object}` | Receive currently running command args.
| `$e.commands.getCurrentFirst()` | | `{String}` | Receive first command that currently running.
| `$e.commands.getCurrentFirstTrace()` | | `{Object}` | Receive first command in trace that currently running.
| `$e.commands.beforeRun()` | `{String}` *command*, `{Object}` *args* | `{Boolean}` *dependency result* | Method fired before the command runs.
| `$e.commands.run()` | `{String}` *command*, `{Object}` *args* | `{}` *results* | Runs a command.
| `$e.commands.runShortcut()` | `{String}` *command*, *event* | `{}` *results* | Run shortcut.
| `$e.commands.afterRun()` | | | Method fired after the command runs.
| `$e.commands.error()` | `{String}` *message* | | Throws error.
* **Examples**:
```javascript
// Example create and register new command.
// Important: Available to run in the console does not depends on anything else.
class ExampleCommand extends $e.modules.CommandBase {
apply( args ) {
// Output command args to console.
console.log( 'ExampleCommand: ', args );
// Return object as example.
return {
example: 'result from ExampleCommand',
};
}
}
class CustomComponent extends $e.modules.ComponentBase {
getNamespace() {
return 'custom-component';
}
defaultCommands() {
// Object of all the component commands.
return {
example: ( args ) => ( new ExampleCommand( args ) ).run(),
};
}
}
// Register the new component.
$e.components.register( new CustomComponent() );
// Run's 'example' command from 'custom-component'.
result = $e.run( 'custom-component/example', {
property: 'value',
} );
// Output command run result.
console.log( 'e-commands-eg-1-result: ', result );
```
## Guidelines, conventions & file's structure
* Each command, should be owned by a [component](../core/components.md#guidelines-conventions--files-structure).
* Currently, there are _3_ main *base/types*:
* Commands - Base class: `$e.modules.CommandBase` - `[USER]` commands that represent user actions.
* Commands internal - Base class: `$e.modules.CommandInternalBase` - `[INTERNAL]` for internal usage.
* Commands data - Base class: `$e.modules.CommandData` - `[DATA]` commands for communicate with the _data\cache\backend_.
* Each [component](../core/components.md#guidelines-conventions--files-structure), can override few methods `defaultCommands`, `defaultCommandsInternal`, `defaultData`
methods which are used to import the command(s), according to their type.
* The commands should be imported via built-in method called `importCommands`.
* Example:
```html class:"lineNo"
1 📦 component
2 │ 📜 component.js
3 │
4 └───📂 commands
5 │ │ 📜 index.js ( has all the commands exported )
6 │ │ 📜 exmaple-command.js
7 │ │ ...
```
`component/commands/index.js` file at line *5*:
```javascript
export { ExmapleCommand } from './example-command';
```
* use `importCommands` example: `component/component.js` file at line *2*:
```javascript
import * as commands from './commands/';
export class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'component-name';
}
defaultCommands() {
return this.importCommands( commands );
}
}
```
* All series of commands type should have unique folder and index file to hold them:
* Commands:
* As the example above.
* Commands internal
* Example:
```html class:"lineNo"
1 📦 component
2 │ 📜 component.js
3 │
4 └───📂 commands-internal
5 │ │ 📜 index.js ( has all the commands exported )
6 │ │ 📜 internal-command.js
7 │ │ ...
```
* `component/commands-internal/index.js` file at line *5*:
```javascript
export { InternalCommand } from './internal-command';
```
* use `importCommands` example: `component/component.js` file at line *2*:
```javascript
import * as commandsInternal from './commands-internal/';
export class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'component-name';
}
defaultCommandsInternal() {
return this.importCommands( commandsInternal );
}
}
```
* Commands data
* Example:
```html class:"lineNo"
1 📦 component
2 │ 📜 component.js
3 │
4 └───📂 commands-data
5 │ │ 📜 index.js ( has all the commands exported )
6 │ │ 📜 data-command.js
7 │ │ ...
```
* `component/commands-data/index.js` file at line *5*:
```javascript
export { DataCommand } from './data-command';
```
* use `importCommands` example: `component/component.js` file at line *2*:
```javascript
import * as commandsData from './commands-data/';
export class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'component-name';
}
defaultData() {
return this.importCommands( commandsData );
}
}
```
### **Note:** further information about [`{$e.modules.CommandBase}`](../modules/command-base.full.md)**class**.
### [Back](../readme.md)

View File

@@ -0,0 +1,115 @@
# API - `$e.components`
The new Components API (since 2.7.0), provides a simple and convenient way to bind all route and commands, and keyboard shortcuts that belong to a UI component into one controller.
The full list of components, including custom & 3rd routes, is available via: `$e.components.getAll();`
Each component has its unique namespace, that all its command and routes are nested under it.
On route, to a component route, when the component becomes “active”, it allows binding of keyboard shortcuts for each component.
The components are extensible so a 3rd party plugin can add some routes, command and shortcuts to an existing component.
* **Description**: `$e.components` API is a manager for whole **api** components.
* **Location**: *core/common/assets/js/api/core/components.js*
* **Parent**: `elementorModules.Module`
* **Methods**:
| Method | Parameters | Returns | Description
|------------------------------|--------------------------------|-----------------------------------------------|------------------------------|
| `$e.components.getAll()` | | `{array.<string>}` | Receive all components.
| `$e.components.register()` | `{ComponentBase}` *component* | `{ComponentBase}` *component* | Register a component.
| `$e.components.get()` | `{String}` *id* | `{ComponentBase}` *component* | Get component instance by id.
| `$e.components.getActive()` | | `{Object.<ComponentBase>}` *activeComponents* | Get active components.
| `$e.components.activate()` | `{String}` *namespace* | | Activate component.
| `$e.components.inactivate()` | `{String}` *namespace* | | Deactivate component.
| `$e.components.isActive()` | `{String}` *namespace* | `{Boolean}` *isActive* | Is component active.
> **Note:** to see all the components please. please visit [`{$e.commands.getAll()}`](commands-methods/getall.md)**method**
* **Examples**:
```javascript
// Example of creating and registering a new component, available to run in the console and does not depend on anything else.
class CustomComponent extends $e.modules.ComponentBase {
getNamespace() {
return 'custom-component';
}
defaultCommands() {
// Object of all the component commands.
return {
// 'example' command.
example: ( args ) => {
// Output command args to console.
console.log( 'ExampleCommand: ', args );
// Return object as example.
return {
example: 'result from ExampleCommand',
};
},
};
}
}
// Register the new component.
$e.components.register( new CustomComponent() );
// Runs 'example' command from 'custom-component'.
result = $e.run( 'custom-component/example', {
property: 'value',
} );
// Output command run result.
console.log( 'e-components-eg-1-result: ', result );
```
## Guidelines, conventions & file's structure
* You can view your component as a namespace that holds your [commands](../core/commands.md#guidelines-conventions--files-structure), [hooks](../core/hooks.md#guidelines-conventions--files-structure), [routes](#UPDATE_WHEN_READY), [tabs](#UPDATE_WHEN_READY), [shortcuts](#UPDATE_WHEN_READY) & [utils](#UPDATE_WHEN_READY).
* Component class file should be named `component.js`
* Component folder name should be named as a component namespace or a sub-component namespace.
* Components and sub-components convention example, described in next scenario:
Assuming you create a `Document` component which creates a sub-component `Elements`
```html class:"lineNo"
1 📦 document
2 │ 📜 component.js
3 │ 📜 index.js ( has all sub-components exported )
4 │
5 └───📂 elements
6 │ │ 📜 component.js
7 │ │ | ...
```
`document/index.js` file at line *3*:
```javascript
export { default as ElementsComponent } from './elements/component.js';
```
`document/component.js` file at line *2*:
```javascript
import * as components from './';
export default class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'document';
}
registerAPI() {
// Register sub components.
Object.values( components ).forEach( ( ComponentClass ) =>
$e.components.register( new ComponentClass )
);
super.registerAPI();
}
}
export default class Component;
```
`document/elements/component.js` file at line *6*:
```javascript
export default class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'elements';
}
}
export default class Component;
```
### [Back](../readme.md)

View File

@@ -0,0 +1,182 @@
## API - `$e.hooks`
* **Description**: `$e.hooks` api is a manager of `$e.hooks.ui` & `$e.hooks.data`, allow you to create custom hooks.
the hooks attached to $e.commands and each hook fired _after/before_ running a command, that runs by $e.run().
* **Location**: *core/common/assets/js/api/core/hooks.js*
* **Methods**:
| Method | Params | Returns | Description
|--------------------------------------|-------------------------------------------------------------------------------------------------|-----------------------|-----------------------------------------------------------
| `$e.hooks.activate()` | | | Activate all hooks.
| `$e.hooks.deactivate()` | | | Deactivate all hooks.
| `$e.hooks.getAll()` | | `{Array}` | Receive all loaded hooks.
| `$e.hooks.register()` | `{String}` *type*, `{String}` *event*, `{HookBase}` *instance* | `{Object}` *callback* | Register a hook.
| `$e.hooks.run()` | `{String}` *type*, `{String}` *event*, `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a hook.
| `$e.hooks.registerDataAfter()` | `{HookBase}` *instance* | `{Object}` *callback* | Register data hook that runs after the command runs.
| `$e.hooks.registerDataCatch()` | `{HookBase}` *instance* | `{Object}` *callback* | Register data hook that runs when the command fails.
| `$e.hooks.registerDataDependency()` | `{HookBase}` *instance* | `{Object}` *callback* | Register data hook that runs before the command runs as dependency.
| `$e.hooks.registerUIAfter()` | `{HookBase}` *instance* | `{Object}` *callback* | Register UI hook that runs after the commands run.
| `$e.hooks.registerUICatch()` | `{HookBase}` *instance* | `{Object}` *callback* | Register UI hook that runs when the command fails.
| `$e.hooks.registerUIBefore()` | `{HookBase}` *instance* | `{Object}` *callback* | Register UI hook that runs before the command.
| `$e.hooks.runDataAfter()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a data hook that runs after the command.
| `$e.hooks.runDataCatch()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a data hook that runs when the command fails.
| `$e.hooks.runDataDependency()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a data hook that runs before the command as dependency.
| `$e.hooks.runUIAfter()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a UI hook that runs after the commands run.
| `$e.hooks.runUICatch()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a UI hook that runs when the command fails.
| `$e.hooks.runUIBefore()` | `{String}` *command*, `{Object}` *args*, `{*}` *result* | `{Boolean}` | Run a UI hook that runs before the command.
## Guidelines, conventions & file's structure
* Each hook is owned by a [component](../core/components.md#guidelines-conventions--files-structure).
* Each [component](../core/components.md#guidelines-conventions--files-structure), can extend `defaultHooks` method which are used to import the hooks.
* The hooks imported via built-in method called `importHooks`.
* All the hooks should be exported in one index file:
```javascript
// index.js
export { FooterSaverRefreshMenu } from './ui/document/elements/settings/footer-saver-refresh-menu';
export { UpdateButton } from './ui/document/save/set-is-modifed/update-button';
export { BypassImport } from './data/document/elements/import/bypass-import';
export { SaveExtras } from './data/document/save/save/save-extras';
```
You can have as many indexes in every hierarchy under `component/hooks/what-ever-you-wish` as you wish to organize your code, the requirement is to have one index file,
at `component/hooks/index.js` which exports all the hooks, take the **index.js** example above as a scenario:
```html class:"lineNo"
1 📦 component
2 │ 📜 component.js
3 │
4 └───📂 hooks
5 │ │ 📜 index.js ( has all the hooks exported )
6 │ │
7 │ └───📂 ui
8 │ │ └───📂 document
9 │ │ │ └───📂 elements
10 │ │ │ │ └───📂 settings
11 │ │ │ │ │ │ 📜 footer-saver-refresh-menu.js
12 │ │ │ │ │ │ ...
13 │ │ │ └───📂 save
14 │ │ │ │ └───📂 set-is-modfifed
15 │ │ │ │ │ │ 📜 update-button.js
16 │ │ │ │ │ │ ...
17 │ │ 📜 index.js ( has all ui hooks exported )
18 │ │ ...
19 │ └──📂 data
20 │ │ └───📂 document
21 │ │ │ └───📂 elements
22 │ │ │ │ └───📂 import
23 │ │ │ │ │ │ 📜 bypass-import.js
24 │ │ │ │ │ │ ...
25 │ │ │ └───📂 save
26 │ │ │ │ └───📂 save
27 │ │ │ │ │ │ 📜 save-extras.js
28 │ │ │ │ │ │ ...
29 │ │ 📜 index.js ( has all data hooks exported )
30 │ │ ...
```
`component/hooks/index.js` file at line *5*:
```javascript
export * from './ui/';
export * from './data/';
```
`component/hooks/ui/index.js` file at line *17*:
```javascript
export { FooterSeverRefreshMenu } from './document/elements/settings/footer-saver-refresh-menu';
export { UpdateButton } from './document/save/set-is-modifed/update-button';
```
`component/hooks/data/index.js` file at line *29*:
```javascript
export { BypassImport } from './document/elements/import/bypass-import';
export { SaveExtras } from './document/save/save/save-extras';
```
* use `importHooks` example: `component/component.js` file at line *2*:
```javascript
import * as hooks from './hooks/';
export class Component extends $e.modules.ComponentBase {
getNamespace() {
return 'component-name';
}
defaultHooks() {
return this.importHooks( hooks );
}
}
```
* Hook conventions
```javascript class:"lineNo"
1 // {FILE_PATH}/{FILE_NAME} - This is line should be deleted - just for the exmaple.
2 import HookUIAfter from 'elementor-api/modules/hooks/{TYPE}/after';
3
4 export class {FILE_NAME_CAMEL_CASE} extends HookUIAfter {
5 getCommand() {
6 return '{COMMAND}';
7 }
8
9 getId() {
10 return '{FILE_NAME_WITHOUT_JS}--{COMMAND}';
11 }
12
13 getContainerType() {
14 return '{CONTAINER_TYPE}';
15 }
16
17 getConditions( args ) {
18 return args.settings && 'undefined' !== typeof args.settings.post_status;
19 }
20
21 apply( args ) {
22 const { footerSaver } = $e.components.get( 'document/save' );
23
24 footerSaver.setMenuItems( args.container.document );
25
26 footerSaver.refreshWpPreview();
27 }
28 }
29
30 export default {FILE_NAME_CAMEL_CASE};
```
> Legend
| Name | Format - Description | Value for example.
|------------------------|-------------------------------------|---------------------
|`{TYPE}` | `ui` or `data` depends on the hook | `ui`
|`{COMMAND}` | which command to hook | `document/elements/settings`
|`{FILE_NAME}` | kebab case, name is description oh what the hook does | `footer-saver-refresh-menu.js`
|`{FILE_NAME_CAMEL_CASE}`| camel case, of `{FILE_NAME}` | `FooterSaverRefreshMenu`
|`{FILE_NAME_WITHOUT_JS}`| `{FILE_NAME}` without `.js` | `footer-saver-refresh-menu`
|`{FILE_PATH}` | `{TYPE}/{COMMAND}/{FILE_NAME}` | `ui/document/elements/settings/footer-saver-refresh-menu.js`
|`{CONTAINER_TYPE}` | optional, gain performance if container type is known in advance | `document`
> Example
```javascript class:"lineNo"
1 // ui/document/elements/settings/footer-saver-refresh-menu.js - This line should be deleted - just for the example.
2 import HookUIAfter from 'elementor-api/modules/hooks/ui/after';
3
4 export class FooterSaverRefreshMenu extends HookUIAfter {
5 getCommand() {
6 return 'document/elements/settings';
7 }
8
9 getId() {
10 return 'footer-save-refresh-menu--document/elements/settings';
11 }
12
13 getContainerType() {
14 return 'document';
15 }
16
17 getConditions( args ) {
18 return args.settings && 'undefined' !== typeof args.settings.post_status;
19 }
20
21 apply( args ) {
22 const { footerSaver } = $e.components.get( 'document/save' );
23
24 footerSaver.setMenuItems( args.container.document );
25
26 footerSaver.refreshWpPreview();
27 }
28 }
29
30 export default FooterSaverRefreshMenu; // Required - comment should be deleted.
```
### **Note:** further information about how to use hooks, can be found at [`{$e.hooks.ui}`](hooks/ui.md) and [`{$e.hooks.data}`](hooks/data.md) accoridng to their type.
### [Back](../readme.md)

View File

@@ -0,0 +1,72 @@
# Collection
The `Elementor\Core\Utils\Collection` class provide a fluent, convenient wrapper for working with arrays of data. The idea is to transform the use of `foreach`, `for` or php built it functions with the `Collection` class, basically to make the code more readable.
The class is heavily inspire by the `Laravel Collection`, it is recommended to read the laravel docs to understand the concept of collections: [Laravel Docs](https://laravel.com/docs/collections).
Another great resource, if videos are your cup of tea, this talk by Adam Wathan: [Curing the common loop ](https://www.youtube.com/watch?v=crSUWtRYw-M).
Example:
```php
use Elementor\Core\Utils\Collection;
use Elementor\Core\Base\Document;
$only_parent_documents = ( new Collection( $data ) )
->map( function ( Document $document ) {
return $document->get_main_id();
})
->unique()
->values();
```
Same result without Collection:
```php
use Elementor\Core\Base\Document;
$only_parent_documents = [];
/** @var Document $document */
foreach( $data as $document ) {
$id = $document->get_main_id();
if ( in_array( $id, $only_parent_documents, true ) ) {
continue;
}
$only_parent_documents[] = $id;
}
```
Another option:
```php
use Elementor\Core\Base\Document;
$only_parent_documents = array_unique(
array_map( function ( Document $document ) {
return $document->get_main_id();
}, $data )
);
```
### Extend Collection
There are two ways to extend the `Collection` class, you can add your new method to class itself, or you can extend the `Collection` and create more specific `Collection` class, for example `Documents_Collection`:
```php
use Elementor\Core\Utils\Collection;
use Elementor\Core\Base\Document;
class Documents_Collection extends Collection {
public function parent_document_ids() {
return $this->map( function ( Document $document ) {
return $document->get_main_id();
})
->unique();
}
}
```
usage:
```php
$ids = ( new Documents_Collection( $data ) )
->parent_document_ids()
->values();
```