To explain my question, let me first point to this array:
<?php
$_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
)
);
?>
Whenever a JavaScript file is included, it is checked against this array for dependencies. All the dependencies for each file are then added to the final $includes
array. The problem comes when I add an include with dependencies and one of those dependencies also has its own dependencies, such as:
<?php
$_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
),
'/Script/UI/Calendar/Main.js' => array(
"/Scripting/jquery-ui.min.js",
"/Script/UI/Dialogs.js"
)
);
?>
As you can see, the added '/Script/UI/Calendar/Main.js'
depends on "/Script/UI/Dialogs.js"
which has its own dependencies.
I know that I would have to recursively check the dependency array and final includes array, but I can't seem to wrap my head around the logic. A little help here might be nice.
UPDATE
I wrapped everything in a class to illustrate its purpose (although the actual class is much more complicated and has various other include-handling functionality:
<?php
class Script_Depends {
private $_includes = array();
private $_depends = array(
'/Scripting/jquery.hyponiqs/jquery.dropdown.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js",
"/Scripting/jquery.externals/jquery.timers.js",
"/Scripting/jquery-ui.min.js",
"/Scripting/jquery.hyponiqs/hyponiqs.core.js",
),
'/Script/UI/Dialogs.js' => array(
"/Scripting/jquery.externals/jquery.resize.js",
"/Scripting/jquery.externals/jquery.topzindex.js"
),
'/Script/Display/List.js' => array(
"/Scripting/jquery.externals/jquery.timers.js"
),
'/Script/UI/Calendar/Main.js' => array(
"/Script/UI/Dialogs.js",
"/Scripting/jquery-ui.min.js"
)
);
public function includes($includes)
{
if (is_string($includes)) $includes = array($includes);
foreach ($includes as $include) {
if (isset($this->_depends[$include])) {
$this->_includes = $this->includes($this->_depends[$include]);
array_push($this->_includes, $include);
}
else {
array_push($this->_includes, $include);
}
}
$this->_includes = array_unique($this->_includes);
return $this->_includes;
}
}
?>