forked from joomla/Component-Builder
Added lots more demo data on Github to help demonstrate the ease of use. Adding feature to insert custom scripting during install. Adding easy issue tracking, and member notice board. Many bug fixes, to the compiler and general improvements.
This commit is contained in:
parent
ecb3ab5af9
commit
33f3bb5652
120
README.md
120
README.md
@ -1,47 +1,117 @@
|
||||
# Component Builder (2.1.21)
|
||||
# ###Component_name### (###VERSION###)
|
||||
|
||||
This is a [Joomla 3.x] (http://www.joomla.org/) component.
|
||||
This is a [Joomla 3.x](http://www.joomla.org/) component.
|
||||
|
||||
![Component Builder image] (https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder/master/admin/assets/images/component-300.jpg "The Component Builder")
|
||||
![###Component_name### image](https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder/master/admin/assets/images/component-300.jpg "The ###Component_name###")
|
||||
|
||||
The Component Builder for Joomla that is highly advanced, truly able to build extremely complex components in a fraction of the time.
|
||||
###DESCRIPTION###
|
||||
|
||||
> **You can purchase demo content inside Component Builder:**
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (###VERSION###) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
+ **Development Version** ([get this demo set](https://www.vdm.io/joomla-component-builder))
|
||||
Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
|
||||
*Help View Integration*
|
||||
# Some of the Features
|
||||
|
||||
*Demo Component* see the build on [github] (https://github.com/namibia/demo-joomla-3-component)
|
||||
+ Adding mySQL Dump to any View/Table.
|
||||
+ Grab existing Table data and build a dynamic dump.
|
||||
+ Unlimited Joomla Components.
|
||||
+ Unlimited Tables/Views.
|
||||
+ Reusing Views and Fields.
|
||||
+ Runs on Your Own Joomla Install.
|
||||
+ Add Dynamic/custom back-end views that uses Table and Chart result sets.
|
||||
+ Build data query of extreme complex nature to use in Dynamic/custom views.
|
||||
+ Highly Dynamic/custom Front-end Structures.
|
||||
+ Dynamically setup templates and layouts for Front-end design.
|
||||
+ Integration of the excellent UIKIT lib.
|
||||
+ Integration of the excellent FOOTABLE lib.
|
||||
+ All Joomla Standard Field Types (including repeatable fields).
|
||||
+ Strong Implementation of all Joomla Form Security.
|
||||
+ Load data via ajax with ease.
|
||||
+ You can add an Update Server to Components you build.
|
||||
+ Build advanced Dynamic front-end forms.
|
||||
+ Dynamic data queries from multiple tables.
|
||||
+ Place in local GIT folder, and publish to sales server.
|
||||
+ Include any amount of custom files and folders during build.
|
||||
+ Static helper class with smart methods already included.
|
||||
+ Static helper methods Can easily be added.
|
||||
+ Direct install from complier view.
|
||||
+ Integrative with native Joomla Categories and Tags.
|
||||
+ Fully Dynamic Search Friendly URL Auto Implementation.
|
||||
+ Custom scripting options all over the MVC structure.
|
||||
+ Permission implementation down to each view, item and field.
|
||||
+ Easy extendible to include other libraries.
|
||||
+ Can include SQL and visioning update link to distribute your component updates via Joomla default upgrade of components.
|
||||
+ Easy Export & Import addon to all backend-tables.
|
||||
+ Overriding ability of import concepts in all backend-tables.
|
||||
+ The Batch and Filter implementation on all backend-list views.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
+ **Dev + Howtos Version** ([get this demo set](https://www.vdm.io/joomla-component-builder))
|
||||
# Just Imagine
|
||||
|
||||
*All the above*
|
||||
+ Your Component Back-end can be more advanced then the Joomla Article Manager.
|
||||
+ Your Code as Perfectly Unified to the strict Joomla Standards.
|
||||
+ Adding Custom Scripting almost anywhere in the MVC structure.
|
||||
+ Import and export feature to all backend-views.
|
||||
+ Batch copy and move/update feature for all backend-views.
|
||||
+ History tracking per/change made on any back-end item.
|
||||
+ Dynamic field control, to show and hide fields in amazing ways.
|
||||
+ Front-end freedom of design that allows for any library to be used.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
*Sermon Distributor* see the build on [github] (https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
# You are in Control
|
||||
|
||||
*Training & Help Videos* tutorials in the component included.
|
||||
+ You can change the licensing template for your components.
|
||||
+ You can change/improve existing field types and add more.
|
||||
+ Line numbers to show where in compiler was the code build.
|
||||
+ You can improve the component since all code are open-source.
|
||||
+ You need only pay us once and use the component forever.
|
||||
+ You can dynamically add internal help structures to all component.
|
||||
+ There is no limitations on how big or how much you want to build (server limitation only).
|
||||
+ This is a complete factory kind of component that functions like a deployment hub.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Get Access to Video Tutorials
|
||||
|
||||
> **You can purchase more demo content for ###Component_name### including access to training & help video tutorials:**
|
||||
|
||||
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
|
||||
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
+ Help View Integration*
|
||||
+ Training & Help Videos* tutorials in the component included.
|
||||
|
||||
[**GET ACCESS NOW!**](https://www.vdm.io/joomla-component-builder#get)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
Would you require more help please open and issue here on [gitHub today](https://github.com/vdm-io/Joomla-Component-Builder/issues)!
|
||||
|
||||
# WHY GIVE IT AWAY LIKE THIS?
|
||||
|
||||
> I am an Open Source Enthusiast
|
||||
> Who Support the Joomla Community
|
||||
|
||||
My idea was to almost let this tool serve as a cheat sheet to how things can be done... and with the help of other developers (more advanced then me) end up formulating the way how things not only can, but must be done to insure secure, stable, scalable and maintainable code is produced.
|
||||
|
||||
# MAKING IT BETTER!
|
||||
|
||||
Component Builder is mapped as a component in itself on my local development environment. So I am improving it like you would any other component in it. I am looking for developers with the **skill** and the **desire** to really join me... and then I will possible give them access to this, so we can all help improve this simple, yet advanced tool.
|
||||
|
||||
# Build Details
|
||||
|
||||
+ *Company*: [Vast Development Method] (https://www.vdm.io/joomla-component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe] (mailto:info@vdm.io)
|
||||
+ *Name*: [Component Builder] (https://www.vdm.io/joomla-component-builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 11th September, 2016
|
||||
+ *Version*: 2.1.21
|
||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
+ *Line count*: **85041**
|
||||
+ *File count*: **516**
|
||||
+ *Folder count*: **98**
|
||||
+ *Company*: [###COMPANYNAME###](###AUTHORWEBSITE###)
|
||||
+ *Author*: [###AUTHOR###](mailto:###AUTHOREMAIL###)
|
||||
+ *Name*: [###Component_name###](###AUTHORWEBSITE###)
|
||||
+ *First Build*: ###CREATIONDATE###
|
||||
+ *Last Build*: ###BUILDDATE###
|
||||
+ *Version*: ###VERSION###
|
||||
+ *Copyright*: ###COPYRIGHT###
|
||||
+ *License*: ###LICENSE###
|
||||
+ *Line count*: **###LINE_COUNT###**
|
||||
+ *File count*: **###FILE_COUNT###**
|
||||
+ *Folder count*: **###FOLDER_COUNT###**
|
||||
|
||||
> This **component** was build with a Joomla [Automated Component Builder] (https://www.vdm.io/joomla-component-builder).
|
||||
> Developed by [Llewellyn van der Merwe] (mailto:joomla@vdm.io)
|
||||
> This **component** was build with a Joomla [Automated Component Builder](https://www.vdm.io/joomla-component-builder).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
||||
## Donations
|
||||
|
||||
|
122
admin/README.txt
Normal file
122
admin/README.txt
Normal file
@ -0,0 +1,122 @@
|
||||
# Component Builder (2.2.0)
|
||||
|
||||
This is a [Joomla 3.x](http://www.joomla.org/) component.
|
||||
|
||||
![Component Builder image](https://raw.githubusercontent.com/vdm-io/Joomla-Component-Builder/master/admin/assets/images/component-300.jpg "The Component Builder")
|
||||
|
||||
The Component Builder for [Joomla](http://www.joomla.org/) that is highly advanced, truly able to build extremely complex components in a fraction of the time.
|
||||
|
||||
Whether you're a seasoned [Joomla](http://www.joomla.org/) developer, or have just started, Component Builder will safe you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [github](https://github.com/vdm-io/Joomla-Component-Builder/releases) is the latest release (2.2.0) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
Once installed upgrades are quick and easy via the default Joomla upgrade area.
|
||||
|
||||
# Some of the Features
|
||||
|
||||
+ Adding mySQL Dump to any View/Table.
|
||||
+ Grab existing Table data and build a dynamic dump.
|
||||
+ Unlimited Joomla Components.
|
||||
+ Unlimited Tables/Views.
|
||||
+ Reusing Views and Fields.
|
||||
+ Runs on Your Own Joomla Install.
|
||||
+ Add Dynamic/custom back-end views that uses Table and Chart result sets.
|
||||
+ Build data query of extreme complex nature to use in Dynamic/custom views.
|
||||
+ Highly Dynamic/custom Front-end Structures.
|
||||
+ Dynamically setup templates and layouts for Front-end design.
|
||||
+ Integration of the excellent UIKIT lib.
|
||||
+ Integration of the excellent FOOTABLE lib.
|
||||
+ All Joomla Standard Field Types (including repeatable fields).
|
||||
+ Strong Implementation of all Joomla Form Security.
|
||||
+ Load data via ajax with ease.
|
||||
+ You can add an Update Server to Components you build.
|
||||
+ Build advanced Dynamic front-end forms.
|
||||
+ Dynamic data queries from multiple tables.
|
||||
+ Place in local GIT folder, and publish to sales server.
|
||||
+ Include any amount of custom files and folders during build.
|
||||
+ Static helper class with smart methods already included.
|
||||
+ Static helper methods Can easily be added.
|
||||
+ Direct install from complier view.
|
||||
+ Integrative with native Joomla Categories and Tags.
|
||||
+ Fully Dynamic Search Friendly URL Auto Implementation.
|
||||
+ Custom scripting options all over the MVC structure.
|
||||
+ Permission implementation down to each view, item and field.
|
||||
+ Easy extendible to include other libraries.
|
||||
+ Can include SQL and visioning update link to distribute your component updates via Joomla default upgrade of components.
|
||||
+ Easy Export & Import addon to all backend-tables.
|
||||
+ Overriding ability of import concepts in all backend-tables.
|
||||
+ The Batch and Filter implementation on all backend-list views.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Just Imagine
|
||||
|
||||
+ Your Component Back-end can be more advanced then the Joomla Article Manager.
|
||||
+ Your Code as Perfectly Unified to the strict Joomla Standards.
|
||||
+ Adding Custom Scripting almost anywhere in the MVC structure.
|
||||
+ Import and export feature to all backend-views.
|
||||
+ Batch copy and move/update feature for all backend-views.
|
||||
+ History tracking per/change made on any back-end item.
|
||||
+ Dynamic field control, to show and hide fields in amazing ways.
|
||||
+ Front-end freedom of design that allows for any library to be used.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# You are in Control
|
||||
|
||||
+ You can change the licensing template for your components.
|
||||
+ You can change/improve existing field types and add more.
|
||||
+ Line numbers to show where in compiler was the code build.
|
||||
+ You can improve the component since all code are open-source.
|
||||
+ You need only pay us once and use the component forever.
|
||||
+ You can dynamically add internal help structures to all component.
|
||||
+ There is no limitations on how big or how much you want to build (server limitation only).
|
||||
+ This is a complete factory kind of component that functions like a deployment hub.
|
||||
+ This and much much more are all possible with this component builder!
|
||||
|
||||
# Get Access to Video Tutorials
|
||||
|
||||
> **You can purchase more demo content for Component Builder including access to training & help video tutorials:**
|
||||
|
||||
+ Demo Component* see the build on [github](https://github.com/namibia/demo-joomla-3-component)
|
||||
+ Sermon Distributor* see the build on [github](https://github.com/SermonDistributor/Joomla-3-Component)
|
||||
+ Help View Integration*
|
||||
+ Training & Help Videos* tutorials in the component included.
|
||||
|
||||
[**GET ACCESS NOW!**](https://www.vdm.io/joomla-component-builder#get)
|
||||
|
||||
# gitHub Support
|
||||
|
||||
Would you require more help please open and issue here on [gitHub today](https://github.com/vdm-io/Joomla-Component-Builder/issues)!
|
||||
|
||||
# WHY GIVE IT AWAY LIKE THIS?
|
||||
|
||||
> I am an Open Source Enthusiast
|
||||
> Who Support the Joomla Community
|
||||
|
||||
My idea was to almost let this tool serve as a cheat sheet to how things can be done... and with the help of other developers (more advanced then me) end up formulating the way how things not only can, but must be done to insure secure, stable, scalable and maintainable code is produced.
|
||||
|
||||
# MAKING IT BETTER!
|
||||
|
||||
Component Builder is mapped as a component in itself on my local development environment. So I am improving it like you would any other component in it. I am looking for developers with the **skill** and the **desire** to really join me... and then I will possible give them access to this, so we can all help improve this simple, yet advanced tool.
|
||||
|
||||
# Build Details
|
||||
|
||||
+ *Company*: [Vast Development Method](https://www.vdm.io/joomla-component-builder)
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:info@vdm.io)
|
||||
+ *Name*: [Component Builder](https://www.vdm.io/joomla-component-builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 23rd October, 2016
|
||||
+ *Version*: 2.2.0
|
||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
+ *Line count*: **85920**
|
||||
+ *File count*: **537**
|
||||
+ *Folder count*: **99**
|
||||
|
||||
> This **component** was build with a Joomla [Automated Component Builder](https://www.vdm.io/joomla-component-builder).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
||||
## Donations
|
||||
|
||||
If you want to support this project, please consider donating:
|
||||
* PayPal: pay@vdm.io
|
||||
* Bitcoin: 3H35PYwikEosvcjxHXGPLS1GufZ4b4iFu3
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage component.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage components.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dashboard.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_get.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_gets.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage field.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fields.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtype.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtypes.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage help_document.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage help_documents.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage layout.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage layouts.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_view.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_views.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippet.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippets.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage template.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -9,13 +9,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage templates.css
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
1
admin/compiler/joomla_3/README.txt
Normal file
1
admin/compiler/joomla_3/README.txt
Normal file
@ -0,0 +1 @@
|
||||
###README###
|
@ -74,7 +74,7 @@
|
||||
<filename>config.xml</filename>
|
||||
<filename>controller.php</filename>###ENCRYPT_FILE###
|
||||
<filename>index.html</filename>
|
||||
<filename>###component###.php</filename>
|
||||
<filename>###component###.php</filename>###EXSTRA_ADMIN_FILES###
|
||||
<folder>assets</folder>
|
||||
<folder>controllers</folder>
|
||||
<folder>helpers</folder>
|
||||
|
@ -41,7 +41,6 @@ class com_###component###InstallerScript
|
||||
/**
|
||||
* method to install the component
|
||||
*
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function install($parent)
|
||||
@ -81,18 +80,28 @@ class com_###component###InstallerScript
|
||||
*/
|
||||
function preflight($type, $parent)
|
||||
{
|
||||
// get application
|
||||
$app = JFactory::getApplication();
|
||||
// is redundant ...hmmm
|
||||
if ($type == 'uninstall')
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
$app = JFactory::getApplication();
|
||||
// the default for both install and update
|
||||
$jversion = new JVersion();
|
||||
if (!$jversion->isCompatible('3.4.1'))
|
||||
if (!$jversion->isCompatible('3.6.0'))
|
||||
{
|
||||
$app->enqueueMessage('Please upgrade to at least Joomla! 3.4.1 before continuing!', 'error');
|
||||
$app->enqueueMessage('Please upgrade to at least Joomla! 3.6.0 before continuing!', 'error');
|
||||
return false;
|
||||
}
|
||||
// do any updates needed
|
||||
if ($type == 'update')
|
||||
{###PREUPDATESCRIPT###
|
||||
}
|
||||
// do any install needed
|
||||
if ($type == 'install')
|
||||
{###PREINSTALLSCRIPT###
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,11 +113,11 @@ class com_###component###InstallerScript
|
||||
{
|
||||
// set the default component settings
|
||||
if ($type == 'install')
|
||||
{###INSTALLSCRIPT###
|
||||
{###POSTINSTALLSCRIPT###
|
||||
}
|
||||
// do any updates needed
|
||||
if ($type == 'update')
|
||||
{###UPDATESCRIPT###
|
||||
{###POSTUPDATESCRIPT###
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -193,6 +193,12 @@
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"README.txt": {
|
||||
"naam":"README.txt",
|
||||
"path": "c0mp0n3nt/admin",
|
||||
"rename": false,
|
||||
"type": "file"
|
||||
},
|
||||
"README.md": {
|
||||
"naam":"README.md",
|
||||
"path": "c0mp0n3nt/",
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
265
admin/config.xml
265
admin/config.xml
@ -85,271 +85,6 @@
|
||||
readonly="true"
|
||||
class="readonly"
|
||||
/>
|
||||
<field type="spacer" name="spacerContributor1" hr="true" />
|
||||
<field name="contributor1"
|
||||
type="spacer"
|
||||
class="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_ONE"
|
||||
/>
|
||||
<field name="titleContributor1"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||
size="60"
|
||||
default="My Wife"
|
||||
/>
|
||||
<field name="nameContributor1"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||
size="60"
|
||||
default="Roline van der Merwe"
|
||||
/>
|
||||
<field name="emailContributor1"
|
||||
type="email"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||
size="60"
|
||||
default="info@vdm.io"
|
||||
/>
|
||||
<field name="linkContributor1"
|
||||
type="url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||
size="60"
|
||||
default="http://www.vdm.io/"
|
||||
/>
|
||||
<field name="useContributor1"
|
||||
type="list"
|
||||
default="2"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||
</field>
|
||||
<field name="showContributor1"
|
||||
type="list"
|
||||
default="3"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
||||
<option value="3">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
||||
</field>
|
||||
<field type="spacer" name="spacerContributor2" hr="true" />
|
||||
<field name="contributor2"
|
||||
type="spacer"
|
||||
class="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TWO"
|
||||
/>
|
||||
<field name="titleContributor2"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="nameContributor2"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="emailContributor2"
|
||||
type="email"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="linkContributor2"
|
||||
type="url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="useContributor2"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||
</field>
|
||||
<field name="showContributor2"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
||||
<option value="3">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
||||
</field>
|
||||
<field type="spacer" name="spacerContributor3" hr="true" />
|
||||
<field name="contributor3"
|
||||
type="spacer"
|
||||
class="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_THREE"
|
||||
/>
|
||||
<field name="titleContributor3"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="nameContributor3"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="emailContributor3"
|
||||
type="email"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="linkContributor3"
|
||||
type="url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="useContributor3"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||
</field>
|
||||
<field name="showContributor3"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
||||
<option value="3">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
||||
</field>
|
||||
<field type="spacer" name="spacerContributor4" hr="true" />
|
||||
<field name="contributor4"
|
||||
type="spacer"
|
||||
class="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_FOUR"
|
||||
/>
|
||||
<field name="titleContributor4"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="nameContributor4"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="emailContributor4"
|
||||
type="email"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="linkContributor4"
|
||||
type="url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="useContributor4"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||
</field>
|
||||
<field name="showContributor4"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
||||
<option value="3">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
||||
</field>
|
||||
<field type="spacer" name="spacerContributor5" hr="true" />
|
||||
<field name="contributor5"
|
||||
type="spacer"
|
||||
class="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_FIVE"
|
||||
/>
|
||||
<field name="titleContributor5"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="nameContributor5"
|
||||
type="text"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="emailContributor5"
|
||||
type="email"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="linkContributor5"
|
||||
type="url"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||
size="60"
|
||||
default=""
|
||||
/>
|
||||
<field name="useContributor5"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||
</field>
|
||||
<field name="showContributor5"
|
||||
type="list"
|
||||
default="0"
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||
<option value="0">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||
<option value="1">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
||||
<option value="2">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
||||
<option value="3">COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
||||
</field>
|
||||
</fieldset>
|
||||
<fieldset
|
||||
name="uikit_config"
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage controller.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_view.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage admin_views.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage ajax.json.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage component.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage components.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_view.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_admin_views.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_get.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage dynamic_gets.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage field.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fields.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtype.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fieldtypes.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage help.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage help_document.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage help_documents.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage import.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage layout.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage layouts.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_view.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage site_views.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippet.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage snippets.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage template.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage templates.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
BIN
admin/custom/ajax.gif
Normal file
BIN
admin/custom/ajax.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
216
admin/custom/base64.js
Normal file
216
admin/custom/base64.js
Normal file
@ -0,0 +1,216 @@
|
||||
/*
|
||||
Copyright (c) 2008 Fred Palmer fred.palmer_at_gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
function StringBuffer()
|
||||
{
|
||||
this.buffer = [];
|
||||
}
|
||||
|
||||
StringBuffer.prototype.append = function append(string)
|
||||
{
|
||||
this.buffer.push(string);
|
||||
return this;
|
||||
};
|
||||
|
||||
StringBuffer.prototype.toString = function toString()
|
||||
{
|
||||
return this.buffer.join("");
|
||||
};
|
||||
|
||||
var Base64 =
|
||||
{
|
||||
codex : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
|
||||
encode : function (input)
|
||||
{
|
||||
var output = new StringBuffer();
|
||||
|
||||
var enumerator = new Utf8EncodeEnumerator(input);
|
||||
while (enumerator.moveNext())
|
||||
{
|
||||
var chr1 = enumerator.current;
|
||||
|
||||
enumerator.moveNext();
|
||||
var chr2 = enumerator.current;
|
||||
|
||||
enumerator.moveNext();
|
||||
var chr3 = enumerator.current;
|
||||
|
||||
var enc1 = chr1 >> 2;
|
||||
var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||
var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||
var enc4 = chr3 & 63;
|
||||
|
||||
if (isNaN(chr2))
|
||||
{
|
||||
enc3 = enc4 = 64;
|
||||
}
|
||||
else if (isNaN(chr3))
|
||||
{
|
||||
enc4 = 64;
|
||||
}
|
||||
|
||||
output.append(this.codex.charAt(enc1) + this.codex.charAt(enc2) + this.codex.charAt(enc3) + this.codex.charAt(enc4));
|
||||
}
|
||||
|
||||
return output.toString();
|
||||
},
|
||||
|
||||
decode : function (input)
|
||||
{
|
||||
var output = new StringBuffer();
|
||||
|
||||
var enumerator = new Base64DecodeEnumerator(input);
|
||||
while (enumerator.moveNext())
|
||||
{
|
||||
var charCode = enumerator.current;
|
||||
|
||||
if (charCode < 128)
|
||||
output.append(String.fromCharCode(charCode));
|
||||
else if ((charCode > 191) && (charCode < 224))
|
||||
{
|
||||
enumerator.moveNext();
|
||||
var charCode2 = enumerator.current;
|
||||
|
||||
output.append(String.fromCharCode(((charCode & 31) << 6) | (charCode2 & 63)));
|
||||
}
|
||||
else
|
||||
{
|
||||
enumerator.moveNext();
|
||||
var charCode2 = enumerator.current;
|
||||
|
||||
enumerator.moveNext();
|
||||
var charCode3 = enumerator.current;
|
||||
|
||||
output.append(String.fromCharCode(((charCode & 15) << 12) | ((charCode2 & 63) << 6) | (charCode3 & 63)));
|
||||
}
|
||||
}
|
||||
|
||||
return output.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function Utf8EncodeEnumerator(input)
|
||||
{
|
||||
this._input = input;
|
||||
this._index = -1;
|
||||
this._buffer = [];
|
||||
}
|
||||
|
||||
Utf8EncodeEnumerator.prototype =
|
||||
{
|
||||
current: Number.NaN,
|
||||
|
||||
moveNext: function()
|
||||
{
|
||||
if (this._buffer.length > 0)
|
||||
{
|
||||
this.current = this._buffer.shift();
|
||||
return true;
|
||||
}
|
||||
else if (this._index >= (this._input.length - 1))
|
||||
{
|
||||
this.current = Number.NaN;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var charCode = this._input.charCodeAt(++this._index);
|
||||
|
||||
// "\r\n" -> "\n"
|
||||
//
|
||||
if ((charCode == 13) && (this._input.charCodeAt(this._index + 1) == 10))
|
||||
{
|
||||
charCode = 10;
|
||||
this._index += 2;
|
||||
}
|
||||
|
||||
if (charCode < 128)
|
||||
{
|
||||
this.current = charCode;
|
||||
}
|
||||
else if ((charCode > 127) && (charCode < 2048))
|
||||
{
|
||||
this.current = (charCode >> 6) | 192;
|
||||
this._buffer.push((charCode & 63) | 128);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.current = (charCode >> 12) | 224;
|
||||
this._buffer.push(((charCode >> 6) & 63) | 128);
|
||||
this._buffer.push((charCode & 63) | 128);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Base64DecodeEnumerator(input)
|
||||
{
|
||||
this._input = input;
|
||||
this._index = -1;
|
||||
this._buffer = [];
|
||||
}
|
||||
|
||||
Base64DecodeEnumerator.prototype =
|
||||
{
|
||||
current: 64,
|
||||
|
||||
moveNext: function()
|
||||
{
|
||||
if (this._buffer.length > 0)
|
||||
{
|
||||
this.current = this._buffer.shift();
|
||||
return true;
|
||||
}
|
||||
else if (this._index >= (this._input.length - 1))
|
||||
{
|
||||
this.current = 64;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
var enc1 = Base64.codex.indexOf(this._input.charAt(++this._index));
|
||||
var enc2 = Base64.codex.indexOf(this._input.charAt(++this._index));
|
||||
var enc3 = Base64.codex.indexOf(this._input.charAt(++this._index));
|
||||
var enc4 = Base64.codex.indexOf(this._input.charAt(++this._index));
|
||||
|
||||
var chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||
var chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||
var chr3 = ((enc3 & 3) << 6) | enc4;
|
||||
|
||||
this.current = chr1;
|
||||
|
||||
if (enc3 != 64)
|
||||
this._buffer.push(chr2);
|
||||
|
||||
if (enc4 != 64)
|
||||
this._buffer.push(chr3);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
144
admin/custom/bootstrap-tab.js
vendored
Normal file
144
admin/custom/bootstrap-tab.js
vendored
Normal file
@ -0,0 +1,144 @@
|
||||
/* ========================================================
|
||||
* bootstrap-tab.js v2.3.1
|
||||
* https://twitter.github.com/bootstrap/javascript.html#tabs
|
||||
* ========================================================
|
||||
* Copyright 2012 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ======================================================== */
|
||||
|
||||
|
||||
!function ($) {
|
||||
|
||||
"use strict"; // jshint ;_;
|
||||
|
||||
|
||||
/* TAB CLASS DEFINITION
|
||||
* ==================== */
|
||||
|
||||
var Tab = function (element) {
|
||||
this.element = $(element)
|
||||
}
|
||||
|
||||
Tab.prototype = {
|
||||
|
||||
constructor: Tab
|
||||
|
||||
, show: function () {
|
||||
var $this = this.element
|
||||
, $ul = $this.closest('ul:not(.dropdown-menu)')
|
||||
, selector = $this.attr('data-target')
|
||||
, previous
|
||||
, $target
|
||||
, e
|
||||
|
||||
if (!selector) {
|
||||
selector = $this.attr('href')
|
||||
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
|
||||
}
|
||||
|
||||
if ( $this.parent('li').hasClass('active') ) return
|
||||
|
||||
previous = $ul.find('.active:last a')[0]
|
||||
|
||||
e = $.Event('show', {
|
||||
relatedTarget: previous
|
||||
})
|
||||
|
||||
$this.trigger(e)
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$target = $(selector)
|
||||
|
||||
this.activate($this.parent('li'), $ul)
|
||||
this.activate($target, $target.parent(), function () {
|
||||
$this.trigger({
|
||||
type: 'shown'
|
||||
, relatedTarget: previous
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
, activate: function ( element, container, callback) {
|
||||
var $active = container.find('> .active')
|
||||
, transition = callback
|
||||
&& $.support.transition
|
||||
&& $active.hasClass('fade')
|
||||
|
||||
function next() {
|
||||
$active
|
||||
.removeClass('active')
|
||||
.find('> .dropdown-menu > .active')
|
||||
.removeClass('active')
|
||||
|
||||
element.addClass('active')
|
||||
|
||||
if (transition) {
|
||||
element[0].offsetWidth // reflow for transition
|
||||
element.addClass('in')
|
||||
} else {
|
||||
element.removeClass('fade')
|
||||
}
|
||||
|
||||
if ( element.parent('.dropdown-menu') ) {
|
||||
element.closest('li.dropdown').addClass('active')
|
||||
}
|
||||
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
transition ?
|
||||
$active.one($.support.transition.end, next) :
|
||||
next()
|
||||
|
||||
$active.removeClass('in')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* TAB PLUGIN DEFINITION
|
||||
* ===================== */
|
||||
|
||||
var old = $.fn.tab
|
||||
|
||||
$.fn.tab = function ( option ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('tab')
|
||||
if (!data) $this.data('tab', (data = new Tab(this)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.tab.Constructor = Tab
|
||||
|
||||
|
||||
/* TAB NO CONFLICT
|
||||
* =============== */
|
||||
|
||||
$.fn.tab.noConflict = function () {
|
||||
$.fn.tab = old
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
/* TAB DATA-API
|
||||
* ============ */
|
||||
|
||||
$(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
|
||||
e.preventDefault()
|
||||
$(this).tab('show')
|
||||
})
|
||||
|
||||
}(window.jQuery);
|
7
admin/custom/bootstrap.min.js
vendored
Normal file
7
admin/custom/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
251
admin/custom/bootstrapSwitch.js
vendored
Normal file
251
admin/custom/bootstrapSwitch.js
vendored
Normal file
@ -0,0 +1,251 @@
|
||||
/* ============================================================
|
||||
* bootstrapSwitch v1.3 by Larentis Mattia @spiritualGuru
|
||||
* https://www.larentis.eu/switch/
|
||||
* ============================================================
|
||||
* Licensed under the Apache License, Version 2.0
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* ============================================================ */
|
||||
|
||||
!function ($) {
|
||||
"use strict";
|
||||
|
||||
$.fn['bootstrapSwitch'] = function (method) {
|
||||
var methods = {
|
||||
init: function () {
|
||||
return this.each(function () {
|
||||
var $element = $(this)
|
||||
, $div
|
||||
, $switchLeft
|
||||
, $switchRight
|
||||
, $label
|
||||
, myClasses = ""
|
||||
, classes = $element.attr('class')
|
||||
, color
|
||||
, moving
|
||||
, onLabel = "ON"
|
||||
, offLabel = "OFF"
|
||||
, icon = false;
|
||||
|
||||
$.each(['switch-mini', 'switch-small', 'switch-large'], function (i, el) {
|
||||
if (classes.indexOf(el) >= 0)
|
||||
myClasses = el;
|
||||
});
|
||||
|
||||
$element.addClass('has-switch');
|
||||
|
||||
if ($element.data('on') !== undefined)
|
||||
color = "switch-" + $element.data('on');
|
||||
|
||||
if ($element.data('on-label') !== undefined)
|
||||
onLabel = $element.data('on-label');
|
||||
|
||||
if ($element.data('off-label') !== undefined)
|
||||
offLabel = $element.data('off-label');
|
||||
|
||||
if ($element.data('icon') !== undefined)
|
||||
icon = $element.data('icon');
|
||||
|
||||
$switchLeft = $('<span>')
|
||||
.addClass("switch-left")
|
||||
.addClass(myClasses)
|
||||
.addClass(color)
|
||||
.html(onLabel);
|
||||
|
||||
color = '';
|
||||
if ($element.data('off') !== undefined)
|
||||
color = "switch-" + $element.data('off');
|
||||
|
||||
$switchRight = $('<span>')
|
||||
.addClass("switch-right")
|
||||
.addClass(myClasses)
|
||||
.addClass(color)
|
||||
.html(offLabel);
|
||||
|
||||
$label = $('<label>')
|
||||
.html(" ")
|
||||
.addClass(myClasses)
|
||||
.attr('for', $element.find('input').attr('id'));
|
||||
|
||||
if (icon) {
|
||||
$label.html('<i class="icon icon-' + icon + '"></i>');
|
||||
}
|
||||
|
||||
$div = $element.find(':checkbox').wrap($('<div>')).parent().data('animated', false);
|
||||
|
||||
if ($element.data('animated') !== false)
|
||||
$div.addClass('switch-animate').data('animated', true);
|
||||
|
||||
$div
|
||||
.append($switchLeft)
|
||||
.append($label)
|
||||
.append($switchRight);
|
||||
|
||||
$element.find('>div').addClass(
|
||||
$element.find('input').is(':checked') ? 'switch-on' : 'switch-off'
|
||||
);
|
||||
|
||||
if ($element.find('input').is(':disabled'))
|
||||
$(this).addClass('deactivate');
|
||||
|
||||
var changeStatus = function ($this) {
|
||||
$this.siblings('label').trigger('mousedown').trigger('mouseup').trigger('click');
|
||||
};
|
||||
|
||||
$element.on('keydown', function (e) {
|
||||
if (e.keyCode === 32) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
changeStatus($(e.target).find('span:first'));
|
||||
}
|
||||
});
|
||||
|
||||
$switchLeft.on('click', function (e) {
|
||||
changeStatus($(this));
|
||||
});
|
||||
|
||||
$switchRight.on('click', function (e) {
|
||||
changeStatus($(this));
|
||||
});
|
||||
|
||||
$element.find('input').on('change', function (e) {
|
||||
var $this = $(this)
|
||||
, $element = $this.parent()
|
||||
, thisState = $this.is(':checked')
|
||||
, state = $element.is('.switch-off');
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
$element.css('left', '');
|
||||
|
||||
if (state === thisState) {
|
||||
|
||||
if (thisState)
|
||||
$element.removeClass('switch-off').addClass('switch-on');
|
||||
else $element.removeClass('switch-on').addClass('switch-off');
|
||||
|
||||
if ($element.data('animated') !== false)
|
||||
$element.addClass("switch-animate");
|
||||
|
||||
$element.parent().trigger('switch-change', {'el': $this, 'value': thisState})
|
||||
}
|
||||
});
|
||||
|
||||
$element.find('label').on('mousedown touchstart', function (e) {
|
||||
var $this = $(this);
|
||||
moving = false;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
$this.closest('div').removeClass('switch-animate');
|
||||
|
||||
if ($this.closest('.switch').is('.deactivate'))
|
||||
$this.unbind('click');
|
||||
else {
|
||||
$this.on('mousemove touchmove', function (e) {
|
||||
var $element = $(this).closest('.switch')
|
||||
, relativeX = (e.pageX || e.originalEvent.targetTouches[0].pageX) - $element.offset().left
|
||||
, percent = (relativeX / $element.width()) * 100
|
||||
, left = 25
|
||||
, right = 75;
|
||||
|
||||
moving = true;
|
||||
|
||||
if (percent < left)
|
||||
percent = left;
|
||||
else if (percent > right)
|
||||
percent = right;
|
||||
|
||||
$element.find('>div').css('left', (percent - right) + "%")
|
||||
});
|
||||
|
||||
$this.on('click touchend', function (e) {
|
||||
var $this = $(this)
|
||||
, $target = $(e.target)
|
||||
, $myCheckBox = $target.siblings('input');
|
||||
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
|
||||
$this.unbind('mouseleave');
|
||||
|
||||
if (moving)
|
||||
$myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25));
|
||||
else $myCheckBox.prop("checked", !$myCheckBox.is(":checked"));
|
||||
|
||||
moving = false;
|
||||
$myCheckBox.trigger('change');
|
||||
});
|
||||
|
||||
$this.on('mouseleave', function (e) {
|
||||
var $this = $(this)
|
||||
, $myCheckBox = $this.siblings('input');
|
||||
|
||||
e.preventDefault();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
$this.unbind('mouseleave');
|
||||
$this.trigger('mouseup');
|
||||
|
||||
$myCheckBox.prop('checked', !(parseInt($this.parent().css('left')) < -25)).trigger('change');
|
||||
});
|
||||
|
||||
$this.on('mouseup', function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
|
||||
$(this).unbind('mousemove');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
},
|
||||
toggleActivation: function () {
|
||||
$(this).toggleClass('deactivate');
|
||||
},
|
||||
isActive: function () {
|
||||
return !$(this).hasClass('deactivate');
|
||||
},
|
||||
setActive: function (active) {
|
||||
if (active)
|
||||
$(this).removeClass('deactivate');
|
||||
else $(this).addClass('deactivate');
|
||||
},
|
||||
toggleState: function (skipOnChange) {
|
||||
var $input = $(this).find('input:checkbox');
|
||||
$input.prop('checked', !$input.is(':checked')).trigger('change', skipOnChange);
|
||||
},
|
||||
setState: function (value, skipOnChange) {
|
||||
$(this).find('input:checkbox').prop('checked', value).trigger('change', skipOnChange);
|
||||
},
|
||||
status: function () {
|
||||
return $(this).find('input:checkbox').is(':checked');
|
||||
},
|
||||
destroy: function () {
|
||||
var $div = $(this).find('div')
|
||||
, $checkbox;
|
||||
|
||||
$div.find(':not(input:checkbox)').remove();
|
||||
|
||||
$checkbox = $div.children();
|
||||
$checkbox.unwrap().unwrap();
|
||||
|
||||
$checkbox.unbind('change');
|
||||
|
||||
return $checkbox;
|
||||
}
|
||||
};
|
||||
|
||||
if (methods[method])
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
else if (typeof method === 'object' || !method)
|
||||
return methods.init.apply(this, arguments);
|
||||
else
|
||||
$.error('Method ' + method + ' does not exist!');
|
||||
};
|
||||
}(jQuery);
|
||||
|
||||
$(function () {
|
||||
$('.switch')['bootstrapSwitch']();
|
||||
});
|
1
admin/custom/custem/index.html
Normal file
1
admin/custom/custem/index.html
Normal file
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
44
admin/custom/data-generator.js
Normal file
44
admin/custom/data-generator.js
Normal file
@ -0,0 +1,44 @@
|
||||
(function(w, undefined) {
|
||||
var firstNames = ['Elodia', 'Sephnie', 'Maxine', 'Claudine', 'Londa', 'Gwyn', 'Consuelo', 'Mariko', 'Lashanda', 'Jesusa', 'Bernie', 'Annamaria', 'Muriel', 'Nikia', 'Margene', 'Lorraine', 'Annemarie', 'Rayna', 'Anonina', 'Carie', 'Gran', 'Jua', 'Jacqulyn', 'Whiney', 'Renaa', 'Usha', 'Annea', 'Jack', 'Chun', 'Eddy', 'Isidra', 'Myesha', 'Ami', 'Easer', 'Karon', 'Granville', 'Maria', 'Shenia', 'Solomon', 'Marquia', 'Charles', 'Neie', 'Beariz', 'Humbero', 'Rigobero', 'Lamon', 'Rivka', 'Phoebe', 'Renea', 'Celia', 'Shay', 'Sanford', 'Gwen', 'Lizzee', 'Lucila', 'Alice', 'Lauri', 'Desmond', 'Raeann', 'Rona', 'Jason', 'Lilian', 'Karena', 'Dennise', 'Delana', 'Rheba', 'Doy', 'Dolly', 'Venice', 'Dalene', 'Cyndy', 'Ilona', 'Lakeshia', 'Laurena', 'Lorriane', 'Kaci', 'Velve', 'Maple', 'Maire', 'Marline', 'Bar', 'Nelly', 'Shona', 'Karole', 'Judi', 'Ardelia', 'Alonzo', 'Junie', 'Alvina', 'Ilda'];
|
||||
var lastNames = ['Ortego', 'Landa', 'Piermarini', 'Valles', 'Lusher', 'Branco', 'Falls', 'Hallett', 'Nicley', 'Cambareri', 'Han', 'Edwin', 'Lan', 'Dauenhauer', 'Cerrone', 'Matsumura', 'Mosher', 'Dragoo', 'Robare', 'Judon', 'Kyger', 'Bonk', 'Mcgaughy', 'Mcfetridge', 'Maxton', 'Roling', 'Klotz', 'Boudreaux', 'Hayton', 'Leonardo', 'Schug', 'Dewitt', 'Wohlwend', 'Hoos', 'Pennock', 'Sprinkle', 'Weick', 'Gilliland', 'Resler', 'Badgett', 'Bittinger', 'Letts', 'Bottom', 'Hibler', 'Fuhrman', 'Lewis', 'Moudy', 'Goyette', 'Difranco', 'Kyles', 'Sluss', 'Bruening', 'Halladay', 'Leinen', 'Leister', 'Morgado', 'Wadkins', 'Yingst', 'Hyland', 'Carasco', 'Stever', 'Weisz', 'Woldt', 'Leak', 'Sinclair', 'Heinen', 'Furniss', 'Hosler', 'Shumpert', 'Keasler', 'Stgelais', 'Landers', 'Hogle', 'Ates', 'Vanatta', 'Goodlow', 'Haner', 'Yaple', 'Lamark', 'Cataldo', 'Smelcer', 'Marco', 'Quaranta', 'Cooke', 'Ardrey', 'Guilford', 'Polo', 'Sprouse', 'Gaffney', 'Lafromboise'];
|
||||
var jobTitles = ['Language Translator', 'Propeller-Driven Airplane Mechanic', 'Work Ticket Distributor', 'Pipe Organ Technician', 'LAN Systems Administrator', 'Employment Clerk', 'Electrical Lineworker', 'Serials Librarian', 'Technical Services Librarian', 'Blackjack Supervisor', 'Pulpwood Cutter', 'Military Science Teacher', 'Missile Pad Mechanic', 'Psychology Professor', 'Scene and Lighting Design Lecturer', 'Internet Marketing Manager', 'Business Services Sales Representative', 'Assistant Corporation Counsel', 'Photocopying Equipment Repairer', 'Post-Anesthesia Care Unit Nurse', 'Animal Husbandry Manager', 'Electrical Engineering Director', 'Drag Car Racer', 'Auto Detailer', 'Childrens Pastor', 'Strawberry Sorter', 'Geophysicist', 'Financial Accountant', 'Crown and Bridge Technician', 'Jig Bore Tool Maker', 'Union Representative', 'High School Librarian', 'High School History Teacher', 'Beveling and Edging Machine Operator', 'Roller Skater', 'Wallpaperer Helper', 'Childcare Center Administrator', 'Ordnance Engineer', 'Industrial Waste Treatment Technician', 'Airline Transport Pilot', 'Window Trimmer', 'Garment Presser', 'State Archivist', 'Die Designer', 'Ventriloquist', 'Calculus Professor', 'Technical Writer', 'Meat Packager', 'Automobile Body Painter', 'Aircraft Landing Gear Inspector', 'Fashion Designer', 'Drywall Stripper', 'Clown', 'National Association for Stock Car Auto Racing Driver', 'Staff Electronic Warfare Officer', 'Hydroelectric Machinery Mechanic', 'Clinical Services Director', 'Traffic Court Referee', 'Internal Medicine Nurse Practitioner', 'Horticulture Instructor', 'Ships Electronic Warfare Officer', 'Broadcast Maintenance Engineer', 'Weight Training Instructor', 'Potato Sorter', 'Appliance Parts Counter Clerk', 'Body Shop Supervisor', 'Accounts Collector', 'Commercial Lender', 'Scale Clerk', 'Obstetrician/Gynecologist', 'Gaming Cage Cashier', 'Fresco Artist', 'Youth Pastor', 'Parachute Officer', 'Geophysical Engineer', 'Route Sales Person', 'Master of Ceremonies', 'Cloak Room Attendant', 'Gas Main Fitter', 'Religious Activities Director', 'Hemodialysis Technician', 'Telephone Lines Repairer', 'Periodontist', 'Wood Fence Installer', 'Offbearer', 'Aviation Tactical Readiness Officer', 'Biology Laboratory Assistant', 'Emergency Room Orderly', 'Magician', 'Dog Trainer'];
|
||||
var statuses = [{ 'name': 'Active', 'value': 1 }, { 'name': 'Disabled', 'value': 2 }, { 'name': 'Suspended', 'value': 3 }];
|
||||
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||
|
||||
function randomDate() {
|
||||
var start = new Date(1960, 0, 1), end = new Date(1994, 0, 1);
|
||||
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
|
||||
}
|
||||
|
||||
w.generateRows = function(rows, extraCols, return_rows) {
|
||||
rows = rows || 100;
|
||||
extraCols = extraCols || 0;
|
||||
return_rows = return_rows || false;
|
||||
var output = '';
|
||||
for (var i = 0; i < rows; i++) {
|
||||
var data = {
|
||||
firstName: firstNames[Math.floor(Math.random() * firstNames.length)],
|
||||
lastName: lastNames[Math.floor(Math.random() * lastNames.length)],
|
||||
jobTitle: jobTitles[Math.floor(Math.random() * jobTitles.length)],
|
||||
status: statuses[Math.floor(Math.random() * statuses.length)],
|
||||
dob: randomDate()
|
||||
};
|
||||
var row = '<tr>';
|
||||
//row += '<td class="expand"></td>';
|
||||
row += '<td>' + data.firstName + '</td>';
|
||||
row += '<td>' + data.lastName + '</td>';
|
||||
row += '<td>' + data.jobTitle + '</td>';
|
||||
row += '<td data-value="' + data.dob.getTime() + '">' + data.dob.getDate() + ' ' + months[data.dob.getMonth()] + ' ' + data.dob.getFullYear() +'</td>';
|
||||
row += '<td data-value="' + data.status.value + '">' + data.status.name + '</td>';
|
||||
for (var j = 0; j < extraCols; j++) {
|
||||
row += '<td>' + (i+1) + '.' + (j+1) + '</td>';
|
||||
}
|
||||
row += '</tr>';
|
||||
if (!return_rows) document.writeln(row);
|
||||
else
|
||||
output += row;
|
||||
}
|
||||
|
||||
if (return_rows) return output;
|
||||
};
|
||||
})(window);
|
153
admin/custom/downloadController.php
Normal file
153
admin/custom/downloadController.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @version 2.0.0 - September 03, 2014
|
||||
* @package Component Builder
|
||||
* @author Llewellyn van de Merwe <http://www.vdm.io>
|
||||
* @copyright Copyright (C) 2014. All Rights Reserved
|
||||
* @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
**/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// import Joomla controllerform library
|
||||
jimport('joomla.application.component.controller');
|
||||
|
||||
/**
|
||||
* ###Component### Download Controller
|
||||
*/
|
||||
class ###Component###ControllerDownload extends JControllerLegacy
|
||||
{
|
||||
|
||||
public function __construct($config)
|
||||
{
|
||||
parent::__construct($config);
|
||||
// load the tasks
|
||||
$this->registerTask('file', 'download');
|
||||
}
|
||||
|
||||
public function download()
|
||||
{
|
||||
$user = JFactory::getUser();
|
||||
$jinput = JFactory::getApplication()->input;
|
||||
// Check Token!
|
||||
$token = JSession::getFormToken();
|
||||
$call_token = $jinput->get('token', 0, 'ALNUM');
|
||||
$userAllowed = $jinput->get('key', NULL, 'INT');
|
||||
if($user->id != 0 && $userAllowed == $user->id && $token == $call_token)
|
||||
{
|
||||
$task = $this->getTask();
|
||||
switch($task)
|
||||
{
|
||||
case 'file':
|
||||
$enUrl = $jinput->get('link', NULL, 'BASE64');
|
||||
$filename = $jinput->get('filename', NULL, 'CMD');
|
||||
if(base64_encode(base64_decode($enUrl, true)) === $enUrl && $filename)
|
||||
{
|
||||
// Get local key
|
||||
$localkey = md5(JComponentHelper::getParams('com_###component###')->get('basic_key', 'localKey34fdWEkl'));
|
||||
$opener = new FOFEncryptAes($localkey, 256);
|
||||
$link = rtrim($opener->decryptString(base64_decode($enUrl)));
|
||||
$info = $this->getContentInfo($link);
|
||||
// set headers
|
||||
if (isset($info['type']) && $info['type'])
|
||||
{
|
||||
header('Content-Type: '.$info['type']);
|
||||
}
|
||||
elseif (strpos($filename, '.mp3') !== false)
|
||||
{
|
||||
header('Content-Type: audio/mpeg');
|
||||
}
|
||||
else
|
||||
{
|
||||
header('Content-Type: application/octet-stream');
|
||||
}
|
||||
header("Content-Transfer-Encoding: Binary");
|
||||
header("Content-disposition: attachment; filename=\"" . $filename . "\"");
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Pragma: public');
|
||||
if (isset($info['filesize']) && $info['filesize'])
|
||||
{
|
||||
header('Content-Length: ' . $info['filesize']);
|
||||
}
|
||||
ob_clean();
|
||||
flush();
|
||||
// this is faster but expose the dropbox url
|
||||
// header("Location: $link");
|
||||
// this is slower but better much more secure
|
||||
readfile($link);
|
||||
jexit();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function getContentInfo($url)
|
||||
{
|
||||
// we first try the curl option
|
||||
if ($this->_isCurl())
|
||||
{
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_NOBODY, true);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HEADER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
|
||||
$data = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
// then we try getheaders (this is slower)
|
||||
stream_context_set_default( array('http' => array('method' => 'HEAD')));
|
||||
$headers = get_headers($url);
|
||||
if (###Component###Helper::checkArray($headers))
|
||||
{
|
||||
$data = implode("\n", $headers);
|
||||
}
|
||||
}
|
||||
// get the Content Length
|
||||
if (preg_match('/Content-Length: (\d+)/', $data, $matches))
|
||||
{
|
||||
// Contains file size in bytes
|
||||
$found['filesize'] = (int)$matches[1];
|
||||
|
||||
}
|
||||
// get the Content Type
|
||||
if (preg_match_all('/Content-Type: (.+)/', $data, $matches))
|
||||
{
|
||||
foreach ($matches[1] as $match)
|
||||
{
|
||||
// not the html
|
||||
if (strpos( $match, 'text/html') === false)
|
||||
{
|
||||
$found['type'] = $match;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// return found values
|
||||
if (isset($found) && ###Component###Helper::checkArray($found))
|
||||
{
|
||||
return $found;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function _isCurl()
|
||||
{
|
||||
return function_exists('curl_version');
|
||||
}
|
||||
}
|
171
admin/custom/downloadController_sermonDistributor.php
Normal file
171
admin/custom/downloadController_sermonDistributor.php
Normal file
@ -0,0 +1,171 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @version 2.0.0 - September 03, 2014
|
||||
* @package Component Builder
|
||||
* @author Llewellyn van de Merwe <http://www.vdm.io>
|
||||
* @copyright Copyright (C) 2014. All Rights Reserved
|
||||
* @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
**/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// import Joomla controllerform library
|
||||
jimport('joomla.application.component.controller');
|
||||
|
||||
/**
|
||||
* ###Component### Download Controller
|
||||
*/
|
||||
class ###Component###ControllerDownload extends JControllerLegacy
|
||||
{
|
||||
|
||||
public function __construct($config)
|
||||
{
|
||||
parent::__construct($config);
|
||||
// load the tasks
|
||||
$this->registerTask('file', 'download');
|
||||
}
|
||||
|
||||
public function download()
|
||||
{
|
||||
$jinput = JFactory::getApplication()->input;
|
||||
// Check Token!
|
||||
$token = JSession::getFormToken();
|
||||
$call_token = $jinput->get('token', 0, 'ALNUM');
|
||||
if($token == $call_token)
|
||||
{
|
||||
$task = $this->getTask();
|
||||
switch($task)
|
||||
{
|
||||
case 'file':
|
||||
$keys = $jinput->get('key', NULL, 'BASE64');
|
||||
$enUrl = $jinput->get('link', NULL, 'BASE64');
|
||||
$filename = $jinput->get('filename', NULL, 'CMD');
|
||||
if((base64_encode(base64_decode($enUrl, true)) === $enUrl) && (base64_encode(base64_decode($keys, true)) === $keys) && $filename)
|
||||
{
|
||||
// we must first count this download
|
||||
if (###Component###Helper::countDownload($keys,$filename))
|
||||
{
|
||||
// get Site name
|
||||
$config = JFactory::getConfig();
|
||||
$vendor = $config->get('sitename');
|
||||
$name = ###Component###Helper::safeString($filename, 'Ww');
|
||||
// Get local key
|
||||
$localkey = ###Component###Helper::getLocalKey();
|
||||
$opener = new FOFEncryptAes($localkey, 256);
|
||||
$link = rtrim($opener->decryptString(base64_decode($enUrl)));
|
||||
$info = $this->getContentInfo($link);
|
||||
// set headers
|
||||
$app = JFactory::getApplication();
|
||||
$app->setHeader('Accept-ranges', 'bytes', true);
|
||||
$app->setHeader('Connection', 'keep-alive', true);
|
||||
$app->setHeader('Content-Encoding', 'none', true);
|
||||
$app->setHeader('Content-disposition', 'attachment; filename="'.$filename.'";', true);
|
||||
if (isset($info['type']) && $info['type'])
|
||||
{
|
||||
$app->setHeader('Content-Type', $info['type'], true);
|
||||
}
|
||||
elseif (strpos($filename, '.mp3') !== false)
|
||||
{
|
||||
$app->setHeader('Content-Type', 'audio/mpeg', true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$app->setHeader('Content-Type', 'application/octet-stream', true);
|
||||
}
|
||||
// important to have the file size.
|
||||
if (isset($info['filesize']) && $info['filesize'])
|
||||
{
|
||||
$app->setHeader('Content-Length', (int) $info['filesize'], true);
|
||||
$app->setHeader('Content-Size', (int) $info['filesize'], true);
|
||||
}
|
||||
$app->setHeader('Content-security-policy', 'referrer no-referrer', true);
|
||||
$app->setHeader('Content-Name', '"'.$name.'"', true);
|
||||
$app->setHeader('Content-Version', '1.0', true);
|
||||
$app->setHeader('Content-Vendor', '"'.$vendor.'"', true);
|
||||
$app->setHeader('Content-URL', '"'.JUri::getInstance().'"', true);
|
||||
$app->setHeader('etag', md5($enUrl), true);
|
||||
$app->setHeader('Pragma', 'public', true);
|
||||
$app->setHeader('cache-control', 'max-age=0', true);
|
||||
$app->setHeader('x-robots-tag', 'noindex, nofollow, noimageindex', true);
|
||||
$app->setHeader('x-content-security-policy', 'referrer no-referrer', true);
|
||||
$app->setHeader('x-webkit-csp', 'referrer no-referrer', true);
|
||||
$app->setHeader('x-content-security-policy', 'referrer no-referrer', true);
|
||||
// get the file
|
||||
readfile($link);
|
||||
$app->sendHeaders();
|
||||
$app->close();
|
||||
jexit();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function getContentInfo($url)
|
||||
{
|
||||
// we first try the curl option
|
||||
if ($this->_isCurl())
|
||||
{
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_NOBODY, true);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HEADER, true);
|
||||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||
|
||||
$data = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
// then we try getheaders (this is slower)
|
||||
stream_context_set_default( array('http' => array('method' => 'HEAD')));
|
||||
$headers = get_headers($url);
|
||||
if (###Component###Helper::checkArray($headers))
|
||||
{
|
||||
$data = implode("\n", $headers);
|
||||
}
|
||||
}
|
||||
// get the Content Length
|
||||
if (preg_match('/Content-Length: (\d+)/', $data, $matches))
|
||||
{
|
||||
// Contains file size in bytes
|
||||
$found['filesize'] = (int) $matches[1];
|
||||
|
||||
}
|
||||
// get the Content Type
|
||||
if (preg_match_all('/Content-Type: (.+)/', $data, $matches))
|
||||
{
|
||||
foreach ($matches[1] as $match)
|
||||
{
|
||||
// not the html
|
||||
if (strpos( $match, 'text/html') === false)
|
||||
{
|
||||
$found['type'] = $match;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// return found values
|
||||
if (isset($found) && ###Component###Helper::checkArray($found))
|
||||
{
|
||||
return $found;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function _isCurl()
|
||||
{
|
||||
return function_exists('curl_version');
|
||||
}
|
||||
}
|
342
admin/custom/dropbox.php
Normal file
342
admin/custom/dropbox.php
Normal file
@ -0,0 +1,342 @@
|
||||
<?php
|
||||
/*----------------------------------------------------------------------------------| www.vdm.io |----/
|
||||
Vast Development Method
|
||||
/-------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 1.0.0 - 01st July, 2015
|
||||
@package Dropbox Links builder
|
||||
@subpackage dropboxlinks.php
|
||||
@author Llewellyn van der Merwe <http://www.vdm.io>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
/------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
// No direct access.
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
/**
|
||||
* Dropbox class
|
||||
*/
|
||||
class Dropbox
|
||||
{
|
||||
// the file name
|
||||
public $fileName;
|
||||
|
||||
// the file array
|
||||
public $files = array();
|
||||
|
||||
// the extension to get
|
||||
protected $getfiles = array();
|
||||
|
||||
// the extensions to leave
|
||||
protected $notfiles = array();
|
||||
|
||||
// the folder array
|
||||
protected $folders = array();
|
||||
|
||||
// folder identifiers
|
||||
protected $getfolders = array('?dl=0');
|
||||
|
||||
// the list of extension to help identify what is folders (not exhaustive, only some of the commen files)
|
||||
protected $notfolders = array(
|
||||
'.3gp','.3gpp','.7z','.aac','.act','.aiff','.aiff','.amr','.ape','.ar','.asf','.au','.avi','.awb','.bmp','.bup','.bzip2','.crx','.css','.dct','.deb','.djvu',
|
||||
'.doc','.docx','.drc','.dss','.ear','.egg','.exe','.flac','.flv','.gif','.gifv','.gzip','.htaccess','.html','.ico','.ini','.iso','.jar','.jpeg','.jpg','.js',
|
||||
'.json','.lzip','.m3u','.m4a','.m4p','.m4v','.mkv','.mmf','.mng','.mov','.mp3','.mp4','.mpc','.mpeg','.mpeg4','.mpegps','.mpg','.mpkg','.msi','.odt','.ogg',
|
||||
'.opus','.pdf','.pea','.php','.pkg','.png','.ppt','.pptx','.ps','.psd','.pst','.pxv','.rar','.raw','.rm','.rmvb','.rpm','.rtf','.shar','.sql','.svg','.sxw',
|
||||
'.tar','.tgz','.tgz','.tiff','.txt','.veg','.vep','.vob','.wav','.webm','.wma','.wmv','.xar','.xls','.xml','.yuv','.zip' );
|
||||
|
||||
// the directory where the downloaded files should be stored
|
||||
protected $dir;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct($mainurl, $config = array('save' => false, 'filename' => 'dropbox', 'download' => false, 'dir' => __DIR__))
|
||||
{
|
||||
if ($this->checkArray($config))
|
||||
{
|
||||
// we need more then the normal time to run this script 5 minutes at least.
|
||||
ini_set('max_execution_time', 500); // TODO this is not the best option I am sure, but for now seems like the only option.
|
||||
// set main url
|
||||
$this->mainurl = $mainurl;
|
||||
// if custom get list is set use it
|
||||
if (isset($config['get']) && $this->checkArray($config['get']))
|
||||
{
|
||||
$this->getfiles = $config['get'];
|
||||
}
|
||||
elseif (isset($config['get']) && $this->checkString($config['get']))
|
||||
{
|
||||
$this->getfiles = array($config['get']);
|
||||
}
|
||||
// if custom excludelist is set use it
|
||||
if (isset($config['not']) && $this->checkArray($config['not']))
|
||||
{
|
||||
$this->notfiles = $config['not'];
|
||||
}
|
||||
elseif (isset($config['not']) && $this->checkString($config['not']))
|
||||
{
|
||||
$this->notfiles = array($config['not']);
|
||||
}
|
||||
// set main folder name
|
||||
$this->fileName = (isset($config['filename'])) ? md5($this->mainurl.$config['filename']) : md5($this->mainurl.'nofilenamewasset');
|
||||
// set save switch
|
||||
$save = (isset($config['save'])) ? $config['save'] : false;
|
||||
// set download switch
|
||||
$download = (isset($config['download'])) ? $config['download'] : false;
|
||||
// make sure the note folder identifiers are complete
|
||||
$this->notfolders = array_unique(array_merge($this->getfiles,$this->notfiles,$this->notfolders));
|
||||
// set local directory
|
||||
$this->dir = (isset($config['dir'])) ? $config['dir'] : __DIR__;
|
||||
// check if the parching of the drobox files is up to date
|
||||
if (($json = @file_get_contents($this->fileName.".json")) !== FALSE)
|
||||
{
|
||||
$this->files = json_decode($json, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// set all folders
|
||||
$this->parseFolders($this->mainurl, 'VDM_pLeK_h0uEr');
|
||||
}
|
||||
// check if we should save the file
|
||||
if ($save)
|
||||
{
|
||||
$this->save();
|
||||
}
|
||||
// check if we should download the file
|
||||
if ($download)
|
||||
{
|
||||
$this->download();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function download($dir = null)
|
||||
{
|
||||
if ($this->checkArray($this->files))
|
||||
{
|
||||
// insure the directory is set
|
||||
$dir = ($dir) ? $dir : $this->dir;
|
||||
foreach($this->files as $path => $url)
|
||||
{
|
||||
// now setup correct path
|
||||
$path = str_replace('VDM_pLeK_h0uEr', $dir, $path);
|
||||
// boom here we go move....
|
||||
$this->getFile($url, $path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getFile($url, $path)
|
||||
{
|
||||
$newfname = $path;
|
||||
if (($file = @fopen($url, "rb")) !== FALSE)
|
||||
{
|
||||
$filename = substr($path, strrpos($path, '/'));
|
||||
$makePath = str_replace($filename,'',$path);
|
||||
if (!file_exists($makePath))
|
||||
{
|
||||
mkdir($makePath, 0755, true);
|
||||
}
|
||||
|
||||
$newf = fopen($newfname, "wb");
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'error! '.$url.' not found';
|
||||
}
|
||||
|
||||
if ($newf)
|
||||
{
|
||||
while(!feof($file))
|
||||
{
|
||||
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
|
||||
}
|
||||
}
|
||||
|
||||
if ($file)
|
||||
{
|
||||
fclose($file);
|
||||
}
|
||||
|
||||
if ($newf)
|
||||
{
|
||||
fclose($newf);
|
||||
}
|
||||
}
|
||||
|
||||
public function save($filename = null)
|
||||
{
|
||||
if ($this->checkString($filename))
|
||||
{
|
||||
// set main folder name
|
||||
$this->fileName = md5($this->mainurl.$filename);
|
||||
}
|
||||
if ($this->checkArray($this->files))
|
||||
{
|
||||
$data = json_encode($this->files);
|
||||
// now save this folders data to a file.
|
||||
$this->saveJson($data);
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function saveJson($data)
|
||||
{
|
||||
if ($this->checkString($data))
|
||||
{
|
||||
/*
|
||||
for now it will save
|
||||
the files in the same
|
||||
directory as the php
|
||||
file where the class
|
||||
is called we will have
|
||||
to change this to suite
|
||||
your custom needs.
|
||||
*/
|
||||
$fp = fopen($this->fileName.'.json', 'w');
|
||||
fwrite($fp, $data);
|
||||
fclose($fp);
|
||||
}
|
||||
}
|
||||
|
||||
protected function parseFolders($url, $foldername)
|
||||
{
|
||||
if ($this->checkString($url))
|
||||
{
|
||||
// get the page html
|
||||
if (($html = @file_get_contents($url)) !== FALSE)
|
||||
{
|
||||
//Create a new DOM document
|
||||
$dom = new DOMDocument;
|
||||
|
||||
//Parse the HTML. The @ is used to suppress any parsing errors
|
||||
//that will be thrown if the $html string isn't valid XHTML.
|
||||
@$dom->loadHTML($html);
|
||||
|
||||
//Get all links. You could also use any other tag name here,
|
||||
//like 'img' or 'table', to extract other tags.
|
||||
$links = $dom->getElementsByTagName('a');
|
||||
|
||||
//Iterate over the extracted links and display their URLs
|
||||
if ($this->checkObject($links))
|
||||
{
|
||||
// the types
|
||||
$types = array('folders','files');
|
||||
foreach ($types as $type)
|
||||
{
|
||||
// folder bucket
|
||||
$buket = array();
|
||||
foreach ($links as $nr => $link)
|
||||
{
|
||||
// switch to add link
|
||||
$add = false;
|
||||
// get actual link
|
||||
$href = $link->getAttribute('href');
|
||||
// only use link reated to type
|
||||
if ($this->checkArray($this->{'get'.$type}) && $this->checkString($href))
|
||||
{
|
||||
foreach ($this->{'get'.$type} as $get)
|
||||
{
|
||||
if (!$add)
|
||||
{
|
||||
if (strpos($get,'?dl') === false)
|
||||
{
|
||||
$get = $get . '?dl=0';
|
||||
}
|
||||
if (strpos($href,'https://www.dropbox.com/') !== false && strpos($href,$get) !== false)
|
||||
{
|
||||
$add = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strpos($href,'https://www.dropbox.com/') !== false && strpos($href,'?dl=0') !== false)
|
||||
{
|
||||
$add = true;
|
||||
}
|
||||
}
|
||||
|
||||
// remove if not related to type
|
||||
if ($this->checkArray($this->{'not'.$type}) && $this->checkString($href) && $add)
|
||||
{
|
||||
foreach ($this->{'not'.$type} as $not)
|
||||
{
|
||||
if ($add)
|
||||
{
|
||||
if (strpos($href,$not) !== false)
|
||||
{
|
||||
$add = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// now add if still related to type
|
||||
if ($add)
|
||||
{
|
||||
if (!in_array($href,$buket))
|
||||
{
|
||||
$name = str_replace('?dl=0','',substr($href, strrpos($href, '/') + 1));
|
||||
|
||||
if ($type == 'folders' && strpos($name,'.') === false)
|
||||
{
|
||||
// parse this folder for more files and sub folders
|
||||
$this->parseFolders($href, $foldername.'/'.str_replace('?lst','',$name));
|
||||
$buket[] = $href;
|
||||
unset($links->$nr);
|
||||
|
||||
}
|
||||
elseif ($type == 'files' && strpos($name,'.') !== false)
|
||||
{
|
||||
// Add to file list
|
||||
$this->files[$foldername.'/'.$name] = str_replace('?dl=0','?dl=1',$href);
|
||||
$buket[] = $href;
|
||||
unset($links->$nr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function checkObject($object)
|
||||
{
|
||||
if (isset($object) && is_object($object) && count($object) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function checkArray($array)
|
||||
{
|
||||
if (isset($array) && is_array($array) && count($array) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function checkString($string)
|
||||
{
|
||||
if (isset($string) && is_string($string) && strlen($string) > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
427
admin/custom/dropboxupdater.php
Normal file
427
admin/custom/dropboxupdater.php
Normal file
@ -0,0 +1,427 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @version 2.0.0 - September 03, 2014
|
||||
* @package Component Builder
|
||||
* @author Llewellyn van de Merwe <http://www.vdm.io>
|
||||
* @copyright Copyright (C) 2014. All Rights Reserved
|
||||
* @license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
**/
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
?>
|
||||
###BOM###
|
||||
|
||||
// No direct access to this file
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
/**
|
||||
* Dropbox updater component helper
|
||||
*/
|
||||
class Dropboxupdater
|
||||
{
|
||||
/**
|
||||
* to see where we are in the prosses
|
||||
**/
|
||||
public $progress = array('report' => 0);
|
||||
|
||||
/**
|
||||
* update flag (if false update will not happen)
|
||||
**/
|
||||
protected $okay = true;
|
||||
|
||||
/**
|
||||
* the type of linksto update
|
||||
**/
|
||||
protected $type;
|
||||
|
||||
/**
|
||||
* allow a forced manual update
|
||||
**/
|
||||
protected $runManual;
|
||||
|
||||
/**
|
||||
* Todays date-time
|
||||
**/
|
||||
protected $today;
|
||||
|
||||
/**
|
||||
* Next updat date-time
|
||||
**/
|
||||
protected $next;
|
||||
|
||||
/**
|
||||
* update method
|
||||
**/
|
||||
protected $updateMethod;
|
||||
|
||||
/**
|
||||
* update links
|
||||
**/
|
||||
protected $updateLinks = array();
|
||||
|
||||
/**
|
||||
* Listing of dropbox links
|
||||
**/
|
||||
protected $listing = array();
|
||||
|
||||
/**
|
||||
* info related to this update
|
||||
**/
|
||||
protected $updateInfo;
|
||||
protected $infoFilePath;
|
||||
|
||||
/**
|
||||
* get the localkey
|
||||
**/
|
||||
protected $localkey = false;
|
||||
|
||||
/**
|
||||
* component parameters
|
||||
**/
|
||||
protected $app_params;
|
||||
|
||||
/**
|
||||
* everything we want done when initialized
|
||||
**/
|
||||
public function __construct()
|
||||
{
|
||||
// get params
|
||||
$this->app_params = JComponentHelper::getParams('com_###component###');
|
||||
|
||||
// set local key
|
||||
$this->localkey = md5($this->app_params->get('link_encryption', 'localKey34fdWEkl'));
|
||||
}
|
||||
|
||||
/**
|
||||
* update mehtod
|
||||
**/
|
||||
public function update($type = false, $runManual = false)
|
||||
{
|
||||
if ($type)
|
||||
{
|
||||
// start frech
|
||||
$this->okay = true;
|
||||
// set type
|
||||
$this->type = $type;
|
||||
$this->runManual = $runManual;
|
||||
|
||||
// set progress file name
|
||||
$this->progressFilePath = JPATH_COMPONENT_SITE.'/helpers/'.md5($this->type.'progress'.$this->localkey).'.json';
|
||||
|
||||
// what update method is set
|
||||
$this->setUpdateMethod();
|
||||
|
||||
// set the update links
|
||||
$this->setUpdateLinks();
|
||||
|
||||
// set needed dates
|
||||
if ($this->okay)
|
||||
{
|
||||
$this->setDates();
|
||||
}
|
||||
|
||||
// get info data or set if not found
|
||||
if ($this->okay)
|
||||
{
|
||||
$this->setInfoData();
|
||||
}
|
||||
|
||||
// check if update should run now
|
||||
if ($this->okay)
|
||||
{
|
||||
$this->checkUpdateStatus();
|
||||
}
|
||||
// set progress
|
||||
if ($this->okay)
|
||||
{
|
||||
$this->saveProgress();
|
||||
}
|
||||
|
||||
// before update save update info incase class is called again
|
||||
if($this->okay)
|
||||
{
|
||||
if ($this->updateInfo->updatenow)
|
||||
{
|
||||
// turn update to active
|
||||
$this->updateInfo->updatenow = false;
|
||||
$this->updateInfo->updateactive = true;
|
||||
// now save the date
|
||||
$this->okay = $this->saveUpdateInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
// run the update if all is okay
|
||||
if ($this->okay)
|
||||
{
|
||||
// set the config
|
||||
$this->setDropboxConfig();
|
||||
// set progress
|
||||
$this->progress['report'] = 30;
|
||||
$this->saveProgress();
|
||||
// load the file
|
||||
JLoader::import('dropbox', JPATH_COMPONENT_SITE.'/helpers');
|
||||
// okay now update
|
||||
if ($this->doUpdate())
|
||||
{
|
||||
return $this->okay;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* set update mehtod
|
||||
**/
|
||||
protected function setUpdateMethod()
|
||||
{
|
||||
$method = $this->app_params->get($this->type.'_link_update_method', 0);
|
||||
if ($this->runManual)
|
||||
{
|
||||
// this is a manual method
|
||||
$this->updateMethod = 'manual';
|
||||
}
|
||||
elseif (2 == $method)
|
||||
{
|
||||
// this it an auto mehtod
|
||||
$this->updateMethod = 'auto';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set update Links
|
||||
**/
|
||||
protected function setUpdateLinks()
|
||||
{
|
||||
// the number of links
|
||||
$numbers = range(1, 4);
|
||||
// now check if they are set
|
||||
foreach ($numbers as $number)
|
||||
{
|
||||
// set the number to string
|
||||
$numStr = ###Component###Helper::safeString($number);
|
||||
// Get the url
|
||||
$url = $this->app_params->get($this->type.'dropbox'.$numStr, null);
|
||||
// only load those that are set
|
||||
if ($url)
|
||||
{
|
||||
$this->updateLinks[] = $url;
|
||||
}
|
||||
}
|
||||
// check if we found any
|
||||
if (!isset($this->updateLinks) || !###Component###Helper::checkArray($this->updateLinks))
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set next update time
|
||||
**/
|
||||
protected function setDates()
|
||||
{
|
||||
// set todays date/time
|
||||
$this->today = time();
|
||||
|
||||
// set the next update date/time
|
||||
if ('manual' == $this->updateMethod)
|
||||
{
|
||||
// set the date to two days ago to ensure the update runs now
|
||||
$this->next = strtotime("-2 days");
|
||||
}
|
||||
else
|
||||
{
|
||||
// based on the auto time we will set the next update date/time
|
||||
$timer = $this->app_params->get($this->type.'_dropbox_timer', '60');
|
||||
if ($timer != 0)
|
||||
{
|
||||
// Get Next Update Time
|
||||
$this->next = strtotime('+'.$timer.' minutes', $this->today);
|
||||
}
|
||||
// if timer is 0 we should not update
|
||||
else
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set update mehtod
|
||||
**/
|
||||
protected function setInfoData()
|
||||
{
|
||||
// set the info file name
|
||||
$fileName = md5($this->type.'info'.$this->localkey);
|
||||
// set file path
|
||||
$this->infoFilePath = JPATH_COMPONENT_SITE.'/helpers/'.$fileName.'.json';
|
||||
|
||||
if (($json = @file_get_contents($this->infoFilePath)) !== FALSE)
|
||||
{
|
||||
$this->updateInfo = json_decode($json);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->updateInfo = new stdClass;
|
||||
$this->updateInfo->nextupdate = 0;
|
||||
$this->updateInfo->updateactive = false;
|
||||
$this->updateInfo->updatenow = false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* check update status
|
||||
**/
|
||||
protected function checkUpdateStatus()
|
||||
{
|
||||
// check if there is already an update running
|
||||
if ($this->updateInfo->updateactive)
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
// check if the time has come to do the next update
|
||||
elseif (('auto' == $this->updateMethod) && ($this->updateInfo->nextupdate > $this->today))
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->updateInfo->updatenow = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* save the update info
|
||||
**/
|
||||
protected function saveProgress()
|
||||
{
|
||||
return $this->saveJson(json_encode($this->progress),$this->progressFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* save the update info
|
||||
**/
|
||||
protected function saveUpdateInfo()
|
||||
{
|
||||
return $this->saveJson(json_encode($this->updateInfo),$this->infoFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* update the local listing
|
||||
**/
|
||||
protected function doUpdate()
|
||||
{
|
||||
// we need more then the normal time to run this script 5 minutes at least.
|
||||
ini_set('max_execution_time', 500);
|
||||
// get data of all the urls
|
||||
foreach ($this->updateLinks as $mainUrl)
|
||||
{
|
||||
// set progress
|
||||
if ($this->progress['report'] < 60)
|
||||
{
|
||||
$this->progress['report'] = $this->progress['report'] + 5;
|
||||
$this->saveProgress();
|
||||
}
|
||||
// get ldropbox links
|
||||
$dropbox = new Dropbox($mainUrl, $this->dropboxConfig);
|
||||
// set progress
|
||||
if ($this->progress['report'] < 70)
|
||||
{
|
||||
$this->progress['report'] = $this->progress['report'] + 5;
|
||||
$this->saveProgress();
|
||||
}
|
||||
// get the links
|
||||
if (###Component###Helper::checkArray($dropbox->files))
|
||||
{
|
||||
$this->listing = array_merge($this->listing, $dropbox->files);
|
||||
}
|
||||
// set progress
|
||||
if ($this->progress['report'] < 80)
|
||||
{
|
||||
$this->progress['report'] = $this->progress['report'] + 5;
|
||||
$this->saveProgress();
|
||||
}
|
||||
unset($dropbox);
|
||||
}
|
||||
|
||||
// now store the new listing
|
||||
return $this->setNewListing();
|
||||
}
|
||||
|
||||
protected function setNewListing()
|
||||
{
|
||||
// set progress
|
||||
$this->progress['report'] = 100;
|
||||
$this->saveProgress();
|
||||
// reset storage
|
||||
$storeage = array();
|
||||
// set the listing file name
|
||||
$fileName = md5($this->type.'listing'.$this->localkey);
|
||||
// set file path
|
||||
$listingFilePath = JPATH_COMPONENT_SITE.'/helpers/'.$fileName.'.json';
|
||||
|
||||
// now store the new listing
|
||||
if (###Component###Helper::checkArray($this->listing))
|
||||
{
|
||||
// encrypt the urls
|
||||
$locker = new FOFEncryptAes($this->localkey, 256);
|
||||
foreach ($this->listing as $folder => $link)
|
||||
{
|
||||
$storeage[$folder] = base64_encode($locker->encryptString($link));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->okay = false;
|
||||
}
|
||||
// save the update links.
|
||||
$this->saveJson(json_encode($storeage),$listingFilePath);
|
||||
// make sure the update reset
|
||||
$this->updateInfo->nextupdate = $this->next;
|
||||
$this->updateInfo->updateactive = false;
|
||||
$this->updateInfo->updatenow = false;
|
||||
|
||||
return $this->saveUpdateInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
* set the configeration for dropbox class
|
||||
**/
|
||||
protected function setDropboxConfig()
|
||||
{
|
||||
// reset config
|
||||
$this->dropboxConfig = array();
|
||||
// get the legal files set
|
||||
$getfiles = $this->app_params->get('dropbox_filetypes', null);
|
||||
if (###Component###Helper::checkArray($getfiles))
|
||||
{
|
||||
$this->dropboxConfig['get'] = $getfiles;
|
||||
}
|
||||
// set other config settings
|
||||
$this->dropboxConfig['save'] = false;
|
||||
$this->dropboxConfig['download'] = false;
|
||||
}
|
||||
|
||||
protected function saveJson($data,$filename)
|
||||
{
|
||||
if (###Component###Helper::checkString($data))
|
||||
{
|
||||
$fp = fopen($filename, 'w');
|
||||
fwrite($fp, $data);
|
||||
fclose($fp);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
50
admin/custom/form-password.js
Normal file
50
admin/custom/form-password.js
Normal file
@ -0,0 +1,50 @@
|
||||
/*! UIkit 2.0.0 | https://www.getuikit.com | (c) 2013 YOOtheme | MIT License */
|
||||
|
||||
(function($, UI){
|
||||
|
||||
var FormPassword = function(element, options) {
|
||||
|
||||
var $this = this, $element = $(element);
|
||||
|
||||
if($element.data("formPassword")) return;
|
||||
|
||||
this.options = $.extend({}, FormPassword.defaults, options);
|
||||
|
||||
this.element = $element.on("click", function(e) {
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
if($this.input.length) {
|
||||
var type = $this.input.attr("type");
|
||||
$this.input.attr("type", type=="text" ? "password":"text");
|
||||
$this.element.text($this.options[type=="text" ? "lblShow":"lblHide"]);
|
||||
}
|
||||
});
|
||||
|
||||
$this.input = this.element.next("input").length ? this.element.next("input") : this.element.prev("input");
|
||||
$this.element.text(this.options[$this.input.is("[type='password']") ? "lblShow":"lblHide"]);
|
||||
|
||||
this.element.data("formPassword", this);
|
||||
};
|
||||
|
||||
FormPassword.defaults = {
|
||||
"lblShow": "Show",
|
||||
"lblHide": "Hide"
|
||||
};
|
||||
|
||||
UI["formPassword"] = FormPassword;
|
||||
|
||||
// init code
|
||||
$(document).on("click.formpassword.uikit", "[data-uk-form-password]", function(e) {
|
||||
|
||||
var ele = $(this);
|
||||
if (!ele.data("formPassword")) {
|
||||
|
||||
e.preventDefault();
|
||||
|
||||
var obj = new FormPassword(ele, UI.Utils.options(ele.attr("data-uk-form-password")));
|
||||
ele.trigger("click");
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery, jQuery.UIkit);
|
3
admin/custom/form-password.min.js
vendored
Normal file
3
admin/custom/form-password.min.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/*! UIkit 2.0.0 | https://www.getuikit.com | (c) 2013 YOOtheme | MIT License */
|
||||
|
||||
(function(t,e){var n=function(e,i){var s=this,o=t(e);o.data("formPassword")||(this.options=t.extend({},n.defaults,i),this.element=o.on("click",function(t){if(t.preventDefault(),s.input.length){var e=s.input.attr("type");s.input.attr("type","text"==e?"password":"text"),s.element.text(s.options["text"==e?"lblShow":"lblHide"])}}),s.input=this.element.next("input").length?this.element.next("input"):this.element.prev("input"),s.element.text(this.options[s.input.is("[type='password']")?"lblShow":"lblHide"]),this.element.data("formPassword",this))};n.defaults={lblShow:"Show",lblHide:"Hide"},e.formPassword=n,t(document).on("click.formpassword.uikit","[data-uk-form-password]",function(i){var s=t(this);s.data("formPassword")||(i.preventDefault(),new n(s,e.Utils.options(s.attr("data-uk-form-password"))),s.trigger("click"))})})(jQuery,jQuery.UIkit);
|
11
admin/custom/form.js
Normal file
11
admin/custom/form.js
Normal file
@ -0,0 +1,11 @@
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('#tour_favorite').click(function() {
|
||||
if (jQuery(this).attr('rel') == 'no') {
|
||||
jQuery('#tour_favorite').removeClass('favorite_inactive')
|
||||
.addClass('favorite_active').attr('rel', 'yes');
|
||||
} else {
|
||||
jQuery('#tour_favorite').removeClass('favorite_active')
|
||||
.addClass('favorite_inactive').attr('rel', 'no');
|
||||
};
|
||||
});
|
||||
});
|
BIN
admin/custom/grid.png
Normal file
BIN
admin/custom/grid.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
11
admin/custom/iframeheight.min.js
vendored
Normal file
11
admin/custom/iframeheight.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
573
admin/custom/jquery.mockjax.js
Normal file
573
admin/custom/jquery.mockjax.js
Normal file
@ -0,0 +1,573 @@
|
||||
/*!
|
||||
* MockJax - jQuery Plugin to Mock Ajax requests
|
||||
*
|
||||
* Version: 1.5.1
|
||||
* Released:
|
||||
* Home: https://github.com/appendto/jquery-mockjax
|
||||
* Author: Jonathan Sharp (https://jdsharp.com)
|
||||
* License: MIT,GPL
|
||||
*
|
||||
* Copyright (c) 2011 appendTo LLC.
|
||||
* Dual licensed under the MIT or GPL licenses.
|
||||
* https://appendto.com/open-source-licenses
|
||||
*/
|
||||
(function($) {
|
||||
var _ajax = $.ajax,
|
||||
mockHandlers = [],
|
||||
CALLBACK_REGEX = /=\?(&|$)/,
|
||||
jsc = (new Date()).getTime();
|
||||
|
||||
|
||||
// Parse the given XML string.
|
||||
function parseXML(xml) {
|
||||
if ( window.DOMParser == undefined && window.ActiveXObject ) {
|
||||
DOMParser = function() { };
|
||||
DOMParser.prototype.parseFromString = function( xmlString ) {
|
||||
var doc = new ActiveXObject('Microsoft.XMLDOM');
|
||||
doc.async = 'false';
|
||||
doc.loadXML( xmlString );
|
||||
return doc;
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' );
|
||||
if ( $.isXMLDoc( xmlDoc ) ) {
|
||||
var err = $('parsererror', xmlDoc);
|
||||
if ( err.length == 1 ) {
|
||||
throw('Error: ' + $(xmlDoc).text() );
|
||||
}
|
||||
} else {
|
||||
throw('Unable to parse XML');
|
||||
}
|
||||
return xmlDoc;
|
||||
} catch( e ) {
|
||||
var msg = ( e.name == undefined ? e : e.name + ': ' + e.message );
|
||||
$(document).trigger('xmlParseError', [ msg ]);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger a jQuery event
|
||||
function trigger(s, type, args) {
|
||||
(s.context ? $(s.context) : $.event).trigger(type, args);
|
||||
}
|
||||
|
||||
// Check if the data field on the mock handler and the request match. This
|
||||
// can be used to restrict a mock handler to being used only when a certain
|
||||
// set of data is passed to it.
|
||||
function isMockDataEqual( mock, live ) {
|
||||
var identical = true;
|
||||
// Test for situations where the data is a querystring (not an object)
|
||||
if (typeof live === 'string') {
|
||||
// Querystring may be a regex
|
||||
return $.isFunction( mock.test ) ? mock.test(live) : mock == live;
|
||||
}
|
||||
$.each(mock, function(k) {
|
||||
if ( live[k] === undefined ) {
|
||||
identical = false;
|
||||
return identical;
|
||||
} else {
|
||||
if ( typeof live[k] == 'object' ) {
|
||||
identical = identical && isMockDataEqual(mock[k], live[k]);
|
||||
} else {
|
||||
if ( $.isFunction( mock[k].test ) ) {
|
||||
identical = identical && mock[k].test(live[k]);
|
||||
} else {
|
||||
identical = identical && ( mock[k] == live[k] );
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return identical;
|
||||
}
|
||||
|
||||
// Check the given handler should mock the given request
|
||||
function getMockForRequest( handler, requestSettings ) {
|
||||
// If the mock was registered with a function, let the function decide if we
|
||||
// want to mock this request
|
||||
if ( $.isFunction(handler) ) {
|
||||
return handler( requestSettings );
|
||||
}
|
||||
|
||||
// Inspect the URL of the request and check if the mock handler's url
|
||||
// matches the url for this ajax request
|
||||
if ( $.isFunction(handler.url.test) ) {
|
||||
// The user provided a regex for the url, test it
|
||||
if ( !handler.url.test( requestSettings.url ) ) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// Look for a simple wildcard '*' or a direct URL match
|
||||
var star = handler.url.indexOf('*');
|
||||
if (handler.url !== requestSettings.url && star === -1 ||
|
||||
!new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g, "\\$&").replace(/\*/g, '.+')).test(requestSettings.url)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Inspect the data submitted in the request (either POST body or GET query string)
|
||||
if ( handler.data && requestSettings.data ) {
|
||||
if ( !isMockDataEqual(handler.data, requestSettings.data) ) {
|
||||
// They're not identical, do not mock this request
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// Inspect the request type
|
||||
if ( handler && handler.type &&
|
||||
handler.type.toLowerCase() != requestSettings.type.toLowerCase() ) {
|
||||
// The request type doesn't match (GET vs. POST)
|
||||
return null;
|
||||
}
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
// Process the xhr objects send operation
|
||||
function _xhrSend(mockHandler, requestSettings, origSettings) {
|
||||
|
||||
// This is a substitute for < 1.4 which lacks $.proxy
|
||||
var process = (function(that) {
|
||||
return function() {
|
||||
return (function() {
|
||||
var onReady;
|
||||
|
||||
// The request has returned
|
||||
this.status = mockHandler.status;
|
||||
this.statusText = mockHandler.statusText;
|
||||
this.readyState = 4;
|
||||
|
||||
// We have an executable function, call it to give
|
||||
// the mock handler a chance to update it's data
|
||||
if ( $.isFunction(mockHandler.response) ) {
|
||||
mockHandler.response(origSettings);
|
||||
}
|
||||
// Copy over our mock to our xhr object before passing control back to
|
||||
// jQuery's onreadystatechange callback
|
||||
if ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) {
|
||||
this.responseText = JSON.stringify(mockHandler.responseText);
|
||||
} else if ( requestSettings.dataType == 'xml' ) {
|
||||
if ( typeof mockHandler.responseXML == 'string' ) {
|
||||
this.responseXML = parseXML(mockHandler.responseXML);
|
||||
//in jQuery 1.9.1+, responseXML is processed differently and relies on responseText
|
||||
this.responseText = mockHandler.responseXML;
|
||||
} else {
|
||||
this.responseXML = mockHandler.responseXML;
|
||||
}
|
||||
} else {
|
||||
this.responseText = mockHandler.responseText;
|
||||
}
|
||||
if( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) {
|
||||
this.status = mockHandler.status;
|
||||
}
|
||||
if( typeof mockHandler.statusText === "string") {
|
||||
this.statusText = mockHandler.statusText;
|
||||
}
|
||||
// jQuery 2.0 renamed onreadystatechange to onload
|
||||
onReady = this.onreadystatechange || this.onload;
|
||||
|
||||
// jQuery < 1.4 doesn't have onreadystate change for xhr
|
||||
if ( $.isFunction( onReady ) ) {
|
||||
if( mockHandler.isTimeout) {
|
||||
this.status = -1;
|
||||
}
|
||||
onReady.call( this, mockHandler.isTimeout ? 'timeout' : undefined );
|
||||
} else if ( mockHandler.isTimeout ) {
|
||||
// Fix for 1.3.2 timeout to keep success from firing.
|
||||
this.status = -1;
|
||||
}
|
||||
}).apply(that);
|
||||
};
|
||||
})(this);
|
||||
|
||||
if ( mockHandler.proxy ) {
|
||||
// We're proxying this request and loading in an external file instead
|
||||
_ajax({
|
||||
global: false,
|
||||
url: mockHandler.proxy,
|
||||
type: mockHandler.proxyType,
|
||||
data: mockHandler.data,
|
||||
dataType: requestSettings.dataType === "script" ? "text/plain" : requestSettings.dataType,
|
||||
complete: function(xhr) {
|
||||
mockHandler.responseXML = xhr.responseXML;
|
||||
mockHandler.responseText = xhr.responseText;
|
||||
mockHandler.status = xhr.status;
|
||||
mockHandler.statusText = xhr.statusText;
|
||||
this.responseTimer = setTimeout(process, mockHandler.responseTime || 0);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// type == 'POST' || 'GET' || 'DELETE'
|
||||
if ( requestSettings.async === false ) {
|
||||
// TODO: Blocking delay
|
||||
process();
|
||||
} else {
|
||||
this.responseTimer = setTimeout(process, mockHandler.responseTime || 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Construct a mocked XHR Object
|
||||
function xhr(mockHandler, requestSettings, origSettings, origHandler) {
|
||||
// Extend with our default mockjax settings
|
||||
mockHandler = $.extend(true, {}, $.mockjaxSettings, mockHandler);
|
||||
|
||||
if (typeof mockHandler.headers === 'undefined') {
|
||||
mockHandler.headers = {};
|
||||
}
|
||||
if ( mockHandler.contentType ) {
|
||||
mockHandler.headers['content-type'] = mockHandler.contentType;
|
||||
}
|
||||
|
||||
return {
|
||||
status: mockHandler.status,
|
||||
statusText: mockHandler.statusText,
|
||||
readyState: 1,
|
||||
open: function() { },
|
||||
send: function() {
|
||||
origHandler.fired = true;
|
||||
_xhrSend.call(this, mockHandler, requestSettings, origSettings);
|
||||
},
|
||||
abort: function() {
|
||||
clearTimeout(this.responseTimer);
|
||||
},
|
||||
setRequestHeader: function(header, value) {
|
||||
mockHandler.headers[header] = value;
|
||||
},
|
||||
getResponseHeader: function(header) {
|
||||
// 'Last-modified', 'Etag', 'content-type' are all checked by jQuery
|
||||
if ( mockHandler.headers && mockHandler.headers[header] ) {
|
||||
// Return arbitrary headers
|
||||
return mockHandler.headers[header];
|
||||
} else if ( header.toLowerCase() == 'last-modified' ) {
|
||||
return mockHandler.lastModified || (new Date()).toString();
|
||||
} else if ( header.toLowerCase() == 'etag' ) {
|
||||
return mockHandler.etag || '';
|
||||
} else if ( header.toLowerCase() == 'content-type' ) {
|
||||
return mockHandler.contentType || 'text/plain';
|
||||
}
|
||||
},
|
||||
getAllResponseHeaders: function() {
|
||||
var headers = '';
|
||||
$.each(mockHandler.headers, function(k, v) {
|
||||
headers += k + ': ' + v + "\n";
|
||||
});
|
||||
return headers;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Process a JSONP mock request.
|
||||
function processJsonpMock( requestSettings, mockHandler, origSettings ) {
|
||||
// Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here
|
||||
// because there isn't an easy hook for the cross domain script tag of jsonp
|
||||
|
||||
processJsonpUrl( requestSettings );
|
||||
|
||||
requestSettings.dataType = "json";
|
||||
if(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) {
|
||||
createJsonpCallback(requestSettings, mockHandler, origSettings);
|
||||
|
||||
// We need to make sure
|
||||
// that a JSONP style response is executed properly
|
||||
|
||||
var rurl = /^(\w+:)?\/\/([^\/?#]+)/,
|
||||
parts = rurl.exec( requestSettings.url ),
|
||||
remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
|
||||
|
||||
requestSettings.dataType = "script";
|
||||
if(requestSettings.type.toUpperCase() === "GET" && remote ) {
|
||||
var newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings );
|
||||
|
||||
// Check if we are supposed to return a Deferred back to the mock call, or just
|
||||
// signal success
|
||||
if(newMockReturn) {
|
||||
return newMockReturn;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Append the required callback parameter to the end of the request URL, for a JSONP request
|
||||
function processJsonpUrl( requestSettings ) {
|
||||
if ( requestSettings.type.toUpperCase() === "GET" ) {
|
||||
if ( !CALLBACK_REGEX.test( requestSettings.url ) ) {
|
||||
requestSettings.url += (/\?/.test( requestSettings.url ) ? "&" : "?") +
|
||||
(requestSettings.jsonp || "callback") + "=?";
|
||||
}
|
||||
} else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) {
|
||||
requestSettings.data = (requestSettings.data ? requestSettings.data + "&" : "") + (requestSettings.jsonp || "callback") + "=?";
|
||||
}
|
||||
}
|
||||
|
||||
// Process a JSONP request by evaluating the mocked response text
|
||||
function processJsonpRequest( requestSettings, mockHandler, origSettings ) {
|
||||
// Synthesize the mock request for adding a script tag
|
||||
var callbackContext = origSettings && origSettings.context || requestSettings,
|
||||
newMock = null;
|
||||
|
||||
|
||||
// If the response handler on the moock is a function, call it
|
||||
if ( mockHandler.response && $.isFunction(mockHandler.response) ) {
|
||||
mockHandler.response(origSettings);
|
||||
} else {
|
||||
|
||||
// Evaluate the responseText javascript in a global context
|
||||
if( typeof mockHandler.responseText === 'object' ) {
|
||||
$.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')');
|
||||
} else {
|
||||
$.globalEval( '(' + mockHandler.responseText + ')');
|
||||
}
|
||||
}
|
||||
|
||||
// Successful response
|
||||
jsonpSuccess( requestSettings, callbackContext, mockHandler );
|
||||
jsonpComplete( requestSettings, callbackContext, mockHandler );
|
||||
|
||||
// If we are running under jQuery 1.5+, return a deferred object
|
||||
if($.Deferred){
|
||||
newMock = new $.Deferred();
|
||||
if(typeof mockHandler.responseText == "object"){
|
||||
newMock.resolveWith( callbackContext, [mockHandler.responseText] );
|
||||
}
|
||||
else{
|
||||
newMock.resolveWith( callbackContext, [$.parseJSON( mockHandler.responseText )] );
|
||||
}
|
||||
}
|
||||
return newMock;
|
||||
}
|
||||
|
||||
|
||||
// Create the required JSONP callback function for the request
|
||||
function createJsonpCallback( requestSettings, mockHandler, origSettings ) {
|
||||
var callbackContext = origSettings && origSettings.context || requestSettings;
|
||||
var jsonp = requestSettings.jsonpCallback || ("jsonp" + jsc++);
|
||||
|
||||
// Replace the =? sequence both in the query string and the data
|
||||
if ( requestSettings.data ) {
|
||||
requestSettings.data = (requestSettings.data + "").replace(CALLBACK_REGEX, "=" + jsonp + "$1");
|
||||
}
|
||||
|
||||
requestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, "=" + jsonp + "$1");
|
||||
|
||||
|
||||
// Handle JSONP-style loading
|
||||
window[ jsonp ] = window[ jsonp ] || function( tmp ) {
|
||||
data = tmp;
|
||||
jsonpSuccess( requestSettings, callbackContext, mockHandler );
|
||||
jsonpComplete( requestSettings, callbackContext, mockHandler );
|
||||
// Garbage collect
|
||||
window[ jsonp ] = undefined;
|
||||
|
||||
try {
|
||||
delete window[ jsonp ];
|
||||
} catch(e) {}
|
||||
|
||||
if ( head ) {
|
||||
head.removeChild( script );
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// The JSONP request was successful
|
||||
function jsonpSuccess(requestSettings, callbackContext, mockHandler) {
|
||||
// If a local callback was specified, fire it and pass it the data
|
||||
if ( requestSettings.success ) {
|
||||
requestSettings.success.call( callbackContext, mockHandler.responseText || "", status, {} );
|
||||
}
|
||||
|
||||
// Fire the global callback
|
||||
if ( requestSettings.global ) {
|
||||
trigger(requestSettings, "ajaxSuccess", [{}, requestSettings] );
|
||||
}
|
||||
}
|
||||
|
||||
// The JSONP request was completed
|
||||
function jsonpComplete(requestSettings, callbackContext) {
|
||||
// Process result
|
||||
if ( requestSettings.complete ) {
|
||||
requestSettings.complete.call( callbackContext, {} , status );
|
||||
}
|
||||
|
||||
// The request was completed
|
||||
if ( requestSettings.global ) {
|
||||
trigger( "ajaxComplete", [{}, requestSettings] );
|
||||
}
|
||||
|
||||
// Handle the global AJAX counter
|
||||
if ( requestSettings.global && ! --$.active ) {
|
||||
$.event.trigger( "ajaxStop" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// The core $.ajax replacement.
|
||||
function handleAjax( url, origSettings ) {
|
||||
var mockRequest, requestSettings, mockHandler;
|
||||
|
||||
// If url is an object, simulate pre-1.5 signature
|
||||
if ( typeof url === "object" ) {
|
||||
origSettings = url;
|
||||
url = undefined;
|
||||
} else {
|
||||
// work around to support 1.5 signature
|
||||
origSettings.url = url;
|
||||
}
|
||||
|
||||
// Extend the original settings for the request
|
||||
requestSettings = $.extend(true, {}, $.ajaxSettings, origSettings);
|
||||
|
||||
// Iterate over our mock handlers (in registration order) until we find
|
||||
// one that is willing to intercept the request
|
||||
for(var k = 0; k < mockHandlers.length; k++) {
|
||||
if ( !mockHandlers[k] ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
mockHandler = getMockForRequest( mockHandlers[k], requestSettings );
|
||||
if(!mockHandler) {
|
||||
// No valid mock found for this request
|
||||
continue;
|
||||
}
|
||||
|
||||
// If logging is enabled, log the mock to the console
|
||||
$.mockjaxSettings.log( mockHandler, requestSettings );
|
||||
|
||||
|
||||
if ( requestSettings.dataType === "jsonp" ) {
|
||||
if ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) {
|
||||
// This mock will handle the JSONP request
|
||||
return mockRequest;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Removed to fix #54 - keep the mocking data object intact
|
||||
//mockHandler.data = requestSettings.data;
|
||||
|
||||
mockHandler.cache = requestSettings.cache;
|
||||
mockHandler.timeout = requestSettings.timeout;
|
||||
mockHandler.global = requestSettings.global;
|
||||
|
||||
copyUrlParameters(mockHandler, origSettings);
|
||||
|
||||
(function(mockHandler, requestSettings, origSettings, origHandler) {
|
||||
mockRequest = _ajax.call($, $.extend(true, {}, origSettings, {
|
||||
// Mock the XHR object
|
||||
xhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ); }
|
||||
}));
|
||||
})(mockHandler, requestSettings, origSettings, mockHandlers[k]);
|
||||
|
||||
return mockRequest;
|
||||
}
|
||||
|
||||
// We don't have a mock request, trigger a normal request
|
||||
return _ajax.apply($, [origSettings]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies URL parameter values if they were captured by a regular expression
|
||||
* @param {Object} mockHandler
|
||||
* @param {Object} origSettings
|
||||
*/
|
||||
function copyUrlParameters(mockHandler, origSettings) {
|
||||
//parameters aren't captured if the URL isn't a RegExp
|
||||
if (!mockHandler.url instanceof RegExp) {
|
||||
return;
|
||||
}
|
||||
//if no URL params were defined on the handler, don't attempt a capture
|
||||
if (!mockHandler.hasOwnProperty('urlParams')) {
|
||||
return;
|
||||
}
|
||||
var captures = mockHandler.url.exec(origSettings.url);
|
||||
//the whole RegExp match is always the first value in the capture results
|
||||
if (captures.length === 1) {
|
||||
return;
|
||||
}
|
||||
captures.shift();
|
||||
//use handler params as keys and capture resuts as values
|
||||
var i = 0,
|
||||
capturesLength = captures.length,
|
||||
paramsLength = mockHandler.urlParams.length,
|
||||
//in case the number of params specified is less than actual captures
|
||||
maxIterations = Math.min(capturesLength, paramsLength),
|
||||
paramValues = {};
|
||||
for (i; i < maxIterations; i++) {
|
||||
var key = mockHandler.urlParams[i];
|
||||
paramValues[key] = captures[i];
|
||||
}
|
||||
origSettings.urlParams = paramValues;
|
||||
}
|
||||
|
||||
|
||||
// Public
|
||||
|
||||
$.extend({
|
||||
ajax: handleAjax
|
||||
});
|
||||
|
||||
$.mockjaxSettings = {
|
||||
//url: null,
|
||||
//type: 'GET',
|
||||
log: function( mockHandler, requestSettings ) {
|
||||
if ( mockHandler.logging === false ||
|
||||
( typeof mockHandler.logging === 'undefined' && $.mockjaxSettings.logging === false ) ) {
|
||||
return;
|
||||
}
|
||||
if ( window.console && console.log ) {
|
||||
var message = 'MOCK ' + requestSettings.type.toUpperCase() + ': ' + requestSettings.url;
|
||||
var request = $.extend({}, requestSettings);
|
||||
|
||||
if (typeof console.log === 'function') {
|
||||
console.log(message, request);
|
||||
} else {
|
||||
try {
|
||||
console.log( message + ' ' + JSON.stringify(request) );
|
||||
} catch (e) {
|
||||
console.log(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
logging: true,
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
responseTime: 500,
|
||||
isTimeout: false,
|
||||
contentType: 'text/plain',
|
||||
response: '',
|
||||
responseText: '',
|
||||
responseXML: '',
|
||||
proxy: '',
|
||||
proxyType: 'GET',
|
||||
|
||||
lastModified: null,
|
||||
etag: '',
|
||||
headers: {
|
||||
etag: 'IJF@H#@923uf8023hFO@I#H#',
|
||||
'content-type' : 'text/plain'
|
||||
}
|
||||
};
|
||||
|
||||
$.mockjax = function(settings) {
|
||||
var i = mockHandlers.length;
|
||||
mockHandlers[i] = settings;
|
||||
return i;
|
||||
};
|
||||
$.mockjaxClear = function(i) {
|
||||
if ( arguments.length == 1 ) {
|
||||
mockHandlers[i] = null;
|
||||
} else {
|
||||
mockHandlers = [];
|
||||
}
|
||||
};
|
||||
$.mockjax.handler = function(i) {
|
||||
if ( arguments.length == 1 ) {
|
||||
return mockHandlers[i];
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
7
admin/custom/marked.js
Normal file
7
admin/custom/marked.js
Normal file
File diff suppressed because one or more lines are too long
536
admin/custom/mustache.js
Normal file
536
admin/custom/mustache.js
Normal file
@ -0,0 +1,536 @@
|
||||
/*!
|
||||
* mustache.js - Logic-less {{mustache}} templates with JavaScript
|
||||
* https://github.com/janl/mustache.js
|
||||
*/
|
||||
|
||||
/*global define: false*/
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof exports === "object" && exports) {
|
||||
factory(exports); // CommonJS
|
||||
} else {
|
||||
var mustache = {};
|
||||
factory(mustache);
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define(mustache); // AMD
|
||||
} else {
|
||||
root.Mustache = mustache; // <script>
|
||||
}
|
||||
}
|
||||
}(this, function (mustache) {
|
||||
|
||||
var whiteRe = /\s*/;
|
||||
var spaceRe = /\s+/;
|
||||
var nonSpaceRe = /\S/;
|
||||
var eqRe = /\s*=/;
|
||||
var curlyRe = /\s*\}/;
|
||||
var tagRe = /#|\^|\/|>|\{|&|=|!/;
|
||||
|
||||
// Workaround for https://issues.apache.org/jira/browse/COUCHDB-577
|
||||
// See https://github.com/janl/mustache.js/issues/189
|
||||
var RegExp_test = RegExp.prototype.test;
|
||||
function testRegExp(re, string) {
|
||||
return RegExp_test.call(re, string);
|
||||
}
|
||||
|
||||
function isWhitespace(string) {
|
||||
return !testRegExp(nonSpaceRe, string);
|
||||
}
|
||||
|
||||
var Object_toString = Object.prototype.toString;
|
||||
var isArray = Array.isArray || function (obj) {
|
||||
return Object_toString.call(obj) === '[object Array]';
|
||||
};
|
||||
|
||||
function escapeRegExp(string) {
|
||||
return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
|
||||
var entityMap = {
|
||||
"&": "&",
|
||||
"<": "<",
|
||||
">": ">",
|
||||
'"': '"',
|
||||
"'": ''',
|
||||
"/": '/'
|
||||
};
|
||||
|
||||
function escapeHtml(string) {
|
||||
return String(string).replace(/[&<>"'\/]/g, function (s) {
|
||||
return entityMap[s];
|
||||
});
|
||||
}
|
||||
|
||||
function Scanner(string) {
|
||||
this.string = string;
|
||||
this.tail = string;
|
||||
this.pos = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `true` if the tail is empty (end of string).
|
||||
*/
|
||||
Scanner.prototype.eos = function () {
|
||||
return this.tail === "";
|
||||
};
|
||||
|
||||
/**
|
||||
* Tries to match the given regular expression at the current position.
|
||||
* Returns the matched text if it can match, the empty string otherwise.
|
||||
*/
|
||||
Scanner.prototype.scan = function (re) {
|
||||
var match = this.tail.match(re);
|
||||
|
||||
if (match && match.index === 0) {
|
||||
this.tail = this.tail.substring(match[0].length);
|
||||
this.pos += match[0].length;
|
||||
return match[0];
|
||||
}
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
/**
|
||||
* Skips all text until the given regular expression can be matched. Returns
|
||||
* the skipped string, which is the entire tail if no match can be made.
|
||||
*/
|
||||
Scanner.prototype.scanUntil = function (re) {
|
||||
var match, pos = this.tail.search(re);
|
||||
|
||||
switch (pos) {
|
||||
case -1:
|
||||
match = this.tail;
|
||||
this.pos += this.tail.length;
|
||||
this.tail = "";
|
||||
break;
|
||||
case 0:
|
||||
match = "";
|
||||
break;
|
||||
default:
|
||||
match = this.tail.substring(0, pos);
|
||||
this.tail = this.tail.substring(pos);
|
||||
this.pos += pos;
|
||||
}
|
||||
|
||||
return match;
|
||||
};
|
||||
|
||||
function Context(view, parent) {
|
||||
this.view = view || {};
|
||||
this.parent = parent;
|
||||
this._cache = {};
|
||||
}
|
||||
|
||||
Context.make = function (view) {
|
||||
return (view instanceof Context) ? view : new Context(view);
|
||||
};
|
||||
|
||||
Context.prototype.push = function (view) {
|
||||
return new Context(view, this);
|
||||
};
|
||||
|
||||
Context.prototype.lookup = function (name) {
|
||||
var value = this._cache[name];
|
||||
|
||||
if (!value) {
|
||||
if (name == '.') {
|
||||
value = this.view;
|
||||
} else {
|
||||
var context = this;
|
||||
|
||||
while (context) {
|
||||
if (name.indexOf('.') > 0) {
|
||||
value = context.view;
|
||||
var names = name.split('.'), i = 0;
|
||||
while (value && i < names.length) {
|
||||
value = value[names[i++]];
|
||||
}
|
||||
} else {
|
||||
value = context.view[name];
|
||||
}
|
||||
|
||||
if (value != null) break;
|
||||
|
||||
context = context.parent;
|
||||
}
|
||||
}
|
||||
|
||||
this._cache[name] = value;
|
||||
}
|
||||
|
||||
if (typeof value === 'function') value = value.call(this.view);
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
function Writer() {
|
||||
this.clearCache();
|
||||
}
|
||||
|
||||
Writer.prototype.clearCache = function () {
|
||||
this._cache = {};
|
||||
this._partialCache = {};
|
||||
};
|
||||
|
||||
Writer.prototype.compile = function (template, tags) {
|
||||
var fn = this._cache[template];
|
||||
|
||||
if (!fn) {
|
||||
var tokens = mustache.parse(template, tags);
|
||||
fn = this._cache[template] = this.compileTokens(tokens, template);
|
||||
}
|
||||
|
||||
return fn;
|
||||
};
|
||||
|
||||
Writer.prototype.compilePartial = function (name, template, tags) {
|
||||
var fn = this.compile(template, tags);
|
||||
this._partialCache[name] = fn;
|
||||
return fn;
|
||||
};
|
||||
|
||||
Writer.prototype.getPartial = function (name) {
|
||||
if (!(name in this._partialCache) && this._loadPartial) {
|
||||
this.compilePartial(name, this._loadPartial(name));
|
||||
}
|
||||
|
||||
return this._partialCache[name];
|
||||
};
|
||||
|
||||
Writer.prototype.compileTokens = function (tokens, template) {
|
||||
var self = this;
|
||||
return function (view, partials) {
|
||||
if (partials) {
|
||||
if (typeof partials === 'function') {
|
||||
self._loadPartial = partials;
|
||||
} else {
|
||||
for (var name in partials) {
|
||||
self.compilePartial(name, partials[name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return renderTokens(tokens, self, Context.make(view), template);
|
||||
};
|
||||
};
|
||||
|
||||
Writer.prototype.render = function (template, view, partials) {
|
||||
return this.compile(template)(view, partials);
|
||||
};
|
||||
|
||||
/**
|
||||
* Low-level function that renders the given `tokens` using the given `writer`
|
||||
* and `context`. The `template` string is only needed for templates that use
|
||||
* higher-order sections to extract the portion of the original template that
|
||||
* was contained in that section.
|
||||
*/
|
||||
function renderTokens(tokens, writer, context, template) {
|
||||
var buffer = '';
|
||||
|
||||
var token, tokenValue, value;
|
||||
for (var i = 0, len = tokens.length; i < len; ++i) {
|
||||
token = tokens[i];
|
||||
tokenValue = token[1];
|
||||
|
||||
switch (token[0]) {
|
||||
case '#':
|
||||
value = context.lookup(tokenValue);
|
||||
|
||||
if (typeof value === 'object') {
|
||||
if (isArray(value)) {
|
||||
for (var j = 0, jlen = value.length; j < jlen; ++j) {
|
||||
buffer += renderTokens(token[4], writer, context.push(value[j]), template);
|
||||
}
|
||||
} else if (value) {
|
||||
buffer += renderTokens(token[4], writer, context.push(value), template);
|
||||
}
|
||||
} else if (typeof value === 'function') {
|
||||
var text = template == null ? null : template.slice(token[3], token[5]);
|
||||
value = value.call(context.view, text, function (template) {
|
||||
return writer.render(template, context);
|
||||
});
|
||||
if (value != null) buffer += value;
|
||||
} else if (value) {
|
||||
buffer += renderTokens(token[4], writer, context, template);
|
||||
}
|
||||
|
||||
break;
|
||||
case '^':
|
||||
value = context.lookup(tokenValue);
|
||||
|
||||
// Use JavaScript's definition of falsy. Include empty arrays.
|
||||
// See https://github.com/janl/mustache.js/issues/186
|
||||
if (!value || (isArray(value) && value.length === 0)) {
|
||||
buffer += renderTokens(token[4], writer, context, template);
|
||||
}
|
||||
|
||||
break;
|
||||
case '>':
|
||||
value = writer.getPartial(tokenValue);
|
||||
if (typeof value === 'function') buffer += value(context);
|
||||
break;
|
||||
case '&':
|
||||
value = context.lookup(tokenValue);
|
||||
if (value != null) buffer += value;
|
||||
break;
|
||||
case 'name':
|
||||
value = context.lookup(tokenValue);
|
||||
if (value != null) buffer += mustache.escape(value);
|
||||
break;
|
||||
case 'text':
|
||||
buffer += tokenValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Forms the given array of `tokens` into a nested tree structure where
|
||||
* tokens that represent a section have two additional items: 1) an array of
|
||||
* all tokens that appear in that section and 2) the index in the original
|
||||
* template that represents the end of that section.
|
||||
*/
|
||||
function nestTokens(tokens) {
|
||||
var tree = [];
|
||||
var collector = tree;
|
||||
var sections = [];
|
||||
|
||||
var token;
|
||||
for (var i = 0, len = tokens.length; i < len; ++i) {
|
||||
token = tokens[i];
|
||||
switch (token[0]) {
|
||||
case '#':
|
||||
case '^':
|
||||
sections.push(token);
|
||||
collector.push(token);
|
||||
collector = token[4] = [];
|
||||
break;
|
||||
case '/':
|
||||
var section = sections.pop();
|
||||
section[5] = token[2];
|
||||
collector = sections.length > 0 ? sections[sections.length - 1][4] : tree;
|
||||
break;
|
||||
default:
|
||||
collector.push(token);
|
||||
}
|
||||
}
|
||||
|
||||
return tree;
|
||||
}
|
||||
|
||||
/**
|
||||
* Combines the values of consecutive text tokens in the given `tokens` array
|
||||
* to a single token.
|
||||
*/
|
||||
function squashTokens(tokens) {
|
||||
var squashedTokens = [];
|
||||
|
||||
var token, lastToken;
|
||||
for (var i = 0, len = tokens.length; i < len; ++i) {
|
||||
token = tokens[i];
|
||||
if (token) {
|
||||
if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {
|
||||
lastToken[1] += token[1];
|
||||
lastToken[3] = token[3];
|
||||
} else {
|
||||
lastToken = token;
|
||||
squashedTokens.push(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return squashedTokens;
|
||||
}
|
||||
|
||||
function escapeTags(tags) {
|
||||
return [
|
||||
new RegExp(escapeRegExp(tags[0]) + "\\s*"),
|
||||
new RegExp("\\s*" + escapeRegExp(tags[1]))
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Breaks up the given `template` string into a tree of token objects. If
|
||||
* `tags` is given here it must be an array with two string values: the
|
||||
* opening and closing tags used in the template (e.g. ["<%", "%>"]). Of
|
||||
* course, the default is to use mustaches (i.e. Mustache.tags).
|
||||
*/
|
||||
function parseTemplate(template, tags) {
|
||||
template = template || '';
|
||||
tags = tags || mustache.tags;
|
||||
|
||||
if (typeof tags === 'string') tags = tags.split(spaceRe);
|
||||
if (tags.length !== 2) throw new Error('Invalid tags: ' + tags.join(', '));
|
||||
|
||||
var tagRes = escapeTags(tags);
|
||||
var scanner = new Scanner(template);
|
||||
|
||||
var sections = []; // Stack to hold section tokens
|
||||
var tokens = []; // Buffer to hold the tokens
|
||||
var spaces = []; // Indices of whitespace tokens on the current line
|
||||
var hasTag = false; // Is there a {{tag}} on the current line?
|
||||
var nonSpace = false; // Is there a non-space char on the current line?
|
||||
|
||||
// Strips all whitespace tokens array for the current line
|
||||
// if there was a {{#tag}} on it and otherwise only space.
|
||||
function stripSpace() {
|
||||
if (hasTag && !nonSpace) {
|
||||
while (spaces.length) {
|
||||
delete tokens[spaces.pop()];
|
||||
}
|
||||
} else {
|
||||
spaces = [];
|
||||
}
|
||||
|
||||
hasTag = false;
|
||||
nonSpace = false;
|
||||
}
|
||||
|
||||
var start, type, value, chr, token;
|
||||
while (!scanner.eos()) {
|
||||
start = scanner.pos;
|
||||
|
||||
// Match any text between tags.
|
||||
value = scanner.scanUntil(tagRes[0]);
|
||||
if (value) {
|
||||
for (var i = 0, len = value.length; i < len; ++i) {
|
||||
chr = value.charAt(i);
|
||||
|
||||
if (isWhitespace(chr)) {
|
||||
spaces.push(tokens.length);
|
||||
} else {
|
||||
nonSpace = true;
|
||||
}
|
||||
|
||||
tokens.push(['text', chr, start, start + 1]);
|
||||
start += 1;
|
||||
|
||||
// Check for whitespace on the current line.
|
||||
if (chr == '\n') stripSpace();
|
||||
}
|
||||
}
|
||||
|
||||
// Match the opening tag.
|
||||
if (!scanner.scan(tagRes[0])) break;
|
||||
hasTag = true;
|
||||
|
||||
// Get the tag type.
|
||||
type = scanner.scan(tagRe) || 'name';
|
||||
scanner.scan(whiteRe);
|
||||
|
||||
// Get the tag value.
|
||||
if (type === '=') {
|
||||
value = scanner.scanUntil(eqRe);
|
||||
scanner.scan(eqRe);
|
||||
scanner.scanUntil(tagRes[1]);
|
||||
} else if (type === '{') {
|
||||
value = scanner.scanUntil(new RegExp('\\s*' + escapeRegExp('}' + tags[1])));
|
||||
scanner.scan(curlyRe);
|
||||
scanner.scanUntil(tagRes[1]);
|
||||
type = '&';
|
||||
} else {
|
||||
value = scanner.scanUntil(tagRes[1]);
|
||||
}
|
||||
|
||||
// Match the closing tag.
|
||||
if (!scanner.scan(tagRes[1])) throw new Error('Unclosed tag at ' + scanner.pos);
|
||||
|
||||
token = [type, value, start, scanner.pos];
|
||||
tokens.push(token);
|
||||
|
||||
if (type === '#' || type === '^') {
|
||||
sections.push(token);
|
||||
} else if (type === '/') {
|
||||
// Check section nesting.
|
||||
if (sections.length === 0) throw new Error('Unopened section "' + value + '" at ' + start);
|
||||
var openSection = sections.pop();
|
||||
if (openSection[1] !== value) throw new Error('Unclosed section "' + openSection[1] + '" at ' + start);
|
||||
} else if (type === 'name' || type === '{' || type === '&') {
|
||||
nonSpace = true;
|
||||
} else if (type === '=') {
|
||||
// Set the tags for the next time around.
|
||||
tags = value.split(spaceRe);
|
||||
if (tags.length !== 2) throw new Error('Invalid tags at ' + start + ': ' + tags.join(', '));
|
||||
tagRes = escapeTags(tags);
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure there are no open sections when we're done.
|
||||
var openSection = sections.pop();
|
||||
if (openSection) throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos);
|
||||
|
||||
tokens = squashTokens(tokens);
|
||||
|
||||
return nestTokens(tokens);
|
||||
}
|
||||
|
||||
mustache.name = "mustache.js";
|
||||
mustache.version = "0.7.2";
|
||||
mustache.tags = ["{{", "}}"];
|
||||
|
||||
mustache.Scanner = Scanner;
|
||||
mustache.Context = Context;
|
||||
mustache.Writer = Writer;
|
||||
|
||||
mustache.parse = parseTemplate;
|
||||
|
||||
// Export the escaping function so that the user may override it.
|
||||
// See https://github.com/janl/mustache.js/issues/244
|
||||
mustache.escape = escapeHtml;
|
||||
|
||||
// All Mustache.* functions use this writer.
|
||||
var defaultWriter = new Writer();
|
||||
|
||||
/**
|
||||
* Clears all cached templates and partials in the default writer.
|
||||
*/
|
||||
mustache.clearCache = function () {
|
||||
return defaultWriter.clearCache();
|
||||
};
|
||||
|
||||
/**
|
||||
* Compiles the given `template` to a reusable function using the default
|
||||
* writer.
|
||||
*/
|
||||
mustache.compile = function (template, tags) {
|
||||
return defaultWriter.compile(template, tags);
|
||||
};
|
||||
|
||||
/**
|
||||
* Compiles the partial with the given `name` and `template` to a reusable
|
||||
* function using the default writer.
|
||||
*/
|
||||
mustache.compilePartial = function (name, template, tags) {
|
||||
return defaultWriter.compilePartial(name, template, tags);
|
||||
};
|
||||
|
||||
/**
|
||||
* Compiles the given array of tokens (the output of a parse) to a reusable
|
||||
* function using the default writer.
|
||||
*/
|
||||
mustache.compileTokens = function (tokens, template) {
|
||||
return defaultWriter.compileTokens(tokens, template);
|
||||
};
|
||||
|
||||
/**
|
||||
* Renders the `template` with the given `view` and `partials` using the
|
||||
* default writer.
|
||||
*/
|
||||
mustache.render = function (template, view, partials) {
|
||||
return defaultWriter.render(template, view, partials);
|
||||
};
|
||||
|
||||
// This is here for backwards compatibility with 0.4.x.
|
||||
mustache.to_html = function (template, view, partials, send) {
|
||||
var result = mustache.render(template, view, partials);
|
||||
|
||||
if (typeof send === "function") {
|
||||
send(result);
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
}));
|
2
admin/custom/offline.min.js
vendored
Normal file
2
admin/custom/offline.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,113 +0,0 @@
|
||||
/** @license
|
||||
|
||||
|
||||
SoundManager 2: JavaScript Sound for the Web
|
||||
----------------------------------------------
|
||||
http://schillmania.com/projects/soundmanager2/
|
||||
|
||||
Copyright (c) 2007, Scott Schiller. All rights reserved.
|
||||
Code provided under the BSD License:
|
||||
http://schillmania.com/projects/soundmanager2/license.txt
|
||||
|
||||
V2.97a.20150601
|
||||
*/
|
||||
(function(h,g){function K(sb,K){function ha(b){return c.preferFlash&&H&&!c.ignoreFlash&&c.flash[b]!==g&&c.flash[b]}function r(b){return function(d){var e=this._s;e&&e._a?d=b.call(this,d):(e&&e.id?c._wD(e.id+": Ignoring "+d.type):c._wD("HTML5::Ignoring "+d.type),d=null);return d}}this.setupOptions={url:sb||null,flashVersion:8,debugMode:!0,debugFlash:!1,useConsole:!0,consoleOnly:!0,waitForWindowLoad:!1,bgColor:"#ffffff",useHighPerformance:!1,flashPollingInterval:null,html5PollingInterval:null,flashLoadTimeout:1E3,
|
||||
wmode:null,allowScriptAccess:"always",useFlashBlock:!1,useHTML5Audio:!0,forceUseGlobalHTML5Audio:!1,ignoreMobileRestrictions:!1,html5Test:/^(probably|maybe)$/i,preferFlash:!1,noSWFCache:!1,idPrefix:"sound"};this.defaultOptions={autoLoad:!1,autoPlay:!1,from:null,loops:1,onid3:null,onload:null,whileloading:null,onplay:null,onpause:null,onresume:null,whileplaying:null,onposition:null,onstop:null,onfailure:null,onfinish:null,multiShot:!0,multiShotEvents:!1,position:null,pan:0,stream:!0,to:null,type:null,
|
||||
usePolicyFile:!1,volume:100};this.flash9Options={isMovieStar:null,usePeakData:!1,useWaveformData:!1,useEQData:!1,onbufferchange:null,ondataerror:null};this.movieStarOptions={bufferTime:3,serverURL:null,onconnect:null,duration:null};this.audioFormats={mp3:{type:['audio/mpeg; codecs="mp3"',"audio/mpeg","audio/mp3","audio/MPA","audio/mpa-robust"],required:!0},mp4:{related:["aac","m4a","m4b"],type:['audio/mp4; codecs="mp4a.40.2"',"audio/aac","audio/x-m4a","audio/MP4A-LATM","audio/mpeg4-generic"],required:!1},
|
||||
ogg:{type:["audio/ogg; codecs=vorbis"],required:!1},opus:{type:["audio/ogg; codecs=opus","audio/opus"],required:!1},wav:{type:['audio/wav; codecs="1"',"audio/wav","audio/wave","audio/x-wav"],required:!1}};this.movieID="sm2-container";this.id=K||"sm2movie";this.debugID="soundmanager-debug";this.debugURLParam=/([#?&])debug=1/i;this.versionNumber="V2.97a.20150601";this.altURL=this.movieURL=this.version=null;this.enabled=this.swfLoaded=!1;this.oMC=null;this.sounds={};this.soundIDs=[];this.didFlashBlock=
|
||||
this.muted=!1;this.filePattern=null;this.filePatterns={flash8:/\.mp3(\?.*)?$/i,flash9:/\.mp3(\?.*)?$/i};this.features={buffering:!1,peakData:!1,waveformData:!1,eqData:!1,movieStar:!1};this.sandbox={type:null,types:{remote:"remote (domain-based) rules",localWithFile:"local with file access (no internet access)",localWithNetwork:"local with network (internet access only, no local access)",localTrusted:"local, trusted (local+internet access)"},description:null,noRemote:null,noLocal:null};this.html5=
|
||||
{usingFlash:null};this.flash={};this.ignoreFlash=this.html5Only=!1;var W,c=this,Ya=null,l=null,F,v=navigator.userAgent,ia=h.location.href.toString(),m=document,ya,Za,za,n,I=[],Aa=!0,D,X=!1,Y=!1,q=!1,y=!1,ja=!1,p,tb=0,Z,A,Ba,R,Ca,P,S,T,$a,Da,Ea,ka,z,la,Q,Fa,aa,ma,na,U,ab,Ga,bb=["log","info","warn","error"],cb,Ha,db,ba=null,Ia=null,t,Ja,V,eb,oa,pa,L,w,ca=!1,Ka=!1,fb,gb,hb,qa=0,da=null,ra,M=[],ea,u=null,ib,sa,fa,N,ta,La,jb,x,kb=Array.prototype.slice,C=!1,Ma,H,Na,lb,J,mb,Oa,ua,nb=0,Pa,Qa=v.match(/(ipad|iphone|ipod)/i),
|
||||
Ra=v.match(/android/i),O=v.match(/msie/i),ub=v.match(/webkit/i),va=v.match(/safari/i)&&!v.match(/chrome/i),Sa=v.match(/opera/i),wa=v.match(/(mobile|pre\/|xoom)/i)||Qa||Ra,Ta=!ia.match(/usehtml5audio/i)&&!ia.match(/sm2\-ignorebadua/i)&&va&&!v.match(/silk/i)&&v.match(/OS X 10_6_([3-7])/i),Ua=h.console!==g&&console.log!==g,Va=m.hasFocus!==g?m.hasFocus():null,xa=va&&(m.hasFocus===g||!m.hasFocus()),ob=!xa,pb=/(mp3|mp4|mpa|m4a|m4b)/i,ga=m.location?m.location.protocol.match(/http/i):null,vb=ga?"":"http://",
|
||||
qb=/^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|m4b|mp4v|3gp|3g2)\s*(?:$|;)/i,rb="mpeg4 aac flv mov mp4 m4v f4v m4a m4b mp4v 3gp 3g2".split(" "),wb=new RegExp("\\.("+rb.join("|")+")(\\?.*)?$","i");this.mimePattern=/^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i;this.useAltURL=!ga;var Wa;try{Wa=Audio!==g&&(Sa&&opera!==g&&10>opera.version()?new Audio(null):new Audio).canPlayType!==g}catch(xb){Wa=!1}this.hasHTML5=Wa;this.setup=function(b){var d=!c.url;b!==g&&q&&u&&c.ok()&&(b.flashVersion!==g||
|
||||
b.url!==g||b.html5Test!==g)&&L(t("setupLate"));Ba(b);if(!C)if(wa){if(!c.setupOptions.ignoreMobileRestrictions||c.setupOptions.forceUseGlobalHTML5Audio)M.push(z.globalHTML5),C=!0}else c.setupOptions.forceUseGlobalHTML5Audio&&(M.push(z.globalHTML5),C=!0);if(!Pa&&wa)if(c.setupOptions.ignoreMobileRestrictions)M.push(z.ignoreMobile);else if(c.setupOptions.useHTML5Audio&&!c.setupOptions.preferFlash||c._wD(z.mobileUA),c.setupOptions.useHTML5Audio=!0,c.setupOptions.preferFlash=!1,Qa)c.ignoreFlash=!0;else if(Ra&&
|
||||
!v.match(/android\s2\.3/i)||!Ra)c._wD(z.globalHTML5),C=!0;b&&(d&&aa&&b.url!==g&&c.beginDelayedInit(),aa||b.url===g||"complete"!==m.readyState||setTimeout(Q,1));Pa=!0;return c};this.supported=this.ok=function(){return u?q&&!y:c.useHTML5Audio&&c.hasHTML5};this.getMovie=function(c){return F(c)||m[c]||h[c]};this.createSound=function(b,d){function e(){f=oa(f);c.sounds[f.id]=new W(f);c.soundIDs.push(f.id);return c.sounds[f.id]}var a,f;a=null;a="soundManager.createSound(): "+t(q?"notOK":"notReady");if(!q||
|
||||
!c.ok())return L(a),!1;d!==g&&(b={id:b,url:d});f=A(b);f.url=ra(f.url);f.id===g&&(f.id=c.setupOptions.idPrefix+nb++);f.id.toString().charAt(0).match(/^[0-9]$/)&&c._wD("soundManager.createSound(): "+t("badID",f.id),2);c._wD("soundManager.createSound(): "+f.id+(f.url?" ("+f.url+")":""),1);if(w(f.id,!0))return c._wD("soundManager.createSound(): "+f.id+" exists",1),c.sounds[f.id];if(sa(f))a=e(),c.html5Only||c._wD(f.id+": Using HTML5"),a._setup_html5(f);else{if(c.html5Only)return c._wD(f.id+": No HTML5 support for this sound, and no Flash. Exiting."),
|
||||
e();if(c.html5.usingFlash&&f.url&&f.url.match(/data\:/i))return c._wD(f.id+": data: URIs not supported via Flash. Exiting."),e();8<n&&(null===f.isMovieStar&&(f.isMovieStar=!!(f.serverURL||f.type&&f.type.match(qb)||f.url&&f.url.match(wb))),f.isMovieStar&&(c._wD("soundManager.createSound(): using MovieStar handling"),1<f.loops&&p("noNSLoop")));f=pa(f,"soundManager.createSound(): ");a=e();8===n?l._createSound(f.id,f.loops||1,f.usePolicyFile):(l._createSound(f.id,f.url,f.usePeakData,f.useWaveformData,
|
||||
f.useEQData,f.isMovieStar,f.isMovieStar?f.bufferTime:!1,f.loops||1,f.serverURL,f.duration||null,f.autoPlay,!0,f.autoLoad,f.usePolicyFile),f.serverURL||(a.connected=!0,f.onconnect&&f.onconnect.apply(a)));f.serverURL||!f.autoLoad&&!f.autoPlay||a.load(f)}!f.serverURL&&f.autoPlay&&a.play();return a};this.destroySound=function(b,d){if(!w(b))return!1;var e=c.sounds[b],a;e.stop();e._iO={};e.unload();for(a=0;a<c.soundIDs.length;a++)if(c.soundIDs[a]===b){c.soundIDs.splice(a,1);break}d||e.destruct(!0);delete c.sounds[b];
|
||||
return!0};this.load=function(b,d){return w(b)?c.sounds[b].load(d):!1};this.unload=function(b){return w(b)?c.sounds[b].unload():!1};this.onposition=this.onPosition=function(b,d,e,a){return w(b)?c.sounds[b].onposition(d,e,a):!1};this.clearOnPosition=function(b,d,e){return w(b)?c.sounds[b].clearOnPosition(d,e):!1};this.start=this.play=function(b,d){var e=null,a=d&&!(d instanceof Object);if(!q||!c.ok())return L("soundManager.play(): "+t(q?"notOK":"notReady")),!1;if(w(b,a))a&&(d={url:d});else{if(!a)return!1;
|
||||
a&&(d={url:d});d&&d.url&&(c._wD('soundManager.play(): Attempting to create "'+b+'"',1),d.id=b,e=c.createSound(d).play())}null===e&&(e=c.sounds[b].play(d));return e};this.setPosition=function(b,d){return w(b)?c.sounds[b].setPosition(d):!1};this.stop=function(b){if(!w(b))return!1;c._wD("soundManager.stop("+b+")",1);return c.sounds[b].stop()};this.stopAll=function(){var b;c._wD("soundManager.stopAll()",1);for(b in c.sounds)c.sounds.hasOwnProperty(b)&&c.sounds[b].stop()};this.pause=function(b){return w(b)?
|
||||
c.sounds[b].pause():!1};this.pauseAll=function(){var b;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].pause()};this.resume=function(b){return w(b)?c.sounds[b].resume():!1};this.resumeAll=function(){var b;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].resume()};this.togglePause=function(b){return w(b)?c.sounds[b].togglePause():!1};this.setPan=function(b,d){return w(b)?c.sounds[b].setPan(d):!1};this.setVolume=function(b,d){var e,a;if(b===g||isNaN(b)||d!==g)return w(b)?c.sounds[b].setVolume(d):
|
||||
!1;e=0;for(a=c.soundIDs.length;e<a;e++)c.sounds[c.soundIDs[e]].setVolume(b)};this.mute=function(b){var d=0;b instanceof String&&(b=null);if(b){if(!w(b))return!1;c._wD('soundManager.mute(): Muting "'+b+'"');return c.sounds[b].mute()}c._wD("soundManager.mute(): Muting all sounds");for(d=c.soundIDs.length-1;0<=d;d--)c.sounds[c.soundIDs[d]].mute();return c.muted=!0};this.muteAll=function(){c.mute()};this.unmute=function(b){b instanceof String&&(b=null);if(b){if(!w(b))return!1;c._wD('soundManager.unmute(): Unmuting "'+
|
||||
b+'"');return c.sounds[b].unmute()}c._wD("soundManager.unmute(): Unmuting all sounds");for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].unmute();c.muted=!1;return!0};this.unmuteAll=function(){c.unmute()};this.toggleMute=function(b){return w(b)?c.sounds[b].toggleMute():!1};this.getMemoryUse=function(){var c=0;l&&8!==n&&(c=parseInt(l._getMemoryUse(),10));return c};this.disable=function(b){var d;b===g&&(b=!1);if(y)return!1;y=!0;p("shutdown",1);for(d=c.soundIDs.length-1;0<=d;d--)cb(c.sounds[c.soundIDs[d]]);
|
||||
Z(b);x.remove(h,"load",S);return!0};this.canPlayMIME=function(b){var d;c.hasHTML5&&(d=fa({type:b}));!d&&u&&(d=b&&c.ok()?!!(8<n&&b.match(qb)||b.match(c.mimePattern)):null);return d};this.canPlayURL=function(b){var d;c.hasHTML5&&(d=fa({url:b}));!d&&u&&(d=b&&c.ok()?!!b.match(c.filePattern):null);return d};this.canPlayLink=function(b){return b.type!==g&&b.type&&c.canPlayMIME(b.type)?!0:c.canPlayURL(b.href)};this.getSoundById=function(b,d){if(!b)return null;var e=c.sounds[b];e||d||c._wD('soundManager.getSoundById(): Sound "'+
|
||||
b+'" not found.',2);return e};this.onready=function(b,d){if("function"===typeof b)q&&c._wD(t("queue","onready")),d||(d=h),Ca("onready",b,d),P();else throw t("needFunction","onready");return!0};this.ontimeout=function(b,d){if("function"===typeof b)q&&c._wD(t("queue","ontimeout")),d||(d=h),Ca("ontimeout",b,d),P({type:"ontimeout"});else throw t("needFunction","ontimeout");return!0};this._writeDebug=function(b,d){var e,a;if(!c.setupOptions.debugMode)return!1;if(Ua&&c.useConsole){if(d&&"object"===typeof d)console.log(b,
|
||||
d);else if(bb[d]!==g)console[bb[d]](b);else console.log(b);if(c.consoleOnly)return!0}e=F("soundmanager-debug");if(!e)return!1;a=m.createElement("div");0===++tb%2&&(a.className="sm2-alt");d=d===g?0:parseInt(d,10);a.appendChild(m.createTextNode(b));d&&(2<=d&&(a.style.fontWeight="bold"),3===d&&(a.style.color="#ff3333"));e.insertBefore(a,e.firstChild);return!0};-1!==ia.indexOf("sm2-debug=alert")&&(this._writeDebug=function(c){h.alert(c)});this._wD=this._writeDebug;this._debug=function(){var b,d;p("currentObj",
|
||||
1);b=0;for(d=c.soundIDs.length;b<d;b++)c.sounds[c.soundIDs[b]]._debug()};this.reboot=function(b,d){c.soundIDs.length&&c._wD("Destroying "+c.soundIDs.length+" SMSound object"+(1!==c.soundIDs.length?"s":"")+"...");var e,a,f;for(e=c.soundIDs.length-1;0<=e;e--)c.sounds[c.soundIDs[e]].destruct();if(l)try{O&&(Ia=l.innerHTML),ba=l.parentNode.removeChild(l)}catch(g){p("badRemove",2)}Ia=ba=u=l=null;c.enabled=aa=q=ca=Ka=X=Y=y=C=c.swfLoaded=!1;c.soundIDs=[];c.sounds={};nb=0;Pa=!1;if(b)I=[];else for(e in I)if(I.hasOwnProperty(e))for(a=
|
||||
0,f=I[e].length;a<f;a++)I[e][a].fired=!1;d||c._wD("soundManager: Rebooting...");c.html5={usingFlash:null};c.flash={};c.html5Only=!1;c.ignoreFlash=!1;h.setTimeout(function(){d||c.beginDelayedInit()},20);return c};this.reset=function(){p("reset");return c.reboot(!0,!0)};this.getMoviePercent=function(){return l&&"PercentLoaded"in l?l.PercentLoaded():null};this.beginDelayedInit=function(){ja=!0;Q();setTimeout(function(){if(Ka)return!1;na();la();return Ka=!0},20);T()};this.destruct=function(){c._wD("soundManager.destruct()");
|
||||
c.disable(!0)};W=function(b){var d,e,a=this,f,h,k,G,m,q,r=!1,E=[],v=0,Xa,y,u=null,z;e=d=null;this.sID=this.id=b.id;this.url=b.url;this._iO=this.instanceOptions=this.options=A(b);this.pan=this.options.pan;this.volume=this.options.volume;this.isHTML5=!1;this._a=null;z=this.url?!1:!0;this.id3={};this._debug=function(){c._wD(a.id+": Merged options:",a.options)};this.load=function(b){var d=null,e;b!==g?a._iO=A(b,a.options):(b=a.options,a._iO=b,u&&u!==a.url&&(p("manURL"),a._iO.url=a.url,a.url=null));a._iO.url||
|
||||
(a._iO.url=a.url);a._iO.url=ra(a._iO.url);e=a.instanceOptions=a._iO;c._wD(a.id+": load ("+e.url+")");if(!e.url&&!a.url)return c._wD(a.id+": load(): url is unassigned. Exiting.",2),a;a.isHTML5||8!==n||a.url||e.autoPlay||c._wD(a.id+": Flash 8 load() limitation: Wait for onload() before calling play().",1);if(e.url===a.url&&0!==a.readyState&&2!==a.readyState)return p("onURL",1),3===a.readyState&&e.onload&&ua(a,function(){e.onload.apply(a,[!!a.duration])}),a;a.loaded=!1;a.readyState=1;a.playState=0;a.id3=
|
||||
{};if(sa(e))d=a._setup_html5(e),d._called_load?c._wD(a.id+": Ignoring request to load again"):(a._html5_canplay=!1,a.url!==e.url&&(c._wD(p("manURL")+": "+e.url),a._a.src=e.url,a.setPosition(0)),a._a.autobuffer="auto",a._a.preload="auto",a._a._called_load=!0);else{if(c.html5Only)return c._wD(a.id+": No flash support. Exiting."),a;if(a._iO.url&&a._iO.url.match(/data\:/i))return c._wD(a.id+": data: URIs not supported via Flash. Exiting."),a;try{a.isHTML5=!1,a._iO=pa(oa(e)),a._iO.autoPlay&&(a._iO.position||
|
||||
a._iO.from)&&(c._wD(a.id+": Disabling autoPlay because of non-zero offset case"),a._iO.autoPlay=!1),e=a._iO,8===n?l._load(a.id,e.url,e.stream,e.autoPlay,e.usePolicyFile):l._load(a.id,e.url,!!e.stream,!!e.autoPlay,e.loops||1,!!e.autoLoad,e.usePolicyFile)}catch(f){p("smError",2),D("onload",!1),U({type:"SMSOUND_LOAD_JS_EXCEPTION",fatal:!0})}}a.url=e.url;return a};this.unload=function(){0!==a.readyState&&(c._wD(a.id+": unload()"),a.isHTML5?(G(),a._a&&(a._a.pause(),u=ta(a._a))):8===n?l._unload(a.id,"about:blank"):
|
||||
l._unload(a.id),f());return a};this.destruct=function(b){c._wD(a.id+": Destruct");a.isHTML5?(G(),a._a&&(a._a.pause(),ta(a._a),C||k(),a._a._s=null,a._a=null)):(a._iO.onfailure=null,l._destroySound(a.id));b||c.destroySound(a.id,!0)};this.start=this.play=function(b,d){var e,f,k,G,h,B=!0,B=null;e=a.id+": play(): ";d=d===g?!0:d;b||(b={});a.url&&(a._iO.url=a.url);a._iO=A(a._iO,a.options);a._iO=A(b,a._iO);a._iO.url=ra(a._iO.url);a.instanceOptions=a._iO;if(!a.isHTML5&&a._iO.serverURL&&!a.connected)return a.getAutoPlay()||
|
||||
(c._wD(e+" Netstream not connected yet - setting autoPlay"),a.setAutoPlay(!0)),a;sa(a._iO)&&(a._setup_html5(a._iO),m());1!==a.playState||a.paused||((f=a._iO.multiShot)?c._wD(e+"Already playing (multi-shot)",1):(c._wD(e+"Already playing (one-shot)",1),a.isHTML5&&a.setPosition(a._iO.position),B=a));if(null!==B)return B;b.url&&b.url!==a.url&&(a.readyState||a.isHTML5||8!==n||!z?a.load(a._iO):z=!1);a.loaded?c._wD(e.substr(0,e.lastIndexOf(":"))):0===a.readyState?(c._wD(e+"Attempting to load"),a.isHTML5||
|
||||
c.html5Only?a.isHTML5?a.load(a._iO):(c._wD(e+"Unsupported type. Exiting."),B=a):(a._iO.autoPlay=!0,a.load(a._iO)),a.instanceOptions=a._iO):2===a.readyState?(c._wD(e+"Could not load - exiting",2),B=a):c._wD(e+"Loading - attempting to play...");if(null!==B)return B;!a.isHTML5&&9===n&&0<a.position&&a.position===a.duration&&(c._wD(e+"Sound at end, resetting to position: 0"),b.position=0);if(a.paused&&0<=a.position&&(!a._iO.serverURL||0<a.position))c._wD(e+"Resuming from paused state",1),a.resume();else{a._iO=
|
||||
A(b,a._iO);if((!a.isHTML5&&null!==a._iO.position&&0<a._iO.position||null!==a._iO.from&&0<a._iO.from||null!==a._iO.to)&&0===a.instanceCount&&0===a.playState&&!a._iO.serverURL){f=function(){a._iO=A(b,a._iO);a.play(a._iO)};a.isHTML5&&!a._html5_canplay?(c._wD(e+"Beginning load for non-zero offset case"),a.load({_oncanplay:f}),B=!1):a.isHTML5||a.loaded||a.readyState&&2===a.readyState||(c._wD(e+"Preloading for non-zero offset case"),a.load({onload:f}),B=!1);if(null!==B)return B;a._iO=y()}(!a.instanceCount||
|
||||
a._iO.multiShotEvents||a.isHTML5&&a._iO.multiShot&&!C||!a.isHTML5&&8<n&&!a.getAutoPlay())&&a.instanceCount++;a._iO.onposition&&0===a.playState&&q(a);a.playState=1;a.paused=!1;a.position=a._iO.position===g||isNaN(a._iO.position)?0:a._iO.position;a.isHTML5||(a._iO=pa(oa(a._iO)));a._iO.onplay&&d&&(a._iO.onplay.apply(a),r=!0);a.setVolume(a._iO.volume,!0);a.setPan(a._iO.pan,!0);a.isHTML5?2>a.instanceCount?(m(),e=a._setup_html5(),a.setPosition(a._iO.position),e.play()):(c._wD(a.id+": Cloning Audio() for instance #"+
|
||||
a.instanceCount+"..."),k=new Audio(a._iO.url),G=function(){x.remove(k,"ended",G);a._onfinish(a);ta(k);k=null},h=function(){x.remove(k,"canplay",h);try{k.currentTime=a._iO.position/1E3}catch(c){L(a.id+": multiShot play() failed to apply position of "+a._iO.position/1E3)}k.play()},x.add(k,"ended",G),a._iO.volume!==g&&(k.volume=Math.max(0,Math.min(1,a._iO.volume/100))),a.muted&&(k.muted=!0),a._iO.position?x.add(k,"canplay",h):k.play()):(B=l._start(a.id,a._iO.loops||1,9===n?a.position:a.position/1E3,
|
||||
a._iO.multiShot||!1),9!==n||B||(c._wD(e+"No sound hardware, or 32-sound ceiling hit",2),a._iO.onplayerror&&a._iO.onplayerror.apply(a)))}return a};this.stop=function(b){var d=a._iO;1===a.playState&&(c._wD(a.id+": stop()"),a._onbufferchange(0),a._resetOnPosition(0),a.paused=!1,a.isHTML5||(a.playState=0),Xa(),d.to&&a.clearOnPosition(d.to),a.isHTML5?a._a&&(b=a.position,a.setPosition(0),a.position=b,a._a.pause(),a.playState=0,a._onTimer(),G()):(l._stop(a.id,b),d.serverURL&&a.unload()),a.instanceCount=
|
||||
0,a._iO={},d.onstop&&d.onstop.apply(a));return a};this.setAutoPlay=function(b){c._wD(a.id+": Autoplay turned "+(b?"on":"off"));a._iO.autoPlay=b;a.isHTML5||(l._setAutoPlay(a.id,b),b&&!a.instanceCount&&1===a.readyState&&(a.instanceCount++,c._wD(a.id+": Incremented instance count to "+a.instanceCount)))};this.getAutoPlay=function(){return a._iO.autoPlay};this.setPosition=function(b){b===g&&(b=0);var d=a.isHTML5?Math.max(b,0):Math.min(a.duration||a._iO.duration,Math.max(b,0));a.position=d;b=a.position/
|
||||
1E3;a._resetOnPosition(a.position);a._iO.position=d;if(!a.isHTML5)b=9===n?a.position:b,a.readyState&&2!==a.readyState&&l._setPosition(a.id,b,a.paused||!a.playState,a._iO.multiShot);else if(a._a){if(a._html5_canplay){if(a._a.currentTime!==b){c._wD(a.id+": setPosition("+b+")");try{a._a.currentTime=b,(0===a.playState||a.paused)&&a._a.pause()}catch(e){c._wD(a.id+": setPosition("+b+") failed: "+e.message,2)}}}else if(b)return c._wD(a.id+": setPosition("+b+"): Cannot seek yet, sound not ready",2),a;a.paused&&
|
||||
a._onTimer(!0)}return a};this.pause=function(b){if(a.paused||0===a.playState&&1!==a.readyState)return a;c._wD(a.id+": pause()");a.paused=!0;a.isHTML5?(a._setup_html5().pause(),G()):(b||b===g)&&l._pause(a.id,a._iO.multiShot);a._iO.onpause&&a._iO.onpause.apply(a);return a};this.resume=function(){var b=a._iO;if(!a.paused)return a;c._wD(a.id+": resume()");a.paused=!1;a.playState=1;a.isHTML5?(a._setup_html5().play(),m()):(b.isMovieStar&&!b.serverURL&&a.setPosition(a.position),l._pause(a.id,b.multiShot));
|
||||
!r&&b.onplay?(b.onplay.apply(a),r=!0):b.onresume&&b.onresume.apply(a);return a};this.togglePause=function(){c._wD(a.id+": togglePause()");if(0===a.playState)return a.play({position:9!==n||a.isHTML5?a.position/1E3:a.position}),a;a.paused?a.resume():a.pause();return a};this.setPan=function(c,b){c===g&&(c=0);b===g&&(b=!1);a.isHTML5||l._setPan(a.id,c);a._iO.pan=c;b||(a.pan=c,a.options.pan=c);return a};this.setVolume=function(b,d){b===g&&(b=100);d===g&&(d=!1);a.isHTML5?a._a&&(c.muted&&!a.muted&&(a.muted=
|
||||
!0,a._a.muted=!0),a._a.volume=Math.max(0,Math.min(1,b/100))):l._setVolume(a.id,c.muted&&!a.muted||a.muted?0:b);a._iO.volume=b;d||(a.volume=b,a.options.volume=b);return a};this.mute=function(){a.muted=!0;a.isHTML5?a._a&&(a._a.muted=!0):l._setVolume(a.id,0);return a};this.unmute=function(){a.muted=!1;var b=a._iO.volume!==g;a.isHTML5?a._a&&(a._a.muted=!1):l._setVolume(a.id,b?a._iO.volume:a.options.volume);return a};this.toggleMute=function(){return a.muted?a.unmute():a.mute()};this.onposition=this.onPosition=
|
||||
function(b,c,d){E.push({position:parseInt(b,10),method:c,scope:d!==g?d:a,fired:!1});return a};this.clearOnPosition=function(a,b){var c;a=parseInt(a,10);if(isNaN(a))return!1;for(c=0;c<E.length;c++)a!==E[c].position||b&&b!==E[c].method||(E[c].fired&&v--,E.splice(c,1))};this._processOnPosition=function(){var b,c;b=E.length;if(!b||!a.playState||v>=b)return!1;for(--b;0<=b;b--)c=E[b],!c.fired&&a.position>=c.position&&(c.fired=!0,v++,c.method.apply(c.scope,[c.position]));return!0};this._resetOnPosition=
|
||||
function(a){var b,c;b=E.length;if(!b)return!1;for(--b;0<=b;b--)c=E[b],c.fired&&a<=c.position&&(c.fired=!1,v--);return!0};y=function(){var b=a._iO,d=b.from,e=b.to,f,g;g=function(){c._wD(a.id+': "To" time of '+e+" reached.");a.clearOnPosition(e,g);a.stop()};f=function(){c._wD(a.id+': Playing "from" '+d);if(null!==e&&!isNaN(e))a.onPosition(e,g)};null===d||isNaN(d)||(b.position=d,b.multiShot=!1,f());return b};q=function(){var b,c=a._iO.onposition;if(c)for(b in c)if(c.hasOwnProperty(b))a.onPosition(parseInt(b,
|
||||
10),c[b])};Xa=function(){var b,c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.clearOnPosition(parseInt(b,10))};m=function(){a.isHTML5&&fb(a)};G=function(){a.isHTML5&&gb(a)};f=function(b){b||(E=[],v=0);r=!1;a._hasTimer=null;a._a=null;a._html5_canplay=!1;a.bytesLoaded=null;a.bytesTotal=null;a.duration=a._iO&&a._iO.duration?a._iO.duration:null;a.durationEstimate=null;a.buffered=[];a.eqData=[];a.eqData.left=[];a.eqData.right=[];a.failures=0;a.isBuffering=!1;a.instanceOptions={};a.instanceCount=
|
||||
0;a.loaded=!1;a.metadata={};a.readyState=0;a.muted=!1;a.paused=!1;a.peakData={left:0,right:0};a.waveformData={left:[],right:[]};a.playState=0;a.position=null;a.id3={}};f();this._onTimer=function(b){var c,f=!1,g={};if(a._hasTimer||b)return a._a&&(b||(0<a.playState||1===a.readyState)&&!a.paused)&&(c=a._get_html5_duration(),c!==d&&(d=c,a.duration=c,f=!0),a.durationEstimate=a.duration,c=1E3*a._a.currentTime||0,c!==e&&(e=c,f=!0),(f||b)&&a._whileplaying(c,g,g,g,g)),f};this._get_html5_duration=function(){var b=
|
||||
a._iO;return(b=a._a&&a._a.duration?1E3*a._a.duration:b&&b.duration?b.duration:null)&&!isNaN(b)&&Infinity!==b?b:null};this._apply_loop=function(a,b){!a.loop&&1<b&&c._wD("Note: Native HTML5 looping is infinite.",1);a.loop=1<b?"loop":""};this._setup_html5=function(b){b=A(a._iO,b);var c=C?Ya:a._a,d=decodeURI(b.url),e;C?d===decodeURI(Ma)&&(e=!0):d===decodeURI(u)&&(e=!0);if(c){if(c._s)if(C)c._s&&c._s.playState&&!e&&c._s.stop();else if(!C&&d===decodeURI(u))return a._apply_loop(c,b.loops),c;e||(u&&f(!1),
|
||||
c.src=b.url,Ma=u=a.url=b.url,c._called_load=!1)}else b.autoLoad||b.autoPlay?(a._a=new Audio(b.url),a._a.load()):a._a=Sa&&10>opera.version()?new Audio(null):new Audio,c=a._a,c._called_load=!1,C&&(Ya=c);a.isHTML5=!0;a._a=c;c._s=a;h();a._apply_loop(c,b.loops);b.autoLoad||b.autoPlay?a.load():(c.autobuffer=!1,c.preload="auto");return c};h=function(){if(a._a._added_events)return!1;var b;a._a._added_events=!0;for(b in J)J.hasOwnProperty(b)&&a._a&&a._a.addEventListener(b,J[b],!1);return!0};k=function(){var b;
|
||||
c._wD(a.id+": Removing event listeners");a._a._added_events=!1;for(b in J)J.hasOwnProperty(b)&&a._a&&a._a.removeEventListener(b,J[b],!1)};this._onload=function(b){var d=!!b||!a.isHTML5&&8===n&&a.duration;b=a.id+": ";c._wD(b+(d?"onload()":"Failed to load / invalid sound?"+(a.duration?" -":" Zero-length duration reported.")+" ("+a.url+")"),d?1:2);d||a.isHTML5||(!0===c.sandbox.noRemote&&c._wD(b+t("noNet"),1),!0===c.sandbox.noLocal&&c._wD(b+t("noLocal"),1));a.loaded=d;a.readyState=d?3:2;a._onbufferchange(0);
|
||||
a._iO.onload&&ua(a,function(){a._iO.onload.apply(a,[d])});return!0};this._onbufferchange=function(b){if(0===a.playState||b&&a.isBuffering||!b&&!a.isBuffering)return!1;a.isBuffering=1===b;a._iO.onbufferchange&&(c._wD(a.id+": Buffer state change: "+b),a._iO.onbufferchange.apply(a,[b]));return!0};this._onsuspend=function(){a._iO.onsuspend&&(c._wD(a.id+": Playback suspended"),a._iO.onsuspend.apply(a));return!0};this._onfailure=function(b,d,e){a.failures++;c._wD(a.id+": Failure ("+a.failures+"): "+b);
|
||||
if(a._iO.onfailure&&1===a.failures)a._iO.onfailure(b,d,e);else c._wD(a.id+": Ignoring failure")};this._onwarning=function(b,c,d){if(a._iO.onwarning)a._iO.onwarning(b,c,d)};this._onfinish=function(){var b=a._iO.onfinish;a._onbufferchange(0);a._resetOnPosition(0);a.instanceCount&&(a.instanceCount--,a.instanceCount||(Xa(),a.playState=0,a.paused=!1,a.instanceCount=0,a.instanceOptions={},a._iO={},G(),a.isHTML5&&(a.position=0)),a.instanceCount&&!a._iO.multiShotEvents||!b||(c._wD(a.id+": onfinish()"),ua(a,
|
||||
function(){b.apply(a)})))};this._whileloading=function(b,c,d,e){var f=a._iO;a.bytesLoaded=b;a.bytesTotal=c;a.duration=Math.floor(d);a.bufferLength=e;a.durationEstimate=a.isHTML5||f.isMovieStar?a.duration:f.duration?a.duration>f.duration?a.duration:f.duration:parseInt(a.bytesTotal/a.bytesLoaded*a.duration,10);a.isHTML5||(a.buffered=[{start:0,end:a.duration}]);(3!==a.readyState||a.isHTML5)&&f.whileloading&&f.whileloading.apply(a)};this._whileplaying=function(b,c,d,e,f){var k=a._iO;if(isNaN(b)||null===
|
||||
b)return!1;a.position=Math.max(0,b);a._processOnPosition();!a.isHTML5&&8<n&&(k.usePeakData&&c!==g&&c&&(a.peakData={left:c.leftPeak,right:c.rightPeak}),k.useWaveformData&&d!==g&&d&&(a.waveformData={left:d.split(","),right:e.split(",")}),k.useEQData&&f!==g&&f&&f.leftEQ&&(b=f.leftEQ.split(","),a.eqData=b,a.eqData.left=b,f.rightEQ!==g&&f.rightEQ&&(a.eqData.right=f.rightEQ.split(","))));1===a.playState&&(a.isHTML5||8!==n||a.position||!a.isBuffering||a._onbufferchange(0),k.whileplaying&&k.whileplaying.apply(a));
|
||||
return!0};this._oncaptiondata=function(b){c._wD(a.id+": Caption data received.");a.captiondata=b;a._iO.oncaptiondata&&a._iO.oncaptiondata.apply(a,[b])};this._onmetadata=function(b,d){c._wD(a.id+": Metadata received.");var e={},f,g;f=0;for(g=b.length;f<g;f++)e[b[f]]=d[f];a.metadata=e;a._iO.onmetadata&&a._iO.onmetadata.call(a,a.metadata)};this._onid3=function(b,d){c._wD(a.id+": ID3 data received.");var e=[],f,g;f=0;for(g=b.length;f<g;f++)e[b[f]]=d[f];a.id3=A(a.id3,e);a._iO.onid3&&a._iO.onid3.apply(a)};
|
||||
this._onconnect=function(b){b=1===b;c._wD(a.id+": "+(b?"Connected.":"Failed to connect? - "+a.url),b?1:2);if(a.connected=b)a.failures=0,w(a.id)&&(a.getAutoPlay()?a.play(g,a.getAutoPlay()):a._iO.autoLoad&&a.load()),a._iO.onconnect&&a._iO.onconnect.apply(a,[b])};this._ondataerror=function(b){0<a.playState&&(c._wD(a.id+": Data error: "+b),a._iO.ondataerror&&a._iO.ondataerror.apply(a))};this._debug()};ma=function(){return m.body||m.getElementsByTagName("div")[0]};F=function(b){return m.getElementById(b)};
|
||||
A=function(b,d){var e=b||{},a,f;a=d===g?c.defaultOptions:d;for(f in a)a.hasOwnProperty(f)&&e[f]===g&&(e[f]="object"!==typeof a[f]||null===a[f]?a[f]:A(e[f],a[f]));return e};ua=function(b,c){b.isHTML5||8!==n?c():h.setTimeout(c,0)};R={onready:1,ontimeout:1,defaultOptions:1,flash9Options:1,movieStarOptions:1};Ba=function(b,d){var e,a=!0,f=d!==g,h=c.setupOptions;if(b===g){a=[];for(e in h)h.hasOwnProperty(e)&&a.push(e);for(e in R)R.hasOwnProperty(e)&&("object"===typeof c[e]?a.push(e+": {...}"):c[e]instanceof
|
||||
Function?a.push(e+": function() {...}"):a.push(e));c._wD(t("setup",a.join(", ")));return!1}for(e in b)if(b.hasOwnProperty(e))if("object"!==typeof b[e]||null===b[e]||b[e]instanceof Array||b[e]instanceof RegExp)f&&R[d]!==g?c[d][e]=b[e]:h[e]!==g?(c.setupOptions[e]=b[e],c[e]=b[e]):R[e]===g?(L(t(c[e]===g?"setupUndef":"setupError",e),2),a=!1):c[e]instanceof Function?c[e].apply(c,b[e]instanceof Array?b[e]:[b[e]]):c[e]=b[e];else if(R[e]===g)L(t(c[e]===g?"setupUndef":"setupError",e),2),a=!1;else return Ba(b[e],
|
||||
e);return a};x=function(){function b(a){a=kb.call(a);var b=a.length;e?(a[1]="on"+a[1],3<b&&a.pop()):3===b&&a.push(!1);return a}function c(b,d){var g=b.shift(),h=[a[d]];if(e)g[h](b[0],b[1]);else g[h].apply(g,b)}var e=h.attachEvent,a={add:e?"attachEvent":"addEventListener",remove:e?"detachEvent":"removeEventListener"};return{add:function(){c(b(arguments),"add")},remove:function(){c(b(arguments),"remove")}}}();J={abort:r(function(){c._wD(this._s.id+": abort")}),canplay:r(function(){var b=this._s,d;if(b._html5_canplay)return!0;
|
||||
b._html5_canplay=!0;c._wD(b.id+": canplay");b._onbufferchange(0);d=b._iO.position===g||isNaN(b._iO.position)?null:b._iO.position/1E3;if(this.currentTime!==d){c._wD(b.id+": canplay: Setting position to "+d);try{this.currentTime=d}catch(e){c._wD(b.id+": canplay: Setting position of "+d+" failed: "+e.message,2)}}b._iO._oncanplay&&b._iO._oncanplay()}),canplaythrough:r(function(){var b=this._s;b.loaded||(b._onbufferchange(0),b._whileloading(b.bytesLoaded,b.bytesTotal,b._get_html5_duration()),b._onload(!0))}),
|
||||
durationchange:r(function(){var b=this._s,d;d=b._get_html5_duration();isNaN(d)||d===b.duration||(c._wD(this._s.id+": durationchange ("+d+")"+(b.duration?", previously "+b.duration:"")),b.durationEstimate=b.duration=d)}),ended:r(function(){var b=this._s;c._wD(b.id+": ended");b._onfinish()}),error:r(function(){c._wD(this._s.id+": HTML5 error, code "+this.error.code);this._s._onload(!1)}),loadeddata:r(function(){var b=this._s;c._wD(b.id+": loadeddata");b._loaded||va||(b.duration=b._get_html5_duration())}),
|
||||
loadedmetadata:r(function(){c._wD(this._s.id+": loadedmetadata")}),loadstart:r(function(){c._wD(this._s.id+": loadstart");this._s._onbufferchange(1)}),play:r(function(){this._s._onbufferchange(0)}),playing:r(function(){c._wD(this._s.id+": playing "+String.fromCharCode(9835));this._s._onbufferchange(0)}),progress:r(function(b){var d=this._s,e,a,f;e=0;var g="progress"===b.type,k=b.target.buffered,h=b.loaded||0,m=b.total||1;d.buffered=[];if(k&&k.length){e=0;for(a=k.length;e<a;e++)d.buffered.push({start:1E3*
|
||||
k.start(e),end:1E3*k.end(e)});e=1E3*(k.end(0)-k.start(0));h=Math.min(1,e/(1E3*b.target.duration));if(g&&1<k.length){f=[];a=k.length;for(e=0;e<a;e++)f.push(1E3*b.target.buffered.start(e)+"-"+1E3*b.target.buffered.end(e));c._wD(this._s.id+": progress, timeRanges: "+f.join(", "))}g&&!isNaN(h)&&c._wD(this._s.id+": progress, "+Math.floor(100*h)+"% loaded")}isNaN(h)||(d._whileloading(h,m,d._get_html5_duration()),h&&m&&h===m&&J.canplaythrough.call(this,b))}),ratechange:r(function(){c._wD(this._s.id+": ratechange")}),
|
||||
suspend:r(function(b){var d=this._s;c._wD(this._s.id+": suspend");J.progress.call(this,b);d._onsuspend()}),stalled:r(function(){c._wD(this._s.id+": stalled")}),timeupdate:r(function(){this._s._onTimer()}),waiting:r(function(){var b=this._s;c._wD(this._s.id+": waiting");b._onbufferchange(1)})};sa=function(b){return b&&(b.type||b.url||b.serverURL)?b.serverURL||b.type&&ha(b.type)?!1:b.type?fa({type:b.type}):fa({url:b.url})||c.html5Only||b.url.match(/data\:/i):!1};ta=function(b){var d;b&&(d=va?"about:blank":
|
||||
c.html5.canPlayType("audio/wav")?"data:audio/wave;base64,/UklGRiYAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQIAAAD//w==":"about:blank",b.src=d,b._called_unload!==g&&(b._called_load=!1));C&&(Ma=null);return d};fa=function(b){if(!c.useHTML5Audio||!c.hasHTML5)return!1;var d=b.url||null;b=b.type||null;var e=c.audioFormats,a;if(b&&c.html5[b]!==g)return c.html5[b]&&!ha(b);if(!N){N=[];for(a in e)e.hasOwnProperty(a)&&(N.push(a),e[a].related&&(N=N.concat(e[a].related)));N=new RegExp("\\.("+N.join("|")+
|
||||
")(\\?.*)?$","i")}(a=d?d.toLowerCase().match(N):null)&&a.length?a=a[1]:b&&(d=b.indexOf(";"),a=(-1!==d?b.substr(0,d):b).substr(6));a&&c.html5[a]!==g?d=c.html5[a]&&!ha(a):(b="audio/"+a,d=c.html5.canPlayType({type:b}),d=(c.html5[a]=d)&&c.html5[b]&&!ha(b));return d};jb=function(){function b(a){var b,e=b=!1;if(!d||"function"!==typeof d.canPlayType)return b;if(a instanceof Array){k=0;for(b=a.length;k<b;k++)if(c.html5[a[k]]||d.canPlayType(a[k]).match(c.html5Test))e=!0,c.html5[a[k]]=!0,c.flash[a[k]]=!!a[k].match(pb);
|
||||
b=e}else a=d&&"function"===typeof d.canPlayType?d.canPlayType(a):!1,b=!(!a||!a.match(c.html5Test));return b}if(!c.useHTML5Audio||!c.hasHTML5)return u=c.html5.usingFlash=!0,!1;var d=Audio!==g?Sa&&10>opera.version()?new Audio(null):new Audio:null,e,a,f={},h,k;h=c.audioFormats;for(e in h)if(h.hasOwnProperty(e)&&(a="audio/"+e,f[e]=b(h[e].type),f[a]=f[e],e.match(pb)?(c.flash[e]=!0,c.flash[a]=!0):(c.flash[e]=!1,c.flash[a]=!1),h[e]&&h[e].related))for(k=h[e].related.length-1;0<=k;k--)f["audio/"+h[e].related[k]]=
|
||||
f[e],c.html5[h[e].related[k]]=f[e],c.flash[h[e].related[k]]=f[e];f.canPlayType=d?b:null;c.html5=A(c.html5,f);c.html5.usingFlash=ib();u=c.html5.usingFlash;return!0};z={notReady:"Unavailable - wait until onready() has fired.",notOK:"Audio support is not available.",domError:"soundManagerexception caught while appending SWF to DOM.",spcWmode:"Removing wmode, preventing known SWF loading issue(s)",swf404:"soundManager: Verify that %s is a valid path.",tryDebug:"Try soundManager.debugFlash = true for more security details (output goes to SWF.)",
|
||||
checkSWF:"See SWF output for more debug info.",localFail:"soundManager: Non-HTTP page ("+m.location.protocol+" URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/",waitFocus:"soundManager: Special case: Waiting for SWF to load with window focus...",waitForever:"soundManager: Waiting indefinitely for Flash (will recover if unblocked)...",
|
||||
waitSWF:"soundManager: Waiting for 100% SWF load...",needFunction:"soundManager: Function object expected for %s",badID:'Sound ID "%s" should be a string, starting with a non-numeric character',currentObj:"soundManager: _debug(): Current sound objects",waitOnload:"soundManager: Waiting for window.onload()",docLoaded:"soundManager: Document already loaded",onload:"soundManager: initComplete(): calling soundManager.onload()",onloadOK:"soundManager.onload() complete",didInit:"soundManager: init(): Already called?",
|
||||
secNote:"Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html",badRemove:"soundManager: Failed to remove Flash node.",shutdown:"soundManager.disable(): Shutting down",queue:"soundManager: Queueing %s handler",smError:"SMSound.load(): Exception: JS-Flash communication failed, or JS error.",fbTimeout:"No flash response, applying .swf_timedout CSS...",
|
||||
fbLoaded:"Flash loaded",fbHandler:"soundManager: flashBlockHandler()",manURL:"SMSound.load(): Using manually-assigned URL",onURL:"soundManager.load(): current URL already assigned.",badFV:'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.',as2loop:"Note: Setting stream:false so looping can work (flash 8 limitation)",noNSLoop:"Note: Looping not implemented for MovieStar formats",needfl9:"Note: Switching to flash 9, required for MP4 formats.",mfTimeout:"Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case",
|
||||
needFlash:"soundManager: Fatal error: Flash is needed to play some required formats, but is not available.",gotFocus:"soundManager: Got window focus.",policy:"Enabling usePolicyFile for data access",setup:"soundManager.setup(): allowed parameters: %s",setupError:'soundManager.setup(): "%s" cannot be assigned with this method.',setupUndef:'soundManager.setup(): Could not find option "%s"',setupLate:"soundManager.setup(): url, flashVersion and html5Test property changes will not take effect until reboot().",
|
||||
noURL:"soundManager: Flash URL required. Call soundManager.setup({url:...}) to get started.",sm2Loaded:"SoundManager 2: Ready. "+String.fromCharCode(10003),reset:"soundManager.reset(): Removing event callbacks",mobileUA:"Mobile UA detected, preferring HTML5 by default.",globalHTML5:"Using singleton HTML5 Audio() pattern for this device.",ignoreMobile:"Ignoring mobile restrictions for this device."};t=function(){var b,c,e,a;b=kb.call(arguments);c=b.shift();if((a=z&&z[c]?z[c]:"")&&b&&b.length)for(c=
|
||||
0,e=b.length;c<e;c++)a=a.replace("%s",b[c]);return a};oa=function(b){8===n&&1<b.loops&&b.stream&&(p("as2loop"),b.stream=!1);return b};pa=function(b,d){b&&!b.usePolicyFile&&(b.onid3||b.usePeakData||b.useWaveformData||b.useEQData)&&(c._wD((d||"")+t("policy")),b.usePolicyFile=!0);return b};L=function(b){Ua&&console.warn!==g?console.warn(b):c._wD(b)};ya=function(){return!1};cb=function(b){for(var c in b)b.hasOwnProperty(c)&&"function"===typeof b[c]&&(b[c]=ya)};Ha=function(b){b===g&&(b=!1);(y||b)&&c.disable(b)};
|
||||
db=function(b){var d=null;if(b)if(b.match(/\.swf(\?.*)?$/i)){if(d=b.substr(b.toLowerCase().lastIndexOf(".swf?")+4))return b}else b.lastIndexOf("/")!==b.length-1&&(b+="/");b=(b&&-1!==b.lastIndexOf("/")?b.substr(0,b.lastIndexOf("/")+1):"./")+c.movieURL;c.noSWFCache&&(b+="?ts="+(new Date).getTime());return b};Ea=function(){n=parseInt(c.flashVersion,10);8!==n&&9!==n&&(c._wD(t("badFV",n,8)),c.flashVersion=n=8);var b=c.debugMode||c.debugFlash?"_debug.swf":".swf";c.useHTML5Audio&&!c.html5Only&&c.audioFormats.mp4.required&&
|
||||
9>n&&(c._wD(t("needfl9")),c.flashVersion=n=9);c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===n?" (AS3/Flash 9)":" (AS2/Flash 8)");8<n?(c.defaultOptions=A(c.defaultOptions,c.flash9Options),c.features.buffering=!0,c.defaultOptions=A(c.defaultOptions,c.movieStarOptions),c.filePatterns.flash9=new RegExp("\\.(mp3|"+rb.join("|")+")(\\?.*)?$","i"),c.features.movieStar=!0):c.features.movieStar=!1;c.filePattern=c.filePatterns[8!==n?"flash9":"flash8"];c.movieURL=(8===n?"soundmanager2.swf":
|
||||
"soundmanager2_flash9.swf").replace(".swf",b);c.features.peakData=c.features.waveformData=c.features.eqData=8<n};ab=function(b,c){if(!l)return!1;l._setPolling(b,c)};Ga=function(){c.debugURLParam.test(ia)&&(c.setupOptions.debugMode=c.debugMode=!0);if(F(c.debugID))return!1;var b,d,e,a;if(!(!c.debugMode||F(c.debugID)||Ua&&c.useConsole&&c.consoleOnly)){b=m.createElement("div");b.id=c.debugID+"-toggle";d={position:"fixed",bottom:"0px",right:"0px",width:"1.2em",height:"1.2em",lineHeight:"1.2em",margin:"2px",
|
||||
textAlign:"center",border:"1px solid #999",cursor:"pointer",background:"#fff",color:"#333",zIndex:10001};b.appendChild(m.createTextNode("-"));b.onclick=eb;b.title="Toggle SM2 debug console";v.match(/msie 6/i)&&(b.style.position="absolute",b.style.cursor="hand");for(a in d)d.hasOwnProperty(a)&&(b.style[a]=d[a]);d=m.createElement("div");d.id=c.debugID;d.style.display=c.debugMode?"block":"none";if(c.debugMode&&!F(b.id)){try{e=ma(),e.appendChild(b)}catch(f){throw Error(t("domError")+" \n"+f.toString());
|
||||
}e.appendChild(d)}}};w=this.getSoundById;p=function(b,d){return b?c._wD(t(b),d):""};eb=function(){var b=F(c.debugID),d=F(c.debugID+"-toggle");if(!b)return!1;Aa?(d.innerHTML="+",b.style.display="none"):(d.innerHTML="-",b.style.display="block");Aa=!Aa};D=function(b,c,e){if(h.sm2Debugger!==g)try{sm2Debugger.handleEvent(b,c,e)}catch(a){return!1}return!0};V=function(){var b=[];c.debugMode&&b.push("sm2_debug");c.debugFlash&&b.push("flash_debug");c.useHighPerformance&&b.push("high_performance");return b.join(" ")};
|
||||
Ja=function(){var b=t("fbHandler"),d=c.getMoviePercent(),e={type:"FLASHBLOCK"};if(c.html5Only)return!1;c.ok()?(c.didFlashBlock&&c._wD(b+": Unblocked"),c.oMC&&(c.oMC.className=[V(),"movieContainer","swf_loaded"+(c.didFlashBlock?" swf_unblocked":"")].join(" "))):(u&&(c.oMC.className=V()+" movieContainer "+(null===d?"swf_timedout":"swf_error"),c._wD(b+": "+t("fbTimeout")+(d?" ("+t("fbLoaded")+")":""))),c.didFlashBlock=!0,P({type:"ontimeout",ignoreInit:!0,error:e}),U(e))};Ca=function(b,c,e){I[b]===g&&
|
||||
(I[b]=[]);I[b].push({method:c,scope:e||null,fired:!1})};P=function(b){b||(b={type:c.ok()?"onready":"ontimeout"});if(!q&&b&&!b.ignoreInit||"ontimeout"===b.type&&(c.ok()||y&&!b.ignoreInit))return!1;var d={success:b&&b.ignoreInit?c.ok():!y},e=b&&b.type?I[b.type]||[]:[],a=[],f,d=[d],g=u&&!c.ok();b.error&&(d[0].error=b.error);b=0;for(f=e.length;b<f;b++)!0!==e[b].fired&&a.push(e[b]);if(a.length)for(b=0,f=a.length;b<f;b++)a[b].scope?a[b].method.apply(a[b].scope,d):a[b].method.apply(this,d),g||(a[b].fired=
|
||||
!0);return!0};S=function(){h.setTimeout(function(){c.useFlashBlock&&Ja();P();"function"===typeof c.onload&&(p("onload",1),c.onload.apply(h),p("onloadOK",1));c.waitForWindowLoad&&x.add(h,"load",S)},1)};Na=function(){if(H!==g)return H;var b=!1,c=navigator,e=c.plugins,a,f=h.ActiveXObject;if(e&&e.length)(c=c.mimeTypes)&&c["application/x-shockwave-flash"]&&c["application/x-shockwave-flash"].enabledPlugin&&c["application/x-shockwave-flash"].enabledPlugin.description&&(b=!0);else if(f!==g&&!v.match(/MSAppHost/i)){try{a=
|
||||
new f("ShockwaveFlash.ShockwaveFlash")}catch(m){a=null}b=!!a}return H=b};ib=function(){var b,d,e=c.audioFormats;Qa&&v.match(/os (1|2|3_0|3_1)\s/i)?(c.hasHTML5=!1,c.html5Only=!0,c.oMC&&(c.oMC.style.display="none")):c.useHTML5Audio&&(c.html5&&c.html5.canPlayType||(c._wD("SoundManager: No HTML5 Audio() support detected."),c.hasHTML5=!1),Ta&&c._wD("soundManager: Note: Buggy HTML5 Audio in Safari on this OS X release, see https://bugs.webkit.org/show_bug.cgi?id=32159 - "+(H?"will use flash fallback for MP3/MP4, if available":
|
||||
" would use flash fallback for MP3/MP4, but none detected."),1));if(c.useHTML5Audio&&c.hasHTML5)for(d in ea=!0,e)e.hasOwnProperty(d)&&e[d].required&&(c.html5.canPlayType(e[d].type)?c.preferFlash&&(c.flash[d]||c.flash[e[d].type])&&(b=!0):(ea=!1,b=!0));c.ignoreFlash&&(b=!1,ea=!0);c.html5Only=c.hasHTML5&&c.useHTML5Audio&&!b;return!c.html5Only};ra=function(b){var d,e,a=0;if(b instanceof Array){d=0;for(e=b.length;d<e;d++)if(b[d]instanceof Object){if(c.canPlayMIME(b[d].type)){a=d;break}}else if(c.canPlayURL(b[d])){a=
|
||||
d;break}b[a].url&&(b[a]=b[a].url);b=b[a]}return b};fb=function(b){b._hasTimer||(b._hasTimer=!0,!wa&&c.html5PollingInterval&&(null===da&&0===qa&&(da=setInterval(hb,c.html5PollingInterval)),qa++))};gb=function(b){b._hasTimer&&(b._hasTimer=!1,!wa&&c.html5PollingInterval&&qa--)};hb=function(){var b;if(null!==da&&!qa)return clearInterval(da),da=null,!1;for(b=c.soundIDs.length-1;0<=b;b--)c.sounds[c.soundIDs[b]].isHTML5&&c.sounds[c.soundIDs[b]]._hasTimer&&c.sounds[c.soundIDs[b]]._onTimer()};U=function(b){b=
|
||||
b!==g?b:{};"function"===typeof c.onerror&&c.onerror.apply(h,[{type:b.type!==g?b.type:null}]);b.fatal!==g&&b.fatal&&c.disable()};lb=function(){if(!Ta||!Na())return!1;var b=c.audioFormats,d,e;for(e in b)if(b.hasOwnProperty(e)&&("mp3"===e||"mp4"===e)&&(c._wD("soundManager: Using flash fallback for "+e+" format"),c.html5[e]=!1,b[e]&&b[e].related))for(d=b[e].related.length-1;0<=d;d--)c.html5[b[e].related[d]]=!1};this._setSandboxType=function(b){var d=c.sandbox;d.type=b;d.description=d.types[d.types[b]!==
|
||||
g?b:"unknown"];"localWithFile"===d.type?(d.noRemote=!0,d.noLocal=!1,p("secNote",2)):"localWithNetwork"===d.type?(d.noRemote=!1,d.noLocal=!0):"localTrusted"===d.type&&(d.noRemote=!1,d.noLocal=!1)};this._externalInterfaceOK=function(b){if(c.swfLoaded)return!1;var d;D("swf",!0);D("flashtojs",!0);c.swfLoaded=!0;xa=!1;Ta&&lb();if(!b||b.replace(/\+dev/i,"")!==c.versionNumber.replace(/\+dev/i,""))return d='soundManager: Fatal: JavaScript file build "'+c.versionNumber+'" does not match Flash SWF build "'+
|
||||
b+'" at '+c.url+". Ensure both are up-to-date.",setTimeout(function(){throw Error(d);},0),!1;setTimeout(za,O?100:1)};na=function(b,d){function e(){var a=[],b,d=[];b="SoundManager "+c.version+(!c.html5Only&&c.useHTML5Audio?c.hasHTML5?" + HTML5 audio":", no HTML5 audio support":"");c.html5Only?c.html5PollingInterval&&a.push("html5PollingInterval ("+c.html5PollingInterval+"ms)"):(c.preferFlash&&a.push("preferFlash"),c.useHighPerformance&&a.push("useHighPerformance"),c.flashPollingInterval&&a.push("flashPollingInterval ("+
|
||||
c.flashPollingInterval+"ms)"),c.html5PollingInterval&&a.push("html5PollingInterval ("+c.html5PollingInterval+"ms)"),c.wmode&&a.push("wmode ("+c.wmode+")"),c.debugFlash&&a.push("debugFlash"),c.useFlashBlock&&a.push("flashBlock"));a.length&&(d=d.concat([a.join(" + ")]));c._wD(b+(d.length?" + "+d.join(", "):""),1);mb()}function a(a,b){return'<param name="'+a+'" value="'+b+'" />'}if(X&&Y)return!1;if(c.html5Only)return Ea(),e(),c.oMC=F(c.movieID),za(),Y=X=!0,!1;var f=d||c.url,h=c.altURL||f,k=ma(),l=V(),
|
||||
n=null,n=m.getElementsByTagName("html")[0],p,r,q,n=n&&n.dir&&n.dir.match(/rtl/i);b=b===g?c.id:b;Ea();c.url=db(ga?f:h);d=c.url;c.wmode=!c.wmode&&c.useHighPerformance?"transparent":c.wmode;null!==c.wmode&&(v.match(/msie 8/i)||!O&&!c.useHighPerformance)&&navigator.platform.match(/win32|win64/i)&&(M.push(z.spcWmode),c.wmode=null);k={name:b,id:b,src:d,quality:"high",allowScriptAccess:c.allowScriptAccess,bgcolor:c.bgColor,pluginspage:vb+"www.macromedia.com/go/getflashplayer",title:"JS/Flash audio component (SoundManager 2)",
|
||||
type:"application/x-shockwave-flash",wmode:c.wmode,hasPriority:"true"};c.debugFlash&&(k.FlashVars="debug=1");c.wmode||delete k.wmode;if(O)f=m.createElement("div"),r=['<object id="'+b+'" data="'+d+'" type="'+k.type+'" title="'+k.title+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">',a("movie",d),a("AllowScriptAccess",c.allowScriptAccess),a("quality",k.quality),c.wmode?a("wmode",c.wmode):"",a("bgcolor",
|
||||
c.bgColor),a("hasPriority","true"),c.debugFlash?a("FlashVars",k.FlashVars):"","</object>"].join("");else for(p in f=m.createElement("embed"),k)k.hasOwnProperty(p)&&f.setAttribute(p,k[p]);Ga();l=V();if(k=ma())if(c.oMC=F(c.movieID)||m.createElement("div"),c.oMC.id)q=c.oMC.className,c.oMC.className=(q?q+" ":"movieContainer")+(l?" "+l:""),c.oMC.appendChild(f),O&&(p=c.oMC.appendChild(m.createElement("div")),p.className="sm2-object-box",p.innerHTML=r),Y=!0;else{c.oMC.id=c.movieID;c.oMC.className="movieContainer "+
|
||||
l;p=l=null;c.useFlashBlock||(c.useHighPerformance?l={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",overflow:"hidden"}:(l={position:"absolute",width:"6px",height:"6px",top:"-9999px",left:"-9999px"},n&&(l.left=Math.abs(parseInt(l.left,10))+"px")));ub&&(c.oMC.style.zIndex=1E4);if(!c.debugFlash)for(q in l)l.hasOwnProperty(q)&&(c.oMC.style[q]=l[q]);try{O||c.oMC.appendChild(f),k.appendChild(c.oMC),O&&(p=c.oMC.appendChild(m.createElement("div")),p.className="sm2-object-box",p.innerHTML=
|
||||
r),Y=!0}catch(u){throw Error(t("domError")+" \n"+u.toString());}}X=!0;e();return!0};la=function(){if(c.html5Only)return na(),!1;if(l)return!1;if(!c.url)return p("noURL"),!1;l=c.getMovie(c.id);l||(ba?(O?c.oMC.innerHTML=Ia:c.oMC.appendChild(ba),ba=null,X=!0):na(c.id,c.url),l=c.getMovie(c.id));"function"===typeof c.oninitmovie&&setTimeout(c.oninitmovie,1);Oa();return!0};T=function(){setTimeout($a,1E3)};Da=function(){h.setTimeout(function(){L("soundManager: useFlashBlock is false, 100% HTML5 mode is possible. Rebooting with preferFlash: false...");
|
||||
c.setup({preferFlash:!1}).reboot();c.didFlashBlock=!0;c.beginDelayedInit()},1)};$a=function(){var b,d=!1;if(!c.url||ca)return!1;ca=!0;x.remove(h,"load",T);if(H&&xa&&!Va)return p("waitFocus"),!1;q||(b=c.getMoviePercent(),0<b&&100>b&&(d=!0));setTimeout(function(){b=c.getMoviePercent();if(d)return ca=!1,c._wD(t("waitSWF")),h.setTimeout(T,1),!1;q||(c._wD("soundManager: No Flash response within expected time. Likely causes: "+(0===b?"SWF load failed, ":"")+"Flash blocked or JS-Flash security error."+(c.debugFlash?
|
||||
" "+t("checkSWF"):""),2),!ga&&b&&(p("localFail",2),c.debugFlash||p("tryDebug",2)),0===b&&c._wD(t("swf404",c.url),1),D("flashtojs",!1,": Timed out"+(ga?" (Check flash security or flash blockers)":" (No plugin/missing SWF?)")));!q&&ob&&(null===b?c.useFlashBlock||0===c.flashLoadTimeout?(c.useFlashBlock&&Ja(),p("waitForever")):!c.useFlashBlock&&ea?Da():(p("waitForever"),P({type:"ontimeout",ignoreInit:!0,error:{type:"INIT_FLASHBLOCK"}})):0===c.flashLoadTimeout?p("waitForever"):!c.useFlashBlock&&ea?Da():
|
||||
Ha(!0))},c.flashLoadTimeout)};ka=function(){if(Va||!xa)return x.remove(h,"focus",ka),!0;Va=ob=!0;p("gotFocus");ca=!1;T();x.remove(h,"focus",ka);return!0};Oa=function(){M.length&&(c._wD("SoundManager 2: "+M.join(" "),1),M=[])};mb=function(){Oa();var b,d=[];if(c.useHTML5Audio&&c.hasHTML5){for(b in c.audioFormats)c.audioFormats.hasOwnProperty(b)&&d.push(b+" = "+c.html5[b]+(!c.html5[b]&&u&&c.flash[b]?" (using flash)":c.preferFlash&&c.flash[b]&&u?" (preferring flash)":c.html5[b]?"":" ("+(c.audioFormats[b].required?
|
||||
"required, ":"")+"and no flash support)"));c._wD("SoundManager 2 HTML5 support: "+d.join(", "),1)}};Z=function(b){if(q)return!1;if(c.html5Only)return p("sm2Loaded",1),q=!0,S(),D("onload",!0),!0;var d=!0,e;c.useFlashBlock&&c.flashLoadTimeout&&!c.getMoviePercent()||(q=!0);e={type:!H&&u?"NO_FLASH":"INIT_TIMEOUT"};c._wD("SoundManager 2 "+(y?"failed to load":"loaded")+" ("+(y?"Flash security/load error":"OK")+") "+String.fromCharCode(y?10006:10003),y?2:1);y||b?(c.useFlashBlock&&c.oMC&&(c.oMC.className=
|
||||
V()+" "+(null===c.getMoviePercent()?"swf_timedout":"swf_error")),P({type:"ontimeout",error:e,ignoreInit:!0}),D("onload",!1),U(e),d=!1):D("onload",!0);y||(c.waitForWindowLoad&&!ja?(p("waitOnload"),x.add(h,"load",S)):(c.waitForWindowLoad&&ja&&p("docLoaded"),S()));return d};Za=function(){var b,d=c.setupOptions;for(b in d)d.hasOwnProperty(b)&&(c[b]===g?c[b]=d[b]:c[b]!==d[b]&&(c.setupOptions[b]=c[b]))};za=function(){if(q)return p("didInit"),!1;if(c.html5Only)return q||(x.remove(h,"load",c.beginDelayedInit),
|
||||
c.enabled=!0,Z()),!0;la();try{l._externalInterfaceTest(!1),ab(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||l._disableDebug(),c.enabled=!0,D("jstoflash",!0),c.html5Only||x.add(h,"unload",ya)}catch(b){return c._wD("js/flash exception: "+b.toString()),D("jstoflash",!1),U({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),Ha(!0),Z(),!1}Z();x.remove(h,"load",c.beginDelayedInit);return!0};Q=function(){if(aa)return!1;aa=!0;Za();Ga();!H&&c.hasHTML5&&(c._wD("SoundManager 2: No Flash detected"+
|
||||
(c.useHTML5Audio?". Trying HTML5-only mode.":", enabling HTML5."),1),c.setup({useHTML5Audio:!0,preferFlash:!1}));jb();!H&&u&&(M.push(z.needFlash),c.setup({flashLoadTimeout:1}));m.removeEventListener&&m.removeEventListener("DOMContentLoaded",Q,!1);la();return!0};La=function(){"complete"===m.readyState&&(Q(),m.detachEvent("onreadystatechange",La));return!0};Fa=function(){ja=!0;Q();x.remove(h,"load",Fa)};Na();x.add(h,"focus",ka);x.add(h,"load",T);x.add(h,"load",Fa);m.addEventListener?m.addEventListener("DOMContentLoaded",
|
||||
Q,!1):m.attachEvent?m.attachEvent("onreadystatechange",La):(D("onload",!1),U({type:"NO_DOM2_EVENTS",fatal:!0}))}if(!h||!h.document)throw Error("SoundManager requires a browser with window and document objects.");var W=null;h.SM2_DEFER!==g&&SM2_DEFER||(W=new K);"object"===typeof module&&module&&"object"===typeof module.exports?(module.exports.SoundManager=K,module.exports.soundManager=W):"function"===typeof define&&define.amd&&define(function(){return{constructor:K,getInstance:function(g){!h.soundManager&&
|
||||
g instanceof Function&&(g=g(K),g instanceof K&&(h.soundManager=g));return h.soundManager}}});h.SoundManager=K;h.soundManager=W})(window);
|
@ -10,8 +10,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -176,7 +175,7 @@ class Compiler extends Infusion
|
||||
// do a final run to update the readme file
|
||||
foreach ($this->newFiles['static'] as $static)
|
||||
{
|
||||
if ($this->componentData->addreadme && 'README.md' == $static['name'] && JFile::exists($static['path']))
|
||||
if (('README.md' == $static['name'] || 'README.txt' == $static['name']) && $this->componentData->addreadme && JFile::exists($static['path']))
|
||||
{
|
||||
$this->buildReadMe($static['path']);
|
||||
break;
|
||||
@ -208,6 +207,22 @@ class Compiler extends Infusion
|
||||
}
|
||||
|
||||
private function buildReadMe($path)
|
||||
{
|
||||
// set readme data if not set already
|
||||
if (!isset($this->fileContentStatic['###LINE_COUNT###']) || $this->fileContentStatic['###LINE_COUNT###'] != $this->lineCount)
|
||||
{
|
||||
$this->buildReadMeData();
|
||||
}
|
||||
// get the file
|
||||
$string = JFile::read($path);
|
||||
// update the file
|
||||
$answer = str_replace(array_keys($this->fileContentStatic),array_values($this->fileContentStatic),$string);
|
||||
// add to zip array
|
||||
$this->writeFile($path,$answer);
|
||||
}
|
||||
|
||||
|
||||
private function buildReadMeData()
|
||||
{
|
||||
// setup the unrealistic numbers
|
||||
$folders = $this->folderCount * 5;
|
||||
@ -258,12 +273,6 @@ class Compiler extends Infusion
|
||||
$this->fileContentStatic['###actualDaysSpent###'] = $actualDaysSpent;
|
||||
$this->fileContentStatic['###projectWeekTime###'] = $projectWeekTime;
|
||||
$this->fileContentStatic['###projectMonthTime###'] = $projectMonthTime;
|
||||
// get the file
|
||||
$string = JFile::read($path);
|
||||
// update the file
|
||||
$answer = str_replace(array_keys($this->fileContentStatic),array_values($this->fileContentStatic),$string);
|
||||
// add to zip array
|
||||
$this->writeFile($path,$answer);
|
||||
}
|
||||
|
||||
private function zipComponent()
|
||||
|
@ -10,8 +10,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -634,72 +633,92 @@ class Get
|
||||
if ($component->add_css == 1)
|
||||
{
|
||||
$this->customScriptBuilder['component_css'] = base64_decode($component->css);
|
||||
unset($component->css);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder['component_css'] = '';
|
||||
}
|
||||
unset($component->css);
|
||||
// set the lang target
|
||||
$this->lang = 'admin';
|
||||
// add PHP in ADMIN
|
||||
$addScriptMethods = array('php_preflight','php_postflight','php_method');
|
||||
$addScriptTypes = array('install','update','uninstall');
|
||||
foreach ($addScriptMethods as $scriptMethod)
|
||||
{
|
||||
foreach ($addScriptTypes as $scriptType)
|
||||
{
|
||||
if (isset($component->{'add_'.$scriptMethod.'_'.$scriptType}) && $component->{'add_'.$scriptMethod.'_'.$scriptType} == 1)
|
||||
{
|
||||
$this->customScriptBuilder[$scriptMethod][$scriptType] = $this->setCustomContentLang(base64_decode($component->{$scriptMethod.'_'.$scriptType}));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder[$scriptMethod][$scriptType] = '';
|
||||
}
|
||||
unset($component->{$scriptMethod.'_'.$scriptType});
|
||||
}
|
||||
}
|
||||
// add_php_helper
|
||||
if ($component->add_php_helper_admin == 1)
|
||||
{
|
||||
$this->lang = 'admin';
|
||||
$this->customScriptBuilder['component_php_helper_admin'] = "\n\n".$this->setCustomContentLang(base64_decode($component->php_helper_admin));
|
||||
unset($component->php_helper);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder['component_php_helper_admin'] = '';
|
||||
}
|
||||
unset($component->php_helper);
|
||||
// add_admin_event
|
||||
if ($component->add_admin_event == 1)
|
||||
{
|
||||
$this->lang = 'admin';
|
||||
$this->customScriptBuilder['component_php_admin_event'] = $this->setCustomContentLang(base64_decode($component->php_admin_event));
|
||||
unset($component->php_admin_event);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder['component_php_admin_event'] = '';
|
||||
}
|
||||
unset($component->php_admin_event);
|
||||
// add_php_helper_site
|
||||
if ($component->add_php_helper_site == 1)
|
||||
{
|
||||
$this->lang = 'site';
|
||||
$this->customScriptBuilder['component_php_helper_site'] = "\n\n".$this->setCustomContentLang(base64_decode($component->php_helper_site));
|
||||
unset($component->php_helper);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder['component_php_helper_site'] = '';
|
||||
}
|
||||
unset($component->php_helper);
|
||||
// add_site_event
|
||||
if ($component->add_site_event == 1)
|
||||
{
|
||||
$this->lang = 'site';
|
||||
$this->customScriptBuilder['component_php_site_event'] = $this->setCustomContentLang(base64_decode($component->php_site_event));
|
||||
unset($component->php_site_event);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->customScriptBuilder['component_php_site_event'] = '';
|
||||
}
|
||||
unset($component->php_site_event);
|
||||
// add_sql
|
||||
if ($component->add_sql == 1)
|
||||
{
|
||||
$this->customScriptBuilder['sql']['component_sql'] = base64_decode($component->sql);
|
||||
unset($component->sql);
|
||||
}
|
||||
unset($component->sql);
|
||||
// bom
|
||||
if (ComponentbuilderHelper::checkString($component->bom))
|
||||
{
|
||||
$this->bomPath = $this->compilerPath.'/'.$component->bom;
|
||||
unset($component->bom);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->bomPath = $this->compilerPath.'/default.txt';
|
||||
}
|
||||
unset($component->bom);
|
||||
// README
|
||||
if ($component->addreadme)
|
||||
{
|
||||
@ -713,15 +732,15 @@ class Get
|
||||
// dashboard methods
|
||||
if ($component->add_php_dashboard_methods)
|
||||
{
|
||||
$nowLang = $this->lang;
|
||||
$this->lang = 'admin';
|
||||
// load the php for the dashboard model
|
||||
$component->php_dashboard_methods = base64_decode($component->php_dashboard_methods);
|
||||
$component->php_dashboard_methods = $this->setCustomContentLang(base64_decode($component->php_dashboard_methods));
|
||||
// check if dashboard_tab is set
|
||||
$dashboard_tab = json_decode($component->dashboard_tab,true);
|
||||
if (ComponentbuilderHelper::checkArray($dashboard_tab))
|
||||
{
|
||||
$component->dashboard_tab = array();
|
||||
$nowLang = $this->lang;
|
||||
$this->lang = 'admin';
|
||||
foreach ($dashboard_tab as $option => $values)
|
||||
{
|
||||
foreach ($values as $nr => $value)
|
||||
@ -733,12 +752,12 @@ class Get
|
||||
$component->dashboard_tab[$nr][$option] = $value;
|
||||
}
|
||||
}
|
||||
$this->lang = $nowLang;
|
||||
}
|
||||
else
|
||||
{
|
||||
$component->dashboard_tab = '';
|
||||
}
|
||||
$this->lang = $nowLang;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -10,8 +10,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -387,7 +386,7 @@ class Structure extends Get
|
||||
continue;
|
||||
}
|
||||
// if not needed do not add
|
||||
if ($item == 'README.md' && !$README)
|
||||
if (($item == 'README.md' || $item == 'README.txt') && !$README)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -11,8 +11,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -766,7 +765,7 @@ class Fields extends Structure
|
||||
$this->setBuilders($langLabel, $langView, $viewName, $listViewName, $name, $view, $field, $typeName, $multiple, $custom);
|
||||
}
|
||||
// now add to the field set
|
||||
$fieldSet .= $this->setField('custom', $taber, $fieldAttributes, $name, $typeName, $langView, $viewName, $listViewName, $placeholders, $optionArray);
|
||||
$fieldSet .= $this->setField('custom', $taber, $fieldAttributes, $name, $typeName, $langView, $viewName, $listViewName, $placeholders, $optionArray, $custom);
|
||||
}
|
||||
}
|
||||
return $fieldSet;
|
||||
@ -787,11 +786,12 @@ class Fields extends Structure
|
||||
* @param string $listViewName The list view name
|
||||
* @param array $placeholders The place holder and replace values
|
||||
* @param string $optionArray The option bucket array used to set the field options if needed.
|
||||
* @param arra $custom Used when field is from config
|
||||
*
|
||||
* @return string The field in xml
|
||||
*
|
||||
*/
|
||||
private function setField($setType, $taber, &$fieldAttributes, &$name, &$typeName, &$langView, &$viewName, &$listViewName, $placeholders, &$optionArray)
|
||||
private function setField($setType, $taber, &$fieldAttributes, &$name, &$typeName, &$langView, &$viewName, &$listViewName, $placeholders, &$optionArray, $custom = null)
|
||||
{
|
||||
$fieldSet = '';
|
||||
if ($setType == 'option')
|
||||
@ -1017,6 +1017,16 @@ class Fields extends Structure
|
||||
}
|
||||
}
|
||||
$fieldSet .= "\n\t\t" . $taber . "/>";
|
||||
// incase the field is in the config and has not been set
|
||||
if ('config' == $viewName && 'configs' == $listViewName)
|
||||
{
|
||||
// set lang (just incase)
|
||||
$listLangName = $langView . '_' . ComponentbuilderHelper::safeString($name, 'U');
|
||||
// set the custom array
|
||||
$data = array('type' => $typeName, 'code' => $name, 'lang' => $listLangName, 'custom' => $custom);
|
||||
// set the custom field file
|
||||
$this->setCustomFieldTypeFile($data, $listViewName, $viewName);
|
||||
}
|
||||
}
|
||||
return $fieldSet;
|
||||
}
|
||||
@ -1635,7 +1645,11 @@ class Fields extends Structure
|
||||
{
|
||||
$this->customFieldLinksBuilder[$viewName] = '';
|
||||
}
|
||||
$this->customFieldLinksBuilder[$viewName] .= ',{"sourceColumn": "' . $name . '","targetTable": "' . $custom['table'] . '","targetColumn": "' . $custom['id'] . '","displayColumn": "' . $custom['text'] . '"}';
|
||||
// only load this if table is set
|
||||
if (isset($custom['table']) && ComponentbuilderHelper::checkString($custom['table']))
|
||||
{
|
||||
$this->customFieldLinksBuilder[$viewName] .= ',{"sourceColumn": "' . $name . '","targetTable": "' . $custom['table'] . '","targetColumn": "' . $custom['id'] . '","displayColumn": "' . $custom['text'] . '"}';
|
||||
}
|
||||
// build script switch for user
|
||||
if ($custom['extends'] == 'user')
|
||||
{
|
||||
|
@ -10,8 +10,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -2723,7 +2722,7 @@ class Interpretation extends Fields
|
||||
$keyLang = $this->langPrefix.'_'.ComponentbuilderHelper::safeString($custom_button['name'],'U');
|
||||
$keyCode = ComponentbuilderHelper::safeString($custom_button['name']);
|
||||
$this->langContent[$this->lang][$keyLang] = trim($custom_button['name']);
|
||||
// add cpanel button
|
||||
// add cpanel button TODO does not work well on site with permissions
|
||||
$buttons[] = "\t".$tab."\tif (\$this->canDo->get('".$viewName.".".$keyCode."'))";
|
||||
$buttons[] = "\t".$tab."\t{";
|
||||
$buttons[] = "\t".$tab."\t\t//".$this->setLine(__LINE__)." add ".$custom_button['name']." button.";
|
||||
@ -3519,6 +3518,160 @@ class Interpretation extends Fields
|
||||
return '';
|
||||
}
|
||||
|
||||
public function setComponentToContentTypes($action)
|
||||
{
|
||||
$script = '';
|
||||
if (isset($this->componentData->admin_views) && ComponentbuilderHelper::checkArray($this->componentData->admin_views))
|
||||
{
|
||||
// set component name
|
||||
$component = $this->fileContentStatic['###component###'];
|
||||
// reset
|
||||
$dbStuff = array();
|
||||
// start loading the content type data
|
||||
foreach ($this->componentData->admin_views as $viewData)
|
||||
{
|
||||
// set main keys
|
||||
$view = ComponentbuilderHelper::safeString($viewData['settings']->name_single);
|
||||
// set list view keys
|
||||
$views = ComponentbuilderHelper::safeString($viewData['settings']->name_list);
|
||||
// get this views content type data
|
||||
$dbStuff[$view] = $this->getContentType($view, $component);
|
||||
// get the correct views name
|
||||
$checkViews = (isset($this->catCodeBuilder[$view]['views']) && ComponentbuilderHelper::checkString($this->catCodeBuilder[$view]['views'])) ? $this->catCodeBuilder[$view]['views'] : $views;
|
||||
if (ComponentbuilderHelper::checkArray($dbStuff[$view]) && array_key_exists($view, $this->catCodeBuilder) && ($checkViews == $views))
|
||||
{
|
||||
$dbStuff[$view.' catagory'] = $this->getCategoryContentType($view, $views, $component);
|
||||
}
|
||||
elseif(!isset($dbStuff[$view]) || !ComponentbuilderHelper::checkArray($dbStuff[$view]))
|
||||
{
|
||||
// remove if not array
|
||||
unset($dbStuff[$view]);
|
||||
}
|
||||
|
||||
}
|
||||
// build the db insert query
|
||||
if (ComponentbuilderHelper::checkArray($dbStuff))
|
||||
{
|
||||
$taabb = '';
|
||||
if ($action == 'update')
|
||||
{
|
||||
$taabb = "\t";
|
||||
}
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Get The Database object";
|
||||
$script .= "\n\t\t\t\$db = JFactory::getDbo();";
|
||||
foreach ($dbStuff as $name => $tables)
|
||||
{
|
||||
if (ComponentbuilderHelper::checkArray($tables))
|
||||
{
|
||||
$code = ComponentbuilderHelper::safeString($name);
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Create the ".$name." content type object.";
|
||||
$script .= "\n\t\t\t\$".$code." = new stdClass();";
|
||||
foreach ($tables as $table => $data)
|
||||
{
|
||||
$script .= "\n\t\t\t\$".$code."->".$table." = '".$data."';";
|
||||
}
|
||||
if ($action == 'update')
|
||||
{
|
||||
// we first load script to check if data exist
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Check if ".$name." type is already in content_type DB.";
|
||||
$script .= "\n\t\t\t\$".$code."_id = null;";
|
||||
$script .= "\n\t\t\t\$query = \$db->getQuery(true);";
|
||||
$script .= "\n\t\t\t\$query->select(\$db->quoteName(array('type_id')));";
|
||||
$script .= "\n\t\t\t\$query->from(\$db->quoteName('#__content_types'));";
|
||||
$script .= "\n\t\t\t\$query->where(\$db->quoteName('type_alias') . ' LIKE '. \$db->quote($".$code."->type_alias));";
|
||||
$script .= "\n\t\t\t\$db->setQuery(\$query);";
|
||||
$script .= "\n\t\t\t\$db->execute();";
|
||||
}
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Set the object into the content types table.";
|
||||
if ($action == 'update')
|
||||
{
|
||||
$script .= "\n\t\t\tif (\$db->getNumRows())";
|
||||
$script .= "\n\t\t\t{";
|
||||
$script .= "\n\t\t\t\t\$".$code."->type_id = \$db->loadResult();";
|
||||
$script .= "\n\t\t\t\t\$".$code."_Updated = \$db->updateObject('#__content_types', \$".$code.", 'type_id');";
|
||||
$script .= "\n\t\t\t}";
|
||||
$script .= "\n\t\t\telse";
|
||||
$script .= "\n\t\t\t{";
|
||||
}
|
||||
$script .= "\n\t\t\t".$taabb."\$".$code."_Inserted = \$db->insertObject('#__content_types', \$".$code.");";
|
||||
if ($action == 'update')
|
||||
{
|
||||
$script .= "\n\t\t\t}";
|
||||
}
|
||||
}
|
||||
}
|
||||
$script .= "\n\n";
|
||||
}
|
||||
}
|
||||
return $script;
|
||||
}
|
||||
|
||||
public function setPostInstallScript()
|
||||
{
|
||||
// reset script
|
||||
$script = $this->setComponentToContentTypes('install');
|
||||
|
||||
// set the component name
|
||||
$component = $this->fileContentStatic['###component###'];
|
||||
|
||||
if (isset($this->paramsBuilder) && ComponentbuilderHelper::checkString($this->paramsBuilder))
|
||||
{
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
$script .= "\n\t\t\t//".$this->setLine(__LINE__)." Install the global extenstion params.";
|
||||
}
|
||||
else
|
||||
{
|
||||
$script .= "\n\t\t\t//".$this->setLine(__LINE__)." Install the global extenstion params.";
|
||||
$script .= "\n\t\t\t\$db = JFactory::getDbo();";
|
||||
}
|
||||
$script .= "\n\t\t\t\$query = \$db->getQuery(true);";
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Field to update.";
|
||||
$script .= "\n\t\t\t\$fields = array(";
|
||||
$script .= "\n\t\t\t\t\$db->quoteName('params') . ' = ' . \$db->quote('{".$this->paramsBuilder."}'),";
|
||||
$script .= "\n\t\t\t);";
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Condition.";
|
||||
$script .= "\n\t\t\t\$conditions = array(";
|
||||
$script .= "\n\t\t\t\t\$db->quoteName('element') . ' = ' . \$db->quote('com_".$component."')";
|
||||
$script .= "\n\t\t\t);";
|
||||
$script .= "\n\n\t\t\t\$query->update(\$db->quoteName('#__extensions'))->set(\$fields)->where(\$conditions);";
|
||||
$script .= "\n\t\t\t\$db->setQuery(\$query);";
|
||||
$script .= "\n\t\t\t\$allDone = \$db->execute();";
|
||||
}
|
||||
// add the custom script
|
||||
$script .= $this->getCustomScriptBuilder('php_postflight', 'install', "\n\n", null, true);
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
$script .= "\n\t\t\t".'echo \'<a target="_blank" href="'.$this->fileContentStatic['###AUTHORWEBSITE###'].'" title="'.$this->fileContentStatic['###Component_name###'].'">';
|
||||
$script .= "\n\t\t\t\t".'<img src="components/com_'.$component.'/assets/images/component-300.'.$this->componentImageType.'"/>';
|
||||
$script .= "\n\t\t\t\t".'</a>\';';
|
||||
|
||||
return $script;
|
||||
}
|
||||
return "\n\t\t\t//".$this->setLine(__LINE__)." noting to install.";
|
||||
}
|
||||
|
||||
public function setPostUpdateScript()
|
||||
{
|
||||
// reset script
|
||||
$script = $this->setComponentToContentTypes('update');
|
||||
// add the custom script
|
||||
$script .= $this->getCustomScriptBuilder('php_postflight', 'update', "\n\n", null, true);
|
||||
if (isset($this->componentData->admin_views) && ComponentbuilderHelper::checkArray($this->componentData->admin_views))
|
||||
{
|
||||
$script .= "\n\t\t\t".'echo \'<a target="_blank" href="'.$this->fileContentStatic['###AUTHORWEBSITE###'].'" title="'.$this->fileContentStatic['###Component_name###'].'">';
|
||||
$script .= "\n\t\t\t\t".'<img src="components/com_'.$this->fileContentStatic['###component###'].'/assets/images/component-300.'.$this->componentImageType.'"/>';
|
||||
$script .= "\n\t\t\t\t".'</a>';
|
||||
$script .= "\n\t\t\t\t<h3>Upgrade to Version ".$this->fileContentStatic['###VERSION###']." Was Successful! Let us know if anything is not working as expected.</h3>';";
|
||||
}
|
||||
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
return $script;
|
||||
}
|
||||
return "\n\t\t\t//".$this->setLine(__LINE__)." noting to update.";
|
||||
}
|
||||
|
||||
public function setUninstallScript()
|
||||
{
|
||||
// reset script
|
||||
@ -3659,162 +3812,12 @@ class Interpretation extends Fields
|
||||
$script .= "\n\t\t}";
|
||||
// done
|
||||
$script .= "\n";
|
||||
|
||||
}
|
||||
// add the custom uninstall script
|
||||
$script .= $this->getCustomScriptBuilder('php_method', 'uninstall', "", null, true, null, "\n");
|
||||
return $script;
|
||||
}
|
||||
|
||||
public function setComponentToContentTypes($action)
|
||||
{
|
||||
$script = '';
|
||||
if (isset($this->componentData->admin_views) && ComponentbuilderHelper::checkArray($this->componentData->admin_views))
|
||||
{
|
||||
// set component name
|
||||
$component = $this->fileContentStatic['###component###'];
|
||||
// reset
|
||||
$dbStuff = array();
|
||||
// start loading the content type data
|
||||
foreach ($this->componentData->admin_views as $viewData)
|
||||
{
|
||||
// set main keys
|
||||
$view = ComponentbuilderHelper::safeString($viewData['settings']->name_single);
|
||||
// set list view keys
|
||||
$views = ComponentbuilderHelper::safeString($viewData['settings']->name_list);
|
||||
// get this views content type data
|
||||
$dbStuff[$view] = $this->getContentType($view, $component);
|
||||
// get the correct views name
|
||||
$checkViews = (isset($this->catCodeBuilder[$view]['views']) && ComponentbuilderHelper::checkString($this->catCodeBuilder[$view]['views'])) ? $this->catCodeBuilder[$view]['views'] : $views;
|
||||
if (ComponentbuilderHelper::checkArray($dbStuff[$view]) && array_key_exists($view, $this->catCodeBuilder) && ($checkViews == $views))
|
||||
{
|
||||
$dbStuff[$view.' catagory'] = $this->getCategoryContentType($view, $views, $component);
|
||||
}
|
||||
elseif(!isset($dbStuff[$view]) || !ComponentbuilderHelper::checkArray($dbStuff[$view]))
|
||||
{
|
||||
// remove if not array
|
||||
unset($dbStuff[$view]);
|
||||
}
|
||||
|
||||
}
|
||||
// build the db insert query
|
||||
if (ComponentbuilderHelper::checkArray($dbStuff))
|
||||
{
|
||||
$taabb = '';
|
||||
if ($action == 'update')
|
||||
{
|
||||
$taabb = "\t";
|
||||
}
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Get The Database object";
|
||||
$script .= "\n\t\t\t\$db = JFactory::getDbo();";
|
||||
foreach ($dbStuff as $name => $tables)
|
||||
{
|
||||
if (ComponentbuilderHelper::checkArray($tables))
|
||||
{
|
||||
$code = ComponentbuilderHelper::safeString($name);
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Create the ".$name." content type object.";
|
||||
$script .= "\n\t\t\t\$".$code." = new stdClass();";
|
||||
foreach ($tables as $table => $data)
|
||||
{
|
||||
$script .= "\n\t\t\t\$".$code."->".$table." = '".$data."';";
|
||||
}
|
||||
if ($action == 'update')
|
||||
{
|
||||
// we first load script to check if data exist
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Check if ".$name." type is already in content_type DB.";
|
||||
$script .= "\n\t\t\t\$".$code."_id = null;";
|
||||
$script .= "\n\t\t\t\$query = \$db->getQuery(true);";
|
||||
$script .= "\n\t\t\t\$query->select(\$db->quoteName(array('type_id')));";
|
||||
$script .= "\n\t\t\t\$query->from(\$db->quoteName('#__content_types'));";
|
||||
$script .= "\n\t\t\t\$query->where(\$db->quoteName('type_alias') . ' LIKE '. \$db->quote($".$code."->type_alias));";
|
||||
$script .= "\n\t\t\t\$db->setQuery(\$query);";
|
||||
$script .= "\n\t\t\t\$db->execute();";
|
||||
}
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Set the object into the content types table.";
|
||||
if ($action == 'update')
|
||||
{
|
||||
$script .= "\n\t\t\tif (\$db->getNumRows())";
|
||||
$script .= "\n\t\t\t{";
|
||||
$script .= "\n\t\t\t\t\$".$code."->type_id = \$db->loadResult();";
|
||||
$script .= "\n\t\t\t\t\$".$code."_Updated = \$db->updateObject('#__content_types', \$".$code.", 'type_id');";
|
||||
$script .= "\n\t\t\t}";
|
||||
$script .= "\n\t\t\telse";
|
||||
$script .= "\n\t\t\t{";
|
||||
}
|
||||
$script .= "\n\t\t\t".$taabb."\$".$code."_Inserted = \$db->insertObject('#__content_types', \$".$code.");";
|
||||
if ($action == 'update')
|
||||
{
|
||||
$script .= "\n\t\t\t}";
|
||||
}
|
||||
}
|
||||
}
|
||||
$script .= "\n\n";
|
||||
}
|
||||
}
|
||||
return $script;
|
||||
}
|
||||
|
||||
public function setInstallScript()
|
||||
{
|
||||
// reset script
|
||||
$script = $this->setComponentToContentTypes('install');
|
||||
|
||||
// set the component name
|
||||
$component = $this->fileContentStatic['###component###'];
|
||||
|
||||
if (isset($this->paramsBuilder) && ComponentbuilderHelper::checkString($this->paramsBuilder))
|
||||
{
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
$script .= "\n\t\t\t//".$this->setLine(__LINE__)." Install the global extenstion params.";
|
||||
}
|
||||
else
|
||||
{
|
||||
$script .= "\n\t\t\t//".$this->setLine(__LINE__)." Install the global extenstion params.";
|
||||
$script .= "\n\t\t\t\$db = JFactory::getDbo();";
|
||||
}
|
||||
$script .= "\n\t\t\t\$query = \$db->getQuery(true);";
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Field to update.";
|
||||
$script .= "\n\t\t\t\$fields = array(";
|
||||
$script .= "\n\t\t\t\t\$db->quoteName('params') . ' = ' . \$db->quote('{".$this->paramsBuilder."}'),";
|
||||
$script .= "\n\t\t\t);";
|
||||
$script .= "\n\n\t\t\t//".$this->setLine(__LINE__)." Condition.";
|
||||
$script .= "\n\t\t\t\$conditions = array(";
|
||||
$script .= "\n\t\t\t\t\$db->quoteName('element') . ' = ' . \$db->quote('com_".$component."')";
|
||||
$script .= "\n\t\t\t);";
|
||||
$script .= "\n\n\t\t\t\$query->update(\$db->quoteName('#__extensions'))->set(\$fields)->where(\$conditions);";
|
||||
$script .= "\n\t\t\t\$db->setQuery(\$query);";
|
||||
$script .= "\n\t\t\t\$allDone = \$db->execute();";
|
||||
}
|
||||
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
$script .= "\n\t\t\t".'echo \'<a target="_blank" href="'.$this->fileContentStatic['###AUTHORWEBSITE###'].'" title="'.$this->fileContentStatic['###Component_name###'].'">';
|
||||
$script .= "\n\t\t\t\t".'<img src="components/com_'.$component.'/assets/images/component-300.'.$this->componentImageType.'"/>';
|
||||
$script .= "\n\t\t\t\t".'</a>\';';
|
||||
|
||||
return $script;
|
||||
}
|
||||
return "\n\t\t\t//".$this->setLine(__LINE__)." noting to install.";
|
||||
}
|
||||
|
||||
public function setUpdateScript()
|
||||
{
|
||||
// reset script
|
||||
$script = $this->setComponentToContentTypes('update');
|
||||
if (isset($this->componentData->admin_views) && ComponentbuilderHelper::checkArray($this->componentData->admin_views))
|
||||
{
|
||||
$script .= "\n\t\t\t".'echo \'<a target="_blank" href="'.$this->fileContentStatic['###AUTHORWEBSITE###'].'" title="'.$this->fileContentStatic['###Component_name###'].'">';
|
||||
$script .= "\n\t\t\t\t".'<img src="components/com_'.$this->fileContentStatic['###component###'].'/assets/images/component-300.'.$this->componentImageType.'"/>';
|
||||
$script .= "\n\t\t\t\t".'</a>';
|
||||
$script .= "\n\t\t\t\t<h3>Upgrade to Version ".$this->fileContentStatic['###VERSION###']." Was Successful! Let us know if anything is not working as expected.</h3>';";
|
||||
}
|
||||
|
||||
if (ComponentbuilderHelper::checkString($script))
|
||||
{
|
||||
return $script;
|
||||
}
|
||||
return "\n\t\t\t//".$this->setLine(__LINE__)." noting to update.";
|
||||
}
|
||||
|
||||
public function getContentType($view, $component)
|
||||
{
|
||||
// add if history is to be kept or if tags is added
|
||||
@ -5153,7 +5156,7 @@ class Interpretation extends Fields
|
||||
foreach ($this->listBuilder[$viewName_list] as $item)
|
||||
{
|
||||
$checkoutTriger = false;
|
||||
if (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']))
|
||||
if (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']) && isset($item['custom']['table']) && ComponentbuilderHelper::checkString($item['custom']['table']))
|
||||
{
|
||||
$item['id'] = $item['code'];
|
||||
if (!$item['multiple'])
|
||||
@ -5161,13 +5164,13 @@ class Interpretation extends Fields
|
||||
$item['code'] = $item['code'].'_'.$item['custom']['text'];
|
||||
}
|
||||
}
|
||||
// check if translated vlaue is used
|
||||
// check if translated value is used
|
||||
if (isset($this->selectionTranslationFixBuilder[$viewName_list]) && ComponentbuilderHelper::checkArray($this->selectionTranslationFixBuilder[$viewName_list])
|
||||
&& array_key_exists($item['code'],$this->selectionTranslationFixBuilder[$viewName_list]))
|
||||
{
|
||||
$itemCode = '<?php echo JText::_($item->'.$item['code'].'); ?>';
|
||||
}
|
||||
elseif ($item['custom']['text'] == 'user')
|
||||
elseif (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']) && $item['custom']['text'] == 'user')
|
||||
{
|
||||
$itemCode = '<?php echo JFactory::getUser((int)$item->'.$item['code'].')->name; ?>';
|
||||
}
|
||||
@ -6245,7 +6248,7 @@ class Interpretation extends Fields
|
||||
{
|
||||
$counter++;
|
||||
$checkoutTriger = false;
|
||||
if (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']))
|
||||
if (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']) && isset($item['custom']['table']) && ComponentbuilderHelper::checkString($item['custom']['table']))
|
||||
{
|
||||
$item['id'] = $item['code'];
|
||||
if (!$item['multiple'])
|
||||
@ -6345,7 +6348,7 @@ class Interpretation extends Fields
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (ComponentbuilderHelper::checkArray($item['custom']) && $item['custom']['extends'] == 'user' && !$item['title'])
|
||||
elseif (isset($item['custom']) && ComponentbuilderHelper::checkArray($item['custom']) && $item['custom']['extends'] == 'user' && !$item['title'])
|
||||
{
|
||||
// user and linked
|
||||
$body .= "\n\t\t<?php \$_".$item['id']." = JFactory::getUser(\$item->".$item['id']."); ?>";
|
||||
@ -7310,7 +7313,7 @@ class Interpretation extends Fields
|
||||
$query .= "\n\t\t\t}";
|
||||
$query .= "\n\t\t\telse";
|
||||
$query .= "\n\t\t\t{";
|
||||
$query .= "\n\t\t\t\t\$search = \$db->quote('%' . \$db->escape(\$search, true) . '%');";
|
||||
$query .= "\n\t\t\t\t\$search = \$db->quote('%' . \$db->escape(\$search) . '%');";
|
||||
$query .= "\n\t\t\t\t\$query->where(".$search.");";
|
||||
$query .= "\n\t\t\t}";
|
||||
$query .= "\n\t\t}";
|
||||
@ -7328,7 +7331,12 @@ class Interpretation extends Fields
|
||||
$query = "";
|
||||
foreach ($this->customBuilder[$viewName_list] as $filter)
|
||||
{
|
||||
if (isset($this->customBuilderList[$viewName_list]) && ComponentbuilderHelper::checkArray($this->customBuilderList[$viewName_list]) && in_array($filter['code'],$this->customBuilderList[$viewName_list]))
|
||||
// only load this if table is set
|
||||
if (isset($this->customBuilderList[$viewName_list])
|
||||
&& ComponentbuilderHelper::checkArray($this->customBuilderList[$viewName_list])
|
||||
&& in_array($filter['code'],$this->customBuilderList[$viewName_list])
|
||||
&& isset($filter['custom']['table'])
|
||||
&& ComponentbuilderHelper::checkString($filter['custom']['table']))
|
||||
{
|
||||
$query .= "\n\n\t\t//".$this->setLine(__LINE__)." From the ".ComponentbuilderHelper::safeString(ComponentbuilderHelper::safeString($filter['custom']['table'],'w'))." table.";
|
||||
$query .= "\n\t\t\$query->select(\$db->quoteName('".$filter['custom']['db'].".".$filter['custom']['text']."','".$filter['code']."_".$filter['custom']['text']."'));";
|
||||
@ -7482,7 +7490,7 @@ class Interpretation extends Fields
|
||||
$filterQuery .= "\n\t\t//".$this->setLine(__LINE__)." Filter by ".$filter['code'].".";
|
||||
$filterQuery .= "\n\t\tif (\$".$filter['code']." = \$this->getState('filter.".$filter['code']."'))";
|
||||
$filterQuery .= "\n\t\t{";
|
||||
$filterQuery .= "\n\t\t\t\$query->where('a.".$filter['code']." = ' . \$db->quote(\$db->escape(\$".$filter['code'].", true)));";
|
||||
$filterQuery .= "\n\t\t\t\$query->where('a.".$filter['code']." = ' . \$db->quote(\$db->escape(\$".$filter['code'].")));";
|
||||
$filterQuery .= "\n\t\t}";
|
||||
|
||||
}
|
||||
@ -7491,7 +7499,7 @@ class Interpretation extends Fields
|
||||
$filterQuery .= "\n\t\t//".$this->setLine(__LINE__)." Filter by ".ucwords($filter['code']).".";
|
||||
$filterQuery .= "\n\t\tif (\$".$filter['code']." = \$this->getState('filter.".$filter['code']."'))";
|
||||
$filterQuery .= "\n\t\t{";
|
||||
$filterQuery .= "\n\t\t\t\$query->where('a.".$filter['code']." = ' . \$db->quote(\$db->escape(\$".$filter['code'].", true)));";
|
||||
$filterQuery .= "\n\t\t\t\$query->where('a.".$filter['code']." = ' . \$db->quote(\$db->escape(\$".$filter['code'].")));";
|
||||
$filterQuery .= "\n\t\t}";
|
||||
}
|
||||
}
|
||||
@ -11553,6 +11561,7 @@ class Interpretation extends Fields
|
||||
foreach ($this->componentData->config as $field)
|
||||
{
|
||||
$xmlField = $this->setDynamicField($field, $view, $viewType, $lang, $viewName, $listViewName, $spacerCounter, $placeholders, $dbkey, false);
|
||||
|
||||
if (ComponentbuilderHelper::checkString($xmlField))
|
||||
{
|
||||
$this->configFieldSetsCustomField[$field['tabname']][] = $xmlField;
|
||||
|
@ -10,8 +10,7 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.0.8
|
||||
@build 30th January, 2016
|
||||
@version 2.2.0
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage compiler.php
|
||||
@ -159,6 +158,10 @@ class Infusion extends Interpretation
|
||||
|
||||
// ###ADMIN_GLOBAL_EVENT###
|
||||
$this->fileContentStatic['###ADMIN_GLOBAL_EVENT###'] = '';
|
||||
|
||||
// set incase no extra admin files are loaded
|
||||
$this->fileContentStatic['###EXSTRA_ADMIN_FILES###'] = '';
|
||||
|
||||
// now load the data for the global event if needed
|
||||
if ($this->componentData->add_admin_event == 1)
|
||||
{
|
||||
@ -175,6 +178,12 @@ class Infusion extends Interpretation
|
||||
$this->fileContentStatic['###ADMIN_GLOBAL_EVENT_HELPER###'] .= "\n\t".'}';
|
||||
}
|
||||
|
||||
// now load the readme file if needed
|
||||
if ($this->componentData->addreadme == 1)
|
||||
{
|
||||
$this->fileContentStatic['###EXSTRA_ADMIN_FILES###'] .= "\n\t\t\t<filename>README.txt</filename>";
|
||||
}
|
||||
|
||||
// ###HELPER_CREATEUSER###
|
||||
$this->fileContentStatic['###HELPER_CREATEUSER###'] = $this->setCreateUserHelperMethod($this->componentData->creatuserhelper);
|
||||
|
||||
@ -1001,11 +1010,17 @@ class Infusion extends Interpretation
|
||||
// ###LANG_SITE_SYS###
|
||||
$this->fileContentStatic['###LANG_SITE_SYS###'] = $this->setLangSiteSys();
|
||||
|
||||
// ###INSTALLSCRIPT###
|
||||
$this->fileContentStatic['###INSTALLSCRIPT###'] = $this->setInstallScript();
|
||||
// ###PREINSTALLSCRIPT###
|
||||
$this->fileContentStatic['###PREINSTALLSCRIPT###'] = $this->getCustomScriptBuilder('php_preflight', 'install', "\n", null, true);
|
||||
|
||||
// ###UPDATESCRIPT###
|
||||
$this->fileContentStatic['###UPDATESCRIPT###'] = $this->setUpdateScript();
|
||||
// ###PREUPDATESCRIPT###
|
||||
$this->fileContentStatic['###PREUPDATESCRIPT###'] = $this->getCustomScriptBuilder('php_preflight', 'update', "\n", null, true);
|
||||
|
||||
// ###POSTINSTALLSCRIPT###
|
||||
$this->fileContentStatic['###POSTINSTALLSCRIPT###'] = $this->setPostInstallScript();
|
||||
|
||||
// ###POSTUPDATESCRIPT###
|
||||
$this->fileContentStatic['###POSTUPDATESCRIPT###'] = $this->setPostUpdateScript();
|
||||
|
||||
// ###UNINSTALLSCRIPT###
|
||||
$this->fileContentStatic['###UNINSTALLSCRIPT###'] = $this->setUninstallScript();
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage componentbuilder.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
@ -53,7 +52,7 @@ abstract class ComponentbuilderHelper
|
||||
require_once JPATH_ADMINISTRATOR.'/components/com_componentbuilder/helpers/js.php';
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* indent HTML
|
||||
*/
|
||||
public static function indent($html)
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage batch_.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage indenter.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage js.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage minify.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -669,7 +669,10 @@ COM_COMPONENTBUILDER_ADMIN_VIEW_YES="Yes"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_YOUTUBE="Youtube"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_ZOOM_IN="Zoom In"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_ZOOM_OUT="Zoom Out"
|
||||
COM_COMPONENTBUILDER_ALL_IS_GOOD_PLEASE_CHECK_AGAIN_LATTER="All is good, please check again latter."
|
||||
COM_COMPONENTBUILDER_AUTHOR="Author"
|
||||
COM_COMPONENTBUILDER_A_FEW_CLOSED_ISSUES_FROM_GITHUB_IS_LOADING="A few closed issues from Github is loading"
|
||||
COM_COMPONENTBUILDER_A_FEW_OPEN_ISSUES_FROM_GITHUB_IS_LOADING="A few open issues from Github is loading"
|
||||
COM_COMPONENTBUILDER_BACK="Back"
|
||||
COM_COMPONENTBUILDER_COMPONENT="Component"
|
||||
COM_COMPONENTBUILDER_COMPONENTS="Components"
|
||||
@ -739,6 +742,16 @@ COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_HELPER_ADMIN="Add Php Helper Admin"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_HELPER_ADMIN_LABEL="Add PHP (helper_admin Class)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_HELPER_SITE="Add Php Helper Site"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_HELPER_SITE_LABEL="Add PHP (helper_site Class)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_METHOD_UNINSTALL="Add Php Method Uninstall"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_METHOD_UNINSTALL_LABEL="Add PHP Method (uninstall)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_POSTFLIGHT_INSTALL="Add Php Postflight Install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_POSTFLIGHT_INSTALL_LABEL="Add PHP Postflight (install)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_POSTFLIGHT_UPDATE="Add Php Postflight Update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_POSTFLIGHT_UPDATE_LABEL="Add PHP Postflight (update)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_PREFLIGHT_INSTALL="Add Php Preflight Install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_PREFLIGHT_INSTALL_LABEL="Add PHP Preflight (install)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_PREFLIGHT_UPDATE="Add Php Preflight Update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_PHP_PREFLIGHT_UPDATE_LABEL="Add PHP Preflight (update)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_SALES_SERVER="Add Sales Server"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_SALES_SERVER_LABEL="Add Sales Server"
|
||||
COM_COMPONENTBUILDER_COMPONENT_ADD_SITE_EVENT="Add Site Event"
|
||||
@ -883,9 +896,9 @@ COM_COMPONENTBUILDER_COMPONENT_EDIT="Editing the Component"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EDIT_CREATE_SITE_VIEW_DESCRIPTION="add site edit & create view for this admin view"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EDIT_CREATE_SITE_VIEW_LABEL="Edit/Create Site View"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL="Email"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_DESCRIPTION="Enter Author Email"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_HINT="Author Email Here"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_LABEL="Author Email"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_DESCRIPTION="Enter Email"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_HINT="demo@example.com"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMAIL_LABEL="Email"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMPTYCONTRIBUTORS="Emptycontributors"
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMPTYCONTRIBUTORS_DESCRIPTION="Set if a list of empty contributor fields should be added."
|
||||
COM_COMPONENTBUILDER_COMPONENT_EMPTYCONTRIBUTORS_LABEL="Empty Contributor Fields"
|
||||
@ -966,6 +979,7 @@ COM_COMPONENTBUILDER_COMPONENT_JOOMLA="Joomla"
|
||||
COM_COMPONENTBUILDER_COMPONENT_KEY="Key"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LAMP="Lamp"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LAST="Last"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LIBS_HELPERS="Libs & Helpers"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LICENSE="License"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LICENSE_DESCRIPTION="Add License Here"
|
||||
COM_COMPONENTBUILDER_COMPONENT_LICENSE_HINT="Add License Here"
|
||||
@ -1001,6 +1015,7 @@ COM_COMPONENTBUILDER_COMPONENT_MODIFIED_DATE_DESC="The date this Component was m
|
||||
COM_COMPONENTBUILDER_COMPONENT_MODIFIED_DATE_LABEL="Modified Date"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MOVE="Move"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MUSIC="Music"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MYSQL="MySQL"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MYSQL_DESCRIPTION="Update Dump"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MYSQL_HINT="// MySQL for update or blank for none"
|
||||
COM_COMPONENTBUILDER_COMPONENT_MYSQL_LABEL="MySQL"
|
||||
@ -1022,10 +1037,12 @@ COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_CONFIG_DESCRIPTION="You can add custom c
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_CONFIG_LABEL="Adding Custom Config Fields"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_CUSTOM_MENUS_DESCRIPTION="You can add custom menus to the component here. The normal Menus are already being added so only add custom Menus that you would like to use for custom scripts."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_CUSTOM_MENUS_LABEL="Adding Custom Menus"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FILES_DESCRIPTION="You can add custom files to the component, simply add the files to the administrator/components/com_componentbuilder/compiler/custom folder and then select them here."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FILES_DESCRIPTION="You can add custom files to the component, simply add the files to the administrator/components/com_componentbuilder/custom folder and then select them here."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FILES_LABEL="Adding Custom Files"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FOLDERS_DESCRIPTION="You can add custom folders to the component, simply add the folders to the administrator/components/com_componentbuilder/compiler/custom folder and then select them here."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FOLDERS_DESCRIPTION="You can add custom folders to the component, simply add the folders to the administrator/components/com_componentbuilder/custom folder and then select them here."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ADD_FOLDERS_LABEL="Adding Custom Folders"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_MYSQL_TWEAK_OPTIONS_DESCRIPTION="In each admin view you can add data from a MySQL Table (this is done in the admin view MySQL tab). Here you can limit that data in relation to this component. This feature is useful when an admin view with demo data is used in more then one component, and you would like to exclude some demo data without creating a new admin view."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_MYSQL_TWEAK_OPTIONS_LABEL=" MySql Tweak Options"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ON_CONTRIBUTORS_DESCRIPTION="Only add contributors if you would like them listed on the component dashboard."
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ON_CONTRIBUTORS_LABEL="Setting Contributors"
|
||||
COM_COMPONENTBUILDER_COMPONENT_NOTE_ON_VIEWS_DESCRIPTION="Do not add the same view twice it will not work."
|
||||
@ -1038,9 +1055,9 @@ COM_COMPONENTBUILDER_COMPONENT_NOTE_README_DESCRIPTION="<div style='margin: 10px
|
||||
<br />
|
||||
# Build Details<br />
|
||||
<br />
|
||||
+ *Company*: [###COMPANYNAME###] (###AUTHORWEBSITE###)<br />
|
||||
+ *Author*: [###AUTHOR###] (mailto:###AUTHOREMAIL###)<br />
|
||||
+ *Name*: [###Component_name###] (###AUTHORWEBSITE###)<br />
|
||||
+ *Company*: [###COMPANYNAME###](###AUTHORWEBSITE###)<br />
|
||||
+ *Author*: [###AUTHOR###](mailto:###AUTHOREMAIL###)<br />
|
||||
+ *Name*: [###Component_name###](###AUTHORWEBSITE###)<br />
|
||||
+ *First Build*: ###CREATIONDATE###<br />
|
||||
+ *Last Build*: ###BUILDDATE###<br />
|
||||
+ *Version*: ###VERSION###<br />
|
||||
@ -1050,7 +1067,7 @@ COM_COMPONENTBUILDER_COMPONENT_NOTE_README_DESCRIPTION="<div style='margin: 10px
|
||||
## Build Time<br />
|
||||
<br />
|
||||
**###totalHours### Hours** or **###totalDays### Eight Hour Days** (actual time the author saved - <br />
|
||||
due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builder))<br />
|
||||
due to [Automated Component Builder](https://www.vdm.io/joomla-component-builder))<br />
|
||||
<br />
|
||||
> (if creating a folder and file took **5 seconds** and writing one line of code took **10 seconds**,<br />
|
||||
> never making one mistake or taking any coffee break.)<br />
|
||||
@ -1075,8 +1092,8 @@ due to [Automated Component Builder] (https://www.vdm.io/joomla-component-builde
|
||||
<br />
|
||||
Project duration: **###projectWeekTime### weeks** or **###projectMonthTime### months**<br />
|
||||
<br />
|
||||
> This **component** was build with a Joomla [Automated Component Builder] (https://www.vdm.io/joomla-component-builder).<br />
|
||||
> Developed by [Llewellyn van der Merwe] (mailto:joomla@vdm.io)<br />
|
||||
> This **component** was build with a Joomla [Automated Component Builder](https://www.vdm.io/joomla-component-builder).<br />
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)<br />
|
||||
<br />
|
||||
## Donations<br />
|
||||
<br />
|
||||
@ -1111,6 +1128,7 @@ COM_COMPONENTBUILDER_COMPONENT_PENCIL="Pencil"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PENCIL_TWO="Pencil 2"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHONE="Phone"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHONE_TWO="Phone 2"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP="PHP"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_ADMIN_EVENT="Php Admin Event"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_ADMIN_EVENT_DESCRIPTION="PHP script for the global helper admin event method."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_ADMIN_EVENT_HINT="// add custom PHP script to the global helper admin event method."
|
||||
@ -1127,6 +1145,26 @@ COM_COMPONENTBUILDER_COMPONENT_PHP_HELPER_SITE="Php Helper Site"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_HELPER_SITE_DESCRIPTION="Add your PHP here! [Do not add the php tags]"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_HELPER_SITE_HINT="// The PHP abstract Methods to add to the component helper class. Only Methods! as it will directly be add as methods to the helper class!"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_HELPER_SITE_LABEL="PHP"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_METHOD_UNINSTALL="Php Method Uninstall"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_METHOD_UNINSTALL_DESCRIPTION="PHP script that should run during uninstall."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_METHOD_UNINSTALL_HINT="// add custom PHP script that should run during uninstall"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_METHOD_UNINSTALL_LABEL="PHP Method (uninstall)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_INSTALL="Php Postflight Install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_INSTALL_DESCRIPTION="PHP script that should run postflight during install."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_INSTALL_HINT="// add custom PHP script that should run during postflight install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_INSTALL_LABEL="PHP Postflight (install)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_UPDATE="Php Postflight Update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_UPDATE_DESCRIPTION="PHP script that should run postflight during update."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_UPDATE_HINT="// add custom PHP script that should run during postflight update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_POSTFLIGHT_UPDATE_LABEL="PHP Postflight (update)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_INSTALL="Php Preflight Install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_INSTALL_DESCRIPTION="PHP script that should run preflight during install."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_INSTALL_HINT="// add custom PHP script that should run during preflight install"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_INSTALL_LABEL="PHP Preflight (install)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_UPDATE="Php Preflight Update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_UPDATE_DESCRIPTION="PHP script that should run preflight during update."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_UPDATE_HINT="// add custom PHP script that should run during preflight update"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_PREFLIGHT_UPDATE_LABEL="PHP Preflight (update)"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_SITE_EVENT="Php Site Event"
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_SITE_EVENT_DESCRIPTION="PHP script for the global helper site event method."
|
||||
COM_COMPONENTBUILDER_COMPONENT_PHP_SITE_EVENT_HINT="// add custom PHP script to the global helper site event method."
|
||||
@ -1165,7 +1203,6 @@ COM_COMPONENTBUILDER_COMPONENT_SAVE_WARNING="Alias already existed so a number w
|
||||
COM_COMPONENTBUILDER_COMPONENT_SCISSORS="Scissors"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SCREEN="Screen"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SCREWDRIVER="Screwdriver"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SCRIPTS="Scripts"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SEARCH="Search"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SELECT_AN_OPTION="Select an option"
|
||||
COM_COMPONENTBUILDER_COMPONENT_SETTINGS="Settings"
|
||||
@ -1266,7 +1303,7 @@ COM_COMPONENTBUILDER_COMPONENT_WARNING_CIRCLE="Warning Circle"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WEBSITE="Website"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WEBSITE_DESCRIPTION="Enter website address"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WEBSITE_HINT="http://www.example.com"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WEBSITE_LABEL="Author Website"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WEBSITE_LABEL="Website"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WHMCS_KEY="Whmcs Key"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WHMCS_KEY_DESCRIPTION="Add your WHMCS Secret Key here that is needed for this license"
|
||||
COM_COMPONENTBUILDER_COMPONENT_WHMCS_KEY_HINT="Secret Key"
|
||||
@ -1308,23 +1345,18 @@ COM_COMPONENTBUILDER_CONFIG_COMPILER_FOLDER_PATH_HINT="/home/user/compiler"
|
||||
COM_COMPONENTBUILDER_CONFIG_COMPILER_FOLDER_PATH_LABEL="Compiler Folder Path"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_DESC="The email of this contributor."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_EMAIL_LABEL="Contributor Email"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_FIVE="Contributor Five"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_FOUR="Contributor Four"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_DESC="The link to this contributor's website."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_LINK_LABEL="Contributor Website"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_DESC="The name of this contributor."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_NAME_LABEL="Contributor Name"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_ONE="Contributor One"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_ALL="Both Front & Back-end"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_BACK="Back-end"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_DESC="Select where you want this contributor's details to show in the component."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_FRONT="Front-end"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_LABEL="Show"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_SHOW_NONE="Hide"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_THREE="Contributor Three"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_DESC="The job title that best describes the contributor's relationship to this component."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TITLE_LABEL="Contributor Job Title"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_TWO="Contributor Two"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_DESC="How should we link to this contributor."
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_EMAIL="Email"
|
||||
COM_COMPONENTBUILDER_CONFIG_CONTRIBUTOR_USE_LABEL="Use"
|
||||
@ -2423,7 +2455,7 @@ COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU="Help Documents Submenu"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENTS_SUBMENU_DESC="Allows the users in this group to update the submenu of the help document"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN="Admin"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW="Admin View"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW_DESCRIPTION="Select the view being targeted"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW_DESCRIPTION="Select the view being target."
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW_LABEL="Admin Views"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ALIAS="Alias"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_ALIAS_HINT="Auto-generated from name"
|
||||
@ -2461,7 +2493,7 @@ COM_COMPONENTBUILDER_HELP_DOCUMENT_SAVE_WARNING="Alias already existed so a numb
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SELECT_AN_OPTION="Select an option"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE="Site"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW="Site View"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW_DESCRIPTION="Select the view being targeted"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW_DESCRIPTION="Select the view being target."
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW_LABEL="Site Views"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_SOME="Some"
|
||||
COM_COMPONENTBUILDER_HELP_DOCUMENT_STATUS="Status"
|
||||
@ -2637,7 +2669,12 @@ COM_COMPONENTBUILDER_LAYOUT_VERSION_LABEL="Revision"
|
||||
COM_COMPONENTBUILDER_LAYOUT_YES="Yes"
|
||||
COM_COMPONENTBUILDER_LICENSE="License"
|
||||
COM_COMPONENTBUILDER_NEW="New"
|
||||
COM_COMPONENTBUILDER_NEW_ISSUE="New Issue"
|
||||
COM_COMPONENTBUILDER_NO_ACCESS_GRANTED="No Access Granted!"
|
||||
COM_COMPONENTBUILDER_OPENED_BY="opened by"
|
||||
COM_COMPONENTBUILDER_PLEASE_CHECK_AGAIN_LATTER="Please check again latter."
|
||||
COM_COMPONENTBUILDER_RESPOND_TO_THIS_ISSUE_ON_GITHUB="Respond to this issue on Github"
|
||||
COM_COMPONENTBUILDER_REVIEW_THIS_ISSUE_ON_GITHUB="Review this issue on Github"
|
||||
COM_COMPONENTBUILDER_SAVE_SUCCESS="Great! Item successfully saved."
|
||||
COM_COMPONENTBUILDER_SAVE_WARNING="The value already existed so please select another."
|
||||
COM_COMPONENTBUILDER_SITE_VIEW="Site View"
|
||||
@ -3285,7 +3322,11 @@ COM_COMPONENTBUILDER_TEMPLATE_TEMPLATE_LABEL="Template"
|
||||
COM_COMPONENTBUILDER_TEMPLATE_VERSION_DESC="A count of the number of times this Template has been revised."
|
||||
COM_COMPONENTBUILDER_TEMPLATE_VERSION_LABEL="Revision"
|
||||
COM_COMPONENTBUILDER_TEMPLATE_YES="Yes"
|
||||
COM_COMPONENTBUILDER_THE_NOTICE_BOARD_IS_LOADING="The notice board is loading"
|
||||
COM_COMPONENTBUILDER_THE_README_IS_LOADING="The readme is loading"
|
||||
COM_COMPONENTBUILDER_THE_WIKI_IS_LOADING="The wiki is loading"
|
||||
COM_COMPONENTBUILDER_USE_BATCH="Use Batch"
|
||||
COM_COMPONENTBUILDER_USE_BATCH_DESC=" Allows users in this group to use batch copy/update method."
|
||||
COM_COMPONENTBUILDER_VERSION="Version"
|
||||
COM_COMPONENTBUILDER_VIEW_MORE_ISSUES_ON_GITHUB="View more issues on Github"
|
||||
COM_COMPONENTBUILDER_WEBSITE="Website"
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage css_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_buttons_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_buttons_left.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage custom_import_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage fields_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
@ -29,7 +28,7 @@
|
||||
defined('_JEXEC') or die('Restricted access');
|
||||
|
||||
// set the defaults
|
||||
$items = $displayData->vxkfields;
|
||||
$items = $displayData->vxpfields;
|
||||
$user = JFactory::getUser();
|
||||
$id = $displayData->item->id;
|
||||
$edit = "index.php?option=com_componentbuilder&view=fields&task=field.edit";
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage javascript_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
@ -10,13 +10,12 @@
|
||||
|_|
|
||||
/-------------------------------------------------------------------------------------------------------------------------------/
|
||||
|
||||
@version 2.1.21
|
||||
@build 11th September, 2016
|
||||
@version 2.2.0
|
||||
@build 23rd October, 2016
|
||||
@created 30th April, 2015
|
||||
@package Component Builder
|
||||
@subpackage mysql_fullwidth.php
|
||||
@author Llewellyn van der Merwe <https://www.vdm.io/joomla-component-builder>
|
||||
@my wife Roline van der Merwe <http://www.vdm.io/>
|
||||
@copyright Copyright (C) 2015. All Rights Reserved
|
||||
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user