bixbite 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,130 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Cache_APC
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* APC-based cache class for Minify
|
9
|
+
*
|
10
|
+
* <code>
|
11
|
+
* Minify::setCache(new Minify_Cache_APC());
|
12
|
+
* </code>
|
13
|
+
*
|
14
|
+
* @package Minify
|
15
|
+
* @author Chris Edwards
|
16
|
+
**/
|
17
|
+
class Minify_Cache_APC {
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Create a Minify_Cache_APC object, to be passed to
|
21
|
+
* Minify::setCache().
|
22
|
+
*
|
23
|
+
*
|
24
|
+
* @param int $expire seconds until expiration (default = 0
|
25
|
+
* meaning the item will not get an expiration date)
|
26
|
+
*
|
27
|
+
* @return null
|
28
|
+
*/
|
29
|
+
public function __construct($expire = 0)
|
30
|
+
{
|
31
|
+
$this->_exp = $expire;
|
32
|
+
}
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Write data to cache.
|
36
|
+
*
|
37
|
+
* @param string $id cache id
|
38
|
+
*
|
39
|
+
* @param string $data
|
40
|
+
*
|
41
|
+
* @return bool success
|
42
|
+
*/
|
43
|
+
public function store($id, $data)
|
44
|
+
{
|
45
|
+
return apc_store($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp);
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Get the size of a cache entry
|
50
|
+
*
|
51
|
+
* @param string $id cache id
|
52
|
+
*
|
53
|
+
* @return int size in bytes
|
54
|
+
*/
|
55
|
+
public function getSize($id)
|
56
|
+
{
|
57
|
+
return $this->_fetch($id)
|
58
|
+
? strlen($this->_data)
|
59
|
+
: false;
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Does a valid cache entry exist?
|
64
|
+
*
|
65
|
+
* @param string $id cache id
|
66
|
+
*
|
67
|
+
* @param int $srcMtime mtime of the original source file(s)
|
68
|
+
*
|
69
|
+
* @return bool exists
|
70
|
+
*/
|
71
|
+
public function isValid($id, $srcMtime)
|
72
|
+
{
|
73
|
+
return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Send the cached content to output
|
78
|
+
*
|
79
|
+
* @param string $id cache id
|
80
|
+
*/
|
81
|
+
public function display($id)
|
82
|
+
{
|
83
|
+
echo $this->_fetch($id)
|
84
|
+
? $this->_data
|
85
|
+
: '';
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Fetch the cached content
|
90
|
+
*
|
91
|
+
* @param string $id cache id
|
92
|
+
*
|
93
|
+
* @return string
|
94
|
+
*/
|
95
|
+
public function fetch($id)
|
96
|
+
{
|
97
|
+
return $this->_fetch($id)
|
98
|
+
? $this->_data
|
99
|
+
: '';
|
100
|
+
}
|
101
|
+
|
102
|
+
private $_exp = null;
|
103
|
+
|
104
|
+
// cache of most recently fetched id
|
105
|
+
private $_lm = null;
|
106
|
+
private $_data = null;
|
107
|
+
private $_id = null;
|
108
|
+
|
109
|
+
/**
|
110
|
+
* Fetch data and timestamp from apc, store in instance
|
111
|
+
*
|
112
|
+
* @param string $id
|
113
|
+
*
|
114
|
+
* @return bool success
|
115
|
+
*/
|
116
|
+
private function _fetch($id)
|
117
|
+
{
|
118
|
+
if ($this->_id === $id) {
|
119
|
+
return true;
|
120
|
+
}
|
121
|
+
$ret = apc_fetch($id);
|
122
|
+
if (false === $ret) {
|
123
|
+
$this->_id = null;
|
124
|
+
return false;
|
125
|
+
}
|
126
|
+
list($this->_lm, $this->_data) = explode('|', $ret, 2);
|
127
|
+
$this->_id = $id;
|
128
|
+
return true;
|
129
|
+
}
|
130
|
+
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Cache_File
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
class Minify_Cache_File {
|
8
|
+
|
9
|
+
public function __construct($path = '', $fileLocking = false)
|
10
|
+
{
|
11
|
+
if (! $path) {
|
12
|
+
require_once 'Solar/Dir.php';
|
13
|
+
$path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR);
|
14
|
+
}
|
15
|
+
$this->_locking = $fileLocking;
|
16
|
+
$this->_path = $path;
|
17
|
+
}
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Write data to cache.
|
21
|
+
*
|
22
|
+
* @param string $id cache id (e.g. a filename)
|
23
|
+
*
|
24
|
+
* @param string $data
|
25
|
+
*
|
26
|
+
* @return bool success
|
27
|
+
*/
|
28
|
+
public function store($id, $data)
|
29
|
+
{
|
30
|
+
$flag = $this->_locking
|
31
|
+
? LOCK_EX
|
32
|
+
: null;
|
33
|
+
if (is_file($this->_path . '/' . $id)) {
|
34
|
+
@unlink($this->_path . '/' . $id);
|
35
|
+
}
|
36
|
+
if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
|
37
|
+
return false;
|
38
|
+
}
|
39
|
+
// write control
|
40
|
+
if ($data !== $this->fetch($id)) {
|
41
|
+
@unlink($file);
|
42
|
+
return false;
|
43
|
+
}
|
44
|
+
return true;
|
45
|
+
}
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Get the size of a cache entry
|
49
|
+
*
|
50
|
+
* @param string $id cache id (e.g. a filename)
|
51
|
+
*
|
52
|
+
* @return int size in bytes
|
53
|
+
*/
|
54
|
+
public function getSize($id)
|
55
|
+
{
|
56
|
+
return filesize($this->_path . '/' . $id);
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Does a valid cache entry exist?
|
61
|
+
*
|
62
|
+
* @param string $id cache id (e.g. a filename)
|
63
|
+
*
|
64
|
+
* @param int $srcMtime mtime of the original source file(s)
|
65
|
+
*
|
66
|
+
* @return bool exists
|
67
|
+
*/
|
68
|
+
public function isValid($id, $srcMtime)
|
69
|
+
{
|
70
|
+
$file = $this->_path . '/' . $id;
|
71
|
+
return (is_file($file) && (filemtime($file) >= $srcMtime));
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Send the cached content to output
|
76
|
+
*
|
77
|
+
* @param string $id cache id (e.g. a filename)
|
78
|
+
*/
|
79
|
+
public function display($id)
|
80
|
+
{
|
81
|
+
if ($this->_locking) {
|
82
|
+
$fp = fopen($this->_path . '/' . $id, 'rb');
|
83
|
+
flock($fp, LOCK_SH);
|
84
|
+
fpassthru($fp);
|
85
|
+
flock($fp, LOCK_UN);
|
86
|
+
fclose($fp);
|
87
|
+
} else {
|
88
|
+
readfile($this->_path . '/' . $id);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* Fetch the cached content
|
94
|
+
*
|
95
|
+
* @param string $id cache id (e.g. a filename)
|
96
|
+
*
|
97
|
+
* @return string
|
98
|
+
*/
|
99
|
+
public function fetch($id)
|
100
|
+
{
|
101
|
+
if ($this->_locking) {
|
102
|
+
$fp = fopen($this->_path . '/' . $id, 'rb');
|
103
|
+
flock($fp, LOCK_SH);
|
104
|
+
$ret = stream_get_contents($fp);
|
105
|
+
flock($fp, LOCK_UN);
|
106
|
+
fclose($fp);
|
107
|
+
return $ret;
|
108
|
+
} else {
|
109
|
+
return file_get_contents($this->_path . '/' . $id);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
/**
|
114
|
+
* Fetch the cache path used
|
115
|
+
*
|
116
|
+
* @return string
|
117
|
+
*/
|
118
|
+
public function getPath()
|
119
|
+
{
|
120
|
+
return $this->_path;
|
121
|
+
}
|
122
|
+
|
123
|
+
private $_path = null;
|
124
|
+
private $_locking = null;
|
125
|
+
}
|
@@ -0,0 +1,137 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_Cache_Memcache
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Memcache-based cache class for Minify
|
9
|
+
*
|
10
|
+
* <code>
|
11
|
+
* // fall back to disk caching if memcache can't connect
|
12
|
+
* $memcache = new Memcache;
|
13
|
+
* if ($memcache->connect('localhost', 11211)) {
|
14
|
+
* Minify::setCache(new Minify_Cache_Memcache($memcache));
|
15
|
+
* } else {
|
16
|
+
* Minify::setCache();
|
17
|
+
* }
|
18
|
+
* </code>
|
19
|
+
**/
|
20
|
+
class Minify_Cache_Memcache {
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Create a Minify_Cache_Memcache object, to be passed to
|
24
|
+
* Minify::setCache().
|
25
|
+
*
|
26
|
+
* @param Memcache $memcache already-connected instance
|
27
|
+
*
|
28
|
+
* @param int $expire seconds until expiration (default = 0
|
29
|
+
* meaning the item will not get an expiration date)
|
30
|
+
*
|
31
|
+
* @return null
|
32
|
+
*/
|
33
|
+
public function __construct($memcache, $expire = 0)
|
34
|
+
{
|
35
|
+
$this->_mc = $memcache;
|
36
|
+
$this->_exp = $expire;
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Write data to cache.
|
41
|
+
*
|
42
|
+
* @param string $id cache id
|
43
|
+
*
|
44
|
+
* @param string $data
|
45
|
+
*
|
46
|
+
* @return bool success
|
47
|
+
*/
|
48
|
+
public function store($id, $data)
|
49
|
+
{
|
50
|
+
return $this->_mc->set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", 0, $this->_exp);
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Get the size of a cache entry
|
56
|
+
*
|
57
|
+
* @param string $id cache id
|
58
|
+
*
|
59
|
+
* @return int size in bytes
|
60
|
+
*/
|
61
|
+
public function getSize($id)
|
62
|
+
{
|
63
|
+
return $this->_fetch($id)
|
64
|
+
? strlen($this->_data)
|
65
|
+
: false;
|
66
|
+
}
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Does a valid cache entry exist?
|
70
|
+
*
|
71
|
+
* @param string $id cache id
|
72
|
+
*
|
73
|
+
* @param int $srcMtime mtime of the original source file(s)
|
74
|
+
*
|
75
|
+
* @return bool exists
|
76
|
+
*/
|
77
|
+
public function isValid($id, $srcMtime)
|
78
|
+
{
|
79
|
+
return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Send the cached content to output
|
84
|
+
*
|
85
|
+
* @param string $id cache id
|
86
|
+
*/
|
87
|
+
public function display($id)
|
88
|
+
{
|
89
|
+
echo $this->_fetch($id)
|
90
|
+
? $this->_data
|
91
|
+
: '';
|
92
|
+
}
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Fetch the cached content
|
96
|
+
*
|
97
|
+
* @param string $id cache id
|
98
|
+
*
|
99
|
+
* @return string
|
100
|
+
*/
|
101
|
+
public function fetch($id)
|
102
|
+
{
|
103
|
+
return $this->_fetch($id)
|
104
|
+
? $this->_data
|
105
|
+
: '';
|
106
|
+
}
|
107
|
+
|
108
|
+
private $_mc = null;
|
109
|
+
private $_exp = null;
|
110
|
+
|
111
|
+
// cache of most recently fetched id
|
112
|
+
private $_lm = null;
|
113
|
+
private $_data = null;
|
114
|
+
private $_id = null;
|
115
|
+
|
116
|
+
/**
|
117
|
+
* Fetch data and timestamp from memcache, store in instance
|
118
|
+
*
|
119
|
+
* @param string $id
|
120
|
+
*
|
121
|
+
* @return bool success
|
122
|
+
*/
|
123
|
+
private function _fetch($id)
|
124
|
+
{
|
125
|
+
if ($this->_id === $id) {
|
126
|
+
return true;
|
127
|
+
}
|
128
|
+
$ret = $this->_mc->get($id);
|
129
|
+
if (false === $ret) {
|
130
|
+
$this->_id = null;
|
131
|
+
return false;
|
132
|
+
}
|
133
|
+
list($this->_lm, $this->_data) = explode('|', $ret, 2);
|
134
|
+
$this->_id = $id;
|
135
|
+
return true;
|
136
|
+
}
|
137
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* Class Minify_ClosureCompiler
|
4
|
+
* @package Minify
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Compress Javascript using the Google Closure Compiler
|
9
|
+
*
|
10
|
+
* You must set $jarFile and $tempDir before calling the minify functions.
|
11
|
+
* Also, depending on your shell's environment, you may need to specify
|
12
|
+
* the full path to java in $javaExecutable or use putenv() to setup the
|
13
|
+
* Java environment.
|
14
|
+
*
|
15
|
+
* <code>
|
16
|
+
* Minify_ClosureCompiler::$jarFile = '/path/to/yuicompressor-2.3.5.jar';
|
17
|
+
* Minify_ClosureCompiler::$tempDir = '/tmp';
|
18
|
+
* $code = Minify_ClosureCompiler::minifyJs(
|
19
|
+
* $code
|
20
|
+
* ,array('nomunge' => true, 'line-break' => 1000)
|
21
|
+
* );
|
22
|
+
* </code>
|
23
|
+
*
|
24
|
+
* @package Minify
|
25
|
+
* @author Richard Herrera <rich@doctyper.com>
|
26
|
+
*/
|
27
|
+
class Minify_ClosureCompiler {
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Filepath of the Closure Compiler jar file. This must be set before
|
31
|
+
* calling minifyJs()
|
32
|
+
*
|
33
|
+
* @var string
|
34
|
+
*/
|
35
|
+
public static $jarFile = null;
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Writable temp directory. This must be set before calling minifyJs()
|
39
|
+
*
|
40
|
+
* @var string
|
41
|
+
*/
|
42
|
+
public static $tempDir = null;
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Filepath of "java" executable (may be needed if not in shell's PATH)
|
46
|
+
*
|
47
|
+
* @var string
|
48
|
+
*/
|
49
|
+
public static $javaExecutable = 'java';
|
50
|
+
|
51
|
+
/**
|
52
|
+
* Minify a Javascript string
|
53
|
+
*
|
54
|
+
* @param string $content
|
55
|
+
*
|
56
|
+
* @param array $options (verbose is ignored)
|
57
|
+
*
|
58
|
+
* @return string
|
59
|
+
*/
|
60
|
+
public static function minifyJs($content, $options = array())
|
61
|
+
{
|
62
|
+
self::_prepare();
|
63
|
+
if (!($tmpFile = tempnam(self::$tempDir, 'gc_'))) {
|
64
|
+
throw new Exception('Minify_ClosureCompiler : could not create temp file.');
|
65
|
+
}
|
66
|
+
file_put_contents($tmpFile, $content);
|
67
|
+
$output = exec(self::_getCmd($options, $tmpFile));
|
68
|
+
exec(self::_getCmd($options, $tmpFile), $output);
|
69
|
+
unlink($tmpFile);
|
70
|
+
return implode("", $output);
|
71
|
+
}
|
72
|
+
|
73
|
+
private static function _getCmd($userOptions, $tmpFile)
|
74
|
+
{
|
75
|
+
$cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile);
|
76
|
+
return $cmd . ' --js ' . escapeshellarg($tmpFile);
|
77
|
+
}
|
78
|
+
|
79
|
+
private static function _prepare()
|
80
|
+
{
|
81
|
+
if (!is_file(self::$jarFile) || !is_dir(self::$tempDir) || !is_writable(self::$tempDir)) {
|
82
|
+
throw new Exception('Minify_ClosureCompiler : $jarFile and $tempDir must be set.');
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|