bixbite 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README.markdown +49 -0
- data/VERSION +1 -0
- data/bin/bixbite +73 -0
- data/lib/bixbite.rb +13 -0
- data/lib/bixbite/command.rb +14 -0
- data/lib/bixbite/create.rb +76 -0
- data/template/Rakefile +25 -0
- data/template/assets/bixbite/Rakefile.rb +297 -0
- data/template/assets/naturaldocs/NaturalDocs/Config/Languages.txt +286 -0
- data/template/assets/naturaldocs/NaturalDocs/Config/Topics.txt +382 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/customizinglanguages.html +52 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/customizingtopics.html +74 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/documenting.html +58 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/documenting/reference.html +146 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/documenting/walkthrough.html +180 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/example/Default.css +528 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/example/NaturalDocs.js +204 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/examples.css +90 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/background.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/leftside.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/logo.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbody.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbodybg.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overleftmargin.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenu.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenubg.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/header/rightside.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/logo.gif +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/about.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/background.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomleft.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomright.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/community.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/customizing.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/using.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/index.html +9 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/javascript/BrowserStyles.js +77 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/javascript/PNGHandling.js +72 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/keywords.html +38 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/languages.html +32 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/menu.html +79 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/output.html +84 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/running.html +40 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/styles.css +290 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/styles.html +52 -0
- data/template/assets/naturaldocs/NaturalDocs/Help/troubleshooting.html +18 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/CSSGuide.txt +947 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/File Parsing.txt +83 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/HTMLTestCases.pm +269 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/Languages.txt +107 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/NDMarkup.txt +91 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/Symbol Management.txt +59 -0
- data/template/assets/naturaldocs/NaturalDocs/Info/images/Logo.png +0 -0
- data/template/assets/naturaldocs/NaturalDocs/JavaScript/NaturalDocs.js +836 -0
- data/template/assets/naturaldocs/NaturalDocs/License-GPL.txt +341 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/BinaryFile.pm +294 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder.pm +280 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/Base.pm +348 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/FramedHTML.pm +345 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTML.pm +398 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTMLBase.pm +3693 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy.pm +860 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/Class.pm +412 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/File.pm +157 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ConfigFile.pm +497 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Constants.pm +165 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/DefineMembers.pm +100 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Error.pm +305 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/File.pm +540 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable.pm +383 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/Reference.pm +44 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/String.pm +110 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages.pm +1475 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/ActionScript.pm +1473 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Ada.pm +38 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced.pm +828 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/Scope.pm +95 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/ScopeChange.pm +70 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Base.pm +832 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/CSharp.pm +1484 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/PLSQL.pm +319 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Pascal.pm +143 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Perl.pm +1370 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype.pm +92 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype/Parameter.pm +87 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Simple.pm +503 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Tcl.pm +219 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu.pm +3406 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu/Entry.pm +201 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/NDMarkup.pm +76 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser.pm +1331 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/JavaDoc.pm +464 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/Native.pm +1060 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/ParsedTopic.pm +253 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project.pm +1402 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/ImageFile.pm +160 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/SourceFile.pm +113 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ReferenceString.pm +334 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings.pm +1418 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings/BuildTarget.pm +66 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB.pm +678 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Extension.pm +84 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/File.pm +129 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Item.pm +201 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/ItemDefinition.pm +45 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm +159 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/StatusMessage.pm +102 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolString.pm +212 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable.pm +1984 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/File.pm +186 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/IndexElement.pm +522 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Reference.pm +273 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/ReferenceTarget.pm +97 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Symbol.pm +428 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/SymbolDefinition.pm +96 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics.pm +1319 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics/Type.pm +151 -0
- data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Version.pm +384 -0
- data/template/assets/naturaldocs/NaturalDocs/NaturalDocs +400 -0
- data/template/assets/naturaldocs/NaturalDocs/NaturalDocs.bat +17 -0
- data/template/assets/naturaldocs/NaturalDocs/Styles/Default.css +767 -0
- data/template/assets/naturaldocs/NaturalDocs/Styles/Roman.css +765 -0
- data/template/assets/naturaldocs/NaturalDocs/Styles/Small.css +763 -0
- data/template/assets/utilities/pngout +0 -0
- data/template/deploy/public_html/.htaccess +0 -0
- data/template/documentation/js/.htaccess +0 -0
- data/template/src/html/.htaccess +76 -0
- data/template/src/html/css/cmn/global.css +96 -0
- data/template/src/html/css/cmn/ie.css +15 -0
- data/template/src/html/css/cmn/ie6.css +15 -0
- data/template/src/html/images/cmn/.htaccess +0 -0
- data/template/src/html/images/tmp/.htaccess +0 -0
- data/template/src/html/includes/debug.inc +5 -0
- data/template/src/html/includes/footer.inc +52 -0
- data/template/src/html/includes/header.inc +61 -0
- data/template/src/html/includes/html.inc +3 -0
- data/template/src/html/includes/namespace.inc +19 -0
- data/template/src/html/includes/page.inc +151 -0
- data/template/src/html/index.html +35 -0
- data/template/src/html/js/cmn/bootstrap.js +74 -0
- data/template/src/html/js/cmn/global.js +142 -0
- data/template/src/html/js/cmn/lib/LAB.js +348 -0
- data/template/src/html/min/.htaccess +4 -0
- data/template/src/html/min/MinifyCLI.php +19 -0
- data/template/src/html/min/README.txt +132 -0
- data/template/src/html/min/builder/_index.js +242 -0
- data/template/src/html/min/builder/bm.js +36 -0
- data/template/src/html/min/builder/index.php +182 -0
- data/template/src/html/min/builder/ocCheck.php +36 -0
- data/template/src/html/min/builder/rewriteTest.js +1 -0
- data/template/src/html/min/config.php +187 -0
- data/template/src/html/min/groupsConfig.php +34 -0
- data/template/src/html/min/index.php +66 -0
- data/template/src/html/min/lib/FirePHP.php +1370 -0
- data/template/src/html/min/lib/HTTP/ConditionalGet.php +348 -0
- data/template/src/html/min/lib/HTTP/Encoder.php +326 -0
- data/template/src/html/min/lib/JSMin.php +314 -0
- data/template/src/html/min/lib/JSMinPlus.php +1872 -0
- data/template/src/html/min/lib/Minify.php +532 -0
- data/template/src/html/min/lib/Minify/Build.php +103 -0
- data/template/src/html/min/lib/Minify/CSS.php +83 -0
- data/template/src/html/min/lib/Minify/CSS/Compressor.php +250 -0
- data/template/src/html/min/lib/Minify/CSS/UriRewriter.php +270 -0
- data/template/src/html/min/lib/Minify/Cache/APC.php +130 -0
- data/template/src/html/min/lib/Minify/Cache/File.php +125 -0
- data/template/src/html/min/lib/Minify/Cache/Memcache.php +137 -0
- data/template/src/html/min/lib/Minify/ClosureCompiler.php +85 -0
- data/template/src/html/min/lib/Minify/CommentPreserver.php +90 -0
- data/template/src/html/min/lib/Minify/Controller/Base.php +202 -0
- data/template/src/html/min/lib/Minify/Controller/Files.php +78 -0
- data/template/src/html/min/lib/Minify/Controller/Groups.php +94 -0
- data/template/src/html/min/lib/Minify/Controller/MinApp.php +132 -0
- data/template/src/html/min/lib/Minify/Controller/Page.php +82 -0
- data/template/src/html/min/lib/Minify/Controller/Version1.php +118 -0
- data/template/src/html/min/lib/Minify/HTML.php +245 -0
- data/template/src/html/min/lib/Minify/ImportProcessor.php +157 -0
- data/template/src/html/min/lib/Minify/Lines.php +131 -0
- data/template/src/html/min/lib/Minify/Logger.php +45 -0
- data/template/src/html/min/lib/Minify/Packer.php +37 -0
- data/template/src/html/min/lib/Minify/Source.php +187 -0
- data/template/src/html/min/lib/Minify/YUICompressor.php +139 -0
- data/template/src/html/min/lib/Solar/Dir.php +199 -0
- data/template/src/html/min/lib/closure-compiler.jar +0 -0
- data/template/src/html/min/lib/yuicompressor-2.4.2.jar +0 -0
- data/template/src/html/min/utils.php +90 -0
- data/template/src/templates/css/template.css +7 -0
- data/template/src/templates/js/template.js +72 -0
- data/template/src/templates/template.html +18 -0
- data/template/src/yaml/config.yml +46 -0
- data/template/src/yaml/deploy.yml +35 -0
- data/test/bixbite_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +278 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_CommentPreserver
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Process a string in pieces preserving C-style comments that begin with "/*!"
|
9
|
+
*
|
10
|
+
* @package Minify
|
11
|
+
* @author Stephen Clay <steve@mrclay.org>
|
12
|
+
*/
|
13
|
+
class Minify_CommentPreserver {
|
14
|
+
|
15
|
+
/**
|
16
|
+
* String to be prepended to each preserved comment
|
17
|
+
*
|
18
|
+
* @var string
|
19
|
+
*/
|
20
|
+
public static $prepend = "\n";
|
21
|
+
|
22
|
+
/**
|
23
|
+
* String to be appended to each preserved comment
|
24
|
+
*
|
25
|
+
* @var string
|
26
|
+
*/
|
27
|
+
public static $append = "\n";
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Process a string outside of C-style comments that begin with "/*!"
|
31
|
+
*
|
32
|
+
* On each non-empty string outside these comments, the given processor
|
33
|
+
* function will be called. The first "!" will be removed from the
|
34
|
+
* preserved comments, and the comments will be surrounded by
|
35
|
+
* Minify_CommentPreserver::$preprend and Minify_CommentPreserver::$append.
|
36
|
+
*
|
37
|
+
* @param string $content
|
38
|
+
* @param callback $processor function
|
39
|
+
* @param array $args array of extra arguments to pass to the processor
|
40
|
+
* function (default = array())
|
41
|
+
* @return string
|
42
|
+
*/
|
43
|
+
public static function process($content, $processor, $args = array())
|
44
|
+
{
|
45
|
+
$ret = '';
|
46
|
+
while (true) {
|
47
|
+
list($beforeComment, $comment, $afterComment) = self::_nextComment($content);
|
48
|
+
if ('' !== $beforeComment) {
|
49
|
+
$callArgs = $args;
|
50
|
+
array_unshift($callArgs, $beforeComment);
|
51
|
+
$ret .= call_user_func_array($processor, $callArgs);
|
52
|
+
}
|
53
|
+
if (false === $comment) {
|
54
|
+
break;
|
55
|
+
}
|
56
|
+
$ret .= $comment;
|
57
|
+
$content = $afterComment;
|
58
|
+
}
|
59
|
+
return $ret;
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Extract comments that YUI Compressor preserves.
|
64
|
+
*
|
65
|
+
* @param string $in input
|
66
|
+
*
|
67
|
+
* @return array 3 elements are returned. If a YUI comment is found, the
|
68
|
+
* 2nd element is the comment and the 1st and 2nd are the surrounding
|
69
|
+
* strings. If no comment is found, the entire string is returned as the
|
70
|
+
* 1st element and the other two are false.
|
71
|
+
*/
|
72
|
+
private static function _nextComment($in)
|
73
|
+
{
|
74
|
+
if (
|
75
|
+
false === ($start = strpos($in, '/*!'))
|
76
|
+
|| false === ($end = strpos($in, '*/', $start + 3))
|
77
|
+
) {
|
78
|
+
return array($in, false, false);
|
79
|
+
}
|
80
|
+
$ret = array(
|
81
|
+
substr($in, 0, $start)
|
82
|
+
,self::$prepend . '/*' . substr($in, $start + 3, $end - $start - 1) . self::$append
|
83
|
+
);
|
84
|
+
$endChars = (strlen($in) - $end - 2);
|
85
|
+
$ret[] = (0 === $endChars)
|
86
|
+
? ''
|
87
|
+
: substr($in, -$endChars);
|
88
|
+
return $ret;
|
89
|
+
}
|
90
|
+
}
|
@@ -0,0 +1,202 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Controller_Base
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Base class for Minify controller
|
9
|
+
*
|
10
|
+
* The controller class validates a request and uses it to create sources
|
11
|
+
* for minification and set options like contentType. It's also responsible
|
12
|
+
* for loading minifier code upon request.
|
13
|
+
*
|
14
|
+
* @package Minify
|
15
|
+
* @author Stephen Clay <steve@mrclay.org>
|
16
|
+
*/
|
17
|
+
abstract class Minify_Controller_Base {
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Setup controller sources and set an needed options for Minify::source
|
21
|
+
*
|
22
|
+
* You must override this method in your subclass controller to set
|
23
|
+
* $this->sources. If the request is NOT valid, make sure $this->sources
|
24
|
+
* is left an empty array. Then strip any controller-specific options from
|
25
|
+
* $options and return it. To serve files, $this->sources must be an array of
|
26
|
+
* Minify_Source objects.
|
27
|
+
*
|
28
|
+
* @param array $options controller and Minify options
|
29
|
+
*
|
30
|
+
* return array $options Minify::serve options
|
31
|
+
*/
|
32
|
+
abstract public function setupSources($options);
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Get default Minify options for this controller.
|
36
|
+
*
|
37
|
+
* Override in subclass to change defaults
|
38
|
+
*
|
39
|
+
* @return array options for Minify
|
40
|
+
*/
|
41
|
+
public function getDefaultMinifyOptions() {
|
42
|
+
return array(
|
43
|
+
'isPublic' => true
|
44
|
+
,'encodeOutput' => function_exists('gzdeflate')
|
45
|
+
,'encodeMethod' => null // determine later
|
46
|
+
,'encodeLevel' => 9
|
47
|
+
,'minifierOptions' => array() // no minifier options
|
48
|
+
,'contentTypeCharset' => 'utf-8'
|
49
|
+
,'maxAge' => 1800 // 30 minutes
|
50
|
+
,'rewriteCssUris' => true
|
51
|
+
,'bubbleCssImports' => false
|
52
|
+
,'quiet' => false // serve() will send headers and output
|
53
|
+
,'debug' => false
|
54
|
+
|
55
|
+
// if you override this, the response code MUST be directly after
|
56
|
+
// the first space.
|
57
|
+
,'badRequestHeader' => 'HTTP/1.0 400 Bad Request'
|
58
|
+
|
59
|
+
// callback function to see/modify content of all sources
|
60
|
+
,'postprocessor' => null
|
61
|
+
// file to require to load preprocessor
|
62
|
+
,'postprocessorRequire' => null
|
63
|
+
);
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Get default minifiers for this controller.
|
68
|
+
*
|
69
|
+
* Override in subclass to change defaults
|
70
|
+
*
|
71
|
+
* @return array minifier callbacks for common types
|
72
|
+
*/
|
73
|
+
public function getDefaultMinifers() {
|
74
|
+
$ret[Minify::TYPE_JS] = array('JSMin', 'minify');
|
75
|
+
$ret[Minify::TYPE_CSS] = array('Minify_CSS', 'minify');
|
76
|
+
$ret[Minify::TYPE_HTML] = array('Minify_HTML', 'minify');
|
77
|
+
return $ret;
|
78
|
+
}
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Load any code necessary to execute the given minifier callback.
|
82
|
+
*
|
83
|
+
* The controller is responsible for loading minification code on demand
|
84
|
+
* via this method. This built-in function will only load classes for
|
85
|
+
* static method callbacks where the class isn't already defined. It uses
|
86
|
+
* the PEAR convention, so, given array('Jimmy_Minifier', 'minCss'), this
|
87
|
+
* function will include 'Jimmy/Minifier.php'.
|
88
|
+
*
|
89
|
+
* If you need code loaded on demand and this doesn't suit you, you'll need
|
90
|
+
* to override this function in your subclass.
|
91
|
+
* @see Minify_Controller_Page::loadMinifier()
|
92
|
+
*
|
93
|
+
* @param callback $minifierCallback callback of minifier function
|
94
|
+
*
|
95
|
+
* @return null
|
96
|
+
*/
|
97
|
+
public function loadMinifier($minifierCallback)
|
98
|
+
{
|
99
|
+
if (is_array($minifierCallback)
|
100
|
+
&& is_string($minifierCallback[0])
|
101
|
+
&& !class_exists($minifierCallback[0], false)) {
|
102
|
+
|
103
|
+
require str_replace('_', '/', $minifierCallback[0]) . '.php';
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* Is a user-given file within an allowable directory, existing,
|
109
|
+
* and having an extension js/css/html/txt ?
|
110
|
+
*
|
111
|
+
* This is a convenience function for controllers that have to accept
|
112
|
+
* user-given paths
|
113
|
+
*
|
114
|
+
* @param string $file full file path (already processed by realpath())
|
115
|
+
*
|
116
|
+
* @param array $safeDirs directories where files are safe to serve. Files can also
|
117
|
+
* be in subdirectories of these directories.
|
118
|
+
*
|
119
|
+
* @return bool file is safe
|
120
|
+
*/
|
121
|
+
public static function _fileIsSafe($file, $safeDirs)
|
122
|
+
{
|
123
|
+
$pathOk = false;
|
124
|
+
foreach ((array)$safeDirs as $safeDir) {
|
125
|
+
if (strpos($file, $safeDir) === 0) {
|
126
|
+
$pathOk = true;
|
127
|
+
break;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
$base = basename($file);
|
131
|
+
if (! $pathOk || ! is_file($file) || $base[0] === '.') {
|
132
|
+
return false;
|
133
|
+
}
|
134
|
+
list($revExt) = explode('.', strrev($base));
|
135
|
+
return in_array(strrev($revExt), array('js', 'css', 'html', 'txt'));
|
136
|
+
}
|
137
|
+
|
138
|
+
/**
|
139
|
+
* @var array instances of Minify_Source, which provide content and
|
140
|
+
* any individual minification needs.
|
141
|
+
*
|
142
|
+
* @see Minify_Source
|
143
|
+
*/
|
144
|
+
public $sources = array();
|
145
|
+
|
146
|
+
/**
|
147
|
+
* Mix in default controller options with user-given options
|
148
|
+
*
|
149
|
+
* @param array $options user options
|
150
|
+
*
|
151
|
+
* @return array mixed options
|
152
|
+
*/
|
153
|
+
public final function mixInDefaultOptions($options)
|
154
|
+
{
|
155
|
+
$ret = array_merge(
|
156
|
+
$this->getDefaultMinifyOptions(), $options
|
157
|
+
);
|
158
|
+
if (! isset($options['minifiers'])) {
|
159
|
+
$options['minifiers'] = array();
|
160
|
+
}
|
161
|
+
$ret['minifiers'] = array_merge(
|
162
|
+
$this->getDefaultMinifers(), $options['minifiers']
|
163
|
+
);
|
164
|
+
return $ret;
|
165
|
+
}
|
166
|
+
|
167
|
+
/**
|
168
|
+
* Analyze sources (if there are any) and set $options 'contentType'
|
169
|
+
* and 'lastModifiedTime' if they already aren't.
|
170
|
+
*
|
171
|
+
* @param array $options options for Minify
|
172
|
+
*
|
173
|
+
* @return array options for Minify
|
174
|
+
*/
|
175
|
+
public final function analyzeSources($options = array())
|
176
|
+
{
|
177
|
+
if ($this->sources) {
|
178
|
+
if (! isset($options['contentType'])) {
|
179
|
+
$options['contentType'] = Minify_Source::getContentType($this->sources);
|
180
|
+
}
|
181
|
+
// last modified is needed for caching, even if setExpires is set
|
182
|
+
if (! isset($options['lastModifiedTime'])) {
|
183
|
+
$max = 0;
|
184
|
+
foreach ($this->sources as $source) {
|
185
|
+
$max = max($source->lastModified, $max);
|
186
|
+
}
|
187
|
+
$options['lastModifiedTime'] = $max;
|
188
|
+
}
|
189
|
+
}
|
190
|
+
return $options;
|
191
|
+
}
|
192
|
+
|
193
|
+
/**
|
194
|
+
* Send message to the Minify logger
|
195
|
+
* @param string $msg
|
196
|
+
* @return null
|
197
|
+
*/
|
198
|
+
protected function log($msg) {
|
199
|
+
require_once 'Minify/Logger.php';
|
200
|
+
Minify_Logger::log($msg);
|
201
|
+
}
|
202
|
+
}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Controller_Files
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
require_once 'Minify/Controller/Base.php';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Controller class for minifying a set of files
|
11
|
+
*
|
12
|
+
* E.g. the following would serve the minified Javascript for a site
|
13
|
+
* <code>
|
14
|
+
* Minify::serve('Files', array(
|
15
|
+
* 'files' => array(
|
16
|
+
* '//js/jquery.js'
|
17
|
+
* ,'//js/plugins.js'
|
18
|
+
* ,'/home/username/file.js'
|
19
|
+
* )
|
20
|
+
* ));
|
21
|
+
* </code>
|
22
|
+
*
|
23
|
+
* As a shortcut, the controller will replace "//" at the beginning
|
24
|
+
* of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'.
|
25
|
+
*
|
26
|
+
* @package Minify
|
27
|
+
* @author Stephen Clay <steve@mrclay.org>
|
28
|
+
*/
|
29
|
+
class Minify_Controller_Files extends Minify_Controller_Base {
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Set up file sources
|
33
|
+
*
|
34
|
+
* @param array $options controller and Minify options
|
35
|
+
* @return array Minify options
|
36
|
+
*
|
37
|
+
* Controller options:
|
38
|
+
*
|
39
|
+
* 'files': (required) array of complete file paths, or a single path
|
40
|
+
*/
|
41
|
+
public function setupSources($options) {
|
42
|
+
// strip controller options
|
43
|
+
|
44
|
+
$files = $options['files'];
|
45
|
+
// if $files is a single object, casting will break it
|
46
|
+
if (is_object($files)) {
|
47
|
+
$files = array($files);
|
48
|
+
} elseif (! is_array($files)) {
|
49
|
+
$files = (array)$files;
|
50
|
+
}
|
51
|
+
unset($options['files']);
|
52
|
+
|
53
|
+
$sources = array();
|
54
|
+
foreach ($files as $file) {
|
55
|
+
if ($file instanceof Minify_Source) {
|
56
|
+
$sources[] = $file;
|
57
|
+
continue;
|
58
|
+
}
|
59
|
+
if (0 === strpos($file, '//')) {
|
60
|
+
$file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1);
|
61
|
+
}
|
62
|
+
$realPath = realpath($file);
|
63
|
+
if (is_file($realPath)) {
|
64
|
+
$sources[] = new Minify_Source(array(
|
65
|
+
'filepath' => $realPath
|
66
|
+
));
|
67
|
+
} else {
|
68
|
+
$this->log("The path \"{$file}\" could not be found (or was not a file)");
|
69
|
+
return $options;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
if ($sources) {
|
73
|
+
$this->sources = $sources;
|
74
|
+
}
|
75
|
+
return $options;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
@@ -0,0 +1,94 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Controller_Groups
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
require_once 'Minify/Controller/Base.php';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Controller class for serving predetermined groups of minimized sets, selected
|
11
|
+
* by PATH_INFO
|
12
|
+
*
|
13
|
+
* <code>
|
14
|
+
* Minify::serve('Groups', array(
|
15
|
+
* 'groups' => array(
|
16
|
+
* 'css' => array('//css/type.css', '//css/layout.css')
|
17
|
+
* ,'js' => array('//js/jquery.js', '//js/site.js')
|
18
|
+
* )
|
19
|
+
* ));
|
20
|
+
* </code>
|
21
|
+
*
|
22
|
+
* If the above code were placed in /serve.php, it would enable the URLs
|
23
|
+
* /serve.php/js and /serve.php/css
|
24
|
+
*
|
25
|
+
* As a shortcut, the controller will replace "//" at the beginning
|
26
|
+
* of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'.
|
27
|
+
*
|
28
|
+
* @package Minify
|
29
|
+
* @author Stephen Clay <steve@mrclay.org>
|
30
|
+
*/
|
31
|
+
class Minify_Controller_Groups extends Minify_Controller_Base {
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Set up groups of files as sources
|
35
|
+
*
|
36
|
+
* @param array $options controller and Minify options
|
37
|
+
* @return array Minify options
|
38
|
+
*
|
39
|
+
* Controller options:
|
40
|
+
*
|
41
|
+
* 'groups': (required) array mapping PATH_INFO strings to arrays
|
42
|
+
* of complete file paths. @see Minify_Controller_Groups
|
43
|
+
*/
|
44
|
+
public function setupSources($options) {
|
45
|
+
// strip controller options
|
46
|
+
$groups = $options['groups'];
|
47
|
+
unset($options['groups']);
|
48
|
+
|
49
|
+
// mod_fcgid places PATH_INFO in ORIG_PATH_INFO
|
50
|
+
$pi = isset($_SERVER['ORIG_PATH_INFO'])
|
51
|
+
? substr($_SERVER['ORIG_PATH_INFO'], 1)
|
52
|
+
: (isset($_SERVER['PATH_INFO'])
|
53
|
+
? substr($_SERVER['PATH_INFO'], 1)
|
54
|
+
: false
|
55
|
+
);
|
56
|
+
if (false === $pi || ! isset($groups[$pi])) {
|
57
|
+
// no PATH_INFO or not a valid group
|
58
|
+
$this->log("Missing PATH_INFO or no group set for \"$pi\"");
|
59
|
+
return $options;
|
60
|
+
}
|
61
|
+
$sources = array();
|
62
|
+
|
63
|
+
$files = $groups[$pi];
|
64
|
+
// if $files is a single object, casting will break it
|
65
|
+
if (is_object($files)) {
|
66
|
+
$files = array($files);
|
67
|
+
} elseif (! is_array($files)) {
|
68
|
+
$files = (array)$files;
|
69
|
+
}
|
70
|
+
foreach ($files as $file) {
|
71
|
+
if ($file instanceof Minify_Source) {
|
72
|
+
$sources[] = $file;
|
73
|
+
continue;
|
74
|
+
}
|
75
|
+
if (0 === strpos($file, '//')) {
|
76
|
+
$file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1);
|
77
|
+
}
|
78
|
+
$realPath = realpath($file);
|
79
|
+
if (is_file($realPath)) {
|
80
|
+
$sources[] = new Minify_Source(array(
|
81
|
+
'filepath' => $realPath
|
82
|
+
));
|
83
|
+
} else {
|
84
|
+
$this->log("The path \"{$file}\" could not be found (or was not a file)");
|
85
|
+
return $options;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
if ($sources) {
|
89
|
+
$this->sources = $sources;
|
90
|
+
}
|
91
|
+
return $options;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|