rsence-pre 2.1.0.1.pre
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/.yardopts +10 -0
- data/INSTALL.rdoc +330 -0
- data/LICENSE.txt +622 -0
- data/README.rdoc +98 -0
- data/VERSION +1 -0
- data/bin/rsence +25 -0
- data/bin/rsence-pre +25 -0
- data/conf/default_conf.yaml +346 -0
- data/conf/default_strings.yaml +76 -0
- data/conf/rsence_command_strings.yaml +444 -0
- data/docs/ExampleGuiPlugin.rdoc +193 -0
- data/docs/JavascriptBundles.rdoc +0 -0
- data/docs/PluginBundleInfo.rdoc +173 -0
- data/docs/PluginBundles.rdoc +96 -0
- data/docs/Values.rdoc +163 -0
- data/js/comm/autosync/autosync.js +17 -0
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/comm.js +203 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +112 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/queue/queue.js +184 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/session/session.js +52 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/transporter/transporter.js +261 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/urlresponder/urlresponder.js +149 -0
- data/js/comm/values/js.inc +0 -0
- data/js/comm/values/values.js +433 -0
- data/js/controls/button/button.js +72 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +49 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +84 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +109 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +40 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +44 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +43 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +357 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +41 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +213 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +280 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +24 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +374 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +154 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +62 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +286 -0
- data/js/core/class/class.js +318 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1383 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +153 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/core/rsence_ns/rsence_ns.js +21 -0
- data/js/datetime/calendar/calendar.js +198 -0
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/datetime/datetimevalue/datetimevalue.js +247 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/datetime/timesheet/timesheet.js +183 -0
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/datetime/timesheet_item/timesheet_item.js +248 -0
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/foundation/application/application.js +208 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +339 -0
- data/js/foundation/control/controldefaults/controldefaults.js +56 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +750 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valuematrix/valuematrix.js +135 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +79 -0
- data/js/foundation/eventmanager/eventmanager.js +991 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +651 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +246 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +381 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +393 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/value/value.js +183 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +114 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +237 -0
- data/js/foundation/view/view.js +1812 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
- data/js/lists/checkboxlist/checkboxlist.js +171 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/listitems/listitems.js +88 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +326 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/reloadapp/reloadapp.js +152 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/util/sha/sha.js +426 -0
- data/js/views/centerview/centerview.js +75 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +15 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +40 -0
- data/lib/conf/argv.rb +850 -0
- data/lib/conf/default.rb +219 -0
- data/lib/daemon/daemon.rb +387 -0
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +150 -0
- data/lib/http/rackup.rb +91 -0
- data/lib/http/request.rb +66 -0
- data/lib/http/response.rb +65 -0
- data/lib/plugins/dependencies.rb +285 -0
- data/lib/plugins/gui_plugin.rb +160 -0
- data/lib/plugins/guiparser.rb +123 -0
- data/lib/plugins/plugin.rb +438 -0
- data/lib/plugins/plugin_base.rb +162 -0
- data/lib/plugins/plugin_plugins.rb +81 -0
- data/lib/plugins/plugin_sqlite_db.rb +98 -0
- data/lib/plugins/pluginmanager.rb +635 -0
- data/lib/plugins/plugins.rb +169 -0
- data/lib/plugins/servlet.rb +108 -0
- data/lib/rsence.rb +32 -0
- data/lib/session/msg.rb +327 -0
- data/lib/session/sessionmanager.rb +522 -0
- data/lib/session/sessionstorage.rb +340 -0
- data/lib/transporter/transporter.rb +263 -0
- data/lib/util/gzstring.rb +9 -0
- data/lib/util/ruby19_fixes.rb +18 -0
- data/lib/values/hvalue.rb +378 -0
- data/lib/values/valuemanager.rb +172 -0
- data/plugins/client_pkg/client_pkg.rb +157 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +120 -0
- data/plugins/index_html/info.yaml +18 -0
- data/plugins/index_html/tmpl/index.html +15 -0
- data/plugins/main/info.yaml +18 -0
- data/plugins/main/js/main.js +84 -0
- data/plugins/main/main.rb +255 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticket/info.yaml +21 -0
- data/plugins/ticket/lib/common.rb +392 -0
- data/plugins/ticket/lib/favicon.rb +39 -0
- data/plugins/ticket/lib/file.rb +58 -0
- data/plugins/ticket/lib/img.rb +50 -0
- data/plugins/ticket/lib/objblob.rb +66 -0
- data/plugins/ticket/lib/rsrc.rb +34 -0
- data/plugins/ticket/lib/upload.rb +236 -0
- data/plugins/ticket/ticket.rb +333 -0
- data/setup/welcome/gui/welcome.yaml +92 -0
- data/setup/welcome/info.yaml +13 -0
- data/setup/welcome/text/welcome.html +9 -0
- data/setup/welcome/values.yaml +9 -0
- data/setup/welcome/welcome.rb +54 -0
- metadata +407 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
# The human-readable product name of the package
|
3
|
+
title: Client Resource Package
|
4
|
+
|
5
|
+
# The human-readable version of the package
|
6
|
+
version: 2.0.0
|
7
|
+
|
8
|
+
# A brief description of the package (rdoc formatting supported)
|
9
|
+
description: |
|
10
|
+
This Bundle contains:
|
11
|
+
- The ClientPkg Servlet for managing client builds and serving the results.
|
12
|
+
- The ClientPkgBuild class for doing the builds.
|
13
|
+
- The ClientPkgCache class for storing the build results.
|
14
|
+
- The ClientPkgServe module that handles the request handling.
|
15
|
+
|
16
|
+
# A flag (when false) prevents the plugin from automatically reload when changed.
|
17
|
+
reloadable: false
|
18
|
+
|
19
|
+
# System version requirement.
|
20
|
+
sys_version: '>= 2.0.0'
|
21
|
+
|
22
|
+
category: :system
|
23
|
+
|
24
|
+
depends_on: :core
|
25
|
+
|
@@ -0,0 +1,561 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2009 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
require 'jsmin_c'
|
11
|
+
require 'jscompress'
|
12
|
+
require 'html_min'
|
13
|
+
|
14
|
+
|
15
|
+
class ClientPkgBuild
|
16
|
+
|
17
|
+
def read_file( path )
|
18
|
+
filehandle = open( path, 'rb' )
|
19
|
+
filedata = filehandle.read
|
20
|
+
filehandle.close
|
21
|
+
return filedata
|
22
|
+
end
|
23
|
+
|
24
|
+
def gzip_string( string )
|
25
|
+
gz_string = GZString.new('')
|
26
|
+
gz_writer = Zlib::GzipWriter.new( gz_string, @gz_strategy )
|
27
|
+
gz_writer.write( string )
|
28
|
+
gz_writer.close
|
29
|
+
return gz_string
|
30
|
+
end
|
31
|
+
|
32
|
+
def read_css( src_path )
|
33
|
+
css_data = read_file( src_path )
|
34
|
+
unless @debug
|
35
|
+
unless @no_whitespace_removal
|
36
|
+
css_data = @html_min.minimize( css_data )
|
37
|
+
if @css_min
|
38
|
+
css_data = CSSMin.minify( css_data )
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
if @no_gzip
|
43
|
+
gz_css = false
|
44
|
+
else
|
45
|
+
gz_css = gzip_string( css_data )
|
46
|
+
end
|
47
|
+
return [css_data, gz_css]
|
48
|
+
end
|
49
|
+
|
50
|
+
def read_html( src_path )
|
51
|
+
html_data = read_file( src_path )
|
52
|
+
unless @debug
|
53
|
+
unless @no_whitespace_removal
|
54
|
+
html_data = @html_min.minimize( html_data )
|
55
|
+
end
|
56
|
+
end
|
57
|
+
if @no_gzip
|
58
|
+
gz_html = false
|
59
|
+
else
|
60
|
+
gz_html = gzip_string( html_data )
|
61
|
+
end
|
62
|
+
return [html_data, gz_html]
|
63
|
+
end
|
64
|
+
|
65
|
+
def read_gfx( src_path_theme, tgt_hash_gfx )
|
66
|
+
gfx_size = 0
|
67
|
+
src_files_gfx_path = File.join( src_path_theme, 'gfx' )
|
68
|
+
[ src_path_theme, src_files_gfx_path ].each do |src_files_gfx|
|
69
|
+
if File.exist?( src_files_gfx )
|
70
|
+
Dir.entries( src_files_gfx ).each do |src_gfx_filename|
|
71
|
+
src_file_gfx = File.join( src_files_gfx, src_gfx_filename )
|
72
|
+
if @gfx_formats.include?( src_file_gfx[-4..-1] )
|
73
|
+
tgt_hash_gfx[src_gfx_filename] = read_file( src_file_gfx )
|
74
|
+
gfx_size += File.stat( src_file_gfx ).size
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
return gfx_size
|
80
|
+
end
|
81
|
+
|
82
|
+
# processes theme-related files
|
83
|
+
def read_theme( bundle_dir, bundle_name )
|
84
|
+
@theme_names.each do |theme_name|
|
85
|
+
@theme_sizes[ theme_name ] = {
|
86
|
+
:css => [0,0],
|
87
|
+
:html => [0,0],
|
88
|
+
:gfx => 0
|
89
|
+
} unless @theme_sizes.has_key?( theme_name )
|
90
|
+
tgt_hash_theme = @themes[theme_name]
|
91
|
+
src_path_theme = File.join( bundle_dir, 'themes', theme_name )
|
92
|
+
[ File.join( src_path_theme, bundle_name+'.css' ),
|
93
|
+
File.join( src_path_theme, 'css', bundle_name+'.css' )
|
94
|
+
].each do |src_file_css|
|
95
|
+
if File.exist?( src_file_css )
|
96
|
+
( css_data, gz_css ) = read_css( src_file_css )
|
97
|
+
tgt_hash_css = tgt_hash_theme[:css][bundle_name] = {
|
98
|
+
:data => css_data,
|
99
|
+
:gzip => gz_css
|
100
|
+
}
|
101
|
+
@theme_sizes[ theme_name ][:css][0] += File.stat( src_file_css ).size
|
102
|
+
@theme_sizes[ theme_name ][:css][1] += css_data.size
|
103
|
+
@css_by_theme[ theme_name ][ bundle_name ] = css_data
|
104
|
+
end
|
105
|
+
end
|
106
|
+
[ File.join( src_path_theme, bundle_name+'.html' ),
|
107
|
+
File.join( src_path_theme, 'html', bundle_name+'.html' )
|
108
|
+
].each do |src_file_html|
|
109
|
+
if File.exist?( src_file_html )
|
110
|
+
( html_data, gz_html ) = read_html( src_file_html )
|
111
|
+
tgt_hash_html = tgt_hash_theme[:html][bundle_name] = {
|
112
|
+
:data => html_data,
|
113
|
+
:gzip => gz_html
|
114
|
+
}
|
115
|
+
@theme_sizes[ theme_name ][:html][0] += File.stat( src_file_html ).size
|
116
|
+
@theme_sizes[ theme_name ][:html][1] += html_data.size
|
117
|
+
@html_by_theme[ theme_name ][ bundle_name ] = html_data
|
118
|
+
end
|
119
|
+
end
|
120
|
+
tgt_hash_gfx = tgt_hash_theme[:gfx]
|
121
|
+
gfx_size = read_gfx( src_path_theme, tgt_hash_gfx )
|
122
|
+
@theme_sizes[ theme_name ][:gfx] += gfx_size
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def add_bundle( bundle_name, bundle_path, entries )
|
127
|
+
has_themes = entries.include?( 'themes' ) and File.directory?( File.join( bundle_path, 'themes' ) )
|
128
|
+
if @bundles_found.has_key?( bundle_name )
|
129
|
+
@logger.log( "JSBuilder ERROR: duplicate bundles with the name #{bundle_name.inspect} found." )
|
130
|
+
@logger.log( " The first encountered is #{@bundles_found[ bundle_name ].inspect}" )
|
131
|
+
@logger.log( " The second encountered is #{bundle_path.inspect}" )
|
132
|
+
@logger.log( "abort." )
|
133
|
+
return false
|
134
|
+
end
|
135
|
+
unless @destinations.include?( bundle_name )
|
136
|
+
warn "JSBuilder WARNING: bundle name #{bundle_name.inspect} does not belong to any package, skipping.." if ARGV.include?('-d')
|
137
|
+
return true
|
138
|
+
end
|
139
|
+
js_data = read_file( File.join( bundle_path, bundle_name+'.js' ) )
|
140
|
+
@bundles_found[ bundle_name ] = {
|
141
|
+
:path => bundle_path,
|
142
|
+
:js_data => js_data,
|
143
|
+
:js_size => js_data.size,
|
144
|
+
:has_themes => has_themes
|
145
|
+
}
|
146
|
+
if has_themes
|
147
|
+
read_theme( bundle_path, bundle_name )
|
148
|
+
end
|
149
|
+
return true
|
150
|
+
end
|
151
|
+
|
152
|
+
def find_bundles( src_dir )
|
153
|
+
# makes sure the src_dir exists and is a directory
|
154
|
+
if File.exist?( src_dir ) and File.directory?( src_dir )
|
155
|
+
# array of item names in dir
|
156
|
+
dir_entries = Dir.entries( src_dir )
|
157
|
+
# the name of src_dir (src_dir itself is a full path)
|
158
|
+
dir_name = File.split( src_dir )[1]
|
159
|
+
# bundles are defined as directories with a js file of the same name plus the 'js.inc' tagfile
|
160
|
+
is_bundle = dir_entries.include?( @js_inc ) and dir_entries.include?( dir_name+'.js' )
|
161
|
+
# if src_dir is detected as a bundle, handle it in add_bundle
|
162
|
+
if is_bundle
|
163
|
+
add_bundle( dir_name, src_dir, dir_entries )
|
164
|
+
end
|
165
|
+
# descend into the sub-directory:
|
166
|
+
dir_entries.each do | dir_entry |
|
167
|
+
# don't descend into themes or hidden dirs:
|
168
|
+
next if dir_entry[0].chr == '.' or dir_entry == 'themes'
|
169
|
+
sub_dir = File.join( src_dir, dir_entry )
|
170
|
+
find_bundles( sub_dir ) if File.directory?( sub_dir )
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def build_indexes
|
176
|
+
indexes = []
|
177
|
+
@destination_files.each_key do | package_name |
|
178
|
+
indexes.push( @destination_files[ package_name ] )
|
179
|
+
end
|
180
|
+
@jscompress.build_indexes( indexes.join("\n") ) unless @no_obfuscation
|
181
|
+
end
|
182
|
+
|
183
|
+
def pre_convert(jsc_data)
|
184
|
+
return @jscompress.compress( jsc_data )
|
185
|
+
end
|
186
|
+
|
187
|
+
def minimize_data
|
188
|
+
unless @quiet
|
189
|
+
@logger.log( '' )
|
190
|
+
@logger.log( "Client package build report.......................#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}" )
|
191
|
+
@logger.log( '' )
|
192
|
+
@logger.log( "JS Package....................: Original | Minimized | Compressed" )
|
193
|
+
@logger.log( " : | |" )
|
194
|
+
end
|
195
|
+
@destination_files.each_key do | package_name |
|
196
|
+
jsc_data = @destination_files[package_name]
|
197
|
+
unless @debug
|
198
|
+
unless @no_whitespace_removal
|
199
|
+
jsc_data = @jsmin.minimize( jsc_data ) #.strip
|
200
|
+
end
|
201
|
+
unless @no_obfuscation
|
202
|
+
jsc_data = pre_convert( jsc_data )
|
203
|
+
end
|
204
|
+
end
|
205
|
+
@js[package_name] = jsc_data.strip
|
206
|
+
unless @no_gzip
|
207
|
+
gz_data = gzip_string( @js[package_name] )
|
208
|
+
@gz[package_name] = gz_data
|
209
|
+
end
|
210
|
+
unless @quiet
|
211
|
+
js_size = @destination_files[ package_name ].size
|
212
|
+
jsc_size = jsc_data.size
|
213
|
+
if @no_gzip
|
214
|
+
gz_size = -1
|
215
|
+
else
|
216
|
+
gz_size = gz_data.size
|
217
|
+
end
|
218
|
+
print_stat( package_name, js_size, jsc_size, gz_size )
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def squeeze( js )
|
224
|
+
unless @no_whitespace_removal
|
225
|
+
begin
|
226
|
+
js = @jsmin.minimize( js )#.strip
|
227
|
+
rescue IndexError => e
|
228
|
+
warn "js can't get smaller using js; just ignoring jsmin"
|
229
|
+
end
|
230
|
+
end
|
231
|
+
unless @no_obfuscation
|
232
|
+
@jscompress.build_indexes( js )
|
233
|
+
js = @jscompress.compress( js )
|
234
|
+
end
|
235
|
+
return js.strip
|
236
|
+
end
|
237
|
+
|
238
|
+
def build_themes
|
239
|
+
unless @quiet
|
240
|
+
@logger.log( '' )
|
241
|
+
@logger.log( "Theme name and part...........: Original | Minimized | Compressed" )
|
242
|
+
@logger.log( " : | |" )
|
243
|
+
end
|
244
|
+
# compile "all-in-one" css and html resources
|
245
|
+
@theme_names.each do |theme_name|
|
246
|
+
html_templates = @html_by_theme[ theme_name ]
|
247
|
+
css_templates = @css_by_theme[ theme_name ]
|
248
|
+
theme_css_template_data = css_templates.values.join("\n")
|
249
|
+
theme_html_js_arr = []
|
250
|
+
theme_html_js_arr.push "HThemeManager._tmplCache[#{theme_name.to_json}]=#{html_templates.to_json}; "
|
251
|
+
theme_html_js_arr.push "HNoComponentCSS.push(#{theme_name.to_json});"
|
252
|
+
theme_html_js_arr.push "HNoCommonCSS.push(#{theme_name.to_json});"
|
253
|
+
theme_html_js_arr.push "HThemeManager._cssUrl( #{theme_name.to_json}, #{(theme_name+'_theme').to_json}, HThemeManager.themePath, null );"
|
254
|
+
theme_html_js_arr.push "HThemeManager.useCSS(#{theme_css_template_data.to_json}); "
|
255
|
+
theme_html_js = theme_html_js_arr.join('')
|
256
|
+
unless @debug
|
257
|
+
unless @no_whitespace_removal
|
258
|
+
theme_html_js = @jsmin.minimize( theme_html_js ) #.strip
|
259
|
+
end
|
260
|
+
unless @no_obfuscation
|
261
|
+
theme_html_js = pre_convert( theme_html_js )
|
262
|
+
end
|
263
|
+
end
|
264
|
+
@js[theme_name+'_theme'] = theme_html_js.strip
|
265
|
+
unless @no_gzip
|
266
|
+
theme_html_gz = gzip_string( @js[theme_name+'_theme'] )
|
267
|
+
@gz[theme_name+'_theme'] = theme_html_gz
|
268
|
+
end
|
269
|
+
unless @quiet
|
270
|
+
print_stat( "#{theme_name}/html", @theme_sizes[theme_name][:html][0], @theme_sizes[theme_name][:html][1], theme_html_gz.size )
|
271
|
+
end
|
272
|
+
@themes[theme_name][:css][theme_name+'_theme'] = {
|
273
|
+
:data => theme_css_template_data,
|
274
|
+
:gzip => false
|
275
|
+
}
|
276
|
+
unless @no_gzip
|
277
|
+
theme_css_template_data_gz = gzip_string( theme_css_template_data )
|
278
|
+
@themes[theme_name][:css][theme_name+'_theme'][:gzip] = theme_css_template_data_gz
|
279
|
+
end
|
280
|
+
unless @quiet
|
281
|
+
print_stat( "#{theme_name}/css", @theme_sizes[theme_name][:css][0], @theme_sizes[theme_name][:css][1], theme_css_template_data_gz.size )
|
282
|
+
print_stat( "#{theme_name}/gfx", @theme_sizes[theme_name][:gfx], -1, -1 )
|
283
|
+
@logger.log( '' )
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def run
|
289
|
+
|
290
|
+
time_start = Time.now.to_f*10000
|
291
|
+
|
292
|
+
# hash of bundles per bundle name per theme; @html_by_theme[theme_name][bundle_name] = bundle_data
|
293
|
+
@html_by_theme = {}
|
294
|
+
@css_by_theme = {}
|
295
|
+
@theme_names.each do | theme_name |
|
296
|
+
@html_by_theme[ theme_name ] = {}
|
297
|
+
@css_by_theme[ theme_name ] = {}
|
298
|
+
end
|
299
|
+
@theme_sizes = {}
|
300
|
+
# hash of bundle -> package mappings (reverse @packages)
|
301
|
+
@destinations = {}
|
302
|
+
@package_names.each do | package_name |
|
303
|
+
@packages[ package_name ].each do |bundle_name|
|
304
|
+
@destinations[ bundle_name ] = [] unless @destinations.include?( bundle_name )
|
305
|
+
@destinations[ bundle_name ].push( package_name )
|
306
|
+
end
|
307
|
+
end
|
308
|
+
@bundles_found = {} # populated by add_bundle
|
309
|
+
@conversion_stats = {} # populated by add_hints
|
310
|
+
@src_dirs.each do | src_dir |
|
311
|
+
find_bundles( src_dir )
|
312
|
+
end
|
313
|
+
@destination_files = {} # rename to package_products
|
314
|
+
@package_names.each do |package_name|
|
315
|
+
@packages[package_name].each do |bundle_name|
|
316
|
+
if @bundles_found.has_key?( bundle_name )
|
317
|
+
@destination_files[ package_name ] = [] unless @destination_files.has_key?( package_name )
|
318
|
+
@destination_files[ package_name ].push( @bundles_found[bundle_name][:js_data] )
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
@destination_files.each do | package_name, package_array |
|
323
|
+
package_data = package_array.join('')
|
324
|
+
@destination_files[ package_name ] = package_data
|
325
|
+
end
|
326
|
+
|
327
|
+
build_indexes
|
328
|
+
minimize_data
|
329
|
+
build_themes
|
330
|
+
|
331
|
+
ms_taken = ((Time.now.to_f*10000)-time_start).to_i/10.0
|
332
|
+
@logger.log( "Time taken: #{ms_taken}ms\n\n" )
|
333
|
+
|
334
|
+
end
|
335
|
+
|
336
|
+
def setup_dirs
|
337
|
+
# make sure the src_dirs contain only absolute paths.
|
338
|
+
# if not, use current working dir as a logical prefix
|
339
|
+
@src_dirs.map! do |src_dir|
|
340
|
+
File.expand_path( src_dir )
|
341
|
+
end
|
342
|
+
|
343
|
+
@src_dirs.each do |src_dir|
|
344
|
+
# exit with error if the src dir does not exist
|
345
|
+
unless File.exist?( src_dir )
|
346
|
+
@logger.log( "JSBuilder ERROR: the source directory #{src_dir.inspect} does not exist." )
|
347
|
+
@logger.log( "abort." )
|
348
|
+
return false
|
349
|
+
end
|
350
|
+
|
351
|
+
end
|
352
|
+
|
353
|
+
@package_names.each do |package_name|
|
354
|
+
@js[package_name] = ''
|
355
|
+
@gz[package_name] = ''
|
356
|
+
end
|
357
|
+
|
358
|
+
# ensures the destination directories of various theme parts exist
|
359
|
+
@theme_names.each do |theme_name|
|
360
|
+
@themes[theme_name] = {
|
361
|
+
:css => {},
|
362
|
+
:html => {},
|
363
|
+
:gfx => {}
|
364
|
+
}
|
365
|
+
end
|
366
|
+
|
367
|
+
return true
|
368
|
+
|
369
|
+
end
|
370
|
+
|
371
|
+
def add_src_dir( src_dir )
|
372
|
+
@src_dirs.push( src_dir ) unless @src_dirs.include? src_dir
|
373
|
+
end
|
374
|
+
def add_src_dirs( src_dirs )
|
375
|
+
src_dirs.each { |src_dir| add_src_dir( src_dir ) }
|
376
|
+
end
|
377
|
+
def del_src_dir( src_dir )
|
378
|
+
@src_dirs.delete( src_dir ) if @src_dirs.include? src_dir
|
379
|
+
end
|
380
|
+
def del_src_dirs( src_dirs )
|
381
|
+
src_dirs.each { |src_dir| del_src_dir( src_dir ) }
|
382
|
+
end
|
383
|
+
|
384
|
+
def add_theme( theme_name )
|
385
|
+
@theme_names.push( theme_name ) unless @theme_names.include? theme_name
|
386
|
+
end
|
387
|
+
def add_themes( theme_names )
|
388
|
+
theme_names.each { |theme_name| add_theme( theme_name ) }
|
389
|
+
end
|
390
|
+
def del_theme( theme_name )
|
391
|
+
@theme_names.delete( theme_name ) if @theme_names.include? theme_name
|
392
|
+
end
|
393
|
+
def del_themes( theme_names )
|
394
|
+
theme_names.each { |theme_name| del_theme( theme_name ) }
|
395
|
+
end
|
396
|
+
|
397
|
+
def add_package( pkg_name, pkg_items )
|
398
|
+
if @packages.has_key?( pkg_name )
|
399
|
+
warn "Package #{pkg_name} already exists, ignoring."
|
400
|
+
else
|
401
|
+
@packages[ pkg_name ] = pkg_items
|
402
|
+
@package_names = @packages.keys
|
403
|
+
end
|
404
|
+
end
|
405
|
+
def add_packages( packages )
|
406
|
+
packages.each do | pkg_name, pkg_items |
|
407
|
+
add_package( pkg_name, pkg_items )
|
408
|
+
end
|
409
|
+
end
|
410
|
+
def del_package( pkg_name )
|
411
|
+
if @packages.has_key?( pkg_name )
|
412
|
+
@packages.delete( pkg_name )
|
413
|
+
@package_names = @packages.keys
|
414
|
+
end
|
415
|
+
end
|
416
|
+
def del_packages( packages )
|
417
|
+
packages.each { |pkg_name| del_package( pkg_name ) }
|
418
|
+
end
|
419
|
+
|
420
|
+
def add_reserved_name( reserved_name )
|
421
|
+
@reserved_names.push( reserved_name ) unless @reserved_names.include? reserved_name
|
422
|
+
end
|
423
|
+
def add_reserved_names( reserved_names )
|
424
|
+
reserved_names.each { |n| add_reserved_name( n ) }
|
425
|
+
end
|
426
|
+
def del_reserved_name( reserved_name )
|
427
|
+
@reserved_names.delete( reserved_name ) if @resered_names.include? reserved_name
|
428
|
+
end
|
429
|
+
def del_reserved_names( reserved_names )
|
430
|
+
reserved_names.each { |n| del_reserved_name( n ) }
|
431
|
+
end
|
432
|
+
|
433
|
+
def add_gfx_format( gfx_format )
|
434
|
+
@gfx_formats.push( gfx_format ) unless @gfx_formats.include? gfx_format
|
435
|
+
end
|
436
|
+
def add_gfx_formats( gfx_formats )
|
437
|
+
gfx_formats.each { |gfx_format| add_gfx_format( gfx_format ) }
|
438
|
+
end
|
439
|
+
def del_gfx_format( gfx_format )
|
440
|
+
@gfx_formats.delete( gfx_format ) if @gfx_formats.include? gfx_format
|
441
|
+
end
|
442
|
+
def del_gfx_formats( gfx_formats )
|
443
|
+
gfx_formats.each { |gfx_format| del_gfx_format( gfx_format ) }
|
444
|
+
end
|
445
|
+
|
446
|
+
#delete: @js_dst_dir, @themes_dst_dir,
|
447
|
+
|
448
|
+
attr_reader :js, :gz, :themes, :jsmin, :jscompress
|
449
|
+
|
450
|
+
def initialize( config, logger )
|
451
|
+
|
452
|
+
@logger = logger
|
453
|
+
|
454
|
+
# src_dirs is supposed to be an array of js source directories
|
455
|
+
@src_dirs = config[:src_dirs]
|
456
|
+
|
457
|
+
@js = {}
|
458
|
+
@gz = {}
|
459
|
+
@themes = {}
|
460
|
+
|
461
|
+
# theme_names is supposed to be an array of theme names to include in the build
|
462
|
+
@theme_names = config[:theme_names]
|
463
|
+
|
464
|
+
# pkg_info is supposed to be a hash of js package name definitions by pkg_name
|
465
|
+
@packages = config[:packages]
|
466
|
+
|
467
|
+
# packages is supposed to be a list of js package name definitions to include
|
468
|
+
@package_names = @packages.keys
|
469
|
+
|
470
|
+
# reserved_names is supposed to be a list of reserved words (words that shouldn't be compressed)
|
471
|
+
@reserved_names = config[:reserved_names]
|
472
|
+
|
473
|
+
# JSCompress compresses js by "obfuscating"
|
474
|
+
# all variables beginning with an underscore "_",
|
475
|
+
# eg. "_this" -> "_0", except
|
476
|
+
# those specified in the @reserved_names array
|
477
|
+
@jscompress = JSCompress.new( config[:reserved_names] )
|
478
|
+
|
479
|
+
# HTMLMin compresses css and html by removing whitespace
|
480
|
+
@html_min = HTMLMin.new
|
481
|
+
|
482
|
+
# JSMin removes js white-space (makes the source shorter)
|
483
|
+
@jsmin = JSMin.new
|
484
|
+
|
485
|
+
# makes sure the specified dirs are ok
|
486
|
+
return if not setup_dirs
|
487
|
+
|
488
|
+
begin
|
489
|
+
require 'rubygems'
|
490
|
+
require 'cssmin'
|
491
|
+
@css_min = true
|
492
|
+
rescue LoadError => e
|
493
|
+
warn "cssmin not installed. install cssmin (gem install cssmin) to improve the css minifiying."
|
494
|
+
@css_min = false
|
495
|
+
end
|
496
|
+
|
497
|
+
# contains a list of theme gfx extensions allowed
|
498
|
+
@gfx_formats = config[:gfx_formats]
|
499
|
+
|
500
|
+
# compression strategy ( fastest vs smallest )
|
501
|
+
@gz_strategy = config[:gz_strategy]
|
502
|
+
@no_gzip = config[:no_gzip]
|
503
|
+
@no_obfuscation = config[:no_obfuscation]
|
504
|
+
@no_whitespace_removal = config[:no_whitespace_removal]
|
505
|
+
@js_inc = config[:js_inc]
|
506
|
+
@debug = RSence.args[:debug]
|
507
|
+
@quiet = (not RSence.args[:verbose])
|
508
|
+
end
|
509
|
+
|
510
|
+
def find_newer( src_dir, newer_than )
|
511
|
+
if File.exist?( src_dir ) and File.directory?( src_dir )
|
512
|
+
Dir.entries( src_dir ).each do | dir_entry |
|
513
|
+
next if dir_entry[0].chr == '.'
|
514
|
+
sub_dir = File.join( src_dir, dir_entry )
|
515
|
+
if File.directory?( sub_dir )
|
516
|
+
return true if find_newer( sub_dir, newer_than )
|
517
|
+
else
|
518
|
+
if newer_than < File.stat( sub_dir ).mtime.to_i
|
519
|
+
@logger.log( "File changed: #{sub_dir}" )
|
520
|
+
return true
|
521
|
+
end
|
522
|
+
end
|
523
|
+
end
|
524
|
+
end
|
525
|
+
return false
|
526
|
+
end
|
527
|
+
|
528
|
+
def bundle_changes( newer_than )
|
529
|
+
@bundles_found.each do | bundle_name, bundle_info |
|
530
|
+
bundle_path = bundle_info[:path]
|
531
|
+
is_newer = find_newer( bundle_path, newer_than )
|
532
|
+
return true if is_newer
|
533
|
+
end
|
534
|
+
return false
|
535
|
+
end
|
536
|
+
|
537
|
+
def print_stat( package_name, dst_size, jsc_size, gz_size )
|
538
|
+
percent = 'n/a'
|
539
|
+
if dst_size > 0
|
540
|
+
percent1 = (100*(jsc_size/dst_size.to_f)).to_i.to_s + '%'
|
541
|
+
percent2 = (100*(gz_size/dst_size.to_f)).to_i.to_s + '%'
|
542
|
+
else
|
543
|
+
percent1 = '-'
|
544
|
+
percent2 = '-'
|
545
|
+
end
|
546
|
+
if jsc_size == -1
|
547
|
+
jsc_size = ''
|
548
|
+
percent1 = ''
|
549
|
+
end
|
550
|
+
if gz_size == -1
|
551
|
+
gz_size = ''
|
552
|
+
percent2 = ''
|
553
|
+
end
|
554
|
+
@logger.log( "#{package_name.ljust(30).gsub(' ','.')}: #{dst_size.to_s.rjust(9)} | #{jsc_size.to_s.rjust(6)} #{percent1.rjust(4)} | #{gz_size.to_s.rjust(6)} #{percent2.rjust(4)}" )
|
555
|
+
end
|
556
|
+
|
557
|
+
def flush
|
558
|
+
@jscompress.free_indexes
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2007 Riassence Inc.
|
3
|
+
# http://riassence.com/
|
4
|
+
#
|
5
|
+
# You should have received a copy of the GNU General Public License along
|
6
|
+
# with this software package. If not, contact licensing@riassence.com
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
=begin
|
11
|
+
FileCache scans and stores the ui path for javascript files and
|
12
|
+
(css/html/image) theme files compiled as the result of the client
|
13
|
+
SDK's build_client.rb
|
14
|
+
=end
|
15
|
+
class ClientPkgCache
|
16
|
+
|
17
|
+
attr_reader :scan_time, :js_cache, :theme_cache, :gz_cache, :client_rev, :last_modified
|
18
|
+
|
19
|
+
# A lock flag for preventing different threads from
|
20
|
+
# scanning simultaneously in debug mode
|
21
|
+
@busy_scanning = false
|
22
|
+
|
23
|
+
# Initially, scan.
|
24
|
+
def initialize
|
25
|
+
@client_rev = 0
|
26
|
+
# scan_dirs
|
27
|
+
end
|
28
|
+
|
29
|
+
# Helper method to return the suffix of a file
|
30
|
+
def suffix(file_path)
|
31
|
+
return '.'+file_path.split('.')[-1]
|
32
|
+
end
|
33
|
+
|
34
|
+
# Helper method to return the time formatted according to the HTTP RFC
|
35
|
+
def httime(time)
|
36
|
+
return time.gmtime.strftime('%a, %d %b %Y %H:%M:%S %Z')
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_cache( js, gz, themes )
|
40
|
+
@js_cache = js
|
41
|
+
@gz_cache = gz
|
42
|
+
@theme_cache = themes
|
43
|
+
time_now = Time.now
|
44
|
+
@client_rev = time_now.to_i.to_s
|
45
|
+
@last_modified = httime( time_now )
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|