diff --git a/.gitignore b/.gitignore
index 5252dad1b..96c151a19 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,10 +54,10 @@ install/missing
install/stamp-h1
install/po/test.po
install/po/test_locale/xh_ZA/LC_MESSAGES/ipa.mo
-install/ui/test/results
install/ui/release
install/ui/src/dojo
install/ui/src/build
+install/ui/src/libs/loader.js
install/ui/src/plugins
ipa-client/COPYING
ipa-client/ChangeLog
diff --git a/Makefile b/Makefile
index 428f19b1a..0664ddd8e 100644
--- a/Makefile
+++ b/Makefile
@@ -116,13 +116,14 @@ version-update: release-update
freeipa.spec.in > freeipa.spec
sed -e s/__VERSION__/$(IPA_VERSION)/ version.m4.in \
> version.m4
-
sed -e s/__VERSION__/$(IPA_VERSION)/ ipapython/setup.py.in \
> ipapython/setup.py
sed -e s/__VERSION__/$(IPA_VERSION)/ ipapython/version.py.in \
> ipapython/version.py
sed -e s/__VERSION__/$(IPA_VERSION)/ ipatests/setup.py.in \
> ipatests/setup.py
+ sed -e s/__NUM_VERSION__/$(IPA_NUM_VERSION)/ install/ui/src/libs/loader.js.in \
+ > install/ui/src/libs/loader.js
perl -pi -e "s:__NUM_VERSION__:$(IPA_NUM_VERSION):" ipapython/version.py
perl -pi -e "s:__API_VERSION__:$(IPA_API_VERSION_MAJOR).$(IPA_API_VERSION_MINOR):" ipapython/version.py
touch -r ipapython/version.py.in ipapython/version.py
diff --git a/install/conf/ipa.conf b/install/conf/ipa.conf
index 1a33f6287..f185f5146 100644
--- a/install/conf/ipa.conf
+++ b/install/conf/ipa.conf
@@ -1,5 +1,5 @@
#
-# VERSION 13 - DO NOT REMOVE THIS LINE
+# VERSION 14 - DO NOT REMOVE THIS LINE
#
# This file may be overwritten on upgrades.
#
@@ -114,6 +114,8 @@ Alias /ipa/config "/usr/share/ipa/html"
AllowOverride None
Satisfy Any
Allow from all
+ ExpiresActive On
+ ExpiresDefault "access plus 0 seconds"
@@ -135,6 +137,11 @@ Alias /ipa/ui "/usr/share/ipa/ui"
AllowOverride None
Satisfy Any
Allow from all
+ ExpiresActive On
+ ExpiresDefault "access plus 1 year"
+
+ ExpiresDefault "access plus 0 seconds"
+
# Simple wsgi scripts required by ui
diff --git a/install/html/browserconfig.html b/install/html/browserconfig.html
index a7784f75b..d867a1941 100644
--- a/install/html/browserconfig.html
+++ b/install/html/browserconfig.html
@@ -3,16 +3,25 @@
IPA: Identity Policy Audit
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/install/html/ssbrowser.html b/install/html/ssbrowser.html
index 72fd573cf..896cabcec 100644
--- a/install/html/ssbrowser.html
+++ b/install/html/ssbrowser.html
@@ -3,30 +3,41 @@
IPA: Identity Policy Audit
-
-
-
-
-
-
-
+
+
diff --git a/install/html/unauthorized.html b/install/html/unauthorized.html
index 0fac88b98..5c5ed7e98 100644
--- a/install/html/unauthorized.html
+++ b/install/html/unauthorized.html
@@ -3,12 +3,16 @@
IPA: Identity Policy Audit
-
-
-
-
-
-
+
+
diff --git a/install/ui/Makefile.am b/install/ui/Makefile.am
index 77aab17a6..94bedace3 100644
--- a/install/ui/Makefile.am
+++ b/install/ui/Makefile.am
@@ -10,7 +10,6 @@ SUBDIRS = \
appdir = $(IPA_DATA_DIR)/ui
app_DATA = \
- config.js \
favicon.ico \
index.html \
jquery-ui.css \
diff --git a/install/ui/config.js b/install/ui/config.js
deleted file mode 100644
index e984676f3..000000000
--- a/install/ui/config.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Authors:
- * Petr Vobornik
- *
- * Copyright (C) 2012 Red Hat
- * see file 'COPYING' for use and warranty information
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
-*/
-
-var dojoConfig= {
- baseUrl: "js",
- has: {
- 'dojo-firebug': false,
- 'dojo-debug-messages': true
- },
- parseOnLoad: false,
- async: true,
- packages: [
- {
- name:'dojo',
- location:'dojo'
- },
- {
- name: 'freeipa',
- location: 'freeipa'
- }
- ]
-};
\ No newline at end of file
diff --git a/install/ui/index.html b/install/ui/index.html
index 75ff82997..4be834076 100644
--- a/install/ui/index.html
+++ b/install/ui/index.html
@@ -1,32 +1,62 @@
-
+
IPA: Identity Policy Audit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
+
+
\ No newline at end of file
diff --git a/install/ui/jsl.conf b/install/ui/jsl.conf
index e9e3ecc5e..7c3be5864 100644
--- a/install/ui/jsl.conf
+++ b/install/ui/jsl.conf
@@ -120,6 +120,7 @@
+define jQuery
+define define
+define require
++define ipa_loader
### Files
# Specify which files to lint
@@ -128,6 +129,7 @@
# or "+process Folder\Path\*.htm".
#
++process index.html
+process src/libs/browser.js
+process src/libs/jquery.ordered-map.js
+process src/freeipa/*.js
diff --git a/install/ui/login.html b/install/ui/login.html
index 5545e8834..f3a0dd37b 100644
--- a/install/ui/login.html
+++ b/install/ui/login.html
@@ -3,11 +3,16 @@
IPA: Identity Policy Audit
-
-
-
-
-
+
+
diff --git a/install/ui/reset_password.html b/install/ui/reset_password.html
index 4dbbb7aac..560e8a5e4 100644
--- a/install/ui/reset_password.html
+++ b/install/ui/reset_password.html
@@ -3,11 +3,16 @@
IPA: Identity Policy Audit
-
-
-
-
-
+
+
diff --git a/install/ui/src/libs/Makefile.am b/install/ui/src/libs/Makefile.am
index 807b9d8d3..6991e474e 100644
--- a/install/ui/src/libs/Makefile.am
+++ b/install/ui/src/libs/Makefile.am
@@ -7,6 +7,7 @@ app_DATA = \
jquery.ordered-map.js \
jquery-ui.js \
json2.js \
+ loader.js \
$(NULL)
EXTRA_DIST = \
diff --git a/install/ui/src/libs/loader.js.in b/install/ui/src/libs/loader.js.in
new file mode 100644
index 000000000..134e061e7
--- /dev/null
+++ b/install/ui/src/libs/loader.js.in
@@ -0,0 +1,103 @@
+/* Authors:
+ * Petr Vobornik
+ *
+ * Copyright (C) 2013 Red Hat
+ * see file 'COPYING' for use and warranty information
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+*/
+(function() {
+
+ var loader = window.ipa_loader = {
+ num_version: '__NUM_VERSION__'
+ };
+
+ var head = document.getElementsByTagName('head')[0];
+
+ function link(path, rel) {
+ rel = rel || 'stylesheet';
+ var el = document.createElement('link');
+ el.setAttribute('rel', rel);
+ el.setAttribute('type', 'text/css');
+ el.setAttribute('href', path);
+ head.appendChild(el);
+ }
+
+ function js(path, callback) {
+ var el = document.createElement('script');
+ el.setAttribute('type', 'text/javascript');
+ el.setAttribute('src', path);
+ var done = false;
+ var onload = function () {
+ if (done) return;
+ done = true;
+ callback();
+ };
+
+ // older ie
+ el.onreadystatechange = function () {
+ if (el.readyState === 'loaded' || el.readyState === 'complete') {
+ el.onreadystatechange = null;
+ onload();
+ }
+ };
+ // others
+ el.onload = onload;
+
+ head.appendChild(el);
+ }
+
+ function synchronous_download(paths, callback) {
+
+ var dl = paths.splice(0, 1)[0];
+ if (dl) {
+ js(dl, function() {
+ synchronous_download(paths, callback);
+ });
+ } else {
+ if (callback) callback();
+ }
+ }
+
+ function version_suffix() {
+ var suffix = '';
+ if (loader.num_version) {
+ suffix = '?v=' + loader.num_version;
+ }
+ return suffix;
+ }
+
+ loader.scripts = function(scripts, callback) {
+ var suffix = version_suffix();
+ var syn_code = [];
+ for (var i=0; i < scripts.length; i++) {
+ syn_code.push(scripts[i]+suffix);
+ }
+ synchronous_download(syn_code, callback);
+ };
+
+ loader.styles = function(styles) {
+ var suffix = version_suffix();
+ for (var i=0; i < styles.length; i++) {
+ link(styles[i] + suffix);
+ }
+ };
+
+ loader.icons = function(icons) {
+ var suffix = version_suffix();
+ for (var i=0; i < icons.length; i++) {
+ link(icons[i] + suffix, 'icon');
+ }
+ };
+})();
\ No newline at end of file