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,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
|
+
}
|